summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-11-04 15:50:26 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-11-04 15:50:26 +0000
commitdc42232688cc84e4f5cd22073e0b5b4d6ac30cfa (patch)
treed9500a900c9fb2d2f93dc73fd887454486431eeb
parente6c50c3de4d1edf7e1aa9b105394cc5a87914081 (diff)
parent6fb2e6ce8d93f6f530d2066a78d28de39243118e (diff)
downloadfpc-dc42232688cc84e4f5cd22073e0b5b4d6ac30cfa.tar.gz
* merged r13762-14047 from trunk
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/objc@14048 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--compiler/aasmtai.pas11
-rw-r--r--compiler/aggas.pas7
-rw-r--r--compiler/alpha/cgcpu.pas7
-rw-r--r--compiler/arm/aasmcpu.pas51
-rw-r--r--compiler/arm/agarmgas.pas25
-rw-r--r--compiler/arm/aoptcpu.pas12
-rw-r--r--compiler/arm/armatt.inc26
-rw-r--r--compiler/arm/armatts.inc24
-rw-r--r--compiler/arm/armins.dat48
-rw-r--r--compiler/arm/armop.inc26
-rw-r--r--compiler/arm/cgcpu.pas1275
-rw-r--r--compiler/arm/cpubase.pas35
-rw-r--r--compiler/arm/cpuinfo.pas27
-rw-r--r--compiler/arm/narmadd.pas2
-rw-r--r--compiler/arm/raarmgas.pas33
-rw-r--r--compiler/arm/rgcpu.pas111
-rw-r--r--compiler/avr/cgcpu.pas11
-rw-r--r--compiler/cgobj.pas16
-rw-r--r--compiler/dbgdwarf.pas112
-rw-r--r--compiler/dbgstabs.pas62
-rw-r--r--compiler/htypechk.pas26
-rw-r--r--compiler/i386/cgcpu.pas11
-rw-r--r--compiler/m68k/cgcpu.pas11
-rw-r--r--compiler/msg/errord.msg51
-rw-r--r--compiler/msg/errordu.msg51
-rw-r--r--compiler/msg/errore.msg88
-rw-r--r--compiler/msg/errorr.msg4168
-rw-r--r--compiler/msg/errorru.msg2833
-rw-r--r--compiler/msg/errorrw.msg2017
-rw-r--r--compiler/msgidx.inc52
-rw-r--r--compiler/msgtxt.inc693
-rw-r--r--compiler/ncal.pas16
-rw-r--r--compiler/ncgcon.pas10
-rw-r--r--compiler/ncgld.pas2
-rw-r--r--compiler/ncgutil.pas11
-rw-r--r--compiler/ncnv.pas32
-rw-r--r--compiler/ncon.pas27
-rw-r--r--compiler/nflw.pas396
-rw-r--r--compiler/ninl.pas6
-rw-r--r--compiler/nobj.pas26
-rw-r--r--compiler/nset.pas19
-rw-r--r--compiler/nutils.pas24
-rw-r--r--compiler/options.pas3
-rw-r--r--compiler/pbase.pas21
-rw-r--r--compiler/pdecl.pas33
-rw-r--r--compiler/pdecobj.pas64
-rw-r--r--compiler/pdecsub.pas95
-rw-r--r--compiler/pdecvar.pas17
-rw-r--r--compiler/pexpr.pas41
-rw-r--r--compiler/powerpc/cgcpu.pas10
-rw-r--r--compiler/powerpc64/cgcpu.pas6
-rw-r--r--compiler/pstatmnt.pas322
-rw-r--r--compiler/psub.pas9
-rw-r--r--compiler/psystem.pas3
-rw-r--r--compiler/ptconst.pas2
-rw-r--r--compiler/rautils.pas3
-rw-r--r--compiler/scanner.pas17
-rw-r--r--compiler/sparc/cgcpu.pas11
-rw-r--r--compiler/symconst.pas15
-rw-r--r--compiler/symdef.pas133
-rw-r--r--compiler/symsym.pas97
-rw-r--r--compiler/symtable.pas42
-rw-r--r--compiler/symtype.pas4
-rw-r--r--compiler/systems/i_linux.pas2
-rw-r--r--compiler/systems/t_embed.pas11
-rw-r--r--compiler/tokens.pas10
-rw-r--r--compiler/utils/ppudump.pp56
-rw-r--r--compiler/x86/cgx86.pas9
-rw-r--r--compiler/x86_64/cgcpu.pas10
-rw-r--r--ide/Makefile.fpc2
-rw-r--r--ide/fpdebug.pas111
-rw-r--r--ide/fpide.pas11
-rw-r--r--ide/test.pas4
-rw-r--r--ide/wchmhwrap.pas13
-rw-r--r--installer/install.dat4
-rw-r--r--installer/install.pas2
-rw-r--r--packages/Makefile340
-rw-r--r--packages/Makefile.fpc71
-rw-r--r--packages/chm/Makefile118
-rw-r--r--packages/chm/Makefile.fpc2
-rw-r--r--packages/chm/fpmake.pp7
-rw-r--r--packages/chm/src/chmfiftimain.pas25
-rw-r--r--packages/chm/src/chmfilewriter.pas41
-rw-r--r--packages/chm/src/chmreader.pas242
-rw-r--r--packages/chm/src/chmsitemap.pas17
-rw-r--r--packages/chm/src/chmtypes.pas70
-rw-r--r--packages/chm/src/chmwriter.pas677
-rw-r--r--packages/chm/src/lzxcompressthread.pas529
-rw-r--r--packages/chm/src/paslzxcomp.pas19
-rw-r--r--packages/fcl-base/Makefile110
-rw-r--r--packages/fcl-base/Makefile.fpc18
-rw-r--r--packages/fcl-db/src/codegen/fpcgtiopf.pp6
-rw-r--r--packages/fcl-db/src/codegen/fpddcodegen.pp2
-rw-r--r--packages/fcl-db/src/datadict/fpddfb.pp6
-rw-r--r--packages/fcl-db/src/export/fpdbexport.pp32
-rw-r--r--packages/fcl-db/src/paradox/paradox.pp23
-rw-r--r--packages/fcl-db/src/sqldb/interbase/ibconnection.pp14
-rw-r--r--packages/fcl-db/src/sqldb/mysql/mysqlconn.inc8
-rw-r--r--packages/fcl-db/src/sqldb/sqldb.pp22
-rw-r--r--packages/fcl-db/src/sqlite/customsqliteds.pas19
-rw-r--r--packages/fcl-db/src/sqlite/sqlite3ds.pas9
-rw-r--r--packages/fcl-db/src/sqlite/sqliteds.pas10
-rw-r--r--packages/fcl-db/tests/testfieldtypes.pas33
-rw-r--r--packages/fcl-extra/Makefile2831
-rw-r--r--packages/fcl-extra/Makefile.fpc52
-rw-r--r--packages/fcl-extra/fpmake.pp197
-rw-r--r--packages/fcl-extra/src/daemonapp.pp (renamed from packages/fcl-base/src/daemonapp.pp)4
-rw-r--r--packages/fcl-extra/src/unix/daemonapp.inc (renamed from packages/fcl-base/src/unix/daemonapp.inc)0
-rw-r--r--packages/fcl-extra/src/win/ServiceManager.pas (renamed from packages/fcl-base/src/win/ServiceManager.pas)0
-rw-r--r--packages/fcl-extra/src/win/daemonapp.inc (renamed from packages/fcl-base/src/win/daemonapp.inc)0
-rw-r--r--packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc6
-rw-r--r--packages/fcl-image/src/fpreadjpeg.pas119
-rw-r--r--packages/fcl-net/src/mkxmlrpc.pp2
-rw-r--r--packages/fcl-net/src/servlets.pp4
-rw-r--r--packages/fcl-passrc/src/pastree.pp195
-rw-r--r--packages/fcl-passrc/src/pparser.pp87
-rw-r--r--packages/fcl-passrc/src/pscanner.pp2
-rw-r--r--packages/fcl-process/src/dummy/process.inc7
-rw-r--r--packages/fcl-process/src/process.pp3
-rw-r--r--packages/fcl-process/src/unix/process.inc7
-rw-r--r--packages/fcl-web/src/httpdefs.pp6
-rw-r--r--packages/fcl-xml/src/dom.pp183
-rw-r--r--packages/fcl-xml/src/xmlread.pp414
-rw-r--r--packages/fcl-xml/src/xmlutils.pp224
-rw-r--r--packages/fcl-xml/src/xmlwrite.pp246
-rw-r--r--packages/fcl-xml/src/xpath.pp138
-rw-r--r--packages/fcl-xml/tests/api.xml9
-rw-r--r--packages/fcl-xml/tests/domunit.pp2
-rw-r--r--packages/fcl-xml/tests/extras.pp115
-rw-r--r--packages/fcl-xml/tests/extras2.pp18
-rw-r--r--packages/fcl-xml/tests/xmlts.pp10
-rw-r--r--packages/fcl-xml/tests/xpathts.pp87
-rw-r--r--packages/gdbint/Makefile155
-rw-r--r--packages/gdbint/Makefile.fpc42
-rw-r--r--packages/gdbint/examples/mingw.pas91
-rw-r--r--packages/gdbint/examples/symify.pp6
-rw-r--r--packages/gdbint/examples/testgdb.pp6
-rw-r--r--packages/gdbint/src/gdbcon.pp2
-rw-r--r--packages/gdbint/src/gdbint.pp238
-rw-r--r--packages/ibase/src/ibase60.inc761
-rw-r--r--packages/ibase/src/ibase60.pp2
-rw-r--r--packages/ibase/src/ibase60dyn.pp2
-rw-r--r--packages/imagemagick/examples/image.pngbin12989 -> 9417 bytes
-rw-r--r--packages/imagemagick/examples/wanddemo.lpr1
-rw-r--r--packages/imagemagick/examples/wandpixelaccess.pas84
-rw-r--r--packages/imagemagick/src/cache.inc66
-rw-r--r--packages/imagemagick/src/imagemagick.pas13
-rw-r--r--packages/imagemagick/src/magick_wand.pas5
-rw-r--r--packages/imagemagick/src/pixel.inc2
-rw-r--r--packages/imagemagick/src/pixel_wand.inc8
-rw-r--r--packages/libxml/src/parser.inc2
-rw-r--r--packages/libxml/src/xmlxsd.pas8
-rw-r--r--packages/mysql/src/mysql.inc473
-rw-r--r--packages/mysql/src/mysql40dyn.pp2
-rw-r--r--packages/mysql/src/mysql41dyn.pp2
-rw-r--r--packages/mysql/src/mysql50dyn.pp2
-rw-r--r--[-rwxr-xr-x]packages/objcrtl/fpmake.pp0
-rw-r--r--packages/pasjpeg/src/jmemnobs.pas2
-rw-r--r--packages/paszlib/src/gzio.pas42
-rw-r--r--packages/postgres/src/postgres3dyn.pp2
-rw-r--r--packages/pxlib/examples/ppxview.pp4
-rw-r--r--packages/pxlib/src/pxlib.pp6
-rw-r--r--packages/sqlite/src/sqlite3.inc1199
-rw-r--r--packages/unzip/src/unzipdll.pp4
-rw-r--r--packages/winceunits/src/commctrl.pp3
-rw-r--r--packages/winunits-base/Makefile453
-rw-r--r--packages/winunits-base/Makefile.fpc5
-rw-r--r--packages/winunits-base/src/activex.pp26
-rw-r--r--packages/winunits-base/src/buildwinutilsbase.pp2
-rw-r--r--packages/winunits-base/src/comobj.pp593
-rw-r--r--packages/winunits-base/src/comserv.pp344
-rw-r--r--packages/winunits-base/src/winutils.pp82
-rw-r--r--packages/winunits-jedi/Makefile86
-rw-r--r--packages/winunits-jedi/Makefile.fpc4
-rw-r--r--packages/zorba/Makefile2354
-rw-r--r--packages/zorba/Makefile.fpc29
-rw-r--r--packages/zorba/Package.fpc6
-rw-r--r--packages/zorba/examples/simple/simple.lpi170
-rw-r--r--packages/zorba/examples/simple/simple.lpr120
-rw-r--r--packages/zorba/fpmake.pp48
-rw-r--r--packages/zorba/src/zorba.inc2123
-rw-r--r--packages/zorba/src/zorba.pas6
-rw-r--r--packages/zorba/src/zorba_error.inc911
-rw-r--r--packages/zorba/src/zorba_options.inc142
-rw-r--r--packages/zorba/src/zorba_static_context_consts.inc60
-rw-r--r--packages/zorba/src/zorbadyn.pas7
-rw-r--r--rtl/arm/divide.inc96
-rw-r--r--rtl/arm/setjump.inc28
-rw-r--r--rtl/arm/thumb2.inc659
-rw-r--r--rtl/bsd/ossysc.inc10
-rw-r--r--rtl/darwin/Makefile2
-rw-r--r--rtl/darwin/Makefile.fpc2
-rw-r--r--rtl/embedded/arm/stm32f103.pp626
-rw-r--r--rtl/freebsd/sysnr.inc2
-rw-r--r--rtl/inc/dynlibs.pas284
-rw-r--r--rtl/inc/objpas.inc41
-rw-r--r--rtl/inc/objpash.inc35
-rw-r--r--rtl/inc/strings.pp2
-rw-r--r--rtl/inc/system.fpd5
-rw-r--r--rtl/inc/system.inc6
-rw-r--r--rtl/inc/ustrings.inc18
-rw-r--r--rtl/inc/variants.pp23
-rw-r--r--rtl/inc/wstrings.inc20
-rw-r--r--rtl/inc/wustring22.inc10
-rw-r--r--rtl/linux/ossysc.inc14
-rw-r--r--rtl/linux/system.pp7
-rw-r--r--rtl/objpas/classes/bits.inc8
-rw-r--r--rtl/objpas/classes/classesh.inc100
-rw-r--r--rtl/objpas/classes/collect.inc29
-rw-r--r--rtl/objpas/classes/compon.inc29
-rw-r--r--rtl/objpas/classes/intf.inc29
-rw-r--r--rtl/objpas/classes/lists.inc54
-rw-r--r--rtl/objpas/classes/parser.inc2
-rw-r--r--rtl/objpas/classes/streams.inc100
-rw-r--r--rtl/objpas/classes/stringl.inc41
-rw-r--r--rtl/objpas/classes/writer.inc11
-rw-r--r--rtl/objpas/dateutil.inc66
-rw-r--r--rtl/objpas/fgl.pp13
-rw-r--r--rtl/objpas/rtlconst.inc9
-rw-r--r--rtl/objpas/sysconst.pp2
-rw-r--r--rtl/objpas/sysutils/dati.inc438
-rw-r--r--rtl/objpas/sysutils/datih.inc57
-rw-r--r--rtl/objpas/types.pp12
-rw-r--r--rtl/unix/bunxh.inc3
-rw-r--r--rtl/unix/cthreads.pp4
-rw-r--r--rtl/unix/oscdeclh.inc4
-rw-r--r--rtl/win/sysfile.inc95
-rw-r--r--rtl/win/sysos.inc18
-rw-r--r--rtl/win/sysutils.pp29
-rw-r--r--rtl/win/winsock.pp2
-rw-r--r--rtl/win32/system.pp1
-rw-r--r--rtl/win64/system.pp1
-rw-r--r--tests/tbs/tb0565.pp48
-rw-r--r--[-rwxr-xr-x]tests/test/packages/fcl-db/tdb4.pp0
-rw-r--r--tests/test/packages/win-base/tdispvar1.pp32
-rw-r--r--tests/test/tabstract1.pp49
-rw-r--r--tests/test/tassignmentoperator1.pp17
-rw-r--r--tests/test/tcase15.pp6
-rw-r--r--tests/test/tcase16.pp6
-rw-r--r--tests/test/tcase17.pp6
-rw-r--r--tests/test/tcase19.pp6
-rw-r--r--tests/test/tcase20.pp6
-rw-r--r--tests/test/tcase21.pp6
-rw-r--r--tests/test/tcase22.pp6
-rw-r--r--tests/test/tcase23.pp6
-rw-r--r--tests/test/tcase24.pp6
-rw-r--r--tests/test/tcase25.pp6
-rw-r--r--tests/test/tcase26.pp6
-rw-r--r--tests/test/tcase27.pp6
-rw-r--r--tests/test/tcase31.pp6
-rw-r--r--tests/test/tcase32.pp6
-rw-r--r--tests/test/tcase33.pp6
-rw-r--r--tests/test/tcase35.pp6
-rw-r--r--tests/test/tcase36.pp6
-rw-r--r--tests/test/tcase37.pp6
-rw-r--r--tests/test/tcase38.pp6
-rw-r--r--tests/test/tcase39.pp6
-rw-r--r--tests/test/tcase40.pp6
-rw-r--r--tests/test/tcase41.pp6
-rw-r--r--tests/test/tcase42.pp6
-rw-r--r--tests/test/tcase43.pp6
-rw-r--r--tests/test/tcase44.pp6
-rw-r--r--tests/test/tclassinfo1.pp11
-rw-r--r--tests/test/tenumerators1.pp166
-rw-r--r--tests/test/tfinal1.pp17
-rw-r--r--tests/test/tfinal2.pp26
-rw-r--r--tests/test/tforin1.pp71
-rw-r--r--tests/test/tforin10.pp29
-rw-r--r--tests/test/tforin11.pp17
-rw-r--r--tests/test/tforin12.pp10
-rw-r--r--tests/test/tforin13.pp8
-rw-r--r--tests/test/tforin14.pp24
-rw-r--r--tests/test/tforin15.pp39
-rw-r--r--tests/test/tforin16.pp7
-rw-r--r--tests/test/tforin17.pp6
-rw-r--r--tests/test/tforin18.pp6
-rw-r--r--tests/test/tforin19.pp7
-rw-r--r--tests/test/tforin2.pp84
-rw-r--r--tests/test/tforin20.pp8
-rw-r--r--tests/test/tforin21.pp14
-rw-r--r--tests/test/tforin22.pp27
-rw-r--r--tests/test/tforin3.pp48
-rw-r--r--tests/test/tforin4.pp59
-rw-r--r--tests/test/tforin5.pp50
-rw-r--r--tests/test/tforin6.pp58
-rw-r--r--tests/test/tforin7.pp56
-rw-r--r--tests/test/tforin8.pp61
-rw-r--r--tests/test/tforin9.pp68
-rw-r--r--tests/test/tobject5.pp15
-rw-r--r--tests/test/tsealed1.pp17
-rw-r--r--tests/test/tsealed2.pp14
-rw-r--r--tests/test/tsealed3.pp12
-rw-r--r--tests/test/tsealed4.pp15
-rw-r--r--tests/test/tsymlibrary1.pp16
-rw-r--r--tests/utils/redir.pp2
-rw-r--r--tests/webtbf/tw14650.pp16
-rw-r--r--tests/webtbf/tw14650a.pp15
-rw-r--r--tests/webtbf/tw14713.pp10
-rw-r--r--tests/webtbf/tw14713a.pp9
-rw-r--r--tests/webtbf/tw14777.pp10
-rw-r--r--tests/webtbf/tw14777a.pp10
-rw-r--r--tests/webtbf/tw14849.pp48
-rw-r--r--tests/webtbf/tw14929a.pp17
-rw-r--r--tests/webtbf/tw14929b.pp17
-rw-r--r--tests/webtbf/tw14946.pp17
-rw-r--r--tests/webtbs/tw11369.pp2
-rw-r--r--tests/webtbs/tw14553.pp45
-rw-r--r--tests/webtbs/tw14617.pp29
-rw-r--r--tests/webtbs/tw14729.pp44
-rw-r--r--tests/webtbs/tw14740.pp28
-rw-r--r--tests/webtbs/tw14743.pp22
-rw-r--r--tests/webtbs/tw14812.pp27
-rw-r--r--utils/fpdoc/Makefile118
-rw-r--r--utils/fpdoc/Makefile.fpc2
-rw-r--r--utils/fpdoc/dw_dxml.pp500
-rw-r--r--utils/fpdoc/dw_html.pp8
-rw-r--r--utils/fpdoc/dw_htmlchm.inc22
-rw-r--r--utils/fpdoc/dw_xml.pp13
-rw-r--r--utils/fpdoc/dwlinear.pp22
-rw-r--r--utils/fpdoc/fpdoc.pp1
-rw-r--r--utils/fppkg/buildfppkg.pp7
-rw-r--r--utils/h2pas/h2pas.pas4184
-rw-r--r--utils/h2pas/h2pas.y6336
-rw-r--r--utils/h2pas/scan.l2166
-rw-r--r--utils/h2pas/scan.pas3090
-rw-r--r--utils/rmwait/Makefile.fpc15
-rw-r--r--utils/rmwait/rmwait.pas559
327 files changed, 38478 insertions, 15270 deletions
diff --git a/compiler/aasmtai.pas b/compiler/aasmtai.pas
index 265ec81ebc..f9a28e478c 100644
--- a/compiler/aasmtai.pas
+++ b/compiler/aasmtai.pas
@@ -76,6 +76,9 @@ interface
{$ifdef m68k}
ait_labeled_instruction,
{$endif m68k}
+{$ifdef arm}
+ ait_thumb_func,
+{$endif arm}
{ used to split into tiny assembler files }
ait_cutobject,
ait_regalloc,
@@ -160,6 +163,9 @@ interface
{$ifdef m68k}
'labeled_instr',
{$endif m68k}
+{$ifdef arm}
+ 'thumb_func',
+{$endif arm}
'cut',
'regalloc',
'tempalloc',
@@ -173,6 +179,7 @@ interface
{ ARM only }
,top_regset
,top_shifterop
+ ,top_conditioncode
{$endif arm}
{$ifdef m68k}
{ m68k only }
@@ -208,6 +215,7 @@ interface
{$ifdef arm}
top_regset : (regset:^tcpuregisterset);
top_shifterop : (shifterop : pshifterop);
+ top_conditioncode: (cc: TAsmCond);
{$endif arm}
{$ifdef m68k}
top_regset : (regset:^tcpuregisterset);
@@ -231,6 +239,9 @@ interface
ait_stab,ait_function_name,
ait_cutobject,ait_marker,ait_align,ait_section,ait_comment,
ait_const,
+{$ifdef arm}
+ ait_thumb_func,
+{$endif arm}
ait_real_32bit,ait_real_64bit,ait_real_80bit,ait_comp_64bit,ait_real_128bit,
ait_symbol
];
diff --git a/compiler/aggas.pas b/compiler/aggas.pas
index a07bd6390f..4c02abe727 100644
--- a/compiler/aggas.pas
+++ b/compiler/aggas.pas
@@ -34,7 +34,6 @@ interface
aasmbase,aasmtai,aasmdata,aasmcpu,
assemble;
-
type
TCPUInstrWriter = class;
{# This is a derived class which is used to write
@@ -1075,6 +1074,12 @@ implementation
else
AsmWriteLn(tai_symbol(hp).sym.name + '=' + tostr(tai_symbol(hp).value));
end;
+{$ifdef arm}
+ ait_thumb_func:
+ begin
+ AsmWriteLn(#9'.thumb_func');
+ end;
+{$endif arm}
ait_symbol_end :
begin
diff --git a/compiler/alpha/cgcpu.pas b/compiler/alpha/cgcpu.pas
index fbfa3eccec..6706e90e48 100644
--- a/compiler/alpha/cgcpu.pas
+++ b/compiler/alpha/cgcpu.pas
@@ -51,6 +51,8 @@ tcgalpha = class(tcg)
procedure g_restore_frame_pointer(list : TAsmList);override;
end;
+procedure create_codegen;
+
implementation
uses
@@ -157,4 +159,9 @@ begin
end;
+procedure create_codegen;
+ begin
+ cg:=tcgalpha.create;
+ end;
+
end.
diff --git a/compiler/arm/aasmcpu.pas b/compiler/arm/aasmcpu.pas
index 3d3f36736c..0444c8b538 100644
--- a/compiler/arm/aasmcpu.pas
+++ b/compiler/arm/aasmcpu.pas
@@ -103,6 +103,8 @@ uses
{ co proc. ld/st operations }
OT_AM5 = $00080000;
OT_AMMASK = $000f0000;
+ { IT instruction }
+ OT_CONDITION = $00100000;
OT_MEMORYAM2 = OT_MEMORY or OT_AM2;
OT_MEMORYAM3 = OT_MEMORY or OT_AM3;
@@ -159,6 +161,7 @@ uses
roundingmode : troundingmode;
procedure loadshifterop(opidx:longint;const so:tshifterop);
procedure loadregset(opidx:longint;const s:tcpuregisterset);
+ procedure loadconditioncode(opidx:longint;const cond:tasmcond);
constructor op_none(op : tasmop);
constructor op_reg(op : tasmop;_op1 : tregister);
@@ -180,6 +183,9 @@ uses
{ SFM/LFM }
constructor op_reg_const_ref(op : tasmop;_op1 : tregister;_op2 : aint;_op3 : treference);
+ { ITxxx }
+ constructor op_cond(op: tasmop; cond: tasmcond);
+
{ *M*LL }
constructor op_reg_reg_reg_reg(op : tasmop;_op1,_op2,_op3,_op4 : tregister);
@@ -229,6 +235,10 @@ uses
{ nothing to add }
end;
+ tai_thumb_func = class(tai)
+ constructor create;
+ end;
+
function spilling_create_load(const ref:treference;r:tregister):Taicpu;
function spilling_create_store(r:tregister; const ref:treference):Taicpu;
@@ -290,6 +300,19 @@ implementation
end;
+ procedure taicpu.loadconditioncode(opidx:longint;const cond:tasmcond);
+ begin
+ allocate_oper(opidx+1);
+ with oper[opidx]^ do
+ begin
+ if typ<>top_conditioncode then
+ clearop(opidx);
+ cc:=cond;
+ typ:=top_conditioncode;
+ end;
+ end;
+
+
{*****************************************************************************
taicpu Constructors
*****************************************************************************}
@@ -402,6 +425,14 @@ implementation
end;
+ constructor taicpu.op_cond(op: tasmop; cond: tasmcond);
+ begin
+ inherited create(op);
+ ops:=0;
+ condition := cond;
+ end;
+
+
constructor taicpu.op_reg_reg_sym_ofs(op : tasmop;_op1,_op2 : tregister; _op3: tasmsymbol;_op3ofs: longint);
begin
inherited create(op);
@@ -574,6 +605,20 @@ implementation
else
{ check for pre/post indexed }
result := operand_read;
+ //Thumb2
+ A_LSL, A_LSR, A_ROR, A_ASR, A_SDIV, A_UDIV,A_MOVT:
+ if opnr in [0] then
+ result:=operand_write
+ else
+ result:=operand_read;
+ A_LDREX:
+ if opnr in [0] then
+ result:=operand_write
+ else
+ result:=operand_read;
+ A_STREX:
+ if opnr in [0,1,2] then
+ result:=operand_write;
else
internalerror(200403151);
end;
@@ -2516,6 +2561,12 @@ static char *CC[] =
*)
{$endif dummy}
+ constructor tai_thumb_func.create;
+ begin
+ inherited create;
+ typ:=ait_thumb_func;
+ end;
+
begin
cai_align:=tai_align;
end.
diff --git a/compiler/arm/agarmgas.pas b/compiler/arm/agarmgas.pas
index e0b18138bc..cecacaf30d 100644
--- a/compiler/arm/agarmgas.pas
+++ b/compiler/arm/agarmgas.pas
@@ -38,6 +38,7 @@ unit agarmgas;
TARMGNUAssembler=class(TGNUassembler)
constructor create(smart: boolean); override;
function MakeCmdLine: TCmdStr; override;
+ procedure WriteExtraHeader; override;
end;
TArmInstrWriter=class(TCPUInstrWriter)
@@ -79,6 +80,18 @@ unit agarmgas;
result:=inherited MakeCmdLine;
if (current_settings.fputype = fpu_soft) then
result:='-mfpu=softvfp '+result;
+
+ if current_settings.cputype = cpu_cortexm3 then
+ result:='-mcpu=cortex-m3 -mthumb -mthumb-interwork '+result;
+ if current_settings.cputype = cpu_armv7m then
+ result:='-march=armv7m -mthumb -mthumb-interwork '+result;
+ end;
+
+ procedure TArmGNUAssembler.WriteExtraHeader;
+ begin
+ inherited WriteExtraHeader;
+ if current_settings.cputype in cpu_thumb2 then
+ AsmWriteLn(#9'.syntax unified');
end;
{****************************************************************************}
@@ -189,6 +202,8 @@ unit agarmgas;
end;
getopstr:=getopstr+'}';
end;
+ top_conditioncode:
+ getopstr:=cond2str[o.cc];
top_ref:
if o.ref^.refaddr=addr_full then
begin
@@ -215,7 +230,15 @@ unit agarmgas;
sep: string[3];
begin
op:=taicpu(hp).opcode;
- s:=#9+gas_op2str[op]+cond2str[taicpu(hp).condition]+oppostfix2str[taicpu(hp).oppostfix];
+ if current_settings.cputype in cpu_thumb2 then
+ begin
+ if taicpu(hp).ops = 0 then
+ s:=#9+gas_op2str[op]+' '+cond2str[taicpu(hp).condition]+oppostfix2str[taicpu(hp).oppostfix]
+ else
+ s:=#9+gas_op2str[op]+oppostfix2str[taicpu(hp).oppostfix]+cond2str[taicpu(hp).condition]; // Conditional infixes are deprecated in unified syntax
+ end
+ else
+ s:=#9+gas_op2str[op]+cond2str[taicpu(hp).condition]+oppostfix2str[taicpu(hp).oppostfix];
if taicpu(hp).ops<>0 then
begin
sep:=#9;
diff --git a/compiler/arm/aoptcpu.pas b/compiler/arm/aoptcpu.pas
index a24584d439..9d01be84b8 100644
--- a/compiler/arm/aoptcpu.pas
+++ b/compiler/arm/aoptcpu.pas
@@ -36,6 +36,12 @@ Type
function PeepHoleOptPass1Cpu(var p: tai): boolean; override;
procedure PeepHoleOptPass2;override;
End;
+
+
+ TCpuThumb2AsmOptimizer = class(TCpuAsmOptimizer)
+ { uses the same constructor as TAopObj }
+ procedure PeepHoleOptPass2;override;
+ End;
Implementation
@@ -322,6 +328,12 @@ Implementation
end;
end;
+
+ procedure TCpuThumb2AsmOptimizer.PeepHoleOptPass2;
+ begin
+ { TODO: Add optimizer code }
+ end;
+
begin
casmoptimizer:=TCpuAsmOptimizer;
End.
diff --git a/compiler/arm/armatt.inc b/compiler/arm/armatt.inc
index 74cd25d71b..3378902e33 100644
--- a/compiler/arm/armatt.inc
+++ b/compiler/arm/armatt.inc
@@ -177,5 +177,29 @@
'ftouid',
'ftouis',
'fuitod',
-'fuitos'
+'fuitos',
+'asr',
+'lsr',
+'lsl',
+'ror',
+'sdiv',
+'udiv',
+'movt',
+'ldrex',
+'strex',
+'it',
+'ite',
+'itt',
+'itee',
+'itte',
+'itet',
+'ittt',
+'iteee',
+'ittee',
+'itete',
+'ittte',
+'iteet',
+'ittet',
+'itett',
+'itttt'
);
diff --git a/compiler/arm/armatts.inc b/compiler/arm/armatts.inc
index 09041cfef0..7403730a1f 100644
--- a/compiler/arm/armatts.inc
+++ b/compiler/arm/armatts.inc
@@ -177,5 +177,29 @@ attsufNONE,
attsufNONE,
attsufNONE,
attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
+attsufNONE,
attsufNONE
);
diff --git a/compiler/arm/armins.dat b/compiler/arm/armins.dat
index d83c8d14e8..e6d86ce570 100644
--- a/compiler/arm/armins.dat
+++ b/compiler/arm/armins.dat
@@ -573,3 +573,51 @@ reg32,reg32,reg32,reg32 \x16\x00\x80\x90 ARM7
[FUITODcc]
[FUITOScc]
+
+[ASRcc]
+
+[LSRcc]
+
+[LSLcc]
+
+[RORcc]
+
+[SDIVcc]
+
+[UDIVcc]
+
+[MOVTcc]
+
+[LDREXcc]
+
+[STREXcc]
+
+[IT]
+
+[ITE]
+
+[ITT]
+
+[ITEE]
+
+[ITTE]
+
+[ITET]
+
+[ITTT]
+
+[ITEEE]
+
+[ITTEE]
+
+[ITETE]
+
+[ITTTE]
+
+[ITEET]
+
+[ITTET]
+
+[ITETT]
+
+[ITTTT]
diff --git a/compiler/arm/armop.inc b/compiler/arm/armop.inc
index 1e56db9ee2..3d8cea509c 100644
--- a/compiler/arm/armop.inc
+++ b/compiler/arm/armop.inc
@@ -177,5 +177,29 @@ A_FTOSIS,
A_FTOUID,
A_FTOUIS,
A_FUITOD,
-A_FUITOS
+A_FUITOS,
+A_ASR,
+A_LSR,
+A_LSL,
+A_ROR,
+A_SDIV,
+A_UDIV,
+A_MOVT,
+A_LDREX,
+A_STREX,
+A_IT,
+A_ITE,
+A_ITT,
+A_ITEE,
+A_ITTE,
+A_ITET,
+A_ITTT,
+A_ITEEE,
+A_ITTEE,
+A_ITETE,
+A_ITTTE,
+A_ITEET,
+A_ITTET,
+A_ITETT,
+A_ITTTT
);
diff --git a/compiler/arm/cgcpu.pas b/compiler/arm/cgcpu.pas
index b3e88a9f56..279649fa5a 100644
--- a/compiler/arm/cgcpu.pas
+++ b/compiler/arm/cgcpu.pas
@@ -39,8 +39,6 @@ unit cgcpu;
tcgarm = class(tcg)
{ true, if the next arithmetic operation should modify the flags }
cgsetflags : boolean;
- procedure init_register_allocators;override;
- procedure done_register_allocators;override;
procedure a_param_const(list : TAsmList;size : tcgsize;a : aint;const paraloc : TCGPara);override;
procedure a_param_ref(list : TAsmList;size : tcgsize;const r : treference;const paraloc : TCGPara);override;
@@ -61,9 +59,7 @@ unit cgcpu;
procedure a_op_reg_reg_reg_checkoverflow(list: TAsmList; op: TOpCg; size: tcgsize; src1, src2, dst: tregister;setflags : boolean;var ovloc : tlocation);override;
{ move instructions }
- procedure a_load_const_reg(list : TAsmList; size: tcgsize; a : aint;reg : tregister);override;
procedure a_load_reg_ref(list : TAsmList; fromsize, tosize: tcgsize; reg : tregister;const ref : treference);override;
- procedure a_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister);override;
procedure a_load_reg_reg(list : TAsmList; fromsize, tosize : tcgsize;reg1,reg2 : tregister);override;
function a_internal_load_reg_ref(list : TAsmList; fromsize, tosize: tcgsize; reg : tregister;const ref : treference):treference;
function a_internal_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister):treference;
@@ -103,7 +99,7 @@ unit cgcpu;
procedure a_jmp_cond(list : TAsmList;cond : TOpCmp;l: tasmlabel);
procedure fixref(list : TAsmList;var ref : treference);
- function handle_load_store(list:TAsmList;op: tasmop;oppostfix : toppostfix;reg:tregister;ref: treference):treference;
+ function handle_load_store(list:TAsmList;op: tasmop;oppostfix : toppostfix;reg:tregister;ref: treference):treference; virtual;
procedure g_intf_wrapper(list: TAsmList; procdef: tprocdef; const labelname: string; ioffset: longint);override;
procedure g_adjust_self_value(list:TAsmList;procdef: tprocdef;ioffset: aint); override;
@@ -115,6 +111,14 @@ unit cgcpu;
function get_darwin_call_stub(const s: string; weak: boolean): tasmsymbol;
end;
+ tarmcgarm = class(tcgarm)
+ procedure init_register_allocators;override;
+ procedure done_register_allocators;override;
+
+ procedure a_load_const_reg(list : TAsmList; size: tcgsize; a : aint;reg : tregister);override;
+ procedure a_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister);override;
+ end;
+
tcg64farm = class(tcg64f32)
procedure a_op64_reg_reg(list : TAsmList;op:TOpCG;size : tcgsize;regsrc,regdst : tregister64);override;
procedure a_op64_const_reg(list : TAsmList;op:TOpCG;size : tcgsize;value : int64;reg : tregister64);override;
@@ -124,6 +128,30 @@ unit cgcpu;
procedure a_op64_reg_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;regsrc1,regsrc2,regdst : tregister64;setflags : boolean;var ovloc : tlocation);override;
end;
+ Tthumb2cgarm = class(tcgarm)
+ procedure init_register_allocators;override;
+ procedure done_register_allocators;override;
+
+ procedure a_call_reg(list : TAsmList;reg: tregister);override;
+
+ procedure a_load_const_reg(list : TAsmList; size: tcgsize; a : aint;reg : tregister);override;
+ procedure a_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister);override;
+
+ procedure a_op_const_reg_reg_checkoverflow(list: TAsmList; op: TOpCg; size: tcgsize; a: aint; src, dst: tregister;setflags : boolean;var ovloc : tlocation);override;
+ procedure a_op_reg_reg_reg_checkoverflow(list: TAsmList; op: TOpCg; size: tcgsize; src1, src2, dst: tregister;setflags : boolean;var ovloc : tlocation);override;
+
+ procedure g_flags2reg(list: TAsmList; size: TCgSize; const f: TResFlags; reg: TRegister); override;
+
+ procedure g_proc_entry(list : TAsmList;localsize : longint;nostackframe:boolean);override;
+ procedure g_proc_exit(list : TAsmList;parasize : longint;nostackframe:boolean); override;
+
+ function handle_load_store(list:TAsmList;op: tasmop;oppostfix : toppostfix;reg:tregister;ref: treference):treference; override;
+ end;
+
+ tthumb2cg64farm = class(tcg64farm)
+ procedure a_op64_reg_reg(list : TAsmList;op:TOpCG;size : tcgsize;regsrc,regdst : tregister64);override;
+ end;
+
const
OpCmp2AsmCond : Array[topcmp] of TAsmCond = (C_NONE,C_EQ,C_GT,
C_LT,C_GE,C_LE,C_NE,C_LS,C_CC,C_CS,C_HI);
@@ -131,12 +159,14 @@ unit cgcpu;
winstackpagesize = 4096;
function get_fpu_postfix(def : tdef) : toppostfix;
+ procedure create_codegen;
implementation
uses
globals,verbose,systems,cutils,
+ aopt,aoptcpu,
fmodule,
symconst,symsym,
tgobj,
@@ -164,7 +194,7 @@ unit cgcpu;
end;
- procedure tcgarm.init_register_allocators;
+ procedure tarmcgarm.init_register_allocators;
begin
inherited init_register_allocators;
{ currently, we save R14 always, so we can use it }
@@ -184,7 +214,7 @@ unit cgcpu;
end;
- procedure tcgarm.done_register_allocators;
+ procedure tarmcgarm.done_register_allocators;
begin
rg[R_INTREGISTER].free;
rg[R_FPUREGISTER].free;
@@ -193,6 +223,174 @@ unit cgcpu;
end;
+ procedure tarmcgarm.a_load_const_reg(list : TAsmList; size: tcgsize; a : aint;reg : tregister);
+ var
+ imm_shift : byte;
+ l : tasmlabel;
+ hr : treference;
+ begin
+ if not(size in [OS_8,OS_S8,OS_16,OS_S16,OS_32,OS_S32]) then
+ internalerror(2002090902);
+ if is_shifter_const(a,imm_shift) then
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a))
+ else if is_shifter_const(not(a),imm_shift) then
+ list.concat(taicpu.op_reg_const(A_MVN,reg,not(a)))
+ { loading of constants with mov and orr }
+ else if (is_shifter_const(a-byte(a),imm_shift)) then
+ begin
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a-byte(a)));
+ list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,byte(a)));
+ end
+ else if (is_shifter_const(a-word(a),imm_shift)) and (is_shifter_const(word(a),imm_shift)) then
+ begin
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a-word(a)));
+ list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,word(a)));
+ end
+ else if (is_shifter_const(a-(dword(a) shl 8) shr 8,imm_shift)) and (is_shifter_const((dword(a) shl 8) shr 8,imm_shift)) then
+ begin
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a-(dword(a) shl 8) shr 8));
+ list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,(dword(a) shl 8) shr 8));
+ end
+ else
+ begin
+ reference_reset(hr,4);
+
+ current_asmdata.getjumplabel(l);
+ cg.a_label(current_procinfo.aktlocaldata,l);
+ hr.symboldata:=current_procinfo.aktlocaldata.last;
+ current_procinfo.aktlocaldata.concat(tai_const.Create_32bit(longint(a)));
+
+ hr.symbol:=l;
+ list.concat(taicpu.op_reg_ref(A_LDR,reg,hr));
+ end;
+ end;
+
+
+ procedure tarmcgarm.a_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister);
+ var
+ oppostfix:toppostfix;
+ usedtmpref: treference;
+ tmpreg,tmpreg2 : tregister;
+ so : tshifterop;
+ dir : integer;
+ begin
+ if (TCGSize2Size[FromSize] >= TCGSize2Size[ToSize]) then
+ FromSize := ToSize;
+ case FromSize of
+ { signed integer registers }
+ OS_8:
+ oppostfix:=PF_B;
+ OS_S8:
+ oppostfix:=PF_SB;
+ OS_16:
+ oppostfix:=PF_H;
+ OS_S16:
+ oppostfix:=PF_SH;
+ OS_32,
+ OS_S32:
+ oppostfix:=PF_None;
+ else
+ InternalError(200308297);
+ end;
+ if (ref.alignment in [1,2]) and (ref.alignment<tcgsize2size[fromsize]) then
+ begin
+ if target_info.endian=endian_big then
+ dir:=-1
+ else
+ dir:=1;
+ case FromSize of
+ OS_16,OS_S16:
+ begin
+ { only complicated references need an extra loadaddr }
+ if assigned(ref.symbol) or
+ (ref.index<>NR_NO) or
+ (ref.offset<-4095) or
+ (ref.offset>4094) or
+ { sometimes the compiler reused registers }
+ (reg=ref.index) or
+ (reg=ref.base) then
+ begin
+ tmpreg2:=getintregister(list,OS_INT);
+ a_loadaddr_ref_reg(list,ref,tmpreg2);
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
+ end
+ else
+ usedtmpref:=ref;
+
+ if target_info.endian=endian_big then
+ inc(usedtmpref.offset,1);
+ shifterop_reset(so);so.shiftmode:=SM_LSL;so.shiftimm:=8;
+ tmpreg:=getintregister(list,OS_INT);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
+ inc(usedtmpref.offset,dir);
+ if FromSize=OS_16 then
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg)
+ else
+ a_internal_load_ref_reg(list,OS_S8,OS_S8,usedtmpref,tmpreg);
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ end;
+ OS_32,OS_S32:
+ begin
+ tmpreg:=getintregister(list,OS_INT);
+
+ { only complicated references need an extra loadaddr }
+ if assigned(ref.symbol) or
+ (ref.index<>NR_NO) or
+ (ref.offset<-4095) or
+ (ref.offset>4092) or
+ { sometimes the compiler reused registers }
+ (reg=ref.index) or
+ (reg=ref.base) then
+ begin
+ tmpreg2:=getintregister(list,OS_INT);
+ a_loadaddr_ref_reg(list,ref,tmpreg2);
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
+ end
+ else
+ usedtmpref:=ref;
+
+ shifterop_reset(so);so.shiftmode:=SM_LSL;
+ if ref.alignment=2 then
+ begin
+ if target_info.endian=endian_big then
+ inc(usedtmpref.offset,2);
+ a_internal_load_ref_reg(list,OS_16,OS_16,usedtmpref,reg);
+ inc(usedtmpref.offset,dir*2);
+ a_internal_load_ref_reg(list,OS_16,OS_16,usedtmpref,tmpreg);
+ so.shiftimm:=16;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ end
+ else
+ begin
+ if target_info.endian=endian_big then
+ inc(usedtmpref.offset,3);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
+ inc(usedtmpref.offset,dir);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
+ so.shiftimm:=8;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ inc(usedtmpref.offset,dir);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
+ so.shiftimm:=16;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ inc(usedtmpref.offset,dir);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
+ so.shiftimm:=24;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ end;
+ end
+ else
+ handle_load_store(list,A_LDR,oppostfix,reg,ref);
+ end;
+ end
+ else
+ handle_load_store(list,A_LDR,oppostfix,reg,ref);
+
+ if (fromsize=OS_S8) and (tosize = OS_16) then
+ a_load_reg_reg(list,OS_16,OS_32,reg,reg);
+ end;
+
+
procedure tcgarm.a_param_const(list : TAsmList;size : tcgsize;a : aint;const paraloc : TCGPara);
var
ref: treference;
@@ -479,6 +677,17 @@ unit cgcpu;
list.concat(taicpu.op_reg_reg(A_MOV,dst,src));
end;
else
+ {if (op in [OP_SUB, OP_ADD]) and
+ ((a < 0) or
+ (a > 4095)) then
+ begin
+ tmpreg:=getintregister(list,size);
+ list.concat(taicpu.op_reg_const(A_MOVT, tmpreg, (a shr 16) and $FFFF));
+ list.concat(taicpu.op_reg_const(A_MOV, tmpreg, a and $FFFF));
+ list.concat(setoppostfix(taicpu.op_reg_reg_reg(op_reg_reg_opcg2asmop[op],dst,src,tmpreg),toppostfix(ord(cgsetflags or setflags)*ord(PF_S))
+ ));
+ end
+ else}
list.concat(setoppostfix(
taicpu.op_reg_reg_const(op_reg_reg_opcg2asmop[op],dst,src,a),toppostfix(ord(cgsetflags or setflags)*ord(PF_S))
));
@@ -645,49 +854,6 @@ unit cgcpu;
end;
- procedure tcgarm.a_load_const_reg(list : TAsmList; size: tcgsize; a : aint;reg : tregister);
- var
- imm_shift : byte;
- l : tasmlabel;
- hr : treference;
- begin
- if not(size in [OS_8,OS_S8,OS_16,OS_S16,OS_32,OS_S32]) then
- internalerror(2002090902);
- if is_shifter_const(a,imm_shift) then
- list.concat(taicpu.op_reg_const(A_MOV,reg,a))
- else if is_shifter_const(not(a),imm_shift) then
- list.concat(taicpu.op_reg_const(A_MVN,reg,not(a)))
- { loading of constants with mov and orr }
- else if (is_shifter_const(a-byte(a),imm_shift)) then
- begin
- list.concat(taicpu.op_reg_const(A_MOV,reg,a-byte(a)));
- list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,byte(a)));
- end
- else if (is_shifter_const(a-word(a),imm_shift)) and (is_shifter_const(word(a),imm_shift)) then
- begin
- list.concat(taicpu.op_reg_const(A_MOV,reg,a-word(a)));
- list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,word(a)));
- end
- else if (is_shifter_const(a-(dword(a) shl 8) shr 8,imm_shift)) and (is_shifter_const((dword(a) shl 8) shr 8,imm_shift)) then
- begin
- list.concat(taicpu.op_reg_const(A_MOV,reg,a-(dword(a) shl 8) shr 8));
- list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,(dword(a) shl 8) shr 8));
- end
- else
- begin
- reference_reset(hr,4);
-
- current_asmdata.getjumplabel(l);
- cg.a_label(current_procinfo.aktlocaldata,l);
- hr.symboldata:=current_procinfo.aktlocaldata.last;
- current_procinfo.aktlocaldata.concat(tai_const.Create_32bit(longint(a)));
-
- hr.symbol:=l;
- list.concat(taicpu.op_reg_ref(A_LDR,reg,hr));
- end;
- end;
-
-
function tcgarm.handle_load_store(list:TAsmList;op: tasmop;oppostfix : toppostfix;reg:tregister;ref: treference):treference;
var
tmpreg : tregister;
@@ -922,131 +1088,6 @@ unit cgcpu;
end;
- procedure tcgarm.a_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister);
- var
- oppostfix:toppostfix;
- usedtmpref: treference;
- tmpreg,tmpreg2 : tregister;
- so : tshifterop;
- dir : integer;
- begin
- if (TCGSize2Size[FromSize] >= TCGSize2Size[ToSize]) then
- FromSize := ToSize;
- case FromSize of
- { signed integer registers }
- OS_8:
- oppostfix:=PF_B;
- OS_S8:
- oppostfix:=PF_SB;
- OS_16:
- oppostfix:=PF_H;
- OS_S16:
- oppostfix:=PF_SH;
- OS_32,
- OS_S32:
- oppostfix:=PF_None;
- else
- InternalError(200308297);
- end;
- if (ref.alignment in [1,2]) and (ref.alignment<tcgsize2size[fromsize]) then
- begin
- if target_info.endian=endian_big then
- dir:=-1
- else
- dir:=1;
- case FromSize of
- OS_16,OS_S16:
- begin
- { only complicated references need an extra loadaddr }
- if assigned(ref.symbol) or
- (ref.index<>NR_NO) or
- (ref.offset<-4095) or
- (ref.offset>4094) or
- { sometimes the compiler reused registers }
- (reg=ref.index) or
- (reg=ref.base) then
- begin
- tmpreg2:=getintregister(list,OS_INT);
- a_loadaddr_ref_reg(list,ref,tmpreg2);
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
- end
- else
- usedtmpref:=ref;
-
- if target_info.endian=endian_big then
- inc(usedtmpref.offset,1);
- shifterop_reset(so);so.shiftmode:=SM_LSL;so.shiftimm:=8;
- tmpreg:=getintregister(list,OS_INT);
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
- inc(usedtmpref.offset,dir);
- if FromSize=OS_16 then
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg)
- else
- a_internal_load_ref_reg(list,OS_S8,OS_S8,usedtmpref,tmpreg);
- list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
- end;
- OS_32,OS_S32:
- begin
- tmpreg:=getintregister(list,OS_INT);
-
- { only complicated references need an extra loadaddr }
- if assigned(ref.symbol) or
- (ref.index<>NR_NO) or
- (ref.offset<-4095) or
- (ref.offset>4092) or
- { sometimes the compiler reused registers }
- (reg=ref.index) or
- (reg=ref.base) then
- begin
- tmpreg2:=getintregister(list,OS_INT);
- a_loadaddr_ref_reg(list,ref,tmpreg2);
- reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
- end
- else
- usedtmpref:=ref;
-
- shifterop_reset(so);so.shiftmode:=SM_LSL;
- if ref.alignment=2 then
- begin
- if target_info.endian=endian_big then
- inc(usedtmpref.offset,2);
- a_internal_load_ref_reg(list,OS_16,OS_16,usedtmpref,reg);
- inc(usedtmpref.offset,dir*2);
- a_internal_load_ref_reg(list,OS_16,OS_16,usedtmpref,tmpreg);
- so.shiftimm:=16;
- list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
- end
- else
- begin
- if target_info.endian=endian_big then
- inc(usedtmpref.offset,3);
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
- inc(usedtmpref.offset,dir);
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
- so.shiftimm:=8;
- list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
- inc(usedtmpref.offset,dir);
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
- so.shiftimm:=16;
- list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
- inc(usedtmpref.offset,dir);
- a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
- so.shiftimm:=24;
- list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
- end;
- end
- else
- handle_load_store(list,A_LDR,oppostfix,reg,ref);
- end;
- end
- else
- handle_load_store(list,A_LDR,oppostfix,reg,ref);
-
- if (fromsize=OS_S8) and (tosize = OS_16) then
- a_load_reg_reg(list,OS_16,OS_32,reg,reg);
- end;
-
-
function tcgarm.a_internal_load_reg_ref(list : TAsmList; fromsize, tosize: tcgsize; reg : tregister;const ref : treference):treference;
var
oppostfix:toppostfix;
@@ -2108,7 +2149,7 @@ unit cgcpu;
if weak then
current_asmdata.weakrefasmsymbol(s);
current_asmdata.asmlists[al_imports].concat(tai_directive.create(asd_indirect_symbol,s));
-
+
if not(cs_create_pic in current_settings.moduleswitches) then
begin
l1 := current_asmdata.RefAsmSymbol('L'+s+'$slp');
@@ -2123,7 +2164,7 @@ unit cgcpu;
end
else
internalerror(2008100401);
-
+
current_asmdata.asmlists[al_imports].concat(tai_directive.create(asd_lazy_symbol_pointer,''));
current_asmdata.asmlists[al_imports].concat(Tai_symbol.Create(l1,0));
current_asmdata.asmlists[al_imports].concat(tai_directive.create(asd_indirect_symbol,s));
@@ -2357,7 +2398,881 @@ unit cgcpu;
end;
-begin
- cg:=tcgarm.create;
- cg64:=tcg64farm.create;
+ procedure Tthumb2cgarm.init_register_allocators;
+ begin
+ inherited init_register_allocators;
+ { currently, we save R14 always, so we can use it }
+ if (target_info.system<>system_arm_darwin) then
+ rg[R_INTREGISTER]:=trgcputhumb2.create(R_INTREGISTER,R_SUBWHOLE,
+ [RS_R0,RS_R1,RS_R2,RS_R3,RS_R4,RS_R5,RS_R6,RS_R7,RS_R8,
+ RS_R9,RS_R10,RS_R12,RS_R14],first_int_imreg,[])
+ else
+ { r9 is not available on Darwin according to the llvm code generator }
+ rg[R_INTREGISTER]:=trgcputhumb2.create(R_INTREGISTER,R_SUBWHOLE,
+ [RS_R0,RS_R1,RS_R2,RS_R3,RS_R4,RS_R5,RS_R6,RS_R7,RS_R8,
+ RS_R10,RS_R12,RS_R14],first_int_imreg,[]);
+ rg[R_FPUREGISTER]:=trgcputhumb2.create(R_FPUREGISTER,R_SUBNONE,
+ [RS_F0,RS_F1,RS_F2,RS_F3,RS_F4,RS_F5,RS_F6,RS_F7],first_fpu_imreg,[]);
+ rg[R_MMREGISTER]:=trgcputhumb2.create(R_MMREGISTER,R_SUBNONE,
+ [RS_S0,RS_S1,RS_R2,RS_R3,RS_R4,RS_S31],first_mm_imreg,[]);
+ end;
+
+
+ procedure Tthumb2cgarm.done_register_allocators;
+ begin
+ rg[R_INTREGISTER].free;
+ rg[R_FPUREGISTER].free;
+ rg[R_MMREGISTER].free;
+ inherited done_register_allocators;
+ end;
+
+
+ procedure Tthumb2cgarm.a_call_reg(list : TAsmList;reg: tregister);
+ begin
+ list.concat(taicpu.op_reg(A_BLX, reg));
+{
+ the compiler does not properly set this flag anymore in pass 1, and
+ for now we only need it after pass 2 (I hope) (JM)
+ if not(pi_do_call in current_procinfo.flags) then
+ internalerror(2003060703);
+}
+ include(current_procinfo.flags,pi_do_call);
+ end;
+
+
+ procedure Tthumb2cgarm.a_load_const_reg(list : TAsmList; size: tcgsize; a : aint;reg : tregister);
+ var
+ imm_shift : byte;
+ l : tasmlabel;
+ hr : treference;
+ begin
+ if not(size in [OS_8,OS_S8,OS_16,OS_S16,OS_32,OS_S32]) then
+ internalerror(2002090902);
+ if is_shifter_const(a,imm_shift) then
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a))
+ { loading of constants with mov and orr }
+ else if (is_shifter_const(a-byte(a),imm_shift)) then
+ begin
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a-byte(a)));
+ list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,byte(a)));
+ end
+ else if (is_shifter_const(a-word(a),imm_shift)) and (is_shifter_const(word(a),imm_shift)) then
+ begin
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a-word(a)));
+ list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,word(a)));
+ end
+ else if (is_shifter_const(a-(dword(a) shl 8) shr 8,imm_shift)) and (is_shifter_const((dword(a) shl 8) shr 8,imm_shift)) then
+ begin
+ list.concat(taicpu.op_reg_const(A_MOV,reg,a-(dword(a) shl 8) shr 8));
+ list.concat(taicpu.op_reg_reg_const(A_ORR,reg,reg,(dword(a) shl 8) shr 8));
+ end
+ else
+ begin
+ reference_reset(hr,4);
+
+ current_asmdata.getjumplabel(l);
+ cg.a_label(current_procinfo.aktlocaldata,l);
+ hr.symboldata:=current_procinfo.aktlocaldata.last;
+ current_procinfo.aktlocaldata.concat(tai_const.Create_32bit(longint(a)));
+
+ hr.symbol:=l;
+ list.concat(taicpu.op_reg_ref(A_LDR,reg,hr));
+ end;
+ end;
+
+
+ procedure Tthumb2cgarm.a_load_ref_reg(list : TAsmList; fromsize, tosize : tcgsize;const Ref : treference;reg : tregister);
+ var
+ oppostfix:toppostfix;
+ usedtmpref: treference;
+ tmpreg,tmpreg2 : tregister;
+ so : tshifterop;
+ dir : integer;
+ begin
+ if (TCGSize2Size[FromSize] >= TCGSize2Size[ToSize]) then
+ FromSize := ToSize;
+ case FromSize of
+ { signed integer registers }
+ OS_8:
+ oppostfix:=PF_B;
+ OS_S8:
+ oppostfix:=PF_SB;
+ OS_16:
+ oppostfix:=PF_H;
+ OS_S16:
+ oppostfix:=PF_SH;
+ OS_32,
+ OS_S32:
+ oppostfix:=PF_None;
+ else
+ InternalError(200308297);
+ end;
+ if (ref.alignment in [1,2]) and (ref.alignment<tcgsize2size[fromsize]) then
+ begin
+ if target_info.endian=endian_big then
+ dir:=-1
+ else
+ dir:=1;
+ case FromSize of
+ OS_16,OS_S16:
+ begin
+ { only complicated references need an extra loadaddr }
+ if assigned(ref.symbol) or
+ (ref.index<>NR_NO) or
+ (ref.offset<-255) or
+ (ref.offset>4094) or
+ { sometimes the compiler reused registers }
+ (reg=ref.index) or
+ (reg=ref.base) then
+ begin
+ tmpreg2:=getintregister(list,OS_INT);
+ a_loadaddr_ref_reg(list,ref,tmpreg2);
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
+ end
+ else
+ usedtmpref:=ref;
+
+ if target_info.endian=endian_big then
+ inc(usedtmpref.offset,1);
+ shifterop_reset(so);so.shiftmode:=SM_LSL;so.shiftimm:=8;
+ tmpreg:=getintregister(list,OS_INT);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
+ inc(usedtmpref.offset,dir);
+ if FromSize=OS_16 then
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg)
+ else
+ a_internal_load_ref_reg(list,OS_S8,OS_S8,usedtmpref,tmpreg);
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ end;
+ OS_32,OS_S32:
+ begin
+ tmpreg:=getintregister(list,OS_INT);
+
+ { only complicated references need an extra loadaddr }
+ if assigned(ref.symbol) or
+ (ref.index<>NR_NO) or
+ (ref.offset<-255) or
+ (ref.offset>4092) or
+ { sometimes the compiler reused registers }
+ (reg=ref.index) or
+ (reg=ref.base) then
+ begin
+ tmpreg2:=getintregister(list,OS_INT);
+ a_loadaddr_ref_reg(list,ref,tmpreg2);
+ reference_reset_base(usedtmpref,tmpreg2,0,ref.alignment);
+ end
+ else
+ usedtmpref:=ref;
+
+ shifterop_reset(so);so.shiftmode:=SM_LSL;
+ if ref.alignment=2 then
+ begin
+ if target_info.endian=endian_big then
+ inc(usedtmpref.offset,2);
+ a_internal_load_ref_reg(list,OS_16,OS_16,usedtmpref,reg);
+ inc(usedtmpref.offset,dir*2);
+ a_internal_load_ref_reg(list,OS_16,OS_16,usedtmpref,tmpreg);
+ so.shiftimm:=16;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ end
+ else
+ begin
+ if target_info.endian=endian_big then
+ inc(usedtmpref.offset,3);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,reg);
+ inc(usedtmpref.offset,dir);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
+ so.shiftimm:=8;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ inc(usedtmpref.offset,dir);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
+ so.shiftimm:=16;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ inc(usedtmpref.offset,dir);
+ a_internal_load_ref_reg(list,OS_8,OS_8,usedtmpref,tmpreg);
+ so.shiftimm:=24;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ORR,reg,reg,tmpreg,so));
+ end;
+ end
+ else
+ handle_load_store(list,A_LDR,oppostfix,reg,ref);
+ end;
+ end
+ else
+ handle_load_store(list,A_LDR,oppostfix,reg,ref);
+
+ if (fromsize=OS_S8) and (tosize = OS_16) then
+ a_load_reg_reg(list,OS_16,OS_32,reg,reg);
+ end;
+
+
+ procedure Tthumb2cgarm.a_op_const_reg_reg_checkoverflow(list: TAsmList; op: TOpCg; size: tcgsize; a: aint; src, dst: tregister;setflags : boolean;var ovloc : tlocation);
+ var
+ shift : byte;
+ tmpreg : tregister;
+ so : tshifterop;
+ l1 : longint;
+ begin
+ ovloc.loc:=LOC_VOID;
+ if {$ifopt R+}(a<>-2147483648) and{$endif} is_shifter_const(-a,shift) then
+ case op of
+ OP_ADD:
+ begin
+ op:=OP_SUB;
+ a:=aint(dword(-a));
+ end;
+ OP_SUB:
+ begin
+ op:=OP_ADD;
+ a:=aint(dword(-a));
+ end
+ end;
+
+ if is_shifter_const(a,shift) and not(op in [OP_IMUL,OP_MUL]) then
+ case op of
+ OP_NEG,OP_NOT,
+ OP_DIV,OP_IDIV:
+ internalerror(200308281);
+ OP_SHL:
+ begin
+ if a>32 then
+ internalerror(200308294);
+ if a<>0 then
+ begin
+ shifterop_reset(so);
+ so.shiftmode:=SM_LSL;
+ so.shiftimm:=a;
+ list.concat(taicpu.op_reg_reg_shifterop(A_MOV,dst,src,so));
+ end
+ else
+ list.concat(taicpu.op_reg_reg(A_MOV,dst,src));
+ end;
+ OP_ROL:
+ begin
+ if a>32 then
+ internalerror(200308294);
+ if a<>0 then
+ begin
+ shifterop_reset(so);
+ so.shiftmode:=SM_ROR;
+ so.shiftimm:=32-a;
+ list.concat(taicpu.op_reg_reg_shifterop(A_MOV,dst,src,so));
+ end
+ else
+ list.concat(taicpu.op_reg_reg(A_MOV,dst,src));
+ end;
+ OP_ROR:
+ begin
+ if a>32 then
+ internalerror(200308294);
+ if a<>0 then
+ begin
+ shifterop_reset(so);
+ so.shiftmode:=SM_ROR;
+ so.shiftimm:=a;
+ list.concat(taicpu.op_reg_reg_shifterop(A_MOV,dst,src,so));
+ end
+ else
+ list.concat(taicpu.op_reg_reg(A_MOV,dst,src));
+ end;
+ OP_SHR:
+ begin
+ if a>32 then
+ internalerror(200308292);
+ shifterop_reset(so);
+ if a<>0 then
+ begin
+ so.shiftmode:=SM_LSR;
+ so.shiftimm:=a;
+ list.concat(taicpu.op_reg_reg_shifterop(A_MOV,dst,src,so));
+ end
+ else
+ list.concat(taicpu.op_reg_reg(A_MOV,dst,src));
+ end;
+ OP_SAR:
+ begin
+ if a>32 then
+ internalerror(200308295);
+ if a<>0 then
+ begin
+ shifterop_reset(so);
+ so.shiftmode:=SM_ASR;
+ so.shiftimm:=a;
+ list.concat(taicpu.op_reg_reg_shifterop(A_MOV,dst,src,so));
+ end
+ else
+ list.concat(taicpu.op_reg_reg(A_MOV,dst,src));
+ end;
+ else
+ if (op in [OP_SUB, OP_ADD]) and
+ ((a < 0) or
+ (a > 4095)) then
+ begin
+ tmpreg:=getintregister(list,size);
+ a_load_const_reg(list, size, a, tmpreg);
+ list.concat(setoppostfix(taicpu.op_reg_reg_reg(op_reg_reg_opcg2asmop[op],dst,src,tmpreg),toppostfix(ord(cgsetflags or setflags)*ord(PF_S))
+ ));
+ end
+ else
+ list.concat(setoppostfix(
+ taicpu.op_reg_reg_const(op_reg_reg_opcg2asmop[op],dst,src,a),toppostfix(ord(cgsetflags or setflags)*ord(PF_S))
+ ));
+ if (cgsetflags or setflags) and (size in [OS_8,OS_16,OS_32]) then
+ begin
+ ovloc.loc:=LOC_FLAGS;
+ case op of
+ OP_ADD:
+ ovloc.resflags:=F_CS;
+ OP_SUB:
+ ovloc.resflags:=F_CC;
+ end;
+ end;
+ end
+ else
+ begin
+ { there could be added some more sophisticated optimizations }
+ if (op in [OP_MUL,OP_IMUL]) and (a=1) then
+ a_load_reg_reg(list,size,size,src,dst)
+ else if (op in [OP_MUL,OP_IMUL]) and (a=0) then
+ a_load_const_reg(list,size,0,dst)
+ else if (op in [OP_IMUL]) and (a=-1) then
+ a_op_reg_reg(list,OP_NEG,size,src,dst)
+ { we do this here instead in the peephole optimizer because
+ it saves us a register }
+ else if (op in [OP_MUL,OP_IMUL]) and ispowerof2(a,l1) and not(cgsetflags or setflags) then
+ a_op_const_reg_reg(list,OP_SHL,size,l1,src,dst)
+ { for example : b=a*5 -> b=a*4+a with add instruction and shl }
+ else if (op in [OP_MUL,OP_IMUL]) and ispowerof2(a-1,l1) and not(cgsetflags or setflags) then
+ begin
+ if l1>32 then{roozbeh does this ever happen?}
+ internalerror(200308296);
+ shifterop_reset(so);
+ so.shiftmode:=SM_LSL;
+ so.shiftimm:=l1;
+ list.concat(taicpu.op_reg_reg_reg_shifterop(A_ADD,dst,src,src,so));
+ end
+ else
+ begin
+ tmpreg:=getintregister(list,size);
+ a_load_const_reg(list,size,a,tmpreg);
+ a_op_reg_reg_reg_checkoverflow(list,op,size,tmpreg,src,dst,setflags,ovloc);
+ end;
+ end;
+ maybeadjustresult(list,op,size,dst);
+ end;
+
+
+ const
+ op_reg_reg_opcg2asmopThumb2: array[TOpCG] of tasmop =
+ (A_NONE,A_MOV,A_ADD,A_AND,A_UDIV,A_SDIV,A_MUL,A_MUL,A_NONE,A_MVN,A_ORR,
+ A_ASR,A_LSL,A_LSR,A_SUB,A_EOR,A_NONE,A_ROR);
+
+
+ procedure Tthumb2cgarm.a_op_reg_reg_reg_checkoverflow(list: TAsmList; op: TOpCg; size: tcgsize; src1, src2, dst: tregister;setflags : boolean;var ovloc : tlocation);
+ var
+ so : tshifterop;
+ tmpreg,overflowreg : tregister;
+ asmop : tasmop;
+ begin
+ ovloc.loc:=LOC_VOID;
+ case op of
+ OP_NEG,OP_NOT,
+ OP_DIV,OP_IDIV:
+ internalerror(200308281);
+ OP_ROL:
+ begin
+ if not(size in [OS_32,OS_S32]) then
+ internalerror(2008072801);
+ { simulate ROL by ror'ing 32-value }
+ tmpreg:=getintregister(list,OS_32);
+ list.concat(taicpu.op_reg_const(A_MOV,tmpreg,32));
+ list.concat(taicpu.op_reg_reg_reg(A_SUB,src1,tmpreg,src1));
+ list.concat(taicpu.op_reg_reg_reg(A_ROR, dst, src2, src1));
+ end;
+ OP_ROR:
+ begin
+ if not(size in [OS_32,OS_S32]) then
+ internalerror(2008072802);
+ list.concat(taicpu.op_reg_reg_reg(A_ROR, dst, src2, src1));
+ end;
+ OP_IMUL,
+ OP_MUL:
+ begin
+ if cgsetflags or setflags then
+ begin
+ overflowreg:=getintregister(list,size);
+ if op=OP_IMUL then
+ asmop:=A_SMULL
+ else
+ asmop:=A_UMULL;
+ { the arm doesn't allow that rd and rm are the same }
+ if dst=src2 then
+ begin
+ if dst<>src1 then
+ list.concat(taicpu.op_reg_reg_reg_reg(asmop,dst,overflowreg,src1,src2))
+ else
+ begin
+ tmpreg:=getintregister(list,size);
+ a_load_reg_reg(list,size,size,src2,dst);
+ list.concat(taicpu.op_reg_reg_reg_reg(asmop,dst,overflowreg,tmpreg,src1));
+ end;
+ end
+ else
+ list.concat(taicpu.op_reg_reg_reg_reg(asmop,dst,overflowreg,src2,src1));
+ if op=OP_IMUL then
+ begin
+ shifterop_reset(so);
+ so.shiftmode:=SM_ASR;
+ so.shiftimm:=31;
+ list.concat(taicpu.op_reg_reg_shifterop(A_CMP,overflowreg,dst,so));
+ end
+ else
+ list.concat(taicpu.op_reg_const(A_CMP,overflowreg,0));
+
+ ovloc.loc:=LOC_FLAGS;
+ ovloc.resflags:=F_NE;
+ end
+ else
+ begin
+ { the arm doesn't allow that rd and rm are the same }
+ if dst=src2 then
+ begin
+ if dst<>src1 then
+ list.concat(taicpu.op_reg_reg_reg(A_MUL,dst,src1,src2))
+ else
+ begin
+ tmpreg:=getintregister(list,size);
+ a_load_reg_reg(list,size,size,src2,dst);
+ list.concat(taicpu.op_reg_reg_reg(A_MUL,dst,tmpreg,src1));
+ end;
+ end
+ else
+ list.concat(taicpu.op_reg_reg_reg(A_MUL,dst,src2,src1));
+ end;
+ end;
+ else
+ list.concat(setoppostfix(
+ taicpu.op_reg_reg_reg(op_reg_reg_opcg2asmopThumb2[op],dst,src2,src1),toppostfix(ord(cgsetflags or setflags)*ord(PF_S))
+ ));
+ end;
+ maybeadjustresult(list,op,size,dst);
+ end;
+
+
+ procedure Tthumb2cgarm.g_flags2reg(list: TAsmList; size: TCgSize; const f: TResFlags; reg: TRegister);
+ var item: taicpu;
+ begin
+ item := setcondition(taicpu.op_reg_const(A_MOV,reg,1),flags_to_cond(f));
+ list.concat(item);
+ list.insertbefore(taicpu.op_cond(A_IT, flags_to_cond(f)), item);
+
+ item := setcondition(taicpu.op_reg_const(A_MOV,reg,0),inverse_cond(flags_to_cond(f)));
+ list.concat(item);
+ list.insertbefore(taicpu.op_cond(A_IT, inverse_cond(flags_to_cond(f))), item);
+ end;
+
+
+ procedure Tthumb2cgarm.g_proc_entry(list : TAsmList;localsize : longint;nostackframe:boolean);
+ var
+ ref : treference;
+ shift : byte;
+ firstfloatreg,lastfloatreg,
+ r : byte;
+ regs : tcpuregisterset;
+ stackmisalignment: pint;
+ begin
+ LocalSize:=align(LocalSize,4);
+ { call instruction does not put anything on the stack }
+ stackmisalignment:=0;
+ if not(nostackframe) then
+ begin
+ firstfloatreg:=RS_NO;
+ { save floating point registers? }
+ for r:=RS_F0 to RS_F7 do
+ if r in rg[R_FPUREGISTER].used_in_proc-paramanager.get_volatile_registers_fpu(pocall_stdcall) then
+ begin
+ if firstfloatreg=RS_NO then
+ firstfloatreg:=r;
+ lastfloatreg:=r;
+ inc(stackmisalignment,12);
+ end;
+
+ a_reg_alloc(list,NR_STACK_POINTER_REG);
+ if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
+ begin
+ a_reg_alloc(list,NR_FRAME_POINTER_REG);
+ a_reg_alloc(list,NR_R12);
+
+ list.concat(taicpu.op_reg_reg(A_MOV,NR_R12,NR_STACK_POINTER_REG));
+ end;
+ { save int registers }
+ reference_reset(ref,4);
+ ref.index:=NR_STACK_POINTER_REG;
+ ref.addressmode:=AM_PREINDEXED;
+
+ regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
+
+ if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
+ regs:=regs+[RS_R11,RS_R14]
+ else if (regs<>[]) or (pi_do_call in current_procinfo.flags) then
+ include(regs,RS_R14);
+
+ if regs<>[] then
+ begin
+ for r:=RS_R0 to RS_R15 do
+ if (r in regs) then
+ inc(stackmisalignment,4);
+ list.concat(setoppostfix(taicpu.op_ref_regset(A_STM,ref,regs),PF_FD));
+ end;
+
+ if current_procinfo.framepointer<>NR_STACK_POINTER_REG then
+ list.concat(taicpu.op_reg_reg(A_MOV,NR_FRAME_POINTER_REG,NR_R12));
+
+ stackmisalignment:=stackmisalignment mod current_settings.alignment.localalignmax;
+ if (LocalSize<>0) or
+ ((stackmisalignment<>0) and
+ ((pi_do_call in current_procinfo.flags) or
+ (po_assembler in current_procinfo.procdef.procoptions))) then
+ begin
+ localsize:=align(localsize+stackmisalignment,current_settings.alignment.localalignmax)-stackmisalignment;
+ if not(is_shifter_const(localsize,shift)) then
+ begin
+ if current_procinfo.framepointer=NR_STACK_POINTER_REG then
+ a_reg_alloc(list,NR_R12);
+ a_load_const_reg(list,OS_ADDR,LocalSize,NR_R12);
+ list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,NR_R12));
+ a_reg_dealloc(list,NR_R12);
+ end
+ else
+ begin
+ a_reg_dealloc(list,NR_R12);
+ list.concat(taicpu.op_reg_reg_const(A_SUB,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,LocalSize));
+ end;
+ end;
+
+ if firstfloatreg<>RS_NO then
+ begin
+ reference_reset(ref,4);
+ if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
+ begin
+ a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
+ list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_R12,current_procinfo.framepointer,NR_R12));
+ ref.base:=NR_R12;
+ end
+ else
+ begin
+ ref.base:=current_procinfo.framepointer;
+ ref.offset:=tarmprocinfo(current_procinfo).floatregstart;
+ end;
+ list.concat(taicpu.op_reg_const_ref(A_SFM,newreg(R_FPUREGISTER,firstfloatreg,R_SUBWHOLE),
+ lastfloatreg-firstfloatreg+1,ref));
+ end;
+ end;
+ end;
+
+
+ procedure Tthumb2cgarm.g_proc_exit(list : TAsmList;parasize : longint;nostackframe:boolean);
+ var
+ ref : treference;
+ firstfloatreg,lastfloatreg,
+ r : byte;
+ shift : byte;
+ regs : tcpuregisterset;
+ LocalSize : longint;
+ stackmisalignment: pint;
+ begin
+ if not(nostackframe) then
+ begin
+ stackmisalignment:=0;
+ { restore floating point register }
+ firstfloatreg:=RS_NO;
+ { save floating point registers? }
+ for r:=RS_F0 to RS_F7 do
+ if r in rg[R_FPUREGISTER].used_in_proc-paramanager.get_volatile_registers_fpu(pocall_stdcall) then
+ begin
+ if firstfloatreg=RS_NO then
+ firstfloatreg:=r;
+ lastfloatreg:=r;
+ { floating point register space is already included in
+ localsize below by calc_stackframe_size
+ inc(stackmisalignment,12);
+ }
+ end;
+
+ if firstfloatreg<>RS_NO then
+ begin
+ reference_reset(ref,4);
+ if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
+ begin
+ a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
+ list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_R12,current_procinfo.framepointer,NR_R12));
+ ref.base:=NR_R12;
+ end
+ else
+ begin
+ ref.base:=current_procinfo.framepointer;
+ ref.offset:=tarmprocinfo(current_procinfo).floatregstart;
+ end;
+ list.concat(taicpu.op_reg_const_ref(A_LFM,newreg(R_FPUREGISTER,firstfloatreg,R_SUBWHOLE),
+ lastfloatreg-firstfloatreg+1,ref));
+ end;
+
+ regs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
+ if (pi_do_call in current_procinfo.flags) or (regs<>[]) then
+ begin
+ exclude(regs,RS_R14);
+ include(regs,RS_R15);
+ end;
+ if (current_procinfo.framepointer<>NR_STACK_POINTER_REG) then
+ regs:=regs+[RS_R11,RS_R15];
+
+ for r:=RS_R0 to RS_R15 do
+ if (r in regs) then
+ inc(stackmisalignment,4);
+
+ stackmisalignment:=stackmisalignment mod current_settings.alignment.localalignmax;
+ if (current_procinfo.framepointer=NR_STACK_POINTER_REG) then
+ begin
+ LocalSize:=current_procinfo.calc_stackframe_size;
+ if (LocalSize<>0) or
+ ((stackmisalignment<>0) and
+ ((pi_do_call in current_procinfo.flags) or
+ (po_assembler in current_procinfo.procdef.procoptions))) then
+ begin
+ localsize:=align(localsize+stackmisalignment,current_settings.alignment.localalignmax)-stackmisalignment;
+ if not(is_shifter_const(LocalSize,shift)) then
+ begin
+ a_reg_alloc(list,NR_R12);
+ a_load_const_reg(list,OS_ADDR,LocalSize,NR_R12);
+ list.concat(taicpu.op_reg_reg_reg(A_ADD,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,NR_R12));
+ a_reg_dealloc(list,NR_R12);
+ end
+ else
+ begin
+ list.concat(taicpu.op_reg_reg_const(A_ADD,NR_STACK_POINTER_REG,NR_STACK_POINTER_REG,LocalSize));
+ end;
+ end;
+
+ if regs=[] then
+ list.concat(taicpu.op_reg_reg(A_MOV,NR_R15,NR_R14))
+ else
+ begin
+ reference_reset(ref,4);
+ ref.index:=NR_STACK_POINTER_REG;
+ ref.addressmode:=AM_PREINDEXED;
+ list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,regs),PF_FD));
+ end;
+ end
+ else
+ begin
+ { restore int registers and return }
+ list.concat(taicpu.op_reg_reg(A_MOV, NR_STACK_POINTER_REG, NR_R11));
+
+ reference_reset(ref,4);
+ ref.index:=NR_STACK_POINTER_REG;
+ list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,regs),PF_DB));
+ end;
+ end
+ else
+ list.concat(taicpu.op_reg_reg(A_MOV,NR_PC,NR_R14));
+ end;
+
+
+ function Tthumb2cgarm.handle_load_store(list:TAsmList;op: tasmop;oppostfix : toppostfix;reg:tregister;ref: treference):treference;
+ var
+ tmpreg : tregister;
+ tmpref : treference;
+ l : tasmlabel;
+ so: tshifterop;
+ begin
+ tmpreg:=NR_NO;
+
+ { Be sure to have a base register }
+ if (ref.base=NR_NO) then
+ begin
+ if ref.shiftmode<>SM_None then
+ internalerror(200308294);
+ ref.base:=ref.index;
+ ref.index:=NR_NO;
+ end;
+
+ { absolute symbols can't be handled directly, we've to store the symbol reference
+ in the text segment and access it pc relative
+
+ For now, we assume that references where base or index equals to PC are already
+ relative, all other references are assumed to be absolute and thus they need
+ to be handled extra.
+
+ A proper solution would be to change refoptions to a set and store the information
+ if the symbol is absolute or relative there.
+ }
+
+ if (assigned(ref.symbol) and
+ not(is_pc(ref.base)) and
+ not(is_pc(ref.index))
+ ) or
+ { [#xxx] isn't a valid address operand }
+ ((ref.base=NR_NO) and (ref.index=NR_NO)) or
+ //(ref.offset<-4095) or
+ (ref.offset<-255) or
+ (ref.offset>4095) or
+ ((oppostfix in [PF_SB,PF_H,PF_SH]) and
+ ((ref.offset<-255) or
+ (ref.offset>255)
+ )
+ ) or
+ ((op in [A_LDF,A_STF]) and
+ ((ref.offset<-1020) or
+ (ref.offset>1020) or
+ { the usual pc relative symbol handling assumes possible offsets of +/- 4095 }
+ assigned(ref.symbol)
+ )
+ ) then
+ begin
+ reference_reset(tmpref,4);
+
+ { load symbol }
+ tmpreg:=getintregister(list,OS_INT);
+ if assigned(ref.symbol) then
+ begin
+ current_asmdata.getjumplabel(l);
+ cg.a_label(current_procinfo.aktlocaldata,l);
+ tmpref.symboldata:=current_procinfo.aktlocaldata.last;
+
+ current_procinfo.aktlocaldata.concat(tai_const.create_sym_offset(ref.symbol,ref.offset));
+
+ { load consts entry }
+ tmpref.symbol:=l;
+ tmpref.base:=NR_R15;
+ list.concat(taicpu.op_reg_ref(A_LDR,tmpreg,tmpref));
+
+ { in case of LDF/STF, we got rid of the NR_R15 }
+ if is_pc(ref.base) then
+ ref.base:=NR_NO;
+ if is_pc(ref.index) then
+ ref.index:=NR_NO;
+ end
+ else
+ a_load_const_reg(list,OS_ADDR,ref.offset,tmpreg);
+
+ if (ref.base<>NR_NO) then
+ begin
+ if ref.index<>NR_NO then
+ begin
+ list.concat(taicpu.op_reg_reg_reg(A_ADD,tmpreg,ref.base,tmpreg));
+ ref.base:=tmpreg;
+ end
+ else
+ begin
+ ref.index:=tmpreg;
+ ref.shiftimm:=0;
+ ref.signindex:=1;
+ ref.shiftmode:=SM_None;
+ end;
+ end
+ else
+ ref.base:=tmpreg;
+ ref.offset:=0;
+ ref.symbol:=nil;
+ end;
+
+ if (ref.base<>NR_NO) and (ref.index<>NR_NO) and (ref.offset<>0) then
+ begin
+ if tmpreg<>NR_NO then
+ a_op_const_reg_reg(list,OP_ADD,OS_ADDR,ref.offset,tmpreg,tmpreg)
+ else
+ begin
+ tmpreg:=getintregister(list,OS_ADDR);
+ a_op_const_reg_reg(list,OP_ADD,OS_ADDR,ref.offset,ref.base,tmpreg);
+ ref.base:=tmpreg;
+ end;
+ ref.offset:=0;
+ end;
+
+ { Hack? Thumb2 doesn't allow PC indexed addressing modes(although it does in the specification) }
+ if (ref.base=NR_R15) and (ref.index<>NR_NO) and (ref.shiftmode <> sm_none) then
+ begin
+ tmpreg:=getintregister(list,OS_ADDR);
+
+ list.concat(taicpu.op_reg_reg(A_MOV, tmpreg, NR_R15));
+
+ ref.base := tmpreg;
+ end;
+
+ { floating point operations have only limited references
+ we expect here, that a base is already set }
+ if (op in [A_LDF,A_STF]) and (ref.index<>NR_NO) then
+ begin
+ if ref.shiftmode<>SM_none then
+ internalerror(200309121);
+ if tmpreg<>NR_NO then
+ begin
+ if ref.base=tmpreg then
+ begin
+ if ref.signindex<0 then
+ list.concat(taicpu.op_reg_reg_reg(A_SUB,tmpreg,tmpreg,ref.index))
+ else
+ list.concat(taicpu.op_reg_reg_reg(A_ADD,tmpreg,tmpreg,ref.index));
+ ref.index:=NR_NO;
+ end
+ else
+ begin
+ if ref.index<>tmpreg then
+ internalerror(200403161);
+ if ref.signindex<0 then
+ list.concat(taicpu.op_reg_reg_reg(A_SUB,tmpreg,ref.base,tmpreg))
+ else
+ list.concat(taicpu.op_reg_reg_reg(A_ADD,tmpreg,ref.base,tmpreg));
+ ref.base:=tmpreg;
+ ref.index:=NR_NO;
+ end;
+ end
+ else
+ begin
+ tmpreg:=getintregister(list,OS_ADDR);
+ list.concat(taicpu.op_reg_reg_reg(A_ADD,tmpreg,ref.base,ref.index));
+ ref.base:=tmpreg;
+ ref.index:=NR_NO;
+ end;
+ end;
+ list.concat(setoppostfix(taicpu.op_reg_ref(op,reg,ref),oppostfix));
+ Result := ref;
+ end;
+
+
+ procedure tthumb2cg64farm.a_op64_reg_reg(list : TAsmList;op:TOpCG;size : tcgsize;regsrc,regdst : tregister64);
+ var tmpreg: tregister;
+ begin
+ case op of
+ OP_NEG:
+ begin
+ list.concat(setoppostfix(taicpu.op_reg_reg_const(A_RSB,regdst.reglo,regsrc.reglo,0),PF_S));
+ tmpreg:=cg.getintregister(list,OS_32);
+ list.concat(taicpu.op_reg_const(A_MOV,tmpreg,0));
+ list.concat(taicpu.op_reg_reg_reg(A_SBC,regdst.reghi,tmpreg,regsrc.reghi));
+ end;
+ else
+ inherited a_op64_reg_reg(list, op, size, regsrc, regdst);
+ end;
+ end;
+
+
+ procedure create_codegen;
+ begin
+ if current_settings.cputype in cpu_thumb2 then
+ begin
+ cg:=tthumb2cgarm.create;
+ cg64:=tthumb2cg64farm.create;
+
+ casmoptimizer:=TCpuThumb2AsmOptimizer;
+ end
+ else
+ begin
+ cg:=tarmcgarm.create;
+ cg64:=tcg64farm.create;
+
+ casmoptimizer:=TCpuAsmOptimizer;
+ end;
+ end;
+
end.
diff --git a/compiler/arm/cpubase.pas b/compiler/arm/cpubase.pas
index afb8ebd895..2f0b715264 100644
--- a/compiler/arm/cpubase.pas
+++ b/compiler/arm/cpubase.pas
@@ -503,16 +503,31 @@ unit cpubase;
var
i : longint;
begin
- for i:=0 to 15 do
- begin
- if (dword(d) and not(rotl($ff,i*2)))=0 then
- begin
- imm_shift:=i*2;
- result:=true;
- exit;
- end;
- end;
- result:=false;
+ if current_settings.cputype in cpu_thumb2 then
+ begin
+ for i:=0 to 24 do
+ begin
+ if (dword(d) and not($ff shl i))=0 then
+ begin
+ imm_shift:=i;
+ result:=true;
+ exit;
+ end;
+ end;
+ end
+ else
+ begin
+ for i:=0 to 15 do
+ begin
+ if (dword(d) and not(rotl($ff,i*2)))=0 then
+ begin
+ imm_shift:=i*2;
+ result:=true;
+ exit;
+ end;
+ end;
+ end;
+ result:=false;
end;
diff --git a/compiler/arm/cpuinfo.pas b/compiler/arm/cpuinfo.pas
index 8b274b57f3..f026794283 100644
--- a/compiler/arm/cpuinfo.pas
+++ b/compiler/arm/cpuinfo.pas
@@ -34,9 +34,17 @@ Type
(cpu_none,
cpu_armv3,
cpu_armv4,
- cpu_armv5
+ cpu_armv5,
+ cpu_armv7m,
+ cpu_cortexm3
);
+Const
+ cpu_arm = [cpu_none,cpu_armv3,cpu_armv4,cpu_armv5];
+ cpu_thumb = [];
+ cpu_thumb2 = [cpu_armv7m,cpu_cortexm3];
+
+Type
tfputype =
(fpu_none,
fpu_soft,
@@ -59,7 +67,10 @@ Type
ct_at91sam7s256,
ct_at91sam7se256,
ct_at91sam7x256,
- ct_at91sam7xc256
+ ct_at91sam7xc256,
+
+ { STMicroelectronics }
+ ct_stm32f103re
);
Const
@@ -83,10 +94,12 @@ Const
pocall_softfloat
];
- cputypestr : array[tcputype] of string[5] = ('',
+ cputypestr : array[tcputype] of string[8] = ('',
'ARMV3',
'ARMV4',
- 'ARMV5'
+ 'ARMV5',
+ 'ARMV7M',
+ 'CORTEXM3'
);
fputypestr : array[tfputype] of string[6] = ('',
@@ -106,7 +119,8 @@ Const
'AT91SAM7S256',
'AT91SAM7SE256',
'AT91SAM7X256',
- 'AT91SAM7XC256'
+ 'AT91SAM7XC256',
+ 'STM32F103RE'
);
controllerunitstr : array[tcontrollertype] of string[20] =
@@ -117,7 +131,8 @@ Const
'AT91SAM7x256',
'AT91SAM7x256',
'AT91SAM7x256',
- 'AT91SAM7x256'
+ 'AT91SAM7x256',
+ 'STM32F103'
);
{ Supported optimizations, only used for information }
diff --git a/compiler/arm/narmadd.pas b/compiler/arm/narmadd.pas
index 7e9d1aa549..9ac01a20fb 100644
--- a/compiler/arm/narmadd.pas
+++ b/compiler/arm/narmadd.pas
@@ -257,6 +257,8 @@ interface
location_reset(location,LOC_FLAGS,OS_NO);
location.resflags:=getresflags(unsigned);
current_asmdata.CurrAsmList.concat(taicpu.op_reg_reg(A_CMP,left.location.register64.reghi,right.location.register64.reghi));
+ if current_settings.cputype in cpu_thumb2 then
+ current_asmdata.CurrAsmList.concat(taicpu.op_cond(A_IT, C_EQ));
current_asmdata.CurrAsmList.concat(setcondition(taicpu.op_reg_reg(A_CMP,left.location.register64.reglo,right.location.register64.reglo),C_EQ));
end
else
diff --git a/compiler/arm/raarmgas.pas b/compiler/arm/raarmgas.pas
index 81309382bd..bdb8a1f06b 100644
--- a/compiler/arm/raarmgas.pas
+++ b/compiler/arm/raarmgas.pas
@@ -645,6 +645,32 @@ Unit raarmgas;
end;
+ function is_ConditionCode(hs: string): boolean;
+ var icond: tasmcond;
+ begin
+ is_ConditionCode := false;
+
+ if actopcode in [A_IT,A_ITE,A_ITT,
+ A_ITEE,A_ITTE,A_ITET,A_ITTT,
+ A_ITEEE,A_ITTEE,A_ITETE,A_ITTTE,A_ITEET,A_ITTET,A_ITETT,A_ITTTT] then
+ begin
+ { search for condition, conditions are always 2 chars }
+ if length(hs)>1 then
+ begin
+ for icond:=low(tasmcond) to high(tasmcond) do
+ begin
+ if copy(hs,1,2)=uppercond2str[icond] then
+ begin
+ //actcondition:=icond;
+ oper.opr.typ := OPR_COND;
+ oper.opr.cc := icond;
+ exit(true);
+ end;
+ end;
+ end;
+ end;
+ end;
+
var
tempreg : tregister;
ireg : tsuperregister;
@@ -687,6 +713,12 @@ Unit raarmgas;
*)
AS_ID: { A constant expression, or a Variable ref. }
Begin
+ { Condition code? }
+ if is_conditioncode(actasmpattern) then
+ begin
+ consume(AS_ID);
+ end
+ else
{ Local Label ? }
if is_locallabel(actasmpattern) then
begin
@@ -970,6 +1002,7 @@ Unit raarmgas;
end;
if actopcode=A_NONE then
exit;
+
{ search for condition, conditions are always 2 chars }
if length(hs)>1 then
begin
diff --git a/compiler/arm/rgcpu.pas b/compiler/arm/rgcpu.pas
index bfbc19b441..54ccf3f7e4 100644
--- a/compiler/arm/rgcpu.pas
+++ b/compiler/arm/rgcpu.pas
@@ -39,6 +39,11 @@ unit rgcpu;
procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
end;
+ trgcputhumb2 = class(trgobj)
+ procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+ procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+ end;
+
trgintcpu = class(trgcpu)
procedure add_cpu_interferences(p : tai);override;
end;
@@ -157,6 +162,112 @@ unit rgcpu;
end;
+ procedure trgcputhumb2.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+ var
+ tmpref : treference;
+ helplist : TAsmList;
+ l : tasmlabel;
+ hreg : tregister;
+ begin
+ { don't load spilled register between
+ mov lr,pc
+ mov pc,r4
+ but befure the mov lr,pc
+ }
+ if assigned(pos.previous) and
+ (pos.typ=ait_instruction) and
+ (taicpu(pos).opcode=A_MOV) and
+ (taicpu(pos).oper[0]^.typ=top_reg) and
+ (taicpu(pos).oper[0]^.reg=NR_R14) and
+ (taicpu(pos).oper[1]^.typ=top_reg) and
+ (taicpu(pos).oper[1]^.reg=NR_PC) then
+ pos:=tai(pos.previous);
+
+ if (spilltemp.offset>4095) or (spilltemp.offset<-255) then
+ begin
+ helplist:=TAsmList.create;
+ reference_reset(tmpref,sizeof(aint));
+ { create consts entry }
+ current_asmdata.getjumplabel(l);
+ cg.a_label(current_procinfo.aktlocaldata,l);
+ tmpref.symboldata:=current_procinfo.aktlocaldata.last;
+
+ current_procinfo.aktlocaldata.concat(tai_const.Create_32bit(spilltemp.offset));
+
+ { load consts entry }
+ if getregtype(tempreg)=R_INTREGISTER then
+ hreg:=getregisterinline(helplist,R_SUBWHOLE)
+ else
+ hreg:=cg.getintregister(helplist,OS_ADDR);
+
+ tmpref.symbol:=l;
+ tmpref.base:=NR_R15;
+ helplist.concat(taicpu.op_reg_ref(A_LDR,hreg,tmpref));
+
+ reference_reset_base(tmpref,current_procinfo.framepointer,0,sizeof(aint));
+ tmpref.index:=hreg;
+
+ if spilltemp.index<>NR_NO then
+ internalerror(200401263);
+
+ helplist.concat(spilling_create_load(tmpref,tempreg));
+ if getregtype(tempreg)=R_INTREGISTER then
+ ungetregisterinline(helplist,hreg);
+
+ list.insertlistafter(pos,helplist);
+ helplist.free;
+ end
+ else
+ inherited do_spill_read(list,pos,spilltemp,tempreg);
+ end;
+
+
+ procedure trgcputhumb2.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+ var
+ tmpref : treference;
+ helplist : TAsmList;
+ l : tasmlabel;
+ hreg : tregister;
+ begin
+ if (spilltemp.offset>4095) or (spilltemp.offset<-255) then
+ begin
+ helplist:=TAsmList.create;
+ reference_reset(tmpref,sizeof(aint));
+ { create consts entry }
+ current_asmdata.getjumplabel(l);
+ cg.a_label(current_procinfo.aktlocaldata,l);
+ tmpref.symboldata:=current_procinfo.aktlocaldata.last;
+
+ current_procinfo.aktlocaldata.concat(tai_const.Create_32bit(spilltemp.offset));
+
+ { load consts entry }
+ if getregtype(tempreg)=R_INTREGISTER then
+ hreg:=getregisterinline(helplist,R_SUBWHOLE)
+ else
+ hreg:=cg.getintregister(helplist,OS_ADDR);
+ tmpref.symbol:=l;
+ tmpref.base:=NR_R15;
+ helplist.concat(taicpu.op_reg_ref(A_LDR,hreg,tmpref));
+
+ if spilltemp.index<>NR_NO then
+ internalerror(200401263);
+
+ reference_reset_base(tmpref,current_procinfo.framepointer,0,sizeof(pint));
+ tmpref.index:=hreg;
+
+ helplist.concat(spilling_create_store(tempreg,tmpref));
+
+ if getregtype(tempreg)=R_INTREGISTER then
+ ungetregisterinline(helplist,hreg);
+
+ list.insertlistafter(pos,helplist);
+ helplist.free;
+ end
+ else
+ inherited do_spill_written(list,pos,spilltemp,tempreg);
+ end;
+
+
procedure trgintcpu.add_cpu_interferences(p : tai);
var
r : tregister;
diff --git a/compiler/avr/cgcpu.pas b/compiler/avr/cgcpu.pas
index 520c5d8d65..0bf4c9af4e 100644
--- a/compiler/avr/cgcpu.pas
+++ b/compiler/avr/cgcpu.pas
@@ -110,6 +110,8 @@ unit cgcpu;
procedure a_op64_const_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;value : int64;regsrc,regdst : tregister64;setflags : boolean;var ovloc : tlocation);override;
procedure a_op64_reg_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;regsrc1,regsrc2,regdst : tregister64;setflags : boolean;var ovloc : tlocation);override;
end;
+
+ procedure create_codegen;
const
OpCmp2AsmCond : Array[topcmp] of TAsmCond = (C_NONE,C_EQ,C_GT,
@@ -829,7 +831,10 @@ unit cgcpu;
end;
-begin
- cg:=tcgavr.create;
- cg64:=tcg64favr.create;
+ procedure create_codegen;
+ begin
+ cg:=tcgavr.create;
+ cg64:=tcg64favr.create;
+ end;
+
end.
diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas
index 223443c489..1c4e3f3f55 100644
--- a/compiler/cgobj.pas
+++ b/compiler/cgobj.pas
@@ -582,6 +582,7 @@ unit cgobj;
cg64 : tcg64;
{$endif cpu64bitalu}
+ procedure destroy_codegen;
implementation
@@ -3996,16 +3997,17 @@ implementation
internalerror(2006082211);
end;
end;
-
{$endif cpu64bitalu}
-
-initialization
- ;
-finalization
- cg.free;
+ procedure destroy_codegen;
+ begin
+ cg.free;
+ cg:=nil;
{$ifndef cpu64bitalu}
- cg64.free;
+ cg64.free;
+ cg64:=nil;
{$endif cpu64bitalu}
+ end;
+
end.
diff --git a/compiler/dbgdwarf.pas b/compiler/dbgdwarf.pas
index d488cd8850..93c9e1d2c3 100644
--- a/compiler/dbgdwarf.pas
+++ b/compiler/dbgdwarf.pas
@@ -299,6 +299,7 @@ interface
procedure appendsym_property(list:TAsmList;sym:tpropertysym);override;
function symname(sym:tsym): String; virtual;
+ procedure append_visibility(vis: tvisibility);
procedure enum_membersyms_callback(p:TObject;arg:pointer);
@@ -1733,14 +1734,30 @@ implementation
cc : Tdwarf_calling_convention;
st : tsymtable;
vmtindexnr : pint;
+ incurrentunit : boolean;
begin
- if not assigned(def.procstarttai) then
+ { only write debug info for procedures defined in the current module,
+ except in case of methods (gcc-compatible)
+ }
+ st:=def.owner;
+ while not(st.symtabletype in [globalsymtable,staticsymtable]) do
+ st:=st.defowner.owner;
+ incurrentunit:=st.iscurrentunit;
+
+ if not incurrentunit and
+ (def.owner.symtabletype<>objectsymtable) then
+ exit;
+
+ { happens for init procdef of units without init section }
+ if incurrentunit and
+ not assigned(def.procstarttai) then
exit;
{ Procdefs are not handled by the regular def writing code, so
dbg_state is not set/checked for them. Do it here. }
if (def.dbg_state in [dbg_state_writing,dbg_state_written]) then
exit;
+ defnumberlist.Add(def);
{ Write methods and only in the scope of their parent objectdefs. }
if (def.owner.symtabletype=objectsymtable) then
@@ -1808,21 +1825,31 @@ implementation
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.Create_uleb128bit(vmtindexnr));
end;
+ { accessibility: public/private/protected }
+ if (def.owner.symtabletype=objectsymtable) then
+ append_visibility(def.visibility);
+
{ Return type. }
if not(is_void(tprocdef(def).returndef)) then
append_labelentry_ref(DW_AT_type,def_dwarf_lab(tprocdef(def).returndef));
- { mark end of procedure }
- current_asmdata.getlabel(procendlabel,alt_dbgtype);
- current_asmdata.asmlists[al_procedures].insertbefore(tai_label.create(procendlabel),def.procendtai);
+ { we can only write the start/end if this procedure is implemented in
+ this module
+ }
+ if incurrentunit then
+ begin
+ { mark end of procedure }
+ current_asmdata.getlabel(procendlabel,alt_dbgtype);
+ current_asmdata.asmlists[al_procedures].insertbefore(tai_label.create(procendlabel),def.procendtai);
- if (target_info.system = system_powerpc64_linux) then
- procentry := '.' + def.mangledname
- else
- procentry := def.mangledname;
+ if (target_info.system = system_powerpc64_linux) then
+ procentry := '.' + def.mangledname
+ else
+ procentry := def.mangledname;
- append_labelentry(DW_AT_low_pc,current_asmdata.RefAsmSymbol(procentry));
- append_labelentry(DW_AT_high_pc,procendlabel);
+ append_labelentry(DW_AT_low_pc,current_asmdata.RefAsmSymbol(procentry));
+ append_labelentry(DW_AT_high_pc,procendlabel);
+ end;
{ Don't write the funcretsym explicitly, it's also in the
localsymtable and/or parasymtable.
@@ -1843,14 +1870,17 @@ implementation
end;
{ local type defs and vars should not be written
inside the main proc }
- if assigned(def.localst) and
+ if incurrentunit and
+ assigned(def.localst) and
(def.localst.symtabletype=localsymtable) then
write_symtable_syms(current_asmdata.asmlists[al_dwarf_info],def.localst);
{ last write the types from this procdef }
if assigned(def.parast) then
write_symtable_defs(current_asmdata.asmlists[al_dwarf_info],def.parast);
- if assigned(def.localst) and
+ { only try to write the localst if the routine is implemented here }
+ if incurrentunit and
+ assigned(def.localst) and
(def.localst.symtabletype=localsymtable) then
begin
write_symtable_defs(current_asmdata.asmlists[al_dwarf_info],def.localst);
@@ -1999,10 +2029,17 @@ implementation
paravarsym,
localvarsym:
begin
- dreg:=dwarf_reg(sym.localloc.reference.base);
- templist.concat(tai_const.create_8bit(ord(DW_OP_breg0)+dreg));
- templist.concat(tai_const.create_sleb128bit(sym.localloc.reference.offset+offset));
- blocksize:=1+Lengthsleb128(sym.localloc.reference.offset);
+ { Happens when writing debug info for paras of procdefs not
+ implemented in the current module. Can't add a general check
+ for LOC_INVALID above, because staticvarsyms may also have it.
+ }
+ if sym.localloc.loc<> LOC_INVALID then
+ begin
+ dreg:=dwarf_reg(sym.localloc.reference.base);
+ templist.concat(tai_const.create_8bit(ord(DW_OP_breg0)+dreg));
+ templist.concat(tai_const.create_sleb128bit(sym.localloc.reference.offset+offset));
+ blocksize:=1+Lengthsleb128(sym.localloc.reference.offset);
+ end;
end
else
internalerror(200601288);
@@ -2022,7 +2059,23 @@ implementation
else
tag:=DW_TAG_variable;
- if not(sym.localloc.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_MMREGISTER,
+ { must be parasym of externally implemented procdef, but
+ the parasymtable can con also contain e.g. absolutevarsyms
+ -> check symtabletype}
+ if (sym.owner.symtabletype=parasymtable) and
+ (sym.localloc.loc=LOC_INVALID) then
+ begin
+ if (sym.owner.symtabletype<>parasymtable) then
+ internalerror(2009101001);
+ append_entry(tag,false,[
+ DW_AT_name,DW_FORM_string,name+#0
+ {
+ DW_AT_decl_file,DW_FORM_data1,0,
+ DW_AT_decl_line,DW_FORM_data1,
+ }
+ ])
+ end
+ else if not(sym.localloc.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_MMREGISTER,
LOC_CMMREGISTER,LOC_FPUREGISTER,LOC_CFPUREGISTER]) and
((sym.owner.symtabletype = globalsymtable) or
(sp_static in sym.symoptions) or
@@ -2168,6 +2221,8 @@ implementation
end;
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst)));
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_uleb128bit(fieldoffset));
+ if (sym.owner.symtabletype=objectsymtable) then
+ append_visibility(sym.visibility);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(def));
finish_entry;
@@ -2176,6 +2231,14 @@ implementation
procedure TDebugInfoDwarf.appendsym_const(list:TAsmList;sym:tconstsym);
begin
+ { These are default values of parameters. These should be encoded
+ via DW_AT_default_value, not as a separate sym. Moreover, their
+ type is not available when writing the debug info for external
+ procedures.
+ }
+ if (sym.owner.symtabletype=parasymtable) then
+ exit;
+
append_entry(DW_TAG_constant,false,[
DW_AT_name,DW_FORM_string,symname(sym)+#0
]);
@@ -2766,6 +2829,21 @@ implementation
end;
+ procedure tdebuginfodwarf.append_visibility(vis: tvisibility);
+ begin
+ case vis of
+ vis_private,
+ vis_strictprivate:
+ append_attribute(DW_AT_accessibility,DW_FORM_data1,[ord(DW_ACCESS_private)]);
+ vis_protected,
+ vis_strictprotected:
+ append_attribute(DW_AT_accessibility,DW_FORM_data1,[ord(DW_ACCESS_protected)]);
+ vis_public:
+ { default };
+ end;
+ end;
+
+
procedure TDebugInfoDwarf.insertlineinfo(list:TAsmList);
var
currfileinfo,
diff --git a/compiler/dbgstabs.pas b/compiler/dbgstabs.pas
index a6edee3f6e..318200c40d 100644
--- a/compiler/dbgstabs.pas
+++ b/compiler/dbgstabs.pas
@@ -27,7 +27,7 @@ interface
uses
cclasses,
- dbgbase,
+ dbgbase,cgbase,
symtype,symdef,symsym,symtable,symbase,
aasmtai,aasmdata;
@@ -74,6 +74,7 @@ interface
procedure method_add_stabstr(p:TObject;arg:pointer);
procedure field_write_defs(p:TObject;arg:pointer);
function get_enum_defstr(def: tenumdef; lowerbound: longint): ansistring;
+ function get_appendsym_paravar_reg(sym:tparavarsym;const typ,stabstr:string;reg: tregister): ansistring;
protected
procedure appendsym_staticvar(list:TAsmList;sym:tstaticvarsym);override;
procedure appendsym_paravar(list:TAsmList;sym:tparavarsym);override;
@@ -112,7 +113,7 @@ implementation
SysUtils,cutils,cfileutl,
systems,globals,globtype,verbose,constexp,
symconst,defutil,
- cpuinfo,cpubase,cgbase,paramgr,
+ cpuinfo,cpubase,paramgr,
aasmbase,procinfo,
finput,fmodule,ppu;
@@ -1276,12 +1277,30 @@ implementation
end;
+ function TDebugInfoStabs.get_appendsym_paravar_reg(sym:tparavarsym;const typ,stabstr:string;reg: tregister): ansistring;
+ var
+ ltyp: string[1];
+ regidx : Tregisterindex;
+ begin
+ result:='';
+ if typ='p' then
+ ltyp:='R'
+ else
+ ltyp:='a';
+ regidx:=findreg_by_number(reg);
+ { "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "eip", "ps", "cs", "ss", "ds", "es", "fs", "gs", }
+ { this is the register order for GDB}
+ if regidx<>0 then
+ result:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_RSYM},0,${line},$2',[ltyp+stabstr,tostr(longint(regstabs_table[regidx]))]);
+ end;
+
+
procedure TDebugInfoStabs.appendsym_paravar(list:TAsmList;sym:tparavarsym);
var
ss : ansistring;
+ c : string[1];
st : string;
regidx : Tregisterindex;
- c : char;
begin
ss:='';
{ set loc to LOC_REFERENCE to get somewhat usable debugging info for -Or }
@@ -1344,23 +1363,36 @@ implementation
LOC_FPUREGISTER,
LOC_CFPUREGISTER :
begin
- if c='p' then
- c:='R'
- else
- c:='a';
- st:=c+st;
- regidx:=findreg_by_number(sym.localloc.register);
- { "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "eip", "ps", "cs", "ss", "ds", "es", "fs", "gs", }
- { this is the register order for GDB}
- if regidx<>0 then
- ss:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_RSYM},0,${line},$2',[st,tostr(longint(regstabs_table[regidx]))]);
+ ss:=get_appendsym_paravar_reg(sym,c,st,sym.localloc.register);
end;
LOC_REFERENCE :
begin
- st:=c+st;
+ { When the *value* of a parameter (so not its address!) is
+ copied into a local variable, you have to generate two
+ stabs: one for the parmeter, and one for the local copy.
+ Not doing this breaks debugging under e.g. SPARC. Doc:
+ http://sourceware.org/gdb/current/onlinedocs/stabs_4.html#SEC26
+ }
+ if (c='p') and
+ not is_open_string(sym.vardef) and
+ ((sym.paraloc[calleeside].location^.loc<>sym.localloc.loc) or
+ ((sym.localloc.loc in [LOC_REFERENCE,LOC_CREFERENCE]) and
+ ((sym.paraloc[calleeside].location^.reference.index<>sym.localloc.reference.base) or
+ (sym.paraloc[calleeside].location^.reference.offset<>sym.localloc.reference.offset))) or
+ ((sym.localloc.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_MMREGISTER,LOC_CMMREGISTER,LOC_FPUREGISTER,LOC_CFPUREGISTER]) and
+ (sym.localloc.register<>sym.paraloc[calleeside].location^.register))) then
+ begin
+ if not(sym.paraloc[calleeside].location^.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
+ ss:=get_appendsym_paravar_reg(sym,c,st,sym.paraloc[calleeside].location^.register)
+ else
+ ss:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_TSYM},0,${line},$2',[c+st,tostr(sym.paraloc[calleeside].location^.reference.offset)]);
+ write_sym_stabstr(list,sym,ss);
+ { second stab has no parameter specifier }
+ c:='';
+ end;
{ offset to ebp => will not work if the framepointer is esp
so some optimizing will make things harder to debug }
- ss:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_TSYM},0,${line},$2',[st,tostr(sym.localloc.reference.offset)])
+ ss:=sym_stabstr_evaluate(sym,'"${name}:$1",${N_TSYM},0,${line},$2',[c+st,tostr(sym.localloc.reference.offset)])
end;
else
internalerror(2003091814);
diff --git a/compiler/htypechk.pas b/compiler/htypechk.pas
index e3485925eb..658f196b1c 100644
--- a/compiler/htypechk.pas
+++ b/compiler/htypechk.pas
@@ -108,9 +108,9 @@ interface
(tok:_LTE ;nod:lten;op_overloading_supported:true), { binary overloading supported }
(tok:_SYMDIF ;nod:symdifn;op_overloading_supported:true), { binary overloading supported }
(tok:_STARSTAR;nod:starstarn;op_overloading_supported:true), { binary overloading supported }
- (tok:_OP_AS ;nod:asn;op_overloading_supported:false), { binary overloading NOT supported }
- (tok:_OP_IN ;nod:inn;op_overloading_supported:false), { binary overloading NOT supported }
- (tok:_OP_IS ;nod:isn;op_overloading_supported:false), { binary overloading NOT supported }
+ (tok:_OP_AS ;nod:asn;op_overloading_supported:false), { binary overloading NOT supported }
+ (tok:_OP_IN ;nod:inn;op_overloading_supported:false), { binary overloading NOT supported }
+ (tok:_OP_IS ;nod:isn;op_overloading_supported:false), { binary overloading NOT supported }
(tok:_OP_OR ;nod:orn;op_overloading_supported:true), { binary overloading supported }
(tok:_OP_AND ;nod:andn;op_overloading_supported:true), { binary overloading supported }
(tok:_OP_DIV ;nod:divn;op_overloading_supported:true), { binary overloading supported }
@@ -120,7 +120,7 @@ interface
(tok:_OP_SHR ;nod:shrn;op_overloading_supported:true), { binary overloading supported }
(tok:_OP_XOR ;nod:xorn;op_overloading_supported:true), { binary overloading supported }
(tok:_ASSIGNMENT;nod:assignn;op_overloading_supported:true), { unary overloading supported }
- (tok:_UNEQUAL ;nod:unequaln;op_overloading_supported:false) { binary overloading NOT supported overload = instead }
+ (tok:_UNEQUAL ;nod:unequaln;op_overloading_supported:false) { binary overloading NOT supported overload = instead }
);
{ true, if we are parsing stuff which allows array constructors }
@@ -160,7 +160,7 @@ interface
function allowenumop(nt:tnodetype):boolean;
- procedure check_hints(const srsym: tsym; const symoptions: tsymoptions);
+ procedure check_hints(const srsym: tsym; const symoptions: tsymoptions; const deprecatedmsg : pshortstring);
procedure check_ranges(const location: tfileposinfo; source: tnode; destdef: tdef);
@@ -422,6 +422,13 @@ implementation
(tstringdef(pf.returndef).len=255));
end
else
+ { enumerator is a special case too }
+ if optoken=_OP_ENUMERATOR then
+ begin
+ result:=
+ is_class_or_interface_or_object(pf.returndef);
+ end
+ else
begin
for i:=1 to tok2nodes do
if tok2node[i].tok=optoken then
@@ -2605,16 +2612,21 @@ implementation
end;
- procedure check_hints(const srsym: tsym; const symoptions: tsymoptions);
+ procedure check_hints(const srsym: tsym; const symoptions: tsymoptions; const deprecatedmsg : pshortstring);
begin
if not assigned(srsym) then
internalerror(200602051);
if sp_hint_deprecated in symoptions then
- Message1(sym_w_deprecated_symbol,srsym.realname);
+ if (sp_has_deprecated_msg in symoptions) and (deprecatedmsg <> nil) then
+ Message2(sym_w_deprecated_symbol_with_msg,srsym.realname,deprecatedmsg^)
+ else
+ Message1(sym_w_deprecated_symbol,srsym.realname);
if sp_hint_experimental in symoptions then
Message1(sym_w_experimental_symbol,srsym.realname);
if sp_hint_platform in symoptions then
Message1(sym_w_non_portable_symbol,srsym.realname);
+ if sp_hint_library in symoptions then
+ Message1(sym_w_library_symbol,srsym.realname);
if sp_hint_unimplemented in symoptions then
Message1(sym_w_non_implemented_symbol,srsym.realname);
end;
diff --git a/compiler/i386/cgcpu.pas b/compiler/i386/cgcpu.pas
index b0ddf4d1d0..683f31b39e 100644
--- a/compiler/i386/cgcpu.pas
+++ b/compiler/i386/cgcpu.pas
@@ -63,6 +63,8 @@ unit cgcpu;
private
procedure get_64bit_ops(op:TOpCG;var op1,op2:TAsmOp);
end;
+
+ procedure create_codegen;
implementation
@@ -851,7 +853,10 @@ unit cgcpu;
end;
end;
-begin
- cg := tcg386.create;
- cg64 := tcg64f386.create;
+ procedure create_codegen;
+ begin
+ cg := tcg386.create;
+ cg64 := tcg64f386.create;
+ end;
+
end.
diff --git a/compiler/m68k/cgcpu.pas b/compiler/m68k/cgcpu.pas
index 260e55921d..8ddb72da4b 100644
--- a/compiler/m68k/cgcpu.pas
+++ b/compiler/m68k/cgcpu.pas
@@ -130,6 +130,7 @@ unit cgcpu;
S_FS,S_FD,S_FX,S_NO,S_NO,
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO);
+ procedure create_codegen;
implementation
@@ -1738,8 +1739,12 @@ unit cgcpu;
end;
end; { end case }
end;
+
+
+procedure create_codegen;
+ begin
+ cg := tcg68k.create;
+ cg64 :=tcg64f68k.create;
+ end;
-begin
- cg := tcg68k.create;
- cg64 :=tcg64f68k.create;
end.
diff --git a/compiler/msg/errord.msg b/compiler/msg/errord.msg
index 4a65443821..90d302986a 100644
--- a/compiler/msg/errord.msg
+++ b/compiler/msg/errord.msg
@@ -3,7 +3,7 @@
# Latest updates contributed by Karl-Michael Schindler aka mischi
# <karl-michael.schindler at web.de>
#
-# Based on errore.msg of SVN revision 13334
+# Based on errore.msg of SVN revision 14001
#
# This file is part of the Free Pascal Compiler
# Copyright (c) 1998-2009 by the Free Pascal Development team
@@ -370,7 +370,7 @@ scan_w_multiple_main_name_overrides=02086_W_Der Name der "main" Prozedur wird me
#
# Parser
#
-# 03252 is the last used one
+# 03258 is the last used one
#
% \section{Parser messages}
% This section lists all parser messages. The parser takes care of the
@@ -1194,11 +1194,25 @@ parser_e_no_local_para_def=03252_E_Parameter k”nnen keine lokalen Typdeklaration
% refer to the same type definition in the procedure headers of the interface and implementation of a unit
% (both procedure headers would define a separate type). Keep in mind that expressions such as
% ``file of byte'' or ``string[50]'' also define a new type.
+parser_e_abstract_and_sealed_conflict=03253_E_Konflikt zwischen ABSTRACT und SEALED
+% ABSTRACT and SEALED can not be used together in one declaration
+parser_e_sealed_descendant=03254_E_Kann keinen Nachfahren der SEALED Klasse "$1" erzeugen
+% Sealed means that class can not be derived by another class.
+parser_e_sealed_class_cannot_have_abstract_methods=03255_E_Eine SEALED Klasse kann keine ABSTRACT Methode haben
+% Sealed means that class cannot be derived. Therefore no one class is able to override an abstract method in a sealed class.
+parser_e_only_virtual_methods_final=03256_E_Nur virtuelle Methoden k”nnen final sein.
+% You are declaring a method as final, when it is not declared to be
+% virtual.
+parser_e_final_can_no_be_overridden=03257_E_Die finale Methode kann nicht berschrieben werden: "$1"
+% You are trying to \var{override} a virtual method of a parent class that does
+% not exist.
+parser_e_multiple_messages=03258_E_Pro Methode kann nur eine Nachricht verwendet werden.
+% It is not possible to associate multiple messages with a single method.
% \end{description}
#
# Type Checking
#
-# 04087 is the last used one
+# 04090 is the last used one
#
% \section{Type checking errors}
% This section lists all errors that can occur when type checking is
@@ -1273,7 +1287,7 @@ type_w_convert_real_2_comp=04014_W_Automatische Typumwandlung von Fliesskommatyp
type_h_use_div_for_int=04015_H_Verwenden sie DIV um ein Integer-Ergebnis zu erhalten
% When hints are on, then an integer division with the '/' operator will
% produce this message, because the result will then be of type real.
-type_e_strict_var_string_violation=04016_E_Stringtypen passen nicht zueinander, da in "$V+"-Modus
+type_e_strict_var_string_violation=04016_E_Stringtypen mssen im "$V+"-Modus exakt bereinstimmen
% When compiling in \var{\{\$V+\}} mode, the string you pass as a parameter
% should be of the exact same type as the declared parameter of the procedure.
type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_Succ oder Pred kann nicht auf Aufz„hlungen mit Zuweisungen angewendet werden
@@ -1496,11 +1510,17 @@ type_e_no_type_info=04087_E_Fr diesen Typ steht keine Typ-Information zu Verfg
% Type information is not generated for some types, such as enumerations with gaps
% in their value range (this includes enumerations whose lower bound is different
% from zero).
+type_e_ordinal_or_string_expr_expected=04088_E_Ausdruck mit ordinalem Typ oder Zeichenkette erwartet
+% The expression must be an ordinal or string type.
+type_e_string_expr_expected=04089_E_Ausdruck mit Zeichenkette erwartet
+% The expression must be a string type.
+type_w_zero_to_nil=04090_W_Konvertiere 0 zu NIL
+% Use NIL rather than 0 when initialising a pointer.
% \end{description}
#
# Symtable
#
-# 05064 is the last used one
+# 05066 is the last used one
#
% \section{Symbol handling}
% This section lists all the messages that concern the handling of symbols.
@@ -1671,6 +1691,15 @@ sym_w_experimental_symbol=05063_W_Symbol "$1" ist experimentell
sym_w_forward_not_resolved=05064_W_Forward Deklaration "$1" wird nicht aufgel”st und deshalb als extern angenommen
% This happens if you declare a function in the \var{interface} of a unit in macpas mode,
% but do not implement it.
+sym_w_library_symbol=05065_W_Symbol "$1" geh”rt zu einer Bibliothek
+% This means that a symbol (a variable, routine, etc...) which is
+% declared as \var{library} is used. Library symbols may not be
+% available in other libraries.
+sym_w_deprecated_symbol_with_msg=05066_W_Symbol "$1" ist veraltet: "$2"
+% This means that a symbol (a variable, routine, etc...) which is
+% declared as \var{deprecated} is used. Deprecated symbols may no longer
+% be available in newer versions of the unit / library. Use of this symbol
+% should be avoided as much as possible.
% \end{description}
#
# Codegenerator
@@ -2057,7 +2086,7 @@ asmr_e_need_pic_ref=07107_E_Erzeuge eigentlich PIC, aber die Referenz ist nicht
#
# Assembler/binary writers
#
-# 08020 is the last used one
+# 08021 is the last used one
#
asmw_f_too_many_asm_files=08000_F_Zu viele Assembler-Dateien
% With smartlinking enabled, there are too many assembler
@@ -2211,7 +2240,7 @@ execinfo_x_stackcommit=09134_X_Stack Bereich "committed": $1 Bytes
#
# Internal linker messages
#
-# 09200 is the last used one
+# 09201 is the last used one
#
# BeginOfTeX
% \section{Linker messages}
@@ -2432,7 +2461,7 @@ unit_e_different_wpo_file=10061_E_Unit $1 wurde mit einer anderen Feedback-Einga
#
# Options
#
-# 11046 is the last used one
+# 11047 is the last used one
#
option_usage=11000_O_$1 [Optionen] <Eingabedatei> [Optionen]
# BeginOfTeX
@@ -2546,14 +2575,16 @@ option_else_without_if=11043_F_Zur \var{\#ELSE} Direktive in Zeile $2 der Option
option_unsupported_target=11044_F_Die Option "$1" wird auf der Zielplattform nicht oder noch nicht untersttzt
% Not all options are supported or implemented for all target platforms. This message informs you that a chosen
% option is incompatible with the currently selected target platform.
-%\end{description}
option_unsupported_target_for_feature=11045_F_Das Feature "$1" wird fr die ausgew„hlte Zielplattform nicht oder noch nicht untersttzt
% Not all features are supported or implemented for all target platforms. This message informs you that a chosen
% feature is incompatible with the currently selected target platform.
option_dwarf_smart_linking=11046_N_DWARF Debug-Information kann auf dieser Zielplattform nicht zusammen mit Smartlinking benutzt werden, es wird auf statisches Linken umgeschaltet
% Smart linking is currently incompatble with DWARF debug information on most
% platforms, so smart linking is disabled in such cases.
-
+option_ignored_target=11047_W_Option "$1" wird fr die ausgew„hlte Zielplattform ignoriert
+% Not all options are supported or implemented for all target platforms. This message informs you that a chosen
+% option is ignored for the currently selected target platform.
+%\end{description}
# EndOfTeX
#
diff --git a/compiler/msg/errordu.msg b/compiler/msg/errordu.msg
index ec7516a7a2..683a0ee6da 100644
--- a/compiler/msg/errordu.msg
+++ b/compiler/msg/errordu.msg
@@ -3,7 +3,7 @@
# Latest updates contributed by Karl-Michael Schindler aka mischi
# <karl-michael.schindler at web.de>
#
-# Based on errore.msg of SVN revision 13334
+# Based on errore.msg of SVN revision 14001
#
# This file is part of the Free Pascal Compiler
# Copyright (c) 1998-2009 by the Free Pascal Development team
@@ -370,7 +370,7 @@ scan_w_multiple_main_name_overrides=02086_W_Der Name der "main" Prozedur wird me
#
# Parser
#
-# 03252 is the last used one
+# 03258 is the last used one
#
% \section{Parser messages}
% This section lists all parser messages. The parser takes care of the
@@ -1194,11 +1194,25 @@ parser_e_no_local_para_def=03252_E_Parameter können keine lokalen Typdeklaratio
% refer to the same type definition in the procedure headers of the interface and implementation of a unit
% (both procedure headers would define a separate type). Keep in mind that expressions such as
% ``file of byte'' or ``string[50]'' also define a new type.
+parser_e_abstract_and_sealed_conflict=03253_E_Konflikt zwischen ABSTRACT und SEALED
+% ABSTRACT and SEALED can not be used together in one declaration
+parser_e_sealed_descendant=03254_E_Kann keinen Nachfahren der SEALED Klasse "$1" erzeugen
+% Sealed means that class can not be derived by another class.
+parser_e_sealed_class_cannot_have_abstract_methods=03255_E_Eine SEALED Klasse kann keine ABSTRACT Methode haben
+% Sealed means that class cannot be derived. Therefore no one class is able to override an abstract method in a sealed class.
+parser_e_only_virtual_methods_final=03256_E_Nur virtuelle Methoden können final sein.
+% You are declaring a method as final, when it is not declared to be
+% virtual.
+parser_e_final_can_no_be_overridden=03257_E_Die finale Methode kann nicht überschrieben werden: "$1"
+% You are trying to \var{override} a virtual method of a parent class that does
+% not exist.
+parser_e_multiple_messages=03258_E_Pro Methode kann nur eine Nachricht verwendet werden.
+% It is not possible to associate multiple messages with a single method.
% \end{description}
#
# Type Checking
#
-# 04087 is the last used one
+# 04090 is the last used one
#
% \section{Type checking errors}
% This section lists all errors that can occur when type checking is
@@ -1273,7 +1287,7 @@ type_w_convert_real_2_comp=04014_W_Automatische Typumwandlung von Fliesskommatyp
type_h_use_div_for_int=04015_H_Verwenden sie DIV um ein Integer-Ergebnis zu erhalten
% When hints are on, then an integer division with the '/' operator will
% produce this message, because the result will then be of type real.
-type_e_strict_var_string_violation=04016_E_Stringtypen passen nicht zueinander, da in "$V+"-Modus
+type_e_strict_var_string_violation=04016_E_Stringtypen müssen im "$V+"-Modus exakt übereinstimmen
% When compiling in \var{\{\$V+\}} mode, the string you pass as a parameter
% should be of the exact same type as the declared parameter of the procedure.
type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_Succ oder Pred kann nicht auf Aufzählungen mit Zuweisungen angewendet werden
@@ -1496,11 +1510,17 @@ type_e_no_type_info=04087_E_Für diesen Typ steht keine Typ-Information zu VerfÃ
% Type information is not generated for some types, such as enumerations with gaps
% in their value range (this includes enumerations whose lower bound is different
% from zero).
+type_e_ordinal_or_string_expr_expected=04088_E_Ausdruck mit ordinalem Typ oder Zeichenkette erwartet
+% The expression must be an ordinal or string type.
+type_e_string_expr_expected=04089_E_Ausdruck mit Zeichenkette erwartet
+% The expression must be a string type.
+type_w_zero_to_nil=04090_W_Konvertiere 0 zu NIL
+% Use NIL rather than 0 when initialising a pointer.
% \end{description}
#
# Symtable
#
-# 05064 is the last used one
+# 05066 is the last used one
#
% \section{Symbol handling}
% This section lists all the messages that concern the handling of symbols.
@@ -1671,6 +1691,15 @@ sym_w_experimental_symbol=05063_W_Symbol "$1" ist experimentell
sym_w_forward_not_resolved=05064_W_Forward Deklaration "$1" wird nicht aufgelöst und deshalb als extern angenommen
% This happens if you declare a function in the \var{interface} of a unit in macpas mode,
% but do not implement it.
+sym_w_library_symbol=05065_W_Symbol "$1" gehört zu einer Bibliothek
+% This means that a symbol (a variable, routine, etc...) which is
+% declared as \var{library} is used. Library symbols may not be
+% available in other libraries.
+sym_w_deprecated_symbol_with_msg=05066_W_Symbol "$1" ist veraltet: "$2"
+% This means that a symbol (a variable, routine, etc...) which is
+% declared as \var{deprecated} is used. Deprecated symbols may no longer
+% be available in newer versions of the unit / library. Use of this symbol
+% should be avoided as much as possible.
% \end{description}
#
# Codegenerator
@@ -2057,7 +2086,7 @@ asmr_e_need_pic_ref=07107_E_Erzeuge eigentlich PIC, aber die Referenz ist nicht
#
# Assembler/binary writers
#
-# 08020 is the last used one
+# 08021 is the last used one
#
asmw_f_too_many_asm_files=08000_F_Zu viele Assembler-Dateien
% With smartlinking enabled, there are too many assembler
@@ -2211,7 +2240,7 @@ execinfo_x_stackcommit=09134_X_Stack Bereich "committed": $1 Bytes
#
# Internal linker messages
#
-# 09200 is the last used one
+# 09201 is the last used one
#
# BeginOfTeX
% \section{Linker messages}
@@ -2422,17 +2451,17 @@ unit_u_skipping_reresolving_unit=10059_U_Erneutes Resolving der Unit $1 wird üb
unit_u_unload_resunit=10060_U_Entlade die Resource-Unit $1 (wird nicht benötigt)
% When you use the \var{-vu} flag, the compiler warns that it is unloading the
% resource handling unit, since no resources are used.
-% \end{description}
unit_e_different_wpo_file=10061_E_Unit $1 wurde mit einer anderen Feedback-Eingabe ($2, $3) für die Gesamtprogramm-Optimierung (wpo) übersetzt. Bitte erneut ohne wpo oder mit der gleichen wpo-Feedback-Eingabe-Datei übersetzen
% When a unit has been compiled using a particular whole program optimization (wpo) feedback file (\var{-FW<x>} \var{-OW<x>}),
% this compiled version of the unit is specialised for that particular compilation scenario and cannot be used in
% any other context. It has to be recompiled before you can use it in another program or with another wpo feedback input file.
+% \end{description}
# EndOfTeX
#
# Options
#
-# 11046 is the last used one
+# 11047 is the last used one
#
option_usage=11000_O_$1 [Optionen] <Eingabedatei> [Optionen]
# BeginOfTeX
@@ -2552,7 +2581,9 @@ option_unsupported_target_for_feature=11045_F_Das Feature "$1" wird für die aus
option_dwarf_smart_linking=11046_N_DWARF Debug-Information kann auf dieser Zielplattform nicht zusammen mit Smartlinking benutzt werden, es wird auf statisches Linken umgeschaltet
% Smart linking is currently incompatble with DWARF debug information on most
% platforms, so smart linking is disabled in such cases.
-
+option_ignored_target=11047_W_Option "$1" wird für die ausgewählte Zielplattform ignoriert
+% Not all options are supported or implemented for all target platforms. This message informs you that a chosen
+% option is ignored for the currently selected target platform.
%\end{description}
# EndOfTeX
diff --git a/compiler/msg/errore.msg b/compiler/msg/errore.msg
index dcc49a88a5..57310f3864 100644
--- a/compiler/msg/errore.msg
+++ b/compiler/msg/errore.msg
@@ -366,7 +366,7 @@ scan_w_multiple_main_name_overrides=02086_W_Overriding name of "main" procedure
#
# Parser
#
-# 03263 is the last used one
+# 03275 is the last used one
#
% \section{Parser messages}
% This section lists all parser messages. The parser takes care of the
@@ -1189,55 +1189,80 @@ parser_e_no_local_para_def=03252_E_Parameters cannot contain local type definiti
% refer to the same type definition in the procedure headers of the interface and implementation of a unit
% (both procedure headers would define a separate type). Keep in mind that expressions such as
% ``file of byte'' or ``string[50]'' also define a new type.
-parser_e_objc_requires_msgstr=03253_E_Objective-C messages require their Objective-C selector name to be specified using the "message" directive.
+parser_e_abstract_and_sealed_conflict=03253_E_ABSTRACT and SEALED conflict
+% ABSTRACT and SEALED can not be used together in one declaration
+parser_e_sealed_descendant=03254_E_Can not create a descendant of the sealed class "$1"
+% Sealed means that class can not be derived by another class.
+parser_e_sealed_class_cannot_have_abstract_methods=03255_E_SEALED class can not have an ABSTRACT method
+% Sealed means that class cannot be derived. Therefore no one class is able to override an abstract method in a sealed class.
+parser_e_only_virtual_methods_final=03256_E_Only virtual methods can be final
+% You are declaring a method as final, when it is not declared to be
+% virtual.
+parser_e_final_can_no_be_overridden=03257_E_Final method can not be overridden: "$1"
+% You are trying to \var{override} a virtual method of a parent class that does
+% not exist.
+parser_e_multiple_messages=03258_E_Only one message can be used per method.
+% It is not possible to associate multiple messages with a single method.
+parser_e_invalid_enumerator_identifier=03259_E_Invalid enumerator identifier: "$1"
+% Only "MoveNext" and "Current" enumerator identifiers are supported.
+parser_e_enumerator_identifier_required=03260_E_Enumerator identifier required
+% "MoveNext" or "Current" identifier must follow the \var{enumerator} modifier.
+parser_e_enumerator_movenext_is_not_valid=03261_E_Enumerator MoveNext pattern method is not valid. Method must be a function with the Boolean return type and no required arguments.
+% "MoveNext" enumerator pattern method must be a function with Boolean return type and no required arguments
+parser_e_enumerator_current_is_not_valid=03262_E_Enumerator Current pattern property is not valid. Property must have a getter.
+% "Current" enumerator pattern property must have a getter
+parser_e_only_one_enumerator_movenext=03263_E_Only one enumerator MoveNext method is allowed per class/object
+% Class or Object can have only one enumerator MoveNext declaration.
+parser_e_only_one_enumerator_current=03264_E_Only one enumerator Current property is allowed per class/object
+% Class or Object can have only one enumerator Current declaration.
+parser_e_objc_requires_msgstr=03265_E_Objective-C messages require their Objective-C selector name to be specified using the "message" directive.
% Objective-C messages require their Objective-C name (selector name) to be specified using the \var{message `someName:'} procedure directive.
% While bindings to other languages automatically generate such names based on the identifier you use (by replacing
% all underscores with colons), this is unsafe since nothing prevents an Objective-C method name to contain actual
% colons.
-parser_e_objc_no_constructor_destructor=03254_E_Objective-C does not have formal constructors nor destructors. Use the alloc, initXXX and dealloc messages.
+parser_e_objc_no_constructor_destructor=03266_E_Objective-C does not have formal constructors nor destructors. Use the alloc, initXXX and dealloc messages.
% The Objective-C language does not have any constructors or destructors. While there are some messages with a similar
% purpose (such as \var{init} and \var{dealloc}), these cannot be identified using automatic parsers and do not
% guarantee anything like Pascal constructors/destructors (e.g., you have to take care of only calling ``designated''
% inherited ``constructors''). For these reasons, we have opted to follow the standard Objective-C patterns for
% instance creation/destruction.
-parser_e_message_string_too_long=03255_E_Message name is too long (max. 255 characters)
+parser_e_message_string_too_long=03267_E_Message name is too long (max. 255 characters)
% Due to compiler implementation reasons, message names are currently limited to 255 characters.
-parser_e_objc_message_name_too_long=03256_E_Objective-C message symbol name for "$1" is too long
+parser_e_objc_message_name_too_long=03268_E_Objective-C message symbol name for "$1" is too long
% Due to compiler implementation reasons, mangled message names (i.e., the symbol names used in the assembler
% code) are currently limited to 255 characters.
-parser_h_no_objc_parent=03257_H_Defining a new Objective-C root class. To derive from another root class (e.g., NSObject), specify it as the parent class.
+parser_h_no_objc_parent=03269_H_Defining a new Objective-C root class. To derive from another root class (e.g., NSObject), specify it as the parent class.
% If no parent class is specified for an Object Pascal class, then it automatically derives from TObject.
% Objective-C classes however do not automatically derive from NSObject, because one can have multiple
% root classes in Objective-C. For example, in the Cocoa framework both NSObject and NSProxy are root classes.
% Therefore, you have to explicitly define a parent class (such as NSObject) if you want to derive your
% Objective-C class from it.
-parser_e_no_objc_published=03258_E_Objective-C classes cannot have published sections.
+parser_e_no_objc_published=03270_E_Objective-C classes cannot have published sections.
% In Object Pascal, ``published'' determines whether or not RTTI is generated. Since the Objective-C runtime always needs
% RTTI for everything, this specified does not make sense for Objective-C classes.
-parser_f_need_objc=03259_F_This module requires an Objective-C mode switch to be compiled
+parser_f_need_objc=03271_F_This module requires an Objective-C mode switch to be compiled
% This error indicates the use of Objective-C language features without an Objective-C mode switch
% active. Enable one via the -M command line switch, or the {\$modeswitch x} directive.
-parser_e_must_use_override_objc=03260_E_Inherited methods can only be overridden in Objective-C, add ``override''.
-parser_h_should_use_override_objc=03261_H_Inherited methods can only be overridden in Objective-C, add ``override''.
+parser_e_must_use_override_objc=03272_E_Inherited methods can only be overridden in Objective-C, add ``override''.
+parser_h_should_use_override_objc=03273_H_Inherited methods can only be overridden in Objective-C, add ``override''.
% It is not possible to ``reintroduce'' methods in Objective-C like in Object Pascal. Methods with the same
% name always map to the same virtual method entry. In order to make this clear in the source code,
% the compiler always requires the ``override'' directive to be specified when implementing overriding
% Objective-C methods in Pascal. If the implementation is external, this rule is relaxed because Objective-C
% does not have any ``override''-style keyword (since it's the default and only behaviour in that language),
% which makes it hard for automated header conversion tools to include it everywhere.
-parser_e_objc_message_name_changed=03262_E_Message name "$1" in inherited class is different from message name "$2" in current class.
+parser_e_objc_message_name_changed=03274_E_Message name "$1" in inherited class is different from message name "$2" in current class.
% An overriding Objective-C method cannot have a different message name than an inherited method. The reason
% is that these message names uniquely define the message to the Objective-C runtime, which means that
% giving them a different message name breaks the ``override'' semantics.
-parser_e_no_objc_unique=03263_E_It is not yet possible to make unique copies of Objective-C types
+parser_e_no_objc_unique=03275_E_It is not yet possible to make unique copies of Objective-C types
% Duplicating an Objective-C type using \var{type x = type y;} is not yet supported. You may be able to
% obtain the desired effect using \var{type x = objcclass(y) end;} instead.
-%\end{description}
-
+% \end{description}
#
# Type Checking
#
-# 04091 is the last used one
+# 04093 is the last used one
#
% \section{Type checking errors}
% This section lists all errors that can occur when type checking is
@@ -1312,7 +1337,7 @@ type_w_convert_real_2_comp=04014_W_Automatic type conversion from floating type
type_h_use_div_for_int=04015_H_use DIV instead to get an integer result
% When hints are on, then an integer division with the '/' operator will
% produce this message, because the result will then be of type real.
-type_e_strict_var_string_violation=04016_E_string types doesn't match, because of $V+ mode
+type_e_strict_var_string_violation=04016_E_String types have to match exactly in $V+ mode
% When compiling in \var{\{\$V+\}} mode, the string you pass as a parameter
% should be of the exact same type as the declared parameter of the procedure.
type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_succ or pred on enums with assignments not possible
@@ -1539,16 +1564,18 @@ type_e_ordinal_or_string_expr_expected=04088_E_Ordinal or string expression expe
% The expression must be an ordinal or string type.
type_e_string_expr_expected=04089_E_String expression expected
% The expression must be a string type.
-type_e_protocol_type_expected=04090_E_Objective-C protocol type expected, but got "$1"
+type_w_zero_to_nil=04090_W_Converting 0 to NIL
+% Use NIL rather than 0 when initialising a pointer.
+type_e_protocol_type_expected=04091_E_Objective-C protocol type expected, but got "$1"
% The compiler expected a protocol type name, but found something else.
-type_e_objc_type_unsupported=04091_E_The type "$1" is not supported for interaction with the Objective-C runtime.
+type_e_objc_type_unsupported=04092_E_The type "$1" is not supported for interaction with the Objective-C runtime.
% Objective-C makes extensive use of run time type information (RTTI). This format
% is defined by the maintainers of the run time and can therefore not be adapted
% to all possible Object Pascal types. In particular, types that depend on
% reference counting by the compiler (such as ansistrings and certain kinds of
% interfaces) cannot be used as fields of Objective-C classes, cannot be
% directly passed to Objective-C methods, and cannot be encoded using \var{objc_encode}.
-type_e_class_or_objcclass_type_expected=04092_E_Class or objcclass type expected, but got "$1"
+type_e_class_or_objcclass_type_expected=04093_E_Class or objcclass type expected, but got "$1"
% It is only possible to create class reference types of \var{class} and
% \var{objcclass} types
%
@@ -1556,7 +1583,7 @@ type_e_class_or_objcclass_type_expected=04092_E_Class or objcclass type expected
#
# Symtable
#
-# 05064 is the last used one
+# 05070 is the last used one
#
% \section{Symbol handling}
% This section lists all the messages that concern the handling of symbols.
@@ -1727,7 +1754,26 @@ sym_w_experimental_symbol=05063_W_Symbol "$1" is experimental
sym_w_forward_not_resolved=05064_W_Forward declaration "$1" not resolved, assumed external
% This happens if you declare a function in the \var{interface} of a unit in macpas mode,
% but do not implement it.
-sym_e_objc_para_mismatch=05065_E_Mismatch between number of declared parameters and number of colons in message string.
+sym_w_library_symbol=05065_W_Symbol "$1" is belongs to a library
+% This means that a symbol (a variable, routine, etc...) which is
+% declared as \var{library} is used. Library symbols may not be
+% available in other libraries.
+sym_w_deprecated_symbol_with_msg=05066_W_Symbol "$1" is deprecated: "$2"
+% This means that a symbol (a variable, routine, etc...) which is
+% declared as \var{deprecated} is used. Deprecated symbols may no longer
+% be available in newer versions of the unit / library. Use of this symbol
+% should be avoided as much as possible.
+sym_e_no_enumerator=05067_E_Can not find an enumerator for the type "$1"
+% This means that compiler can not find an apropriate enumerator to use in the for-in loop.
+% To create an enumerator you need to defind an operator enumerator or add a public or published
+% GetEnumerator method to the class or object definition.
+sym_e_no_enumerator_move=05068_E_Can not find a "MoveNext" method in enumerator "$1"
+% This means that compiler can not find a public MoveNext method with the Boolean return type in
+% the enumerator class or object definition.
+sym_e_no_enumerator_current=05069_E_Can not find a "Current" property in enumerator "$1"
+% This means that compiler can not find a public Current property in the enumerator class or object
+% definition.
+sym_e_objc_para_mismatch=05070_E_Mismatch between number of declared parameters and number of colons in message string.
% In Objective-C, a message name automatically contains as many colons as parameters.
% In order to prevent mistakes when specifying the message name in FPC, the compiler
% checks whether this is also the case here. Note that in case of messages taking a
diff --git a/compiler/msg/errorr.msg b/compiler/msg/errorr.msg
index 87d1f90694..e57bde1016 100644
--- a/compiler/msg/errorr.msg
+++ b/compiler/msg/errorr.msg
@@ -1,31 +1,33 @@
#
-# $Id: errorr.msg 1.21 2002/01/21 00:00:02 Michail A.Baikov (xakep@gamedot.ru)
-# â®â ä ©« - ç áâì ¯à®£à ¬¬­®£® ¯à®¤ãªâ  Free Pascal Compiler
-# Copyright (c) 1999-2002 by Free Pascal Development Team
+# This file is part of the Free Pascal Compiler
+# Copyright (c) 1999-2009 by the Free Pascal Development team
#
-# yá᪨© ä ©« (MSDOS CP) á®®¡é¥­¨© ¤«ï Free Pascal Compiler
+# Russian (utf-8) Language File for Free Pascal
#
-# ‘¬. ä ©« COPYING.FPC, ¢ª«î祭­ë© ¢ íây ¯®áâ ¢ªy,
-# ¯® ¢á¥¬ ¢®¯à®á ¬ ®â­®á¨â¥«ì­®  ¢â®à᪮£® ¯à ¢ .
+# This file corresponds to SVN revision 13665 of errore.msg
+# Translated by Sergei Gorelkin <sergei_gorelkin at mail.ru>
#
-# â  ¯à®£à ¬¬  à á¯à®áâp ­ï¥âáï á ­ ¤¥¦¤®©, çâ® ®­  ¡ã¤¥â ª®¬y-­¨¡ã¤ì
-# ¯®«¥§­ , ­® …‡ ‚‘ŸŠŽ‰ ƒ€€’ˆˆ! Œë ­¥ £ à ­â¨à㥬, çâ® ¯à®£à ¬¬  ¤ ¦¥
-# ᮮ⢥âáâ¢ã¥â ᢮¥© 楫¨!
+# See the file COPYING.FPC, included in this distribution,
+# for details about the copyright.
#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
-# Š®­áâ ­âë - ®¡®§­ ç¥­¨ï, ¯¨èãâáï ¢ á«¥¤yî饬 ¢¨¤¥:
+#
+# Š®­áâ ­âë § ¯¨á뢠îâáï ¢ á«¥¤yî饬 ¢¨¤¥:
# <part>_<type>_<txtidentifier>
#
-# <part> íâ® â  ç áâì ª®¬¯¨«ïâ®à , ª®â®à ï á®®¡é ¥â ®¡ ®è¨¡ª¥:
-# asmr_ ᨭ⠪á¨ç¥áª¨©  ­ «¨§  áᥬ¡«¥à  (ç⥭¨¥  áᥬ¡«¥à )
-# asmw_ ᨭ⠪á¨ç¥áª¨©  ­ «¨§  áᥬ¡«¥à  (§ ¯¨áì ®¡ì¥ªâ­ëå ä ©«®¢)
-
-# unit_ ®¡à ¡®âª  ¬®¤ã«ï
+# <part> - ç áâì ª®¬¯¨«ïâ®à , ¢ ª®â®à®© ¨á¯®«ì§ã¥âáï á®®¡é¥­¨¥:
+# asmr_ ç⥭¨¥  áᥬ¡«¥à 
+# asmw_ § ¯¨áì  áᥬ¡«¥à /®¡ì¥ªâ­ëå ä ©«®¢
+# unit_ ®¡à ¡®âª  ¬®¤ã«¥©
# scan_ ᪠­¥à
-# parser_ ᨭ⠪á¨ç¥áª¨©  ­ «¨§ â®à
+# parser_ ᥬ ­â¨ç¥áª¨©  ­ «¨§ â®à
# type_ ª®­â஫ì ᮮ⢥âá⢨ï ⨯®¢
# general_ ®¡é ï ¨­ä®à¬ æ¨ï
-# exec_ ¢ë§®¢ë  áᥬ¡«¥à , ª®¬¯®­®¢é¨ª , । ªâ®à 
+# exec_ ¢ë§®¢ë ¢­¥è­¨å ¯à®£à ¬¬ ( áᥬ¡«¥à , ª®¬¯®­®¢é¨ª  ¨ â.¤.)
+# link_ ¢­ãâ७­¨© ª®¬¯®­®¢é¨ª
#
# <type> ⨯ á®®¡é¥­¨ï:
# f_ ä â «ì­ ï ®è¨¡ª 
@@ -34,457 +36,464 @@
# n_ ¯à¨¬¥ç ­¨¥
# h_ ¯®¤áª §ª 
# i_ ¨­ä®à¬ æ¨ï
-# l_ ­®¬¥p áâp®ª¨
+# l_ ¤®¡ ¢«ï¥âáï ­®¬¥p áâp®ª¨
# u_ ¨á¯®«ì§®¢ ­¨¥
# t_ ¯®¯ë⪠ ¨á¯®«ì§®¢ âì
-# m_ ¬ ªà®ª®¬ ­¤ 
-# p_ ¯à®æ¥¤ãà 
# c_ ãá«®¢­®¥ ¢ëà ¦¥­¨¥
-# d_ á®®¡é¥­¨¥ ¤«ï ®â« ¤ª¨
-# b_ ®â®¡à ¦ ¥â ¯¥à¥£à㦥­­ë¥ ¯à®æ¥¤ãàë ¨ ä㭪樨
-# x_ ¨­ä®à¬ æ¨ï ¤«ï ¨á¯®«­ï¥¬ëå ä ©«®¢
+# d_ ®â« ¤®ç­®¥ á®®¡é¥­¨¥
+# x_ ¨­ä®à¬ æ¨ï ® ¨á¯®«­ï¥¬ëå ä ©« å
+# o_ ®¡ëç­ë¥ ("­ ¦¬¨â¥ «î¡ãî ª« ¢¨èã")
#
#
-# ޡ饥
+# General
#
-# 01016 ¯®á«¥¤­¨© ­®¬¥à ¨á¯®«ì§®¢ ­­®£® á®®¡é¥­¨ï
+# 01023 is the last used one
#
# BeginOfTeX
% \section{ޡ鍥 á®®¡é¥­¨ï ª®¬¯¨«ïâ®à }
-% â®â à §¤¥« ¤ ¥â á®®¡é¥­¨ï ª®¬¯¨«ïâ®à , ª®â®àë¥ ­¥ ä â «ì­ë, ­® ª®â®àë¥
-% ®â®¡à ¦ îâ ¯®«¥§­ãî ¨­ä®à¬ æ¨î. —¨á«® â ª¨å á®®¡é¥­¨© ¬®¦¥â ¡ëâì
-% ã¯à ¢«ï¥¬ë¬ á à §«¨ç­ë¬¨ ­ áâp®©ª ¬¨ yp®¢­ï \var{-v} «®£¨«¨p®¢ ­¨ï.
-% \begin {®¯¨á ­¨¥}
+% â®â à §¤¥« ᮤ¥à¦¨â á®®¡é¥­¨ï ¨­ä®à¬ æ¨®­­®£® ­ §­ ç¥­¨ï.
+% Š®«¨ç¥á⢮ â ª¨å á®®¡é¥­¨© ã¯à ¢«ï¥âáï
+% à §«¨ç­ë¬¨ ­ áâp®©ª ¬¨ yp®¢­ï ¯®¤à®¡­®á⨠\var{-v}.
+% \begin{description}
general_t_compilername=01000_T_Š®¬¯¨«ïâ®p: $1
-% Š®£¤  \var{-vt} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬, ª ª®©
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} íâ  áâப  á®®¡é ¥â ¢ ¬, ª ª®©
% ª®¬¯¨«ïâ®à ¨á¯®«ì§ã¥âáï.
-general_d_sourceos=01001_D_Š®¬¯¨«¨àã¥âáï ­  OS: $1
-% Š®£¤  \var{-vd} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬, ¢ ª ª®©
-% ®¯¥à æ¨®­­®© á¨á⥬¥, á®§¤ ¥âáï ä ©«.
-general_i_targetos=01002_I_‘®§¤ ¥âáï ¤«ï OS: $1
-% Š®£¤  \var{-vd} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬, ¤«ï ª ª®©
-% ®¯¥à æ¨®­­®© á¨á⥬ë á®§¤ ¥âáï ä ©«
-general_t_exepath=01003_T_ˆá¯®«ì§y¥¬ ¯yâì ¤«ï ¡¨­ p­ëå ä ©«®¢: $1
-% Š®£¤  \var{-vt} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬,
-% £¤¥ ª®¬¯¨«ïâ®à  ¨é¥â ¡¨­ p­ë¥ ä ©«ë.
-general_t_unitpath=01004_T_ˆá¯®«ì§y¥¬ ¯ãâì ¤® ¬®¤ã«¥©: $1
-% Š®£¤  \var{-vt} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬,
-% £¤¥ ª®¬¯¨«ïâ®à ¨é¥â ª®¬¯¨«¨àã¥¬ë¥ ¬®¤ã«¨. ‚ë ¬®¦¥â¥ ãáâ ­ ¢«¨¢ âì íâ®â ¯ãâì
-% ç¥p¥§ \var{-Fu} ¨«¨ \var{-Up} ®¯æ¨¨.
-general_t_includepath=01005_T_ˆá¯®«ì§y¥¬ ¯yâì ¤«ï ¢ª«îç ¥¬ëå ä ©«®¢: $1
-% Š®£¤  \var{-vt} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬, £¤¥
-% ª®¬¯¨«ïâ®à ¨é¥â ä ©«ë ¤«ï ¢ª«î祭¨ï (ä ©«ë, ¨á¯®«ì§ã¥¬ë¥ ¢ \var{\{\$I xxx\}}
-% ¢ëp ¦¥­¨ïå). ‚ë ¬®¦¥â¥ ãáâ ­ ¢«¨¢ âì íâ®â ¯ãâì ç¥p¥§ \var{-I} ®¯æ¨î.
-general_t_librarypath=01006_T_ˆá¯®«ì§y¥¬ ¯yâì ¤® ¡¨¡«¨®â¥ª: $1
-% Š®£¤  \var{-vt} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬, £¤¥
-% ª®¬¯¨«ïâ®à ¨é¥â ¡¨¡«¨®â¥ª¨. ‚ë ¬®¦¥â¥ ãáâ ­ ¢«¨¢ âì íâ®â ¯ãâì ç¥p¥§
-% \var{-Fl} ®¯æ¨î.
-general_t_objectpath=01007_T_ˆá¯®«ì§y¥¬ ¯yâì ¤® ®¡ê¥ªâ­ëå ä ©«®¢: $1
-% Š®£¤  \var{-vt} ª«îç ¨á¯®«ì§ã¥âáï, íâ  áâப , á®®¡é ¥â ¢ ¬, £¤¥
-% ª®¬¯¨«ïâ®à ¨é¥â ®¡ê¥ªâ­ë¥ ä ©«ë, ‚ë á¢ï§ë¢ ¥â¥ ¢ (ä ©«ë,
-% ¨á¯®«ì§ãîâáï ¢ \var{\{\$L xxx \}} ¢ëp ¦¥­¨ïå).
-% ‚ë ¬®¦¥â¥ ãáâ ­ ¢«¨¢ âì íâ®â ¯ãâì ç¥p¥§ \var{-Fo} ®¯æ¨î.
-general_i_abslines_compiled=01008_I_$1 «¨­¨© ᪮¬¯¨«¨p®¢ ­­®, $2 ᥪ.
-% Š®£¤  \var{-vi} ª«îç ¨á¯®«ì§ã¥âáï, ª®¬¯¨«ïâ®à, á®®¡é ¥â ç¨á«®
-% ᪮¬¯¨«¨p®¢ ­­ëå áâப, ¨ ¢à¥¬¥­¨, ª®â®à®¥ ¯®âp¥¡®¢ «®áì ¤«ï í⮣®.
-% (ॠ«ì­®¥ ¢à¥¬ï, ­¥ ¯à®£à ¬¬¨py¥¬®¥ ¢à¥¬ï).
-general_f_no_memory_left=01009_F_H¥â ᢮¡®¤­®© ¯ ¬ïâ¨
-% Š®¬¯¨«ïâ®à ­¥ ¨¬¥¥â ¤®áâ â®ç­® ¯ ¬ïâ¨, çâ®¡ë ª®¬¯¨«¨à®¢ âì ¢ è㠯ணࠬ¬ã.
+general_d_sourceos=01001_D_Ž‘ ª®¬¯¨«ïâ®à : $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vd} íâ  áâப  á®®¡é ¥â ­ §¢ ­¨¥
+% ®¯¥à æ¨®­­®© á¨á⥬ë, ¢ ª®â®à®© ¯à®¨á室¨â ª®¬¯¨«ïæ¨ï.
+general_i_targetos=01002_I_Ž‘ ­ §­ ç¥­¨ï: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vd} íâ  áâப  á®®¡é ¥â ­ §¢ ­¨¥
+% ®¯¥à æ¨®­­®© á¨á⥬ë, ¤«ï ª®â®à®© á®§¤ ¥âáï ä ©«.
+general_t_exepath=01003_T_yâì ¨á¯®«­ï¥¬ëå ä ©«®¢: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} íâ  áâப  á®®¡é ¥â ¯ãâì,
+% ¯® ª®â®à®¬ã ª®¬¯¨«ïâ®à ¨é¥â ¨á¯®«­ï¥¬ë¥ ä ©«ë.
+general_t_unitpath=01004_T_ãâì ¬®¤ã«¥©: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} íâ  áâப  á®®¡é ¥â ¯ãâì,
+% ¯® ª®â®à®¬ã ª®¬¯¨«ïâ®à ¨é¥â ª®¬¯¨«¨àã¥¬ë¥ ¬®¤ã«¨. â®â ¯ãâì
+% ¬®¦¥â ¡ëâì ¨§¬¥­¥­ á ¯®¬®éìî ª«îç  \var{-Fu}.
+general_t_includepath=01005_T_yâì ¢ª«îç ¥¬ëå ä ©«®¢: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} íâ  áâப  á®®¡é ¥â ¯ãâì,
+% ¯® ª®â®à®¬ã ª®¬¯¨«ïâ®à ¨é¥â ¢ª«îç ¥¬ë¥ ä ©«ë (ä ©«ë, ¨á¯®«ì§ã¥¬ë¥ ¢ ¤¨à¥ªâ¨¢ å
+% \var{\{\$I xxx\}}). â®â ¯ãâì ¬®¦¥â ¡ëâì ¨§¬¥­¥­ á ¯®¬®éìî ª«îç  \var{-I}.
+general_t_librarypath=01006_T_yâì ¡¨¡«¨®â¥ª: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} íâ  áâப  á®®¡é ¥â ¯ãâì,
+% ¯® ª®â®à®¬ã ª®¬¯¨«ïâ®à ¨é¥â ¡¨¡«¨®â¥ª¨. â®â ¯ãâì ¬®¦¥â ¡ëâì ¨§¬¥­¥­
+% á ¯®¬®éìî ª«îç  \var{-Fl}.
+general_t_objectpath=01007_T_yâì ®¡ê¥ªâ­ëå ä ©«®¢: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} íâ  áâப  á®®¡é ¥â ¯ãâì, ¯® ª®â®à®¬ã
+% ª®¬¯¨«ïâ®à ¨é¥â ®¡ê¥ªâ­ë¥ ä ©«ë (ä ©«ë, ¨á¯®«ì§ã¥¬ë¥ ¢ ¤¨à¥ªâ¨¢ å
+% \var{\{\$L xxx \}}). â®â ¯ãâì ¬®¦¥â ¡ëâì ¨§¬¥­¥­ á ¯®¬®éìî ª«îç  \var{-Fo}.
+general_i_abslines_compiled=01008_I_$1 áâப ᪮¬¯¨«¨p®¢ ­®, $2 ᥪ.$3
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vi} ª®¬¯¨«ïâ®à á®®¡é ¥â ç¨á«®
+% ᪮¬¯¨«¨p®¢ ­­ëå áâப, ¨ ¢à¥¬ï, ª®â®à®¥ ¯®âp¥¡®¢ «®áì ¤«ï í⮣®.
+% (ॠ«ì­®¥, ­¥ ¯à®£à ¬¬­®¥ ¢à¥¬ï).
+general_f_no_memory_left=01009_F_H¥¤®áâ â®ç­® ¯ ¬ïâ¨
+% Š®¬¯¨«ïâ®àã ­¥ 墠⨫® ¯ ¬ï⨠¤«ï ª®¬¯¨«ï樨 ¢ è¥© ¯à®£à ¬¬ë.
% ˆ¬¥¥âáï ­¥áª®«ìª® p¥ª®¬¥­¤ æ¨© ¤«ï p¥è¥­¨ï í⮣® ¢®¯p®á :
-% \begin{itemsize}
-% \item …᫨ ¢ë ¨á¯®«ì§ã¥â¥ ä®à¬¨àãîéãîáï ®¯æ¨î ª®¬¯¨«ïâ®à , ¯à®¡ã©â¥
-% ª®¬¯¨«¨à®¢ âì à §«¨ç­ë¥ ¬®¤ã«¨ ¢àãç­ãî.
-% \item …᫨ ¢ë ª®¬¯¨«¨àã¥â¥, ®£à®¬­yî ¯à®£à ¬¬y, à §¡¨¢ ©â¥ ¥¥ ­  ¬®¤ã«¨, ¨
+% \begin{itemize}
+% \item ‚¬¥áâ® ¯®«­®© ᡮન ¯à®¥ªâ , ¯®¯à®¡ã©â¥ ª®¬¯¨«¨à®¢ âì
+% ®â¤¥«ì­ë¥ ¬®¤ã«¨ ¢àãç­ãî.
+% \item …᫨ à §¬¥à ¯à®£à ¬¬ë ¡®«ì让, à §¡¥©â¥ ¥¥ ­  ¬®¤ã«¨, ¨
% ª®¬¯¨«¨àã©â¥ ¨å ®â¤¥«ì­®.
-% \item …᫨ ¯à¥¤ë¤ã騥 ¤¢  ¯y­ªâ  ­¥ à ¡®â îâ, ¯¥à¥â࠭᫨ày©â¥ ª®¬¯¨«ïâ®à
-% á ¡®«ì訬 p §¬¥p®¬ ªyç¨ (¢ë ¬®¦¥â¥ ¨á¯®«ì§®¢ âì \var{-Ch} ®¯æ¨î ¤«ï í⮣®, \seeo{Ch})
-% \end {itemsize}
-% \end {®¯¨á ­¨¥}
-general_i_writingresourcefile=01010_I_‡ ¯¨á뢠¥¬ ä ©«-â ¡«¨æy áâp®ª®¢ëå p¥áypᮢ: $1
-% This message is shown when the compiler writes the Resource String Table
-% file containing all the resource strings for a program.
-general_e_errorwritingresourcefile=01011_E_Žè¨¡ª  ¯p¨ § ¯¨á¨ ä ©« -â ¡«¨æë áâp®ª®¢ëå p¥áypᮢ: $1
-% This message is shown when the compiler encountered an error when writing
-% the Resource String Table file
-general_i_fatal=01012_I_Fatal:
-% Prefix for Fatal Errors
-general_i_error=01013_I_Error:
-% Prefix for Errors
-general_i_warning=01014_I_Warning:
-% Prefix for Warnings
-general_i_note=01015_I_Note:
-% Prefix for Notes
-general_i_hint=01016_I_Hint:
-% Prefix for Hints
-
+% \item …᫨ ¯à¥¤ë¤ã騥 ४®¬¥­¤ æ¨¨ ­¥ à ¡®â îâ, ¯¥à¥á®¡¥à¨â¥ ª®¬¯¨«ïâ®à
+% á ¡®«ì訬 p §¬¥p®¬ ªyç¨ (¤«ï í⮣® ¨á¯®«ì§ã¥âáï ª«îç \var{-Ch}, \seeo{Ch})
+% \end{itemize}
+general_i_writingresourcefile=01010_I_‡ ¯¨áì ä ©«  â ¡«¨æë áâp®ª®¢ëå p¥áypᮢ: $1
+% ‘®®¡é¥­¨¥ ®§­ ç ¥â, çâ® ª®¬¯¨«ïâ®à á®§¤ ¥â ä ©«, ᮤ¥à¦ é¨© ¢á¥ à¥áãàá­ë¥ áâப¨ ¯à®£à ¬¬ë
+% (â ¡«¨æã áâப®¢ëå à¥áãàᮢ).
+general_e_errorwritingresourcefile=01011_E_Žè¨¡ª  § ¯¨á¨ ä ©«  â ¡«¨æë áâp®ª®¢ëå p¥áypᮢ: $1
+% ‘®®¡é¥­¨¥ ®§­ ç ¥â, çâ® ¢ ¯à®æ¥áᥠ§ ¯¨á¨ ä ©«  áâப®¢ëå à¥áãàᮢ
+% ¯à®¨§®è«  ®è¨¡ª .
+general_i_fatal=01012_I_” â «ì­®:
+% à¥ä¨ªá ¤«ï ä â «ì­ëå ®è¨¡®ª
+general_i_error=01013_I_Žè¨¡ª :
+% à¥ä¨ªá ¤«ï ®è¨¡®ª
+general_i_warning=01014_I_‚­¨¬ ­¨¥:
+% à¥ä¨ªá ¤«ï ¯à¥¤ã¯à¥¦¤¥­¨© (!! "।ã¯à¥¦¤¥­¨¥:" ®¡à¥§ ¥âáï, ¯® ªà ©­¥© ¬¥à¥ ¢ utf-8 !!)
+general_i_note=01015_I_‡ ¬¥âª :
+% à¥ä¨ªá ¤«ï § ¬¥â®ª
+general_i_hint=01016_I_®¤áª §ª :
+% à¥ä¨ªá ¤«ï ¯®¤áª §®ª
+general_e_path_does_not_exist=01017_E_ãâì "$1" ­¥ áãé¥áâ¢ã¥â
+% “ª § ­­ë© ¯ãâì ­¥ áãé¥áâ¢ã¥â.
+general_f_compilation_aborted=01018_F_Š®¬¯¨«ïæ¨ï ¯à¥à¢ ­ 
+% Š®¬¯¨«ïæ¨ï ¡ë«  ¯à¥à¢ ­ .
+general_text_bytes_code=01019_¡ ©â ª®¤ 
+%  §¬¥à ᣥ­¥à¨à®¢ ­­®£® ª®¤ , ¢ ¡ ©â å.
+general_text_bytes_data=01020_¡ ©â ¤ ­­ëå
+%  §¬¥à ᣥ­¥à¨à®¢ ­­ëå ¤ ­­ëå ¯à®£à ¬¬ë, ¢ ¡ ©â å
+general_i_number_of_warnings=01021_I_$1 ¯à¥¤ã¯à¥¦¤¥­¨©
+% ޡ饥 ç¨á«® ¯à¥¤ã¯à¥¦¤¥­¨©, ¢ë¤ ­­ëå ¢ ¯à®æ¥áᥠª®¬¯¨«ï樨.
+general_i_number_of_hints=01022_I_$1 ¯®¤áª §®ª
+% ޡ饥 ç¨á«® ¯®¤áª §®ª, ¢ë¤ ­­ëå ¢ ¯à®æ¥áᥠª®¬¯¨«ï樨.
+general_i_number_of_notes=01023_I_$1 § ¬¥â®ª
+% ޡ饥 ç¨á«® § ¬¥â®ª, ¢ë¤ ­­ëå ¢ ¯à®æ¥áᥠª®¬¯¨«ï樨.
% \end{description}
-
-
#
-# ‘ª ­¥à
+# Scanner
+#
+# 02086 is the last used one
#
% \section {‘®®¡é¥­¨ï ᪠­¥à .}
-% â®â à §¤¥« ¯¥à¥ç¨á«ï¥â á®®¡é¥­¨ï, ª®â®pë¥ ¢ë¤ ¥â ᪠­¥à. ‘ª ­¥à ¡¥à¥â § ¡®âã
-% ® «¥ªá¨ç¥áª®© áâàãªâãॠ䠩«  Free Pascal, â® ¥áâì ®­ ¯p®¡y¥â ­ å®¤¨âì
-% § à¥§¥à¢¨à®¢ ­­ë¥ á«®¢ , áâப¨, ¨ â.¤. Ž­ â ª¦¥ § ¡®â¨âáï ® ¤¨à¥ªâ¨¢ å ¨
-% ãá«®¢­ëå ¢ëà ¦¥­¨ïå ¢«¨ïî騥 ­  ®¡p ¡®âªy ¯p®£p ¬¬ë ª®¬¯¨«ïâ®p®¬.
-% \begin {®¯¨á ­¨¥}
+% â®â à §¤¥« ¯¥à¥ç¨á«ï¥â á®®¡é¥­¨ï, ª®â®pë¥ ¢ë¤ ¥â ᪠­¥à. ‘ª ­¥à ®áãé¥á⢫ï¥â
+% «¥ªá¨ç¥áª¨©  ­ «¨§ áâàãªâãàë ¨á室­®£® ä ©« , â.¥. ­ å®¤¨â
+% § à¥§¥à¢¨à®¢ ­­ë¥ á«®¢ , áâப¨, ¨ â.¤. ‘ª ­¥à â ª¦¥ ®¡à ¡ â뢠¥â ¤¨à¥ªâ¨¢ë ¨
+% ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+% \begin{description}
scan_f_end_of_file=02000_F_H¥®¦¨¤ ­­ë© ª®­¥æ ä ©« 
-% â® ®¡ëç­® á«ãç ¥âáï ¢ á«¥¤ãîé¨å á«ãç ïå:
-% \begin{itemsize}
-% \item ˆá室­ë© ä ©« § ª ­ç¨¢ ¥âáï ¤® ¯®á«¥¤­¥£® \var{end} ¢ëp ¦¥­¨ï.
-% â® á«ãç ¥âáï ®¡ëç­®, ª®£¤  \var{begin} ¨ \var{end} ¢ëp ¦¥­¨ï ­¥
-% á¡ « ­á¨à®¢ ­­ë© (­¥ ®¤¨­ ª®¢®¥ ª®«¨ç¥á⢮);
+% â® ®¡ëç­® ¯à®¨á室¨â ¢ á«¥¤ãîé¨å á«ãç ïå:
+% \begin{itemize}
+% \item ˆá室­ë© ä ©« § ª ­ç¨¢ ¥âáï ¤® ¯®á«¥¤­¥£® ¢ëà ¦¥­¨ï \var{end}.
+% — é¥ ¢á¥£® ¯à®¨á室¨â, ¥á«¨ ¢ëà ¦¥­¨ï \var{begin} ¨ \var{end} ­¥
+% á¡ « ­á¨à®¢ ­ë (¨å ª®«¨ç¥á⢮ ­¥ ᮢ¯ ¤ ¥â);
% \item ‚ª«îç ¥¬ë© ä ©« § ª ­ç¨¢ ¥âáï ¢ á¥à¥¤¨­¥ ¢ëp ¦¥­¨ï.
-% \item Š®¬¬¥­â à¨© ­¥ ¡ë« § ªàëâ (䨣yp­®© ᪮¡ª®© ¨«¨ ¥é¥ ª ª)
-% \end{itemsize}
-scan_f_string_exceeds_line=02001_F_H¥¢®§¬®¦­® ­ ©â¨ ª®­¥æ áâp®ª¨
-% ‚ë, ¢®§¬®¦­®, § ¡ë«¨ ¢ª«îç¨âì § ªàë⨥ ' áâp®ª¨, â ª çâ® áâp®ª  § ­¨¬ ¥â
-% ­¥áª®«ìª® «¨­¨© ª®¤  (áâp®ª).
+% \item ¥ ¡ë« § ªàëâ ª®¬¬¥­â à¨©.
+% \end{itemize}
+scan_f_string_exceeds_line=02001_F_¥ § ªàëâ  áâப®¢ ï ª®­áâ ­â 
+% Žâáãâáâ¢ã¥â § ªà뢠î騩 ᨬ¢®« ' áâப®¢®£® ª®­áâ ­âë, â ª çâ® ª®­áâ ­â  § ­¨¬ ¥â
+% ­¥áª®«ìª® áâப ä ©« .
scan_f_illegal_char=02002_F_‡ ¯p¥é¥­­ë© ᨬ¢®« "$1" ($2)
-% ‘ª ­¥p á⮫ª­y«áï á § ¯à¥é¥­­ë¬ ᨬ¢®«®¬ ¢® ¢å®¤­®¬ ä ©«¥.
-scan_f_syn_expected=02003_F_‘¨­â ªá¨ç¥áª ï ®è¨¡ª : ®¦¨¤ ¥âáï "$1", ­® ­ è«¨ "$2"
-% ⮠㪠§ë¢ ¥â, çâ® ª®¬¯¨«ïâ®à ®¦¨¤ « ¤py£yî «¥ªá¥¬ã (¨«¨ ¬ àª¥à) 祬
-% â®â, ª®â®àë© ¢ë ­ ¯¥ç â «¨. â® ¬®¦¥â ¯à®¨á室¨âì ¯®ç⨠¢áî¤ã, £¤¥
-% ‚ë ¯¨è¨â¥ ­¥ ¯® § ª®­ ¬ ï§ëª   áª «ì.
-scan_t_start_include_file=02004_T_H ç¨­ î ç⥭¨¥ ¢ª«îç ¥¬®£® ä ©«  $1
-% Š®£¤  ‚ë ®¡¥á¯¥ç¨¢ ¥â¥ \var{-vt} ª«îç, ª®¬¯¨«ïâ®à, á®®¡é ¥â ‚ ¬
+% ‚ ¨á室­®¬ ä ©«¥ ®¡­ à㦥­ § ¯à¥é¥­­ë© ᨬ¢®«.
+scan_f_syn_expected=02003_F_‘¨­â ªá¨ç¥áª ï ®è¨¡ª , ®¦¨¤ ¥âáï "$1", ­® ®¡­ à㦥­® "$2"
+% Š®¬¯¨«ïâ®à ®¦¨¤ « ­¥ â®â ⮪¥­, ª®â®àë© ¥¬ã ¢áâà¥â¨«áï. â® ¬®¦¥â
+% ¯à®¨á室¨âì ¢¥§¤¥, £¤¥ ⮫쪮 ¢®§¬®¦­® ­ àãè¨âì ¯à ¢¨« 
+% ï§ëª   áª «ì.
+scan_t_start_include_file=02004_TL_H ç «® ç⥭¨ï ¢ª«îç ¥¬®£® ä ©«  $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} ª®¬¯¨«ïâ®à á®®¡é ¥â,
% ª®£¤  ®­ ­ ç¨­ ¥â ç¨â âì ¢ª«îç ¥¬ë© ä ©«.
-scan_w_comment_level=02005_W_H ©¤¥­ $1 yp®¢¥­ì ª®¬¬¥­â p¨ï
-% Š®£¤  \var{-vw} ª«îç ¨á¯®«ì§ã¥âáï, â® ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â ‚ á,
-% ¥á«¨ ®­ ­ å®¤¨â ¢«®¦¥­­ë¥ ª®¬¬¥­â à¨¨. ‚«®¦¥­­ë¥ ª®¬¬¥­â à¨¨ ­¥ ¯®§¢®«ïîâáï ¢
-% Turbo Pascal ¨ íâ® ¬®¦¥â ¡ëâì ¨áâ®ç­¨ª®¬ ®è¨¡®ª.
-scan_n_far_directive_ignored=02006_N_$F ¤¨à¥ªâ¨¢  (FAR) ¨£­®à¨àã¥âáï
-% \var{FAR} ¤¨à¥ªâ¨¢  íâ® 16-à §à來 ï ª®­áâàãªæ¨ï, ª®â®à ï ï¥âáï
-% ¯®¤¤¥p¦¨¢ ¥¬®©, ­® ¨£­®à¨à㥬 ï ª®¬¯¨«ïâ®à®¬, â ª ª ª ®­ ¯à®¨§¢®¤¨â
-% 32 à §à來ëå ª®¤.
-scan_n_stack_check_global_under_linux=02007_N_Linux ¯p®¢¥pï¥â á⥪  ¢â®¬ â¨ç¥áª¨
-% ஢¥àª  á⥪  á \var{-Cs} ª«îç ¨£­®à¨àã¥âáï ¯®¤ \linux, â ª ª ª
-% \linux ¤¥« ¥â íâ® §  ‚ á. Žâ®¡p ¦ ¥âáï ⮫쪮, ª®£¤  \var{-vn} ¨á¯®«ì§ã¥âáï.
-scan_n_ignored_switch=02008_N_ˆ£­®p¨py¥¬ë© ª®¬¯¨«ïâ®à®¬ ª«îç $1
-% ‘ ¢ª«î祭­ë¬ \var{-vn}, ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â, ¥á«¨ ®­ ¨£­®à¨àã¥â ª«îç
-scan_w_illegal_switch=02009_W_H¥¨§¢¥áâ­ë© ª«îç ª®¬¯¨«ïâ®p  $1
-% ‚ë ¢ª«î稫¨ ª«îç ª®¬¯¨«ïâ®à  (â® ¥áâì \var{\{\$... \}}) ª®â®àë©
-% ª®¬¯¨«ïâ®à ­¥ §­ ¥â.
-scan_w_switch_is_global=02010_W_â®â ª«îç ª®¬¯¨«ïâ®à  ¨¬¥¥â £«®¡ «ì­ë© áâ âyá
-% Š®£¤  \var{-vw} ¨á¯®«ì§ã¥âáï, ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â, ¥á«¨ ª«îç £«®¡ «¥­.
-scan_e_illegal_char_const=02011_E_H¥¨§¢¥áâ­ë© ᨬ¢®« ¢ ª®­áâ ­â¥
-% â® á«ãç ¥âáï, ª®£¤  ‚ë ®¯à¥¤¥«ï¥â¥ ᨬ¢®« á ª®¤®¬ ASCII, ¯®áª®«ìªã ¢
-% \var{\#96}, ­® ­®¬¥à ï¥âáï ¨«¨ § ¯à¥é¥­­ë¬, ¨«¨ ¢­¥ ¤¨ ¯ §®­ .
-% „¨ ¯ §®­ - 1-255.
-scan_f_cannot_open_input=02012_F_H¥ ¬®£y ®âªpëâì ä ©« $1
-% \fpc ­¥ ¬®¦¥â ­ ©â¨ ¯à®£à ¬¬ã ¨«¨ ¨á室­ë© ä ©« ¬®¤ã«ï, ª®â®àë© ‚ë
-% ®¯à¥¤¥«¨«¨ ¢ ª®¬ ­¤­®© áâப¥.
-scan_f_cannot_open_includefile=02013_F_H¥ ¬®£y ®âªpëâì ¢ª«îç ¥¬ë© ä ©« $1
-% \fpc ­¥ ¬®¦¥â ­ ©â¨ ¨á室­ë© ä ©«, ª®â®pë© ¢ë ®¯à¥¤¥«¨«¨ ¢ \var{\{\$include \}}
-% ¢ëp ¦¥­¨¨.
-scan_e_too_much_endifs=02014_E_‘«¨èª®¬ ¬­®£® $ENDIF ¨«¨ $ELSE ¤¨p¥ªâ¨¢
-% ‚ è \var{\{\$IFDEF.. \}} ¨ {\{\$ENDIF} \}} ¢ëp ¦¥­¨ï ­¥ ¨¬¥îâ ®¤¨­ ª®¢®¥ ª®«-¢®.
-scan_w_only_pack_records=02015_W_Record ¯®«ï ¬®£yâ ¢ëà ¢­¨¢ âìáï ⮫쪮 ª 1,2,4 ¨«¨ 16 ¡ ©â ¬
-% ‚ë ®¯à¥¤¥«ï¥â¥ \var{\{\$PACKRECORDS n\} } á § ¯à¥é¥­­ë¬ §­ ç¥­¨¥¬ ¤«ï
-% \var{n}. ’®«ìª® 1,2,4 ¨«¨ 16 ¤®¯ãá⨬® ¢ í⮬ á«ãç ¥.
-scan_w_only_pack_enum=02016_W_¥p¥ç¨á«¥­¨ï ¬®£yâ ¡ëâì á®åà ­¥­ë ⮫쪮 ¢ 1,2 ¨«¨ 4 ¡ ©â å
-% ‚ë ®¯à¥¤¥«ï¥â¥ \var{\{\$PACKENUM n \}} á § ¯à¥é¥­­ë¬ §­ ç¥­¨¥¬ ¤«ï
-% \var {n}. ’®«ìª® 1,2 ¨«¨ 4 ¤®¯ãá⨬® ¢ í⮬ á«ãç ¥.
-scan_e_endif_expected=02017_E_$1 ®¦¨¤ ¥âáï ¤«ï $2 ®¯à¥¤¥«¥­¨ï ¢ áâப¥ $3
-% ‚ è¨ ãá«®¢­ë¥ ã⢥ত¥­¨ï âà ­á«ï樨 ­¥á¡ « ­á¨à®¢ ­­ë.
-scan_e_preproc_syntax_error=02018_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¯à¨  ­ «¨§¥ ¢ëà ¦¥­¨ï ¤«ï ª®¬¯¨«ïâ®p 
-% ‚ ãá«®¢­®¬ ¢ëà ¦¥­¨¨ ¨¬¥¥âáï ®è¨¡ª  ¯®á«¥ \var{\{\$if \}} ¤¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à .
-scan_e_error_in_preproc_expr=02019_E_Žè¨¡ª  ¢ p áç¥â¥ ¢ëà ¦¥­¨ï ¯p¥¯p®æ¥áá®p  ¤«ï ª®¬¯¨«¨à®¢ ­¨ï
-% ‚ ãá«®¢­®¬ ¢ëà ¦¥­¨¨ ¨¬¥¥âáï ®è¨¡ª  ¯®á«¥ \var{\{\$if \}} ¤¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à .
-scan_w_macro_cut_after_255_chars=02020_W_„«ï p áç¥â  ¢ëp ¦¥­¨ï, ¤«¨­  ¬ ªp®á  ᮪p é¥­  ¤® 255 ᨬ¢®«®¢
-% ‚ëà ¦¥­¨ï ᮤ¥à¦ é¨¥ ¬ ªà®ª®¬ ­¤ë ­¥ ¬®¦¥â ¡ëâì ¡®«ìè¥ ç¥¬ 255 ᨬ¢®«®¢.
-% ⮠ï¥âáï ç áâìî ¡¥§®¯ á­®á⨠¢ ª®¬¯¨«ïâ®à¥, íâ® ¯à¥¤®â¢à é ¥â ¡ãä¥à­ë¥
-% ¯¥à¥¯®«­¥­¨¥. â® ¯®ª §ë¢ ¥âáï ª ª ¯à¥¤ã¯à¥¦¤¥­¨¥, â® ¥áâì
-% ª®£¤  ª«îç \var{-vw} ¨á¯®«ì§y¥âáï.
-scan_e_endif_without_if=02021_E_ENDIF ¡¥§ IF{N}DEF
-% ‚ è \var{\{\$IFDEF.. \}} ¨ {\ {\$ENDIF \}} ã⢥ত¥­¨ï ­¥ á¡ « ­á¨à®¢ ­ë.
-scan_f_user_defined=02022_F_®«ì§®¢ â¥«ì ®¯à¥¤¥«¨« $1
-% p®¨§®è«  ®¯à¥¤¥«ï¥¬ ï ¯®«ì§®¢ â¥«¥¬ ä â «ì­ ï ®è¨¡ª . ‘¬. â ª¦¥ \progref
-scan_e_user_defined=02023_E_®«ì§®¢ â¥«ì ®¯p¥¤¥«¨« $1
-% p®¨§®è«  ®¯à¥¤¥«ï¥¬ ï ¯®«ì§®¢ â¥«¥¬ ®è¨¡ª . ‘¬. â ª¦¥ \progref
-scan_w_user_defined=02024_W_®«ì§®¢ â¥«ì ®¯p¥¤¥«¨« $1
-% p®¨§®è«® ®¯à¥¤¥«ï¥¬®¥ ¯®«ì§®¢ â¥«¥¬ ¯à¥¤ã¯à¥¦¤¥­¨¥. ‘¬. â ª¦¥ \progref
-scan_n_user_defined=02025_N_®«ì§®¢ â¥«ì ®¯p¥¤¥«¨« $1
-% ‘⮫ª­y«¨áì á ®¯à¥¤¥«ï¥¬ë¬ ¯®«ì§®¢ â¥«¥¬ ¯à¨¬¥ç ­¨¥¬. ‘¬. â ª¦¥ \progref
-scan_h_user_defined=02026_H_®«ì§®¢ â¥«ì ®¯p¥¤¥«¨« $1
-% ‘⮫ª­y«¨áì á ®¯à¥¤¥«ï¥¬®© ¯®«ì§®¢ â¥«¥¬ ¯®¤áª §ª®©. ‘¬. â ª¦¥ \progref
-scan_i_user_defined=02027_I_®«ì§®¢ â¥«ì ®¯p¥¤¥«¨« $1
-% ‘⮫ª­y«¨áì á ®¯à¥¤¥«ï¥¬®© ¯®«ì§®¢ â¥«¥¬ ¯®¤áª §ª®©. ‘¬. â ª¦¥ \progref
-scan_e_keyword_cant_be_a_macro=02028_E_Š«î祢®¥ á«®¢® ¯¥à¥®¯à¥¤¥«¥­®, ¯®áª®«ìªã ¬ ªà®ª®¬ ­¤  ­¥ ¨¬¥¥â ­¨ª ª®£® íä䥪â 
-% ‚ë ­¥ ¬®¦¥â¥ ¯¥à¥®¯à¥¤¥«ïâì ª«îç¥¢ë¥ á«®¢  á ¬ ªà®ª®¬ ­¤ ¬¨.
-scan_f_macro_buffer_overflow=02029_F_yä¥p ¬ ªp®á®¢ ¯¥à¥¯®«­¥­ ¯à¨ ç⥭¨¨ ¨«¨ à áè¨à¥­¨¨ ¬ ªà®ª®¬ ­¤ë
-% ‚ è ¬ ªp®á ¨«¨ १ã«ìâ â, ᫨誮¬ ¤«¨­¥­ ¤«ï ª®¬¯¨«ïâ®à .
-scan_w_macro_deep_ten=02030_W_ áè¨p¥­¨¥ ¬ ªà®ª®¬ ­¤ë ¯à¥¢ë蠥⠢®§¬®¦­ë© yp®¢¥­ì (¡®«¥¥ 16).
+scan_w_comment_level=02005_W_H ©¤¥­ ª®¬¬¥­â à¨© $1 yp®¢­ï
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vw} ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â ® ⮬,
+% çâ® ®­ ®¡­ à㦨« ¢«®¦¥­­ë© ª®¬¬¥­â à¨©. ‚«®¦¥­­ë¥ ª®¬¬¥­â à¨¨ ­¥ à §à¥è¥­ë ¢
+% Turbo Pascal ¨ ¬®£ãâ ¡ëâì ¢®§¬®¦­ë¬ ¨áâ®ç­¨ª®¬ ®è¨¡®ª.
+scan_n_ignored_switch=02008_N_„¨à¥ªâ¨¢  ª®¬¯¨«ïâ®à  $1 ¨£­®à¨à®¢ ­ 
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vn} ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â ® ⮬, çâ® ®­ ¨£­®à¨àã¥â ¤¨à¥ªâ¨¢ã.
+scan_w_illegal_switch=02009_W_H¥¨§¢¥áâ­ ï ¤¨à¥ªâ¨¢  ª®¬¯¨«ïâ®p  $1
+% ë«  ¨á¯®«ì§®¢ ­  ¤¨à¥ªâ¨¢  ª®¬¯¨«ïâ®à  (â® ¥áâì \var{\{\$... \}}), ª®â®à ï
+% ª®¬¯¨«ïâ®àã ­¥ ¨§¢¥áâ­ .
+scan_w_switch_is_global=02010_W_ƒ«®¡ «ì­ ï ¤¨à¥ªâ¨¢  ­¥ ­  ᢮¥¬ ¬¥áâ¥
+% ƒ«®¡ «ì­ë¥ ¤¨à¥ªâ¨¢ë ¤®«¦­ë ­ å®¤¨âìáï ¢ ­ ç «¥ ¯à®£à ¬¬ë ¨«¨ ¬®¤ã«ï.
+scan_e_illegal_char_const=02011_E_H¥¢¥à­® § ¤ ­ ᨬ¢®«
+% â® á«ãç ¥âáï ¯à¨ ®¯à¥¤¥«¥­¨¨ ᨬ¢®«  á ¯®¬®éìî ASCII-ª®¤ , ­ ¯à¨¬¥à,
+% \var{\#96}, ­® ç¨á«® «¨¡® ï¥âáï ­¥¢¥à­ë¬, «¨¡® ¢­¥ ¤®¯ãá⨬®£® ¤¨ ¯ §®­ .
+scan_f_cannot_open_input=02012_F_H¥¢®§¬®¦­® ®âªpëâì ä ©« "$1"
+% \fpc ­¥ ¬®¦¥â ­ ©â¨ ¨á室­ë© ä ©« ¯à®£à ¬¬ë ¨«¨ ¬®¤ã«ï, 㪠§ ­­ë©
+% ¢ ª®¬ ­¤­®© áâப¥.
+scan_f_cannot_open_includefile=02013_F_H¥¢®§¬®¦­® ®âªpëâì ¢ª«îç ¥¬ë© ä ©« "$1"
+% \fpc ­¥ ¬®¦¥â ­ ©â¨ ¨á室­ë© ä ©«, 㪠§ ­­ë© ¢ ¤¨à¥ªâ¨¢¥ \var{\{\$include \}}.
+scan_e_illegal_pack_records=02015_E_¥¢¥à­®¥ 㪠§ ­¨¥ ¢ëà ¢­¨¢ ­¨ï § ¯¨á¨ "$1"
+% ‚ ¤¨à¥ªâ¨¢¥ \var{\{\$PACKRECORDS n\} } ¨«¨ \var{\{\$ALIGN n\} } ¨á¯®«ì§ã¥âáï ­¥¢¥à­®¥ §­ ç¥­¨¥
+% \var{n}. „«ï \$PACKRECORDS ¤®¯ãá⨬ë ⮫쪮 1, 2, 4, 8, 16, 32, C,
+% NORMAL, DEFAULT,   ¤«ï \$ALIGN ¤®¯ãáâ¨¬ë §­ ç¥­¨ï 1, 2, 4, 8, 16, 32, ON,
+% OFF. ‚ ०¨¬¥ MacPas \$ALIGN â ª¦¥ ¯®¤¤¥à¦¨¢ ¥â MAC68K, POWER ¨ RESET.
+scan_e_illegal_pack_enum=02016_E_¥¢¥à­®¥ 㪠§ ­¨¥ ¬¨­¨¬ «ì­®£® à §¬¥à  ¯¥à¥ç¨á«¥­¨ï "$1"
+% ‚ ¤¨à¥ªâ¨¢¥ \var{\{\$PACKENUM n \}} ¨á¯®«ì§ã¥âáï ­¥¢¥à­®¥ §­ ç¥­¨¥
+% \var {n}. „®¯ãá⨬묨 ïîâáï §­ ç¥­¨ï 1,2,4, NORMAL ¨ DEFAULT.
+scan_e_endif_expected=02017_E_ަ¨¤ ¥âáï $ENDIF ¤«ï $1 $2, ®¯à¥¤¥«¥­­®£® ¢ $3 áâப  $4
+% „¨à¥ªâ¨¢ë ãá«®¢­®© ª®¬¯¨«ï樨 ­¥ á¡ « ­á¨à®¢ ­ë.
+scan_e_preproc_syntax_error=02018_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¢ ¢ëà ¦¥­¨¨ ãá«®¢­®© ª®¬¯¨«ï樨
+% ‚ ¢ëà ¦¥­¨¨, á«¥¤ãî饬 ¯®á«¥ ¤¨à¥ªâ¨¢ë \var{\{\$if \}}, $ifc ¨«¨ $setc, ¤®¯ã饭  ®è¨¡ª .
+scan_e_error_in_preproc_expr=02019_E_Žè¨¡ª  ¯à¨ ¢ëç¨á«¥­¨¨ ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨
+% ‚ ¢ëà ¦¥­¨¨, á«¥¤ãî饬 ¯®á«¥ ¤¨à¥ªâ¨¢ë \var{\{\$if \}}, $ifc ¨«¨ $setc, ¤®¯ã饭  ®è¨¡ª .
+scan_w_macro_cut_after_255_chars=02020_W_„«¨­  ¬ ªp®á  ®£à ­¨ç¥­  255 ᨬ¢®« ¬¨
+% „«¨­  ¬ ªà®ª®¬ ­¤ë ­¥ ¬®¦¥â ¯à¥¢ëè âì 255 ᨬ¢®«®¢.
+scan_e_endif_without_if=02021_E_ENDIF ¡¥§ IF(N)DEF
+% „¨à¥ªâ¨¢ë \var{\{\$IFDEF.. \}} ¨ {\ {\$ENDIF \}} ­¥ á¡ « ­á¨à®¢ ­ë.
+scan_f_user_defined=02022_F_‡ ¤ ­® ¯®«ì§®¢ â¥«¥¬: $1
+% p®¨§®è«  ä â «ì­ ï ®è¨¡ª , § ¤ ­­ ï ¯®«ì§®¢ â¥«¥¬. ‘¬. â ª¦¥ \progref
+scan_e_user_defined=02023_E_‡ ¤ ­® ¯®«ì§®¢ â¥«¥¬: $1
+% p®¨§®è«  ®è¨¡ª , § ¤ ­­ ï ¯®«ì§®¢ â¥«¥¬. ‘¬. â ª¦¥ \progref
+scan_w_user_defined=02024_W_‡ ¤ ­® ¯®«ì§®¢ â¥«¥¬: $1
+% p¥¤ã¯à¥¦¤¥­¨¥, § ¤ ­­®¥ ¯®«ì§®¢ â¥«¥¬. ‘¬. â ª¦¥ \progref
+scan_n_user_defined=02025_N_‡ ¤ ­® ¯®«ì§®¢ â¥«¥¬: $1
+% ‡ ¬¥âª , § ¤ ­­ ï ¯®«ì§®¢ â¥«¥¬. ‘¬. â ª¦¥ \progref
+scan_h_user_defined=02026_H_‡ ¤ ­® ¯®«ì§®¢ â¥«¥¬: $1
+% ®¤áª §ª , § ¤ ­­ ï ¯®«ì§®¢ â¥«¥¬. ‘¬. â ª¦¥ \progref
+scan_i_user_defined=02027_I_‡ ¤ ­® ¯®«ì§®¢ â¥«¥¬: $1
+% ˆ­ä®à¬ æ¨ï, § ¤ ­­ ï ¯®«ì§®¢ â¥«¥¬. ‘¬. â ª¦¥ \progref
+scan_e_keyword_cant_be_a_macro=02028_E_Š«î祢®¥ á«®¢®, ¯¥à¥®¯à¥¤¥«¥­­®¥ ª ª ¬ ªà®á, ­¥ ¨¬¥¥â íä䥪â 
+% Š«îç¥¢ë¥ á«®¢  ­¥ ¬®£ãâ ¡ëâì ¯¥à¥®¯à¥¤¥«¥­ë á ¯®¬®éìî ¬ ªà®ª®¬ ­¤.
+scan_f_macro_buffer_overflow=02029_F_¥à¥¯®«­¥­¨¥ ¡yä¥p  ¬ ªp®á®¢ ¯à¨ ç⥭¨¨ ¨«¨ à áè¨à¥­¨¨ ¬ ªà®ª®¬ ­¤ë
+% „«¨­  ¬ ªp®ª®¬ ­¤ë ¨«¨ ¥¥ १ã«ìâ â  ᫨誮¬ ¢¥«¨ª .
+scan_w_macro_too_deep=02030_W_—¨á«® ã஢­¥© à áè¨p¥­¨ï ¬ ªà®ª®¬ ­¤ë ¯à¥¢ëè ¥â 16.
% ਠà áè¨à¥­¨¨ ¬ ªà®ª®¬ ­¤ë ¡ë«® ¨á¯®«ì§®¢ ­® ¡®«¥¥ 16 yp®¢­¥© ¢«®¦¥­­®áâ¨.
-% Š®¬¯¨«ïâ®à ­¥ ¬®¦¥â p áè¨p¨âì ¬ ªp®á, â ª ª ª íâ® ¬®¦¥â ¡ëâì §­ ª, çâ®
-% ¨á¯®«ì§y¥âáï ४ãàá¨ï
-scan_e_wrong_styled_switch=02031_E_¥p¥ª«îç â¥«¨ ª®¬¯¨«ïâ®p  ­¥ ¯®§¢®«ïî⠨ᯮ«ì§®¢ âì (* ¨ *) áâ¨«ì ª®¬¬¥­â p¨¥¢.
-% ¥à¥ª«îç â¥«¨ ª®¬¯¨«ïâ®à  ¤®«¦­ë ¢á¥£¤  ¡ëâì ¬¥¦¤ã \var{\{\ }} à §¤¥«¨â¥«ï¬¨ ª®¬¬¥­â à¨ï.
-scan_d_handling_switch=02032_D_p®¢¥p塞 ª«îç "$1"
-% Š®£¤  ‚ë ¢ª«î砥⥠¨­ä®à¬ æ¨î ¤«ï ®â« ¤ª¨ (\var{-vd}), ª®¬¯¨«ïâ®à á®®¡é ¥â
-% ¢ ¬, ª®£¤  ®­ ®æ¥­¨¢ ¥â ãá«®¢­®¥ ¢ëà ¦¥­¨¥, ¢«¨ïî饥 ­  ª®¬¯¨«ïæ¨î.
-scan_c_endif_found=02033_C_ENDIF $1 ­ ©¤¥­
-% Š®£¤  ‚ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨.
-scan_c_ifdef_found=02034_C_IFDEF $1 ­ ©¤¥­, $2
-% Š®£¤  ‚ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var{-vc}), ª®¬¯¨«ïâ®à, á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨.
-scan_c_ifopt_found=02035_C_IFOPT $1 ­ ©¤¥­, $2
-% Š®£¤  ¢ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var{-vc}), ª®¬¯¨«ïâ®à, á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨.
-scan_c_if_found=02036_C_IF $1 ­ ©¤¥­, $2
-% Š®£¤  ¢ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var{-vc}), ª®¬¯¨«ïâ®à, á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨.
-scan_c_ifndef_found=02037_C_IFNDEF $1 ­ ©¤¥­, $2
-% Š®£¤  ¢ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var {-vc}), ª®¬¯¨«ïâ®à, á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨.
-scan_c_else_found=02038_C_ELSE $1 ­ ©¤¥­, $2
-% Š®£¤  ¢ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var{-vc}), ª®¬¯¨«ïâ®à, á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨.
-scan_c_skipping_until=02039_C_p®¯y᪠¥¬ ¤® ...
-% Š®£¤  ¢ë ¢ª«î砥⥠ãá«®¢­ë¥ á®®¡é¥­¨ï (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â ¢ ¬
-% £¤¥ ®­ áâ «ª¨¢ ¥âáï á ãá«®¢­ë¬¨ ã⢥ত¥­¨ï¬¨, ¨ ¯à®¯ã᪠¥â «¨ íâ® ¨«¨ ­¥â.
-scan_i_press_enter=02040_I_H ¦¬¨â¥ <ENTER>, çâ®¡ë ¯à®¤®«¦¨âì
-% Š®£¤  ¨á¯®«ì§y¥âáï \var{-vi} ª«îç, ª®¬¯¨«ïâ®à ®áâ ­ ¢«¨¢ ¥â
-% âà ­á«ï樨 ¨ ¦¤¥â \var{enter} ª« ¢¨èy, ª®â®à ï ¡ã¤¥â ­ ¦ â , ª®£¤  ®­
-% á⮫ª­¥âáï á ¤¨p¥ªâ¨¢®© \var {\{\$STOP\}}.
-scan_w_unsupported_switch=02041_W_H¥¯®¤¤¥p¦¨¢ ¥¬ë© ª«îç $1
-% Š®£¤  ¯p¥¤y¯p¥¦¤¥­¨ï ¢ª«î祭ë (\var{-vw}), ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â ¢ á
-% ®â­®á¨â¥«ì­® ­¥¯®¤¤¥à¦¨¢ ¥¬ëå ª«î祩. â® ®§­ ç ¥â çâ®, ª«îç ¨á¯®«ì§ã¥âáï
+% Š®¬¯¨«ïâ®à ­¥ ¡ã¤¥â p áè¨pïâì ¤ «ìè¥, â ª ª ª íâ® ¬®¦¥â ¡ëâì ¯à¨§­ ª®¬ ¨á¯®«ì§®¢ ­¨ï ४ãàᨨ.
+scan_w_wrong_styled_switch=02031_W_„¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®p  ¢ ª®¬¬¥­â à¨ïå á⨫ï // ­¥ ¯®¤¤¥à¦¨¢ îâáï.
+% „¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à  ¤®«¦­ë ¡ëâì ¢ ª®¬¬¥­â à¨ïå áâ¨«ï  áª «ì.
+scan_d_handling_switch=02032_DL_Ž¡à ¡®âª  ¤¨à¥ªâ¨¢ë "$1"
+% ਠ¢ª«î祭¨¨ ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨ (\var{-vd}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, çâ® ®­ ¢ëç¨á«ï¥â ¢ëà ¦¥­¨¥ ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_endif_found=02033_CL_ENDIF $1 ­ ©¤¥­®
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, £¤¥ ®­ ®¡à ¡ â뢠¥â ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_ifdef_found=02034_CL_IFDEF $1 ­ ©¤¥­®, $2
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, £¤¥ ®­ ®¡à ¡ â뢠¥â ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_ifopt_found=02035_CL_IFOPT $1 ­ ©¤¥­®, $2
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, £¤¥ ®­ ®¡à ¡ â뢠¥â ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_if_found=02036_CL_IF $1 ­ ©¤¥­®, $2
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, £¤¥ ®­ ®¡à ¡ â뢠¥â ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_ifndef_found=02037_CL_IFNDEF $1 ­ ©¤¥­®, $2
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, £¤¥ ®­ ®¡à ¡ â뢠¥â ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_else_found=02038_CL_ELSE $1 ­ ©¤¥­®, $2
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, £¤¥ ®­ ®¡à ¡ â뢠¥â ¢ëà ¦¥­¨ï ãá«®¢­®© ª®¬¯¨«ï樨.
+scan_c_skipping_until=02039_CL_p®¯y᪠¥¬ ¤® ...
+% ਠ¢ª«î祭¨¨ á®®¡é¥­¨© ®¡ ãá«®¢­ëå ¢ëà ¦¥­¨ïå (\var{-vc}), ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® ⮬, çâ® ®­ ¯à®¯ã᪠¥â ç áâì ãá«®¢­®£® ¢ëà ¦¥­¨ï, ­¥ 㤮¢«¥â¢®àïîéãî ãá«®¢¨î.
+scan_i_press_enter=02040_I_H ¦¬¨â¥ <ENTER> ¤«ï ¯à®¤®«¦¥­¨ï
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vi} ª®¬¯¨«ïâ®à ®áâ ­ ¢«¨¢ ¥âáï
+% ¨ ¦¤¥â ­ ¦ â¨ï ­  ª« ¢¨èã \var{enter}, ¥á«¨ ¢ ¨á室­®¬ ä ©«¥
+% ¢áâà¥ç ¥âáï ¤¨p¥ªâ¨¢  \var {\{\$STOP\}}.
+scan_w_unsupported_switch=02041_W_„¨à¥ªâ¨¢  "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
+% ਠ¢ª«î祭­ëå ¯à¥¤ã¯à¥¦¤¥­¨ïå (\var{-vw}), ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â
+% ® ­¥¯®¤¤¥à¦¨¢ ¥¬ëå ¤¨à¥ªâ¨¢ å. â® ®§­ ç ¥â, çâ® ¤¨à¥ªâ¨¢  ¨á¯®«ì§ã¥âáï
% ¢ Delphi ¨«¨ Turbo Pascal, ­® ­¥ ¢ \fpc
-scan_w_illegal_directive=02042_W_H¥¯p ¢¨«ì­ ï ¤¨à¥ªâ¨¢  ª®¬¯¨«ïâ®à  $1
-% Š®£¤  ¯p¥¤y¯p¥¦¤¥­¨ï ¢ª«î祭ë (\var{-vw}), ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â ¢ á
-% ®â­®á¨â¥«ì­® ­¥¯à¨§­ ­­ëå ¤¨p¥ªâ¨¢. „«ï ᯨ᪠ à á¯®§­ ­­ëå ¤¨p¥ªâ¨¢, á¬. \progref
-scan_t_back_in=02043_T_‚®§p é ¥¬áï ¢ $1
-% Š®£¤  ¢ë ¨á¯®«ì§ã¥â¥ (\var{-vt}) ª®¬¯¨«ïâ®à, á®®¡é ¥â ¢ ¬, ª®£¤  ®­
-% § ª®­ç¨« ç¨â âì ¢ª«îç ¥¬ë© ä ©«.
-scan_w_unsupported_app_type=02044_W_H¥¯®¤¤¥p¦¨¢ ¥¬ë© ⨯ ¯p¨«®¦¥­¨ï: $1
-% ‚ë ¯®«ã砥⥠íâ® ¯à¥¤ã¯à¥¦¤¥­¨¥, ª®£¤  ®¯à¥¤¥«ï¥â¥ ­¥¨§¢¥áâ­ë© ⨯
-% ¯à¨«®¦¥­¨ï á ¤¨à¥ªâ¨¢®© $APPTYPE
-scan_w_app_type_not_support=02045_W_$APPTYPE ­¥ ¯®¤¤¥à¦¨¢ ¥âáï á¨á⥬®© ¤«ï ª®â®p®© ¢ë ª®¬¯¨«¨py¥â¥ ä ©«
-% $APPTYPE ¤¨à¥ªâ¨¢  ®¡¥á¯¥ç¨¢ ¥âáï ⮫쪮 win32 ¯à¨«®¦¥­¨ï¬¨.
-scan_w_description_not_support=02046_W_’¥£ DESCRIPTION ­¥ ¯®¤¤¥à¦¨¢ ¥âáï á¨á⥬®© ¤«ï ª®â®p®© ¢ë ª®¬¯¨«¨py¥â¥ ä ©«
-% ’¥£ \var{\{\$DESCRIPTION\}} ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ­  á¨á⥬ å OS/2 ¨ Win32.
-scan_n_version_not_support=02047_N_’¥£ VERSION ­¥ ¯®¤¤¥à¦¨¢ ¥âáï á¨á⥬®© ¤«ï ª®â®p®© ¢ë ª®¬¯¨«¨py¥â¥ ä ©«
-% ’¥£ \var{\{\$VERSION\}} ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¢ Win32 á¨á⥬ å.
-scan_n_only_exe_version=02048_N_’¥£ VERSION ¨á¯®«ì§ã¥âáï ⮫쪮 ¤«ï .EXE ¨ .DLL ¨á室­¨ª®¢.
-% ’¥£ \var{\{\$VERSION\}} ¨á¯®«ì§ã¥âáï ⮫쪮 ¤«ï .EXE ¨ .DLL ¨á室­¨ª®¢.
-scan_w_wrong_version_ignored=02049_W_¥¢¥à­ë© ä®à¬ â ¤«ï ⥣  VERSION ¤«ï ¤¨à¥ªâ¨¢ë $1
-% The \var{\{\$VERSION\}} directive format is major_version.minor_version
-% where major_version and minor_version are words.
-scan_w_unsupported_asmmode_specifier=02050_W_H¥¯®¤¤¥p¦¨¢ ¥¬ë© áâ¨«ì  áᥬ¡«¥p  ¢ $1
-% Š®£¤  ‚ë ®¯à¥¤¥«ï¥â¥ ०¨¬  áᥬ¡«¥à  á \var{\{\$ASMMODE xxx\}}
-% ª®¬¯¨«ïâ®à ­¥ à á¯®§­ ¢ « ०¨¬, ª®â®àë© ‚ë â ¬ yª § «¨.
-% \end {®¯¨á ­¨¥}
-scan_w_no_asm_reader_switch_inside_asm=02051_W_Š«îç  áᥬ¡«¥p : ­¥¢®§¬®¦­ ï ¢­yâp¥­­ïï ¨­áâpyªæ¨ï  áᥬ¡«¥p , $1 ¡y¤¥â íä䥪⨢­  ⮫쪮 ¢ á«¥¤yî騩 p §
-% It is not possible to switch from one assembler reader to another
-% inside an assmebler block. The new reader will be used for next
-% assembler statement only.
-scan_e_wrong_switch_toggle=02052_E_H¥¢¥p­ë© p¥¦¨¬ ¯¥à¥ª«îç â¥«ï, ¨á¯®«ì§ã©â¥ ON/OFF ¨«¨ +/-
-% You need to use ON or OFF or a + or - to toggle the switch
-scan_e_resourcefiles_not_supported=02053_E_” ©«ë p¥áypᮢ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï á¨á⥬®© ¤«ï ª®â®p®© ¢ë ª®¬¯¨«¨py¥â¥ ä ©«
-% The target you are compiling for doesn't support Resource files. The
-% only target which can use resource files is Win32
-scan_w_include_env_not_found=02054_W_‚ª«îç ¥¬ ï ¯¥p¥¬¥­­ ï ®ªpy¦¥­¨ï $1 ­¥ ­ ©¤¥­  ¢ ®ªpy¦¥­¨¨ á¨á⥬ë
-% The included environment variable can't be found in the environment, it'll
-% be replaced by an empty string instead.
-scan_e_invalid_maxfpureg_value=02055_E_¥¢¥à­®¥ §­ ç¥­¨¥ ¤«ï £à ­¨æë ॣ¨áâà  á®¯à®æ¥áá®à 
-% Valid values for this directive are 0..8 and NORMAL/DEFAULT
-scan_w_only_one_resourcefile_supported=02056_W_„«ï í⮩ á¨áâ¥¬ë ¯®¤¤¥à¦¨¢ îâáï ⮫쪮 ®¤¨­ ä ©« à¥áãàᮢ
-% The target you are compiling for supports only one resource file. This is the
-% case of OS/2 (EMX) currently. The first resource file found is used, the
-% others are discarded.
-scan_w_macro_support_turned_off=02057_W_®¤¤¥p¦ª  ¬ ªp®á®¢ ¡ë«  ®âª«î祭 
-% A macro declaration has been found, but macro support is currently off,
-% so the declaration will be ignored. To turn macro support on compile with
-% -Sm on the commandline or add {$MACRO ON} in the source
-scan_e_invalid_interface_type=02058_E_“ª § ­ ­¥¢¥à­ë© ⨯ interface. à ¢¨«ì­ë¥ ⮫쪮 COM, COBRA ¨«¨ DEFAULT
-% The interface type that was specified is not supported
+scan_w_illegal_directive=02042_W_H¥¢¥à­ ï ¤¨à¥ªâ¨¢  ª®¬¯¨«ïâ®à  "$1"
+% ਠ¢ª«î祭­ëå ¯p¥¤y¯p¥¦¤¥­¨ïå (\var{-vw}), ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â
+% ® ­¥¢¥à­ëå ¤¨p¥ªâ¨¢ å. ‘¯¨á®ª à á¯®§­ ¢ ¥¬ëå ¤¨p¥ªâ¨¢ á¬. ¢ \progref
+scan_t_back_in=02043_TL_‚®§¢p â ¢ $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  (\var{-vt}) ª®¬¯¨«ïâ®à á®®¡é ¥â ®¡ ®ª®­ç ­¨¨
+% ç⥭¨ï ¢ª«îç ¥¬®£® ä ©« .
+scan_w_unsupported_app_type=02044_W_’¨¯ ¯p¨«®¦¥­¨ï "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
+% â® ¯à¥¤ã¯à¥¦¤¥­¨¥ ¢ë¤ ¥âáï ¯à¨ ¨á¯®«ì§®¢ ­¨¨ ­¥¨§¢¥áâ­®£® ⨯ 
+% ¯à¨«®¦¥­¨ï ¢ ¤¨à¥ªâ¨¢¥ \var{\{\$APPTYPE\}}
+scan_w_app_type_not_support=02045_W_APPTYPE ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ §­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$APPTYPE\}} ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ­¥ª®â®à묨 ®¯¥à æ¨®­­ë¬¨ á¨á⥬ ¬¨.
+scan_w_description_not_support=02046_W_DESCRIPTION ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ §­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$DESCRIPTION\}} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ­  ¤ ­­®© Ž‘ ­ §­ ç¥­¨ï.
+scan_n_version_not_support=02047_N_VERSION ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ §­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$VERSION\}} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ­  ¤ ­­®© Ž‘ ­ §­ ç¥­¨ï.
+scan_n_only_exe_version=02048_N_VERSION ¨á¯®«ì§ã¥âáï ⮫쪮 ¤«ï .EXE ¨ .DLL ¨á室­¨ª®¢
+% „¨à¥ªâ¨¢  \var{\{\$VERSION\}} ¨á¯®«ì§ã¥âáï ⮫쪮 ¤«ï .EXE ¨ .DLL ¨á室­¨ª®¢.
+scan_w_wrong_version_ignored=02049_W_¥¢¥à­ë© ä®à¬ â VERSION ¤«ï ¤¨à¥ªâ¨¢ë "$1"
+% ”®à¬ â ¤¨à¥ªâ¨¢ë \var{\{\$VERSION\}} - major_version.minor_version
+% £¤¥ major_version ¨ minor_version ïîâáï á«®¢ ¬¨.
+scan_e_illegal_asmmode_specifier=02050_E_H¥¢¥à­ë© áâ¨«ì  áᥬ¡«¥p : "$1"
+% ਠ®¯à¥¤¥«¥­¨¨ ०¨¬   áᥬ¡«¥à  ¤¨à¥ªâ¨¢®© \var{\{\$ASMMODE xxx\}}
+% 㪠§ ­ ­¥¢¥à­ë© ०¨¬.
+scan_w_no_asm_reader_switch_inside_asm=02051_W_‘¬¥­  ⨯   áᥬ¡«¥p  ­¥¢®§¬®¦­  ¢­ãâਠ¡«®ª , "$1" ¡y¤¥â ¤¥©á⢮¢ âì ⮫쪮 ¤«ï á«¥¤yî饣® ¡«®ª 
+% ‚­ãâਠ áᥬ¡«¥à­®£® ¡«®ª  ­¥¢®§¬®¦­® ¯¥à¥ª«î祭¨¥  áᥬ¡«¥à  á ®¤­®£® ⨯  ­  ¤à㣮©.
+% “ª § ­­ë© ०¨¬ ­ ç­¥â ¤¥©á⢮¢ âì ⮫쪮 ¤«ï á«¥¤ãî饣®  áᥬ¡«¥à­®£® ¡«®ª .
+scan_e_wrong_switch_toggle=02052_E_H¥¢¥p­®¥ ¯¥à¥ª«î祭¨¥ ०¨¬ , ¨á¯®«ì§ã©â¥ ON/OFF ¨«¨ +/-
+% „«ï ¯¥à¥ª«î祭¨ï ०¨¬®¢ á«¥¤ã¥â ¨á¯®«ì§®¢ âì ON ¨«¨ OFF, «¨¡® + ¨«¨ -
+scan_e_resourcefiles_not_supported=02053_E_” ©«ë p¥áypᮢ ­¥ ¯®¤¤¥à¦¨¢ îâáï Ž‘ ­ §­ ç¥­¨ï
+% ޝ¥à æ¨®­­ ï á¨á⥬ , ¤«ï ª®â®à®© ¯à®¨á室¨â ª®¬¯¨«ïæ¨ï, ­¥ ¯®¤¤¥à¦¨¢ ¥â ä ©«ë à¥áãàᮢ.
+scan_w_include_env_not_found=02054_W_‚ª«îç ¥¬ ï ¯¥p¥¬¥­­ ï ®ªpy¦¥­¨ï "$1" ­¥ ­ ©¤¥­ 
+% “ª § ­­ ï ¯¥à¥¬¥­­ ï ®ªà㦥­¨ï ­¥ ­ ©¤¥­ , ¢¬¥áâ® ­¥¥ ¡ã¤¥â ¯®¤áâ ¢«¥­  ¯ãáâ ï áâப .
+scan_e_invalid_maxfpureg_value=02055_E_¥¢¥à­®¥ §­ ç¥­¨¥ ¤«ï ¬ ªá¨¬ «ì­®£® ç¨á«  ॣ¨áâ஢ á®¯à®æ¥áá®à 
+% „®¯ãá⨬묨 §­ ç¥­¨ï¬¨ ¤«ï í⮩ ¤¨à¥ªâ¨¢ë ïîâáï 0..8 ¨ NORMAL/DEFAULT
+scan_w_only_one_resourcefile_supported=02056_W_„«ï í⮩ á¨áâ¥¬ë ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ®¤¨­ ä ©« à¥áãàᮢ
+% „«ï ®¯¥à æ¨®­­®© á¨áâ¥¬ë ­ §­ ç¥­¨ï ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ®¤¨­ ä ©« à¥áãàᮢ.
+% 㤥⠨ᯮ«ì§®¢ ­ ¯¥à¢ë© ­ ©¤¥­­ë© ä ©«, ®áâ «ì­ë¥ ¡ã¤ãâ ¨£­®à¨à®¢ ­ë.
+scan_w_macro_support_turned_off=02057_W_®¤¤¥p¦ª  ¬ ªp®á®¢ ®âª«î祭 
+% Ž¡­ à㦥­® ®¡ê¥­¨¥ ¬ ªà®á , ­® ०¨¬ ¯®¤¤¥à¦ª¨ ¬ ªà®á®¢ ®âª«î祭,
+% ¯®í⮬㠮¡ê¥­¨¥ ¡ã¤¥â ¨£­®à¨à®¢ ­®. „«ï ¢ª«î祭¨ï ¯®¤¤¥à¦ª¨ ¬ ªà®á®¢ ¨á¯®«ì§ã©â¥
+% -Sm ¢ ª®¬ ­¤­®© áâப¥ ¨«¨ ¤®¡ ¢ì⥠{$MACRO ON} ¢ ¨á室­ë© ä ©«.
+scan_e_invalid_interface_type=02058_E_¥¢¥à­ë© ⨯ interface. „®¯ãá⨬ë ⮫쪮 COM, COBRA ¨«¨ DEFAULT
+% “ª § ­­ë© ⨯ ¨­â¥àä¥©á  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï.
scan_w_appid_not_support=02059_W_APPID ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¤«ï PalmOS
-% The \var{\{\$APPID\}} directive is only supported for the PalmOS target.
+% „¨à¥ªâ¨¢  \var{\{\$APPID\}} ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¯à¨ ª®¬¯¨«ï樨 ¤«ï PalmOS.
scan_w_appname_not_support=02060_W_APPNAME ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¤«ï PalmOS
-% The \var{\{\$APPNAME\}} directive is only supported for the PalmOS target.
-scan_e_string_exceeds_255_chars=02061_E_Š®­áâ ­â  áâப ­¥ ¬®¦¥â ¡ëâì ¡®«¥¥ 祬 255 ᨬ¢®«®¢
-% A single string constant can contain at most 255 chars. Try splitting up the
-% string in multiple smaller parts and concatenate them with a + operator.
+% „¨à¥ªâ¨¢  \var{\{\$APPNAME\}} ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¯à¨ ª®¬¯¨«ï樨 ¤«ï PalmOS.
+scan_e_string_exceeds_255_chars=02061_E_‘âப®¢ ï ª®­áâ ­â  ­¥ ¬®¦¥â ¡ëâì ¤«¨­­¥¥ 255 ᨬ¢®«®¢
+% ޤ­  áâப®¢ ï ª®­áâ ­â  ¬®¦¥â ᮤ¥à¦ âì 255 ᨬ¢®«®¢ ¬ ªá¨¬ã¬. ®«¥¥ ¤«¨­­ãî
+% áâபã á«¥¤ã¥â à §¡¨âì ­  ç á⨠¨ ᮥ¤¨­¨âì ¨å ®¯¥à â®à®¬ +.
+scan_f_include_deep_ten=02062_F_“஢¥­ì ¢«®¦¥­¨ï ¢ª«îç ¥¬ëå ä ©«®¢ ¯à¥¢®á室¨â 16.
+% ਠç⥭¨¨ ¢ª«îç ¥¬ëå ä ©«®¢ ¤®á⨣­ãâ ã஢¥­ì ¢«®¦¥­­®á⨠16.
+% Š®¬¯¨«ïâ®à ¯à¥ªà é ¥â à ¡®âã, â.ª. íâ® ¬®¦¥â ïâìáï ¯à¨§­ ª®¬ ४ãàᨨ.
+scan_e_too_many_push=02063_F_‘«¨èª®¬ ¬­®£® ã஢­¥© PUSH
+% „®¯ãáâ¨¬ë© ¬ ªá¨¬ã¬ á®áâ ¢«ï¥â 20. â  ®è¨¡ª  ¢®§­¨ª ¥â ⮫쪮 ¢ ०¨¬¥ MacPas.
+scan_e_too_many_pop=02064_E_„¨à¥ªâ¨¢  POP ¡¥§ ¯à¥¤è¥áâ¢ãî饩 PUSH
+% â  ®è¨¡ª  ¢®§­¨ª ¥â ⮫쪮 ¢ ०¨¬¥ MacPas.
+scan_e_error_macro_lacks_value=02065_E_Œ ªà®á ¨«¨ ¯¥à¥¬¥­­ ï ¢à¥¬¥­¨ ª®¬¯¨«ï樨 "$1" ­¥ ¨¬¥¥â ¯à¨á¢®¥­­®£® §­ ç¥­¨ï
+% ˆ§-§  í⮣® ¢ëà ¦¥­¨¥ ¢à¥¬¥­¨ ª®¬¯¨«ï樨 ­¥ ¬®¦¥â ¡ëâì ¢ëç¨á«¥­®.
+scan_e_wrong_switch_toggle_default=02066_E_¥¢¥à­®¥ ¯¥à¥ª«î祭¨¥ ०¨¬ , ¨á¯®«ì§ã©â¥ ON/OFF/DEFAULT ¨«¨ +/-/*
+% ‘«¥¤ã¥â ¯¥à¥ª«îç âì ०¨¬, ¨á¯®«ì§ãï ON ¨«¨ OFF ¨«¨ DEFAULT, «¨¡® + ¨«¨ - ¨«¨ *
+scan_e_mode_switch_not_allowed=02067_E_„¨à¥ªâ¨¢  ०¨¬  "$1" §¤¥áì ­¥ ¤®¯ãá⨬ 
+% „¨à¥ªâ¨¢  ०¨¬  ª®¬¯¨«ï樨 㦥 ¡ë«  ®¡à ¡®â ­ , ¨«¨, ¢ á«ãç ¥ ०¨¬  -Mmacpas,
+% ¯¥à¥ª«î祭¨¥ ०¨¬  ¯à®¨á室¨â ¯®á«¥ UNIT.
+scan_e_error_macro_undefined=02068_E_¥à¥¬¥­­ ï ¢à¥¬¥­¨ ª®¬¯¨«ï樨 ¨«¨ ¬ ªà®á "$1" ­¥ ®¯à¥¤¥«¥­.
+% ˆ§-§  í⮣® ¢ëà ¦¥­¨¥ ¢à¥¬¥­¨ ª®¬¯¨«ï樨 ­¥ ¬®¦¥â ¡ëâì ¢ëç¨á«¥­®. ’®«ìª® ¤«ï ०¨¬  MacPas.
+scan_e_utf8_bigger_than_65535=02069_E_Ž¡­ à㦥­ ª®¤ UTF-8, ¯à¥¢ëè î騩 65535
+% \fpc ®¡à ¡ â뢠¥â áâப¨ utf-8 ª ª widestring, â.¥. ª®¤ë ᨬ¢®«®¢ ®£à ­¨ç¥­ë 65535
+scan_e_utf8_malformed=02070_E_¥¢¥à­ ï UTF-8 áâப 
+% „ ­­ ï áâப  ­¥ ï¥âáï ¤®¯ãá⨬®© ¢ ª®¤¨à®¢ª¥ UTF-8
+scan_c_switching_to_utf8=02071_C_ ©¤¥­  ᨣ­ âãà  UTF-8, ¨á¯®«ì§ãî ª®¤¨à®¢ªã UTF-8
+% Š®¬¯¨«ïâ®à ®¡­ à㦨« ᨣ­ âãàã UTF-8 (\$ef, \$bb, \$bf) ¢ ­ ç «¥ ä ©« ,
+% ¯®í⮬㠮­ ¡ã¤¥â ®¡à ¡ â뢠âì ä ©« ª ª UTF-8
+scan_e_compile_time_typeerror=02072_E_‚ëà ¦¥­¨¥ ¢à¥¬¥­¨ ª®¬¯¨«ï樨: ަ¨¤ «®áì $1, ­® ¯®«ã祭® $2 ¢ $3
+% Žè¨¡ª  ⨯®¢ ¢ ¢ëà ¦¥­¨¨ ¢à¥¬¥­¨ ª®¬¯¨«ï樨.
+scan_n_app_type_not_support=02073_N_APPTYPE ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ §­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$APPTYPE\}} ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¤«ï ­¥ª®â®àëå ®¯¥à æ¨®­­ëå á¨á⥬.
+scan_e_illegal_optimization_specifier=02074_E_¥¢¥à­ë© ⨯ ®¯â¨¬¨§ æ¨¨ "$1"
+% ‚ ¤¨à¥ªâ¨¢¥ \var{\{\$OPTIMIZATION xxx\}} 㪠§ ­® ­¥¢¥à­®¥ §­ ç¥­¨¥.
+scan_w_setpeflags_not_support=02075_W_SETPEFLAGS ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ §­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$SETPEFLAGS\}} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ®¯¥à æ¨®­­®© á¨á⥬®© ­ §­ ç¥­¨ï.
+scan_w_imagebase_not_support=02076_W_IMAGEBASE ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ § ­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$IMAGEBASE\}} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ®¯¥à æ¨®­­®© á¨á⥬®© ­ §­ ç¥­¨ï.
+scan_w_minstacksize_not_support=02077_W_MINSTACKSIZE ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ § ­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$MINSTACKSIZE\}} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ®¯¥à æ¨®­­®© á¨á⥬®© ­ §­ ç¥­¨ï.
+scan_w_maxstacksize_not_support=02078_W_MAXSTACKSIZE ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Ž‘ ­ § ­ ç¥­¨ï
+% „¨à¥ªâ¨¢  \var{\{\$MAXSTACKSIZE\}} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ®¯¥à æ¨®­­®© á¨á⥬®© ­ §­ ç¥­¨ï.
+scanner_e_illegal_warn_state=02079_E_¥¢¥à­ë© ०¨¬ ¤¨à¥ªâ¨¢ë $WARN
+% „¨à¥ªâ¨¢  \$warn ¤®¯ã᪠¥â ⮫쪮 ON ¨ OFF ¤«ï 㪠§ ­¨ï ०¨¬ 
+scan_e_only_packset=02080_E_¥¢¥à­®¥ §­ ç¥­¨¥ 㯠ª®¢ª¨ ¬­®¦¥áâ¢
+% „®¯ãá⨬묨 §­ ç¥­¨ï¬¨ ïîâáï 0, 1, 2, 4, 8, DEFAULT ¨ NORMAL
+scan_w_pic_ignored=02081_W_„¨à¥ªâ¨¢  ¨«¨ ª«îç PIC ¨£­®à¨à®¢ ­ë
+% ¥ª®â®àë¥ ¯« âä®à¬ë, ­ ¯à¨¬¥à, Windows, ­¥ ¯®¤¤¥à¦¨¢ îâ ¨ ­¥ âॡãîâ ¯®§¨æ¨®­­®-­¥§ ¢¨á¨¬ë© ª®¤ (PIC),
+% ¯®í⮬ã ᮮ⢥âáâ¢ãî騥 ¤¨àª¥ªâ¨¢ë ¨ ª«îç¨ ª®¬ ­¤­®© áâப¨ ¤«ï ­¨å ¨£­®à¨àãîâáï.
+scan_w_unsupported_switch_by_target=02082_W_„¨à¥ªâ¨¢  "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ⥪ã饩 ¯« âä®à¬ë ­ §­ ç¥­¨ï
+% ¥ª®â®àë¥ ¤¨à¥ªâ¨¢ë, ­ ¯à¨¬¥à, \$E, ¯®¤¤¥à¦¨¢ îâáï ­¥ ¤«ï ¢á¥å ¯« âä®à¬.
+scan_w_frameworks_darwin_only=02084_W_„¨à¥ªâ¨¢ë ¤«ï Framework ¯®¤¤¥à¦¨¢ îâáï ⮫쪮 ¤«ï Darwin/Mac OS X
+% Š®­æ¥¯æ¨ï ä३¬¢®àª®¢ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï FPC ¤«ï ®¯¥à æ¨®­­ëå á¨á⥬, ®â«¨ç­ëå ®â Darwin/Mac OS X.
+scan_e_illegal_minfpconstprec=02085_E_¥¢¥à­®¥ 㪠§ ­¨¥ ¬¨­¨¬ «ì­®© â®ç­®á⨠ª®­áâ ­â á ¯« ¢ î饩 § ¯ï⮩ "$1"
+% „®¯ãá⨬묨 §­ ç¥­¨ï¬¨ ïîâáï default, 32 ¨ 64, ª®â®àë¥ ®§­ ç îâ ᮮ⢥âá⢥­­® ¬¨­¨¬ «ì­ãî (®¡ëç­® 32 ¡¨â ), 32 ¡¨â ¨ 64 ¡¨â â®ç­®áâì.
+scan_w_multiple_main_name_overrides=02086_W_Œ­®£®ªà â­®¥ 㪠§ ­¨¥ ¨¬¥­¨ ¯à®æ¥¤ãàë "main", ¯¥à¢®­ ç «ì­® ¡ë«® "$1"
+% ˆ¬ï ®á­®¢­®© â®çª¨ ¢å®¤  㪠§ ­® ¡®«¥¥ ®¤­®£® à § . 㤥⠨ᯮ«ì§®¢ ­® ⮫쪮 ¯®á«¥¤­¥¥ ¨¬ï.
% \end{description}
-
#
-# ‘¨­â ªá¨ç¥áª¨©  ­ «¨§ â®à
+# Parser
+#
+# 03252 is the last used one
#
% \section {á®®¡é¥­¨ï ᨭ⠪á¨ç¥áª®£®  ­ «¨§ â®à }
% â®â à §¤¥« ¯¥à¥ç¨á«ï¥â ¢á¥ á®®¡é¥­¨ï ᨭ⠪á¨ç¥áª®£®  ­ «¨§ â®à .
-% ‘¨­â ªá¨ç¥áª¨©  ­ «¨§ â®à § ¡®â¨âáï ® ᥬ ­â¨ª¥ ï§ëª , â® ¥áâì ®­
-% ®¯à¥¤¥«ï¥â, ¯à ¢¨«¥­ «¨ ¢ è  áª «ì.
-% \begin {®¯¨á ­¨¥}
-parser_e_syntax_error=03000_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ( ­ «¨§ â®à)
-% An error against the Turbo Pascal language was encountered. This happens
-% typically when an illegal character is found in the sources file.
-parser_w_proc_far_ignored=03001_W_p®æ¥¤yp  ¨¬¥¥â ⨯ FAR - ¨£­®p¨py¥¬
-% This is a warning. \var{FAR} is a construct for 8 or 16 bit programs. Since
-% the compile generates 32 bit programs, it ignores this directive.
-parser_w_proc_near_ignored=03002_W_p®æ¥¤yp  ¨¬¥¥â ⨯ NEAR - ¨£­®p¨py¥¬
-% This is a warning. \var{NEAR} is a construct for 8 or 16 bit programs. Since
-% the compile generates 32 bit programs, it ignores this directive.
-parser_w_proc_interrupt_ignored=03003_W_à®æ¥¤ãà­ë© ⨯ INTERRUPT ¨£­®à¨àã¥âáï ¤«ï ­¥ i386 ¯à®æ¥áá®à®¢
-% This is a warning. \var{INTERRUPT} is a i386 specific construct
-% and is ignored for other processors.
+% ‘¨­â ªá¨ç¥áª¨©  ­ «¨§ â®à ®áãé¥á⢫ï¥â ᥬ ­â¨ç¥áª¨©  ­ «¨§, â.¥.
+% ®¯à¥¤¥«ï¥â ¯à ¢¨«ì­®áâì ¢ëà ¦¥­¨©  áª «ï.
+% \begin{description}
+parser_e_syntax_error=03000_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¢  ­ «¨§ â®à¥
+% Ž¡­ à㦥­  ®è¨¡ª  ᨭ⠪á¨á  ï§ëª . Ž¡ëç­® ¯à®¨á室¨â, ª®£¤  ¢ ¨á室­®¬ ä ©«¥
+% ¢áâà¥ç ¥âáï ­¥¤®¯ãáâ¨¬ë© á¨¬¢®«.
parser_e_dont_nest_interrupt=03004_E_INTERRUPT ¯à®æ¥¤ãà  ­¥ ¬®¦¥â ¡ëâì ¢«®¦¥­­®©
-% An \VAR{INTERRUPT} procedure must be global.
-parser_w_proc_directive_ignored=03005_W_à®æ¥¤ãà­ë© ⨯ $1 ¨£­®à¨àã¥âáï
-% This is a warning. \var{REGISTER},\var{REINTRODUCE} is ignored by FPC programs for now.
-% This is introduced first for Delphi compatibility.
-parser_e_no_overload_for_all_procs=03006_E_¥ ¢á¥ ®¯à¥¤¥«¥­¨ï $1 ®¯à¥¤¥«¥­ë ª ª OVERLOAD
-% When you want to use overloading using the \var{OVERLOAD} directive, then
-% all declarations need to have \var{OVERLOAD} specified.
-parser_e_no_dll_file_specified=03007_E_DLL-ä ©« ­¥ yª § ­
-% No longer in use.
-parser_e_export_name_double=03008_E_ˆ¬ï äy­ªæ¨¨ íªá¯®pâ¨py¥âáï ¤¢ ¦¤ë $1
-% Exported function names inside a specific DLL must all be different
-parser_e_export_ordinal_double=03009_E_ˆ­¤¥ªá äy­ªæ¨¨ íªá¯®pâ¨py¥âáï ¤¢ ¦¤ë $1
-% Exported function names inside a specific DLL must all be different
-parser_e_export_invalid_index=03010_E_H¥¢¥p­ë© ¨­¤¥ªá y íªá¯®pâ¨py¥¬®© äy­ªæ¨¨
-% DLL function index must be in the range \var{1..\$FFFF}
-parser_w_parser_reloc_no_debug=03011_W_¥à¥¬¥é ¥¬ë© DLL/EXE ä ©« $1 ®â« ¤®ç­ãî ¨­ä®à¬ æ¨î ­¥ ᮤ¥à¦¨â, ®âª«î祭®.
-parser_w_parser_win32_debug_needs_WN=03012_W_„«ï ¯®¤¤¥à¦ª¨ ®â« ¤ª¨ Win32-ª®¤ , ¢ ¬ ­¥®¡å®¤¨¬® ®âª«îç âì ¯¥à¥¬¥é¥­¨¥ á ®¯æ¨¥© -WN
-% Stabs info is wrong for relocatable DLL or EXES use -WN
-% if you want to debug win32 executables.
+% à®æ¥¤ãà  â¨¯  \VAR{INTERRUPT} ¤®«¦­  ¡ëâì £«®¡ «ì­®©.
+parser_w_proc_directive_ignored=03005_W_„¨à¥ªâ¨¢  ¯à®æ¥¤ãàë "$1" ¨£­®à¨à®¢ ­ 
+% “ª § ­­ë© ¬®¤¨ä¨ªâ®à ⨯  ¯à®æ¥¤ãàë ¨£­®à¨à®¢ ­ ª®¬¯¨«ïâ®à®¬.
+parser_e_no_overload_for_all_procs=03006_E_¥ ¢á¥ ®¡ê¥­¨ï "$1" ¯¥à¥£à㦥­ë (®¯à¥¤¥«¥­ë ª ª OVERLOAD)
+% ਠ¯¥à¥£à㧪¥ ¯à®æ¥¤ãà á ¯®¬®éìî ¤¨à¥ªâ¨¢ë \var{OVERLOAD}, ¥¥ á«¥¤ã¥â
+% 㪠§ë¢ âì ¤«ï ¢á¥å ®¡ê¥­¨© ¯¥à¥£à㦥­­®© ¯à®æ¥¤ãàë.
+parser_e_export_name_double=03008_E_ˆ¬ï äy­ªæ¨¨ "$1" íªá¯®àâ¨àã¥âáï ¤¢ ¦¤ë
+% ‚ᥠä㭪樨, íªá¯®àâ¨àã¥¬ë¥ ¨§ ®¤­®© DLL, ¤®«¦­ë ¨¬¥âì à §«¨ç­ë¥ ¨¬¥­ .
+parser_e_export_ordinal_double=03009_E_ˆ­¤¥ªá ä㭪樨 $1 íªá¯®àâ¨àã¥âáï ¤¢ ¦¤ë
+% ‚ᥠä㭪樨, íªá¯®àâ¨àã¥¬ë¥ ¨§ ®¤­®© DLL, ¤®«¦­ë ¨¬¥âì à §«¨ç­ë¥ ¨­¤¥ªáë.
+parser_e_export_invalid_index=03010_E_H¥¢¥p­ë© ¨­¤¥ªá íªá¯®pâ¨py¥¬®© äy­ªæ¨¨
+% ˆ­¤¥ªá íªá¯®àâ¨à㥬®© ä㭪樨 ¤®«¦¥­ ¡ëâì ¢ ¤¨ ¯ §®­¥ \var{1..\$FFFF}
+parser_w_parser_reloc_no_debug=03011_W_Žâ« ¤®ç­ ï ¨­ä®à¬ æ¨ï ¢ ¯¥à¥¬¥é ¥¬®¬ DLL/EXE ä ©«¥ $1 ­¥ à ¡®â®á¯®á®¡­ , ®âª«î祭 .
+% ‚ ­ áâ®ï饥 ¢à¥¬ï ¢ª«î祭¨¥ ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨ ¢ ¯¥à¥¬¥é ¥¬ãî DLL ­¥¢®§¬®¦­®.
+parser_w_parser_win32_debug_needs_WN=03012_W_„«ï ®â« ¤ª¨ win32-ª®¤ , á«¥¤ã¥â ®âª«îç¨âì ¯¥à¥¬¥é¥­¨¥ ª«î箬 -WN
+% Žâ« ¤®ç­ ï ¨­ä®à¬ æ¨ï Stabs ­¥ à ¡®â ¥â ¢ ¯¥à¥¬¥é ¥¬ëå DLL ¨«¨ EXE ä ©« å, ¨á¯®«ì§ã©â¥ -WN
+% ¥á«¨ âॡã¥âáï ®â« ¤ª .
parser_e_constructorname_must_be_init=03013_E_Š®­áâpyªâ®p ¤®«¦¥­ ¨¬¥âì ¨¬ï INIT
-% You are declaring a constructor with a name which isn't \var{init}, and the
-% \var{-Ss} switch is in effect. See the \var{-Ss} switch (\seeo{Ss}).
+% Š®­áâàãªâ®à ®¡ê¥­ á ¨¬¥­¥¬, ®â«¨ç­ë¬ ®â \var{init}, ¨ ¤¥©áâ¢ã¥â ª«îç
+% \var{-Ss}. ‘¬. ®¯¨á ­¨¥ ¤¥©áâ¢¨ï ª«îç  \var{-Ss} (\seeo{Ss}).
parser_e_destructorname_must_be_done=03014_E_„¥áâpyªâ®p ¤®«¦¥­ ¨¬¥âì ¨¬ï DONE
-% You are declaring a constructor with a name which isn't \var{done}, and the
-% \var{-Ss} switch is in effect. See the \var{-Ss} switch (\seeo{Ss}).
-parser_e_illegal_open_parameter=03015_E_H¥¯p ¢¨«ì­® ®ä®p¬«¥­­ë¥ '®âªpëâë¥ ¯ p ¬¥âpë'
-% You are trying to use the wrong type for an open parameter.
-parser_e_proc_inline_not_supported=03016_E_p®æ¥¤yp­ë© ⨯ INLINE ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% You tried to compile a program with C++ style inlining, and forgot to
-% specify the \var{-Si} option (\seeo{Si}). The compiler doesn't support C++
-% styled inlining by default.
-parser_w_priv_meth_not_virtual=03017_W_Private ¬¥â®¤ë ­¥ ¬®£yâ ¡ëâì ¢¨pây «ì­ë¬¨
-% You declared a method in the private part of a object (class) as
-% \var{virtual}. This is not allowed. Private methods cannot be overridden
-% anyway.
+% „¥áâàãªâ®à ®¡ê¥­ á ¨¬¥­¥¬, ®â«¨ç­ë¬ ®â \var{done}, ¨ ¤¥©áâ¢ã¥â ª«îç
+% \var{-Ss}. ‘¬. ®¯¨á ­¨¥ ¤¥©áâ¢¨ï ª«îç  \var{-Ss} (\seeo{Ss}).
+parser_e_proc_inline_not_supported=03016_E_„¨à¥ªâ¨¢  INLINE ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
+% ਠª®¬¯¨«ï樨 ¯à®£à ¬¬ë á inlining ¢ á⨫¥ C++ ­¥ ¡ë« ¨á¯®«ì§®¢ ­ ª«îç
+% \var{-Si} (\seeo{Si}). ® 㬮«ç ­¨î ª®¬¯¨«ïâ®à ­¥ ¯®¤¤¥à¦¨¢ ¥â inlining ¢ á⨫¥ C++.
parser_w_constructor_should_be_public=03018_W_Š®­áâpyªâ®p ¤®«¦¥­ ¡ëâì public
-% Constructors must be in the 'public' part of an object (class) declaration.
+% Š®­áâàãªâ®àë ¤®«¦­ë ¡ëâì ¢ 'public' ᥪ樨 ®¡ê¥­¨ï ®¡ê¥ªâ  (ª« áá ).
parser_w_destructor_should_be_public=03019_W_„¥áâpyªâ®p ¤®«¦¥­ ¡ëâì public
-% Destructors must be in the 'public' part of an object (class) declaration.
+% „¥áâàãªâ®àë ¤®«¦­ë ¡ëâì ¢ 'public' ᥪ樨 ®¡ê¥­¨ï ®¡ê¥ªâ  (ª« áá ).
parser_n_only_one_destructor=03020_N_Š« áá ¬®¦¥â ¨¬¥âì ⮫쪮 ®¤¨­ ¤¥áâpyªâ®p
-% You can declare only one destructor for a class.
-parser_e_no_local_objects=03021_E_ޝp¥¤¥«¥­¨ï «®ª «ì­ëå ª« áᮢ ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% Classes must be defined globally. They cannot be defined inside a
-% procedure or function
-parser_f_no_anonym_objects=03022_F_ޝp¥¤¥«¥­¨ï ­¥¨§¢¥áâ­ëå ª« áᮢ ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% An invalid object (class) declaration was encountered, i.e. an
-% object or class without methods that isn't derived from another object or
-% class. For example:
+% „«ï ª« áá  ¬®¦­® ®¯à¥¤¥«¨âì ⮫쪮 ®¤¨­ ¤¥áâàãªâ®à.
+parser_e_no_local_objects=03021_E_‹®ª «ì­ë¥ ®¡ê¥­¨ï ª« áᮢ ­¥ ¯®¤¤¥p¦¨¢ îâáï
+% Š« ááë ¤®«¦­ë ¡ëâì ®¡ê¥­ë £«®¡ «ì­®. Ž­¨ ­¥ ¬®£ãâ ¡ëâì ®¡ê¥­ë ¢­ãâà¨
+% ¯à®æ¥¤ãàë ¨«¨ ä㭪樨.
+parser_f_no_anonym_objects=03022_F_€­®­¨¬­ë¥ ®¡ê¥­¨ï ª« áᮢ ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
+% ‚áâà¥ç¥­® ­¥¤®¯ãá⨬®¥ ®¡ê¥­¨¥ ®¡ê¥ªâ  (ª« áá ), â.¥. ®¡ê¥ªâ ¨«¨ ª« áá,
+% ­¥ ¨¬¥î騩 ¬¥â®¤®¢ ¨ ­¥ ã­ á«¥¤®¢ ­­ë© ®â ¤à㣮£® ®¡ê¥ªâ  (ª« áá ).
+%  ¯à¨¬¥à, ®¡ê¥­¨¥:
% \begin{verbatim}
% Type o = object
% a : longint;
% end;
% \end{verbatim}
-% will trigger this error.
-parser_object_has_no_vmt=03023_E_Ž¡ê¥ªâ $1 ­¥ ï¥âáï â ¡«¨æ¥© VMT
+% ¢ë§®¢¥â íâ㠮訡ªã.
+parser_n_object_has_no_vmt=03023_N_Ž¡ê¥ªâ "$1" ­¥ ¨¬¥¥â â ¡«¨æë VMT
+% â® § ¬¥âª  ® ⮬, çâ® ®¡ê¥­­ë© ®¡ê¥ªâ ­¥ ¨¬¥¥â â ¡«¨æë ¢¨àâã «ì­ëå ¬¥â®¤®¢ (VMT).
parser_e_illegal_parameter_list=03024_E_H¥¢¥p­ë© ᯨ᮪ ¯ p ¬¥âp®¢
-% You are calling a function with parameters that are of a different type than
-% the declared parameters of the function.
-parser_e_wrong_parameter_type=03025_E_H¥¯p ¢¨«ì­® ®¯p¥¤¥«¥­ ⨯ ¯ p ¬¥âp  ¤«ï  p£y¬¥­â  $1
-% There is an error in the parameter list of the function or procedure.
-% The compiler cannot determine the error more accurate than this.
-parser_e_wrong_parameter_size=03026_E_H¥¯p ¢¨«ì­® ®¯p¥¤¥«¥­® ª®«¨ç¥á⢮ ¯ p ¬¥âp®¢
-% There is an error in the parameter list of the function or procedure,
-% the number of parameters is not correct.
-parser_e_overloaded_no_procedure=03027_E_¥à¥£à㦥­­ë© ¨¤¥­â¨ä¨ª â®p $1 ­¥ ï¥âáï äy­ªæ¨¥©
-% The compiler encountered a symbol with the same name as an overloaded
-% function, but it isn't a function it can overload.
-parser_e_overloaded_have_same_parameters=03028_E_¥à¥£à㦥­­ë¥ äy­ªæ¨¨ ¤®«¦­ë ¨¬¥âì â®â-¦¥ ᯨ᮪ ¯ p ¬¥âp®¢
-% You're declaring overloaded functions, but with the same parameter list.
-% Overloaded function must have at least 1 different parameter in their
-% declaration.
-parser_e_header_dont_match_forward=03029_E_‡ £®«®¢®ª äy­ªæ¨¨ ­¥ ᮮ⢥âáâ¢y¥â ¯p¥¤ë¤y饬y ®¯p¥¤¥«¥­¨î ¢ forward $1
-% You declared a function with same parameters but
-% different result type or function modifiers.
-parser_e_header_different_var_names=03030_E_‡ £®«®¢®ª äy­ªæ¨¨ $1 ­¥ ᮮ⢥âáâ¢y¥â ¯p¥¤ë¤y饬y ®¯p¥¤¥«¥­¨î ¢ forward : ¨¬¥­  ¯¥p¥¬¥­­ëå ¨§¬¥­¥­ë $2 => $3
-% You declared the function in the \var{interface} part, or with the
-% \var{forward} directive, but define it with a different parameter list.
-parser_n_duplicate_enum=03031_N_‡­ ç¥­¨ï ¢ ⨯ å ¯¥à¥ç¨á«¥­¨ï ¤®«¦­ë ¡ëâì ¢®§à áâ î騬¨
-% \fpc allows enumeration constructions as in C. Given the following
-% declaration two declarations:
+% ”ã­ªæ¨ï ¢ë§ë¢ ¥âáï á ¯ à ¬¥âà ¬¨, ⨯ ª®â®àëå ®â«¨ç ¥âáï ®â ⨯®¢ ¯ à ¬¥â஢, ¨á¯®«ì§®¢ ­­ëå
+% ¯à¨ ®¡ê¥­¨¨ ä㭪樨.
+parser_e_wrong_parameter_size=03026_E_¥¢¥à­®¥ ª®«¨ç¥á⢮ ¯ p ¬¥âp®¢ ¯à¨ ¢ë§®¢¥ "$1"
+% Žè¨¡ª  ¢ ᯨ᪥ ¯ à ¬¥â஢ ¢ë§ë¢ ¥¬®© ¯à®æ¥¤ãàë ¨«¨ ä㭪樨, ª®«¨ç¥á⢮ ¯ à ¬¥â஢ ­¥¢¥à­®.
+parser_e_overloaded_no_procedure=03027_E_¥à¥£à㦥­­ë© ¨¤¥­â¨ä¨ª â®p "$1" ­¥ ï¥âáï äy­ªæ¨¥©
+% Š®¬¯¨«ïâ®à ®¡­ à㦨« ᨬ¢®« á ⥬ ¦¥ ¨¬¥­¥¬, çâ® ¨ ¯¥à¥£à㦥­­ ï äã­ªæ¨ï, ­® ­¥ ïî騩áï ä㭪樥©.
+parser_e_overloaded_have_same_parameters=03028_E_¥à¥£à㦥­­ë¥ äy­ªæ¨¨ ¨¬¥îâ ®¤¨­ ª®¢ë© ᯨ᮪ ¯ p ¬¥âp®¢
+% ®¯ë⪠ ®¡ê¥­¨ï ¯¥à¥£à㦥­­ëå ä㭪権 á ®¤­¨¬ ¨ ⥬ ¦¥ ᯨ᪮¬ ¯ à ¬¥â஢.
+% —â®¡ë ¯¥à¥£à㧪  ¡ë«  ¢®§¬®¦­ , ¯® ªà ©­¥© ¬¥à¥ ®¤¨­ ¨§ ¯ à ¬¥â஢ ¤®«¦¥­ ®â«¨ç âìáï.
+parser_e_header_dont_match_forward=03029_E_‡ £®«®¢®ª äy­ªæ¨¨ ­¥ ᮮ⢥âáâ¢y¥â ¯p¥¤ë¤y饬y ®¡ê¥­¨î "$1"
+% Ž¡ê¥­  äã­ªæ¨ï á ⥬ ¦¥ ᯨ᪮¬ ¯ à ¬¥â஬, ­® ®â«¨ç î騬áï ⨯®¬ १ã«ìâ â  «¨¡® ¬®¤¨ä¨ª â®à®¬.
+parser_e_header_different_var_names=03030_E_‡ £®«®¢®ª äy­ªæ¨¨ "$1" ­¥ ᮮ⢥âáâ¢y¥â ¯p¥¤ë¤y饬y ®¯p¥¤¥«¥­¨î ¢ forward : ¨§¬¥­ï¥âáï ¨¬ï ¯¥à¥¬¥­­®© $2 => $3
+% ”ã­ªæ¨ï ®¡ê¥­  ¢ ᥪ樨 \var{interface} «¨¡® á ¤¨à¥ªâ¨¢®©
+% \var{forward},   § â¥¬ ®¯à¥¤¥«¥­  á ®â«¨ç î騬áï ᯨ᪮¬ ¯ à ¬¥â஢.
+parser_n_duplicate_enum=03031_N_‡­ ç¥­¨ï ¢ ¯¥à¥ç¨á«ï¥¬ëå ⨯ å ¤®«¦­ë ¡ëâì ¢®§à áâ î騬¨
+% \fpc ¤®¯ã᪠¥â ®¡ê¥­¨¥ ¯¥à¥ç¨á«¥­¨© ª ª ¢ C. ˆ§ á«¥¤ãîé¨å ¤¢ãå ®¡ê¥­¨©:
% \begin{verbatim}
% type a = (A_A,A_B,A_E:=6,A_UAS:=200);
% type a = (A_A,A_B,A_E:=6,A_UAS:=4);
% \end{verbatim}
-% The second declaration would produce an error. \var{A\_UAS} needs to have a
-% value higher than \var{A\_E}, i.e. at least 7.
-parser_n_interface_name_diff_implementation_name=03032_N_Interface ¨ Implementation ¨¬¥­  p §­ë¥ $1 => $2
-% This note warns you if the implementation and interface names of a
-% functions are different, but they have the same mangled name. This
-% is important when using overloaded functions (but should produce no error).
-parser_e_no_with_for_variable_in_other_segments=03033_E_With ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¢ ¯¥p¥¬¥­­ëå ª®â®pë¥ ­ å®¤ïâáï ¢ p §«¨ç­ëå ᥣ¬¥­â å
-% With stores a variable locally on the stack,
-% but this is not possible if the variable belongs to another segment.
-parser_e_too_much_lexlevel=03034_E_Š®«¨ç¥á⢮ ¢«®¦¥­¨© ¢ äy­ªæ¨¨ ᫨誮¬ ¬­®£® (¡®«¥¥ 31)
-% You can nest function definitions only 31 times.
-parser_e_range_check_error=03035_E_Žè¨¡ª  ¢ë室  ¨§ ¤®¯yá⨬®£® ¤¨ ¯ §®­  ¯p¨ p áç¥â¥ ª®­áâ ­â
-% The constants are out of their allowed range.
-parser_w_range_check_error=03036_W_Žè¨¡ª  ¢ë室  ¨§ ¤®¯yá⨬®£® ¤¨ ¯ §®­  ¯p¨ p áç¥â¥ ª®­áâ ­â
-% The constants are out of their allowed range.
-parser_e_double_caselabel=03037_E_®¢â®p­ ï ¬¥âª  CASE
-% You are specifying the same label 2 times in a \var{case} statement.
-parser_e_case_lower_less_than_upper_bound=03038_E_‚¥på­ïï £p ­¨æ  ¤¨ ¯ §®­  ¬¥­ìè¥ ç¥¬ ­¨¦­ïï
-% The upper bound of a \var{case} label is less than the lower bound and this
-% is useless
-parser_e_type_const_not_possible=03039_E_’¨¯¨§¨p®¢ ­­ë¥ ª®­áâ ­âë ª« áᮢ ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% You cannot declare a constant of type class or object.
+% ‚â®à®¥ ®¡ê¥­¨¥ ¢ë§®¢¥â íâ® á®®¡é¥­¨¥. ‡­ ç¥­¨¥ \var{A\_UAS} ¤®«¦­® ¡ëâì ¡®«ìè¥,
+% 祬 §­ ç¥­¨¥ \var{A\_E}, â.¥. ¯® ªà ©­¥© ¬¥à¥ 7.
+parser_e_no_with_for_variable_in_other_segments=03033_E_With ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¤«ï ¯¥p¥¬¥­­ëå ¨§ ¤à㣮£® ᥣ¬¥­â 
+% With á®åà ­ï¥â ¯¥à¥¬¥­­ãî «®ª «ì­® ­  á⥪¥,
+% ­® íâ® ­¥¢®§¬®¦­®, ¥á«¨ ¯¥à¥¬¥­­ ï ­ å®¤¨âáï ¢ ¤à㣮¬ ᥣ¬¥­â¥.
+parser_e_too_much_lexlevel=03034_E_“஢¥­ì ¢«®¦¥­¨ï äy­ªæ¨© ¯à¥¢ëè ¥â 31
+% Š®«¨ç¥á⢮ ã஢­¥© ¢«®¦¥­¨ï ä㭪権 ®£à ­¨ç¥­® 31.
+parser_e_range_check_error=03035_E_Žè¨¡ª  ¯à®¢¥àª¨ ¤¨ ¯ §®­  ¯p¨ ¢ëç¨á«¥­¨¨ ª®­áâ ­â
+% ‡­ ç¥­¨¥ ª®­áâ ­â ­ å®¤¨âáï ¢­¥ ¤®¯ãá⨬®£® ¤«ï ­¨å ¤¨ ¯ §®­ .
+parser_w_range_check_error=03036_W_Žè¨¡ª  ¯à®¢¥àª¨ ¤¨ ¯ §®­  ¯p¨ ¢ëç¨á«¥­¨¨ ª®­áâ ­â
+% ‡­ ç¥­¨¥ ª®­áâ ­â ­ å®¤¨âáï ¢­¥ ¤®¯ãá⨬®£® ¤«ï ­¨å ¤¨ ¯ §®­ .
+parser_e_double_caselabel=03037_E_®¢â®pïîé ïáï ¬¥âª  CASE
+% ޤ­  ¨ â  ¦¥ ¬¥âª  㪠§ ­  2 à §  ¢ ®¤­®¬ ¢ëà ¦¥­¨¨ \var{case}.
+parser_e_case_lower_less_than_upper_bound=03038_E_‚¥på­ïï £p ­¨æ  ¤¨ ¯ §®­  case ¬¥­ìè¥, 祬 ­¨¦­ïï
+% ‚¥àå­ïï £à ­¨æ  ¬¥âª¨ \var{case} ¬¥­ìè¥ ­¨¦­¥© £à ­¨æë, ¯®í⮬㠬¥âª  ­¥ ¨¬¥¥â á¬ëá« .
+parser_e_type_const_not_possible=03039_E_’¨¯¨§¨p®¢ ­­ë¥ ª®­áâ ­âë ª« áᮢ ¨ ¨­â¥à䥩ᮢ ­¥ ¯®¤¤¥p¦¨¢ îâáï
+% Ž¡ê¥­¨ï ª®­áâ ­â, ¨¬¥îé¨å ⨯ ª« áá  «¨¡® ¨­â¥à䥩á , ­¥ ¤®¯ã᪠¥âáï.
parser_e_no_overloaded_procvars=03040_E_¥à¥¬¥­­ë¥ ¯¥à¥£à㦥­­ëå ä㭪権 ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% You are trying to assign an overloaded function to a procedural variable.
-% This isn't allowed.
+% ¥¤®¯ãá⨬ ï ¯®¯ë⪠ ¯à¨á¢®¥­¨ï ¯¥à¥£à㦥­­®© ä㭪樨 ¯à®æ¥¤ãà­®© ¯¥à¥¬¥­­®©.
parser_e_invalid_string_size=03041_E_„«¨­  áâp®ª¨ ¤®«¦­  ¡ëâì ¢ ¤¨ ¯ §®­¥ 1 .. 255
-% The length of a string in Pascal is limited to 255 characters. You are
-% trying to declare a string with length lower than 1 or greater than 255
-% (This is not true for \var{Longstrings} and \var{AnsiStrings}.
-parser_w_use_extended_syntax_for_objects=03042_W_ˆá¯®«ì§®¢ ­¨¥ p áè¨p¥­­®£® ᨭ⠪á¨á  NEW ¨ DISPOSE ¤«ï ¨­á⠭権 ®¡ê¥ªâ®¢
-% If you have a pointer \var{a} to a class type, then the statement
-% \var{new(a)} will not initialize the class (i.e. the constructor isn't
-% called), although space will be allocated. you should issue the
-% \var{new(a,init)} statement. This will allocate space, and call the
-% constructor of the class.
-parser_w_no_new_dispose_on_void_pointers=03043_W_ˆá¯®«ì§®¢ ­¨¥ NEW ¨ DISPOSE ¤«ï ­¥â¨¯¨§¨p®¢ ­­ëå yª § â¥«¥©, ¡¥áá¬ëá«¥­­®
-parser_e_no_new_dispose_on_void_pointers=03044_E_ˆá¯®«ì§®¢ ­¨¥ NEW ¨ DISPOSE ¤«ï ­¥â¨¯¨§¨p®¢ ­­ëå yª § â¥«¥©, ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% You cannot use \var{new(p)} or \var{dispose(p)} if \var{p} is an untyped pointer
-% because no size is associated to an untyped pointer.
-% Accepted for compatibility in \var{tp} and \var{delphi} modes.
+% „«¨­  áâப¨ ⨯  shortstring ®£à ­¨ç¥­  255 ᨬ¢®« ¬¨. ®¯ë⪠ ®¡êâì áâபã
+% á ¤«¨­®© ¬¥­¥¥ 1 ¨«¨ ¡®«¥¥ 255.
+parser_w_use_extended_syntax_for_objects=03042_W_ˆá¯®«ì§ã©â¥ p áè¨p¥­­ë© ᨭ⠪á¨á NEW ¨ DISPOSE ¤«ï á®§¤ ­¨ï íª§¥¬¯«ï஢ ®¡ê¥ªâ®¢
+% ਠ­ «¨ç¨¨ 㪠§ â¥«ï \var{a} ­  ⨯ ª« áá , ¢ë§®¢
+% \var{new(a)} ­¥ ¯à®¨­¨æ¨ «¨§¨àã¥â ª« áá (â.¥. ª®­áâàãªâ®à ­¥ ¡ã¤¥â
+% ¢ë§¢ ­), å®âï ¯ ¬ïâì ¡ã¤¥â ¢ë¤¥«¥­ . ‘«¥¤ã¥â ¨á¯®«ì§®¢ âì ¢ë§®¢
+% \var{new(a,init)}, ª®â®àë© ¢ë¤¥«¨â ¯ ¬ïâì ¨ ¢ë§®¢¥â ª®­áâàãªâ®à ª« áá .
+parser_w_no_new_dispose_on_void_pointers=03043_W_ˆá¯®«ì§®¢ ­¨¥ NEW ¨ DISPOSE ¤«ï ­¥â¨¯¨§¨p®¢ ­­ëå yª § â¥«¥© ¡¥áá¬ëá«¥­­®
+parser_e_no_new_dispose_on_void_pointers=03044_E_ˆá¯®«ì§®¢ ­¨¥ NEW ¨ DISPOSE ¤«ï ­¥â¨¯¨§¨p®¢ ­­ëå yª § â¥«¥© ­¥¢®§¬®¦­®
+% ‚ë§®¢ë \var{new(p)} ¨«¨ \var{dispose(p)} ­¥¢®§¬®¦­ë, ¥á«¨ \var{p} ï¥âáï ­¥â¨¯¨§¨à®¢ ­­ë¬ 㪠§ â¥«¥¬,
+% â.ª. ¯à¨ í⮬ ®âáãâáâ¢ã¥â ¨­ä®à¬ æ¨ï ® à §¬¥à¥ ¢ë¤¥«ï¥¬®© ¯ ¬ïâ¨.
+% ਭ¨¬ ¥âáï ¤«ï ᮢ¬¥á⨬®á⨠¢ ०¨¬ å \var{tp} ¨ \var{delphi}.
parser_e_class_id_expected=03045_E_ަ¨¤ ¥âáï ¨¤¥­â¨ä¨ª â®p ª« áá 
-% This happens when the compiler scans a procedure declaration that contains
-% a dot,
-% i.e., a object or class method, but the type in front of the dot is not
-% a known type.
-parser_e_no_type_not_allowed_here=03046_E_ˆ¤¥­â¨ä¨ª â®p ⨯  §¤¥áì ­¥y¬¥á⥭
-% You cannot use a type inside an expression.
+% நá室¨â ¯à¨ ᪠­¨à®¢ ­¨¨ ¨¬¥­¨ ¯à®æ¥¤ãàë, ᮤ¥à¦ é¥£® â®çªã, â.¥. ¬¥â®¤ 
+% ª« áá  ¨«¨ ®¡ê¥ªâ , ­® ⨯ ¯¥à¥¤ â®çª®© ­¥¨§¢¥á⥭.
+parser_e_no_type_not_allowed_here=03046_E_ˆ¤¥­â¨ä¨ª â®p ⨯  §¤¥áì ­¥¤®¯ãá⨬
+% ˆ¤¥­â¨ä¨ª â®à ⨯  ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¢ ¢ëà ¦¥­¨¨.
parser_e_methode_id_expected=03047_E_ަ¨¤ ¥âáï ¨¤¥­â¨ä¨ª â®p ¬¥â®¤ 
-% This identifier is not a method.
-% This happens when the compiler scans a procedure declaration that contains
-% a dot, i.e., a object or class method, but the procedure name is not a
-% procedure of this type.
-parser_e_header_dont_match_any_member=03048_E_‡ £®«®¢®ª äy­ªæ¨¨ ­¥ ᮤ¥p¦¨â ­¥ ®¤­®£® ¨§ ¬¥â®¤®¢ ®¡ê¥ªâ  $1
-% This identifier is not a method.
-% This happens when the compiler scans a procedure declaration that contains
-% a dot, i.e., a object or class method, but the procedure name is not a
-% procedure of this type.
-parser_p_procedure_start=03049_P_p®æ¥¤yp /”y­ªæ¨ï $1
-% When using the \var{-vp} switch, the compiler tells you when it starts
-% processing a procedure or function implementation.
+% ˆ¤¥­â¨ä¨ª â®à ­¥ ï¥âáï ¬¥â®¤®¬.
+% நá室¨â ¯à¨ ᪠­¨à®¢ ­¨¨ ¨¬¥­¨ ¯à®æ¥¤ãàë, ᮤ¥à¦ é¥£® â®çªã, â.¥. ¬¥â®¤ 
+% ª« áá  ¨«¨ ®¡ê¥ªâ , ­® ¨¬ï ¯à®æ¥¤ãàë ®âáãâáâ¢ã¥â ¢ ®¡ê¥­¨¨ ª« áá .
+parser_e_header_dont_match_any_member=03048_E_‡ £®«®¢®ª äy­ªæ¨¨ ­¥ ᮮ⢥âáâ¢ã¥â ­¨ ®¤­®¬ã ¨§ ¬¥â®¤®¢ í⮣® ª« áá  "$1"
+% ˆ¤¥­â¨ä¨ª â®à ­¥ ï¥âáï ¬¥â®¤®¬.
+% நá室¨â ¯à¨ ᪠­¨à®¢ ­¨¨ ¨¬¥­¨ ¯à®æ¥¤ãàë, ᮤ¥à¦ é¥£® â®çªã, â.¥. ¬¥â®¤ 
+% ª« áá  ¨«¨ ®¡ê¥ªâ , ­® ¨¬ï ¯à®æ¥¤ãàë ®âáãâáâ¢ã¥â ¢ ®¡ê¥­¨¨ ª« áá .
+parser_d_procedure_start=03049_DL_p®æ¥¤yp /”y­ªæ¨ï $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vd} ª®¬¯¨«ïâ®à á®®¡é ¥â ® ­ ç «¥ ®¡à ¡®âª¨
+% ⥫  ¯à®æ¥¤ãàë ¨«¨ ä㭪樨.
parser_e_error_in_real=03050_E_H¥¢¥p­ ï ª®­áâ ­â  á ¯« ¢ î饩 § ¯ï⮩
-% The compiler expects a floating point expression, and gets something else.
-parser_e_fail_only_in_constructor=03051_E_FAIL ¬®¦¥â ¨á¯®«ì§®¢ âáï ⮫쪮 ¢ ª®­áâpyªâ®p å
-% You are using the \var{FAIL} instruction outside a constructor method.
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â ¢ëà ¦¥­¨¥ ¢¥é¥á⢥­­®£® ⨯ , ­® ¯®«ãç ¥â çâ®-â® ¤à㣮¥.
+parser_e_fail_only_in_constructor=03051_E_FAIL ¤®¯ãá⨬ ⮫쪮 ¢ ª®­áâpyªâ®p å
+% ˆ­áâàãªæ¨ï \var{FAIL} ¨á¯®«ì§®¢ ­  ¢­¥ ¬¥â®¤  ª®­áâàãªâ®à .
parser_e_no_paras_for_destructor=03052_E_„¥áâpyªâ®pë ­¥ ¬®£yâ ¨¬¥âì ¯ p ¬¥âp®¢
-% You are declaring a destructor with a parameter list. Destructor methods
+% „¥áâàãªâ®à ®¡ê¥­ ᮠᯨ᪮¬ ¯ à ¬¥â஢. Œ¥â®¤ë ¤¥áâàãªâ®à®¢ ­¥ ¬®£ãâ ¨¬¥âì ¯ à ¬¥â஢.
% cannot have parameters.
-parser_e_only_class_methods_via_class_ref=03053_E_’®«ìª® ¬¥â®¤ë ª« áá  ¬®£ãâ ááë« âìáï ­  ª« áá
-% This error occurs in a situation like the following:
+parser_e_only_class_methods_via_class_ref=03053_E_® áá뫪¥ ­  ª« áá ¬®£ãâ ¡ëâì ¢ë§¢ ­ë ⮫쪮 ª« áá-¬¥â®¤ë
+% Žè¨¡ª  ¢®§­¨ª ¥â ¢ á«¥¤ãî饩 á¨âã æ¨¨:
% \begin{verbatim}
% Type :
% Tclass = Class of Tobject;
@@ -495,881 +504,1139 @@ parser_e_only_class_methods_via_class_ref=03053_E_’®«ìª® ¬¥â®¤ë ª« áá  ¬®£ãâ ááë
% ...
% C.free
% \end{verbatim}
-% \var{Free} is not a class method and hence cannot be called with a class
-% reference.
-parser_e_only_class_methods=03054_E_’®«ìª® ª ¬¥â®¤ ¬ ª« áá  ¬®¦­® ®¡à é âìáï ¢ ¬¥â®¤ å ª« áá 
-% This is related to the previous error. You cannot call a method of an object
-% from a inside a class method. The following code would produce this error:
+% \var{Free} ­¥ ï¥âáï ª« áá-¬¥â®¤®¬ ¨ ¯®í⮬㠭¥ ¬®¦¥â ¡ëâì ¢ë§¢ ­ ¯® áá뫪¥ ­  ª« áá.
+parser_e_only_class_methods=03054_E_‚ ª« áá-¬¥â®¤ å ¤®áâ㯭ë ⮫쪮 ¤à㣨¥ ª« áá-¬¥â®¤ë
+% ˆ¬¥¥â ®â­®è¥­¨¥ ª ¯à¥¤ë¤ã饩 ®è¨¡ª¥. ˆ§ ª« áá-¬¥â®¤  ­¥«ì§ï ¢ë§¢ âì ®¡ëç­ë© ¬¥â®¤ ®¡ê¥ªâ .
+% ‘«¥¤ãî騩 ª®¤ ¯à¨¢¥¤¥â ª í⮩ ®è¨¡ª¥:
% \begin{verbatim}
% class procedure tobject.x;
%
% begin
% free
% \end{verbatim}
-% Because free is a normal method of a class it cannot be called from a class
-% method.
-parser_e_case_mismatch=03055_E_’¨¯ ª®­áâ ­âë ¨ ⨯ ¢ëp ¦¥­¨ï ¢ CASE ­¥ ᮢ¯ ¤ îâ
-% One of the labels is not of the same type as the case variable.
-parser_e_illegal_symbol_exported=03056_E_‘¨¬¢®« ­¥ ¬®¦¥â íªá¯®àâ¨à®¢ âìáï ¨§ ¡¨¡«¨®â¥ª¨
-% You can only export procedures and functions when you write a library. You
-% cannot export variables or constants.
-parser_w_should_use_override=03057_W_“­ á«¥¤®¢ ­­ë© ¬¥â®¤ áªpëâ $1
-% A method that is declared \var{virtual} in a parent class, should be
-% overridden in the descendent class with the \var{override} directive. If you
-% don't specify the \var{override} directive, you will hide the parent method;
-% you will not override it.
-parser_e_nothing_to_be_overridden=03058_E_¥ ¨¬¥¥âáï ­¨ª ª®£® ¬¥â®¤  ¢ ª« áᥠ¯à¥¤ª , ª®â®àë© ­ã¦­® ¯¥p¥®¯p¥¤¥«¨âì: $1
-% You try to \var{override} a virtual method of a parent class that doesn't
-% exist.
-parser_e_no_procedure_to_access_property=03059_E_¨ª ª®© í«¥¬¥­â ­¥ ®¡¥á¯¥ç¨¢ ¥â ®¡à é¥­¨ï ª ᢮©á⢠¬ ª« áá 
-% You specified no \var{read} directive for a property.
-parser_w_stored_not_implemented=03060_W_‘®åà ­¥­­ ï ¤¨à¥ªâ¨¢  ᢮©á⢠¥áâì, ­® ¥é¥ ­¥ p¥ «¨§®¢ ­ 
-% The \var{stored} directive is not yet implemented
+% ®áª®«ìªã free ï¥âáï ®¡ëç­ë¬ ¬¥â®¤®¬, ¥£® ­¥«ì§ï ¢ë§¢ âì ¨§ ª« áá-¬¥â®¤ .
+parser_e_case_mismatch=03055_E_’¨¯ ª®­áâ ­âë ­¥ ᮢ¯ ¤ ¥â á ⨯®¬ ¢ëp ¦¥­¨ï CASE
+% ޤ­  ¨§ ¬¥â®ª ¨¬¥¥â ⨯, ®â«¨ç­ë© ®â ⨯  ¢ëà ¦¥­¨ï case.
+parser_e_illegal_symbol_exported=03056_E_‘¨¬¢®« ­¥ ¬®¦¥â ¡ëâì íªá¯®àâ¨à®¢ ­ ¨§ ¡¨¡«¨®â¥ª¨
+% ਠ­ ¯¨á ­¨¨ ¡¨¡«¨®â¥ª¨ ¬®¦­® íªá¯®àâ¨à®¢ âì ⮫쪮 ¯à®æ¥¤ãàë ¨ ä㭪樨. ’ ª¨¥ ⨯ë,
+% ª ª ¯¥à¥¬¥­­ë¥ ¨ ª®­áâ ­âë, íªá¯®àâ¨à®¢ âì ­¥«ì§ï.
+parser_w_should_use_override=03057_W_“­ á«¥¤®¢ ­­ë© ¬¥â®¤ "$1" áªàëâ, ¨á¯®«ì§ã©â¥ override
+% Œ¥â®¤, ®¡ê¥­­ë© ¢ த¨â¥«ì᪮¬ ª« áᥠª ª \var{virtual}, ¤®«¦¥­ ¡ëâì
+% ¯¥à¥ªàëâ ¢ ª« áá¥-­ á«¥¤­¨ª¥ ¤¨à¥ªâ¨¢®© \var{override}. …᫨ ¤¨à¥ªâ¨¢ 
+% \var{override} ­¥ 㪠§ ­ , ã­ á«¥¤®¢ ­­ë© ¬¥â®¤ ¡ã¤¥â áªàëâ,   ­¥ ¯¥à¥ªàëâ.
+parser_e_nothing_to_be_overridden=03058_E_‚ த¨â¥«ì᪮¬ ª« áᥠ­¥â ¬¥â®¤  ¤«ï ¯¥p¥ªàëâ¨ï: "$1"
+% ®¯ë⪠ ¯¥à¥ªàëâì \var{override} ¢¨àâã «ì­ë© ¬¥â®¤, ®âáãâáâ¢ãî騩 ¢ த¨â¥«ì᪮¬ ª« áá¥î.
+parser_e_no_procedure_to_access_property=03059_E_¥ 㪠§ ­ ᯮᮡ ¤®áâ㯠 ª ᢮©áâ¢ã
+% „«ï ᢮©á⢠ ­¥ 㪠§ ­  ¤¨à¥ªâ¨¢  \var{read}.
+parser_w_stored_not_implemented=03060_W_„¨à¥ªâ¨¢  stored ¤«ï ᢮©á⢠¥é¥ ­¥ p¥ «¨§®¢ ­ 
+% „¨à¥ªâ¨¢  \var{stored} ¥é¥ ­¥ ॠ«¨§®¢ ­ 
parser_e_ill_property_access_sym=03061_E_H¥¢¥p­ë© ᨬ¢®« ¤«ï ¤®áâ㯠 ª ᢮©áâ¢y
-% There is an error in the \var{read} or \var{write} directives for an array
-% property. When you declare an array property, you can only access it with
-% procedures and functions. The following code woud cause such an error.
+% Žè¨¡ª  ¢ ¤¨à¥ªâ¨¢¥ \var{read} ¨«¨ \var{write} ¤«ï ᢮©á⢠ ⨯  ¬ áᨢ.
+% „®áâ㯠ª ᢮©áâ¢ã ⨯  ¬ áᨢ ¢®§¬®¦¥­ ⮫쪮 á ¯®¬®éìî ¯à®æ¥¤ãà ¨ ä㭪権.
+% ‘«¥¤ãî騩 ª®¤ ¢ë§®¢¥â ®è¨¡ªã:
% \begin{verbatim}
% tmyobject = class
% i : integer;
% property x [i : integer]: integer read I write i;
% \end{verbatim}
%
-parser_e_cant_access_protected_member=03062_E_H¥¢®§¬®¦­® ®¡à â¨âìáï ª protected ¯®«î ®¡ê¥ªâ 
-% Fields that are declared in a \var{protected} section of an object or class
-% declaration cannot be accessed outside the module wher the object is
-% defined, or outside descendent object methods.
-parser_e_cant_access_private_member=03063_E_H¥¢®§¬®¦­® ®¡à â¨âìáï ª private ¯®«î ®¡ê¥ªâ 
-% Fields that are declared in a \var{private} section of an object or class
-% declaration cannot be accessed outside the module where the class is
-% defined.
-parser_w_overloaded_are_not_both_virtual=03064_W_¥à¥£à㦥­­ë¥ ¬¥â®¤ë ¢¨pây «ì­ëå ¬¥â®¤®¢, ¤®«¦­ë ¡ëâì ⮦¥ ¢¨pây «ì­ë¬¨: $1
-% If you declare overloaded methods in a class, then they should either all be
-% virtual, or none. You shouldn't mix them.
-parser_w_overloaded_are_not_both_non_virtual=03065_W_¥à¥£à㦥­­ë© ¬¥â®¤ H… ¢¨àâã «ì­®£® ¬¥â®¤  ¤®«¦¥­ ¡ëâì ⮦¥ H… ¢¨àâã «ì­ë¬: $1
-% If you declare overloaded methods in a class, then they should either all be
-% virtual, or none. You shouldn't mix them.
-parser_e_overridden_methods_not_same_ret=03066_E_¥à¥®¯à¥¤¥«¥­­ë¥ ¬¥â®¤ë ¤®«¦­ë ¨¬¥âì â®â-¦¥ á ¬ë© â¨¯ ¢®§¢à é ¥¬®£® §­ ç¥­¨ï: "$2" ¯¥à¥®¯à¥¤¥«¥­ "$1" ª®â®àë© ¢®§¢à é ¥â ¤à㣮© ⨯
-% If you declare oerridden methods in a class definition, they must
-% have the same return type.
-parser_e_dont_nest_export=03067_E_EXPORT äy­ªæ¨¨ ­¥ ¬®£yâ ¡ëâì ¢«®¦¥­­ë¬¨
-% You cannot declare a function or procedure within a function or procedure
-% that was declared as an export procedure.
+parser_e_cant_access_protected_member=03062_E_„®áâ㯠ª protected ¯®«î ®¡ê¥ªâ  §¤¥áì ­¥¢®§¬®¦¥­
+% ®«ï, ®¯à¥¤¥«¥­­ë¥ ¢ ᥪ樨 \var{protected} ®¡ê¥­¨ï ª« áá ,
+% ­¥¤®áâã¯­ë ¢­¥ ¬®¤ã«ï, ¢ ª®â®à®¬ ®¡ê¥­ ª« áá, ¨ ¢­¥ ¬¥â®¤®¢ ®¡ê¥ªâ®¢-­ á«¥¤­¨ª®¢.
+parser_e_cant_access_private_member=03063_E_„®áâ㯠ª private ¯®«î ®¡ê¥ªâ  §¤¥áì ­¥¢®§¬®¦¥­
+% ®«ï, ®¯à¥¤¥«¥­­ë¥ ¢ ᥪ樨 \var{private} ®¡ê¥­¨ï ª« áá ,
+% ­¥¤®áâã¯­ë ¢­¥ ¬®¤ã«ï, ¢ ª®â®à®¬ ®¡ê¥­ ª« áá.
+parser_e_overridden_methods_not_same_ret=03066_E_¥à¥ªàëâë¥ ¬¥â®¤ë ¤®«¦­ë ¨¬¥âì ®¤¨­ ª®¢ë© ⨯ १ã«ìâ â : "$2" ¯¥à¥ªàëâ "$1", ª®â®àë© ¢®§¢à é ¥â ¤à㣮© ⨯
+% ¥à¥ªàëâë¥ ¬¥â®¤ë ¤®«¦­ë ¢®§¢à é âì १ã«ìâ â ®¤¨­ ª®¢®£® ⨯ .
+parser_e_dont_nest_export=03067_E_ªá¯®àâ¨àã¥¬ë¥ äy­ªæ¨¨ ­¥ ¬®£yâ ¡ëâì ¢«®¦¥­­ë¬¨
+% ¥«ì§ï ®¡êâì ¯à®æ¥¤ãàã ¨«¨ äã­ªæ¨î, ¢«®¦¥­­ãî ¢ ¯à®æ¥¤ãàã ¨«¨ äã­ªæ¨î, ®¡ê¥­­ãî ª ª íªá¯®àâ¨à㥬 ï.
parser_e_methods_dont_be_export=03068_E_Œ¥â®¤ë ­¥ ¬®£yâ íªá¯®pâ¨p®¢ âìáï
-% You cannot declare a procedure that is a method for an object as
-% \var{export}ed. That is, your methods cannot be called from a C program.
-parser_e_call_by_ref_without_typeconv=03069_E_‚ë§®¢ á ¯¥à¥¬¥­­ë¬¨ ¯ à ¬¥âà ¬¨ ¤®«¦¥­ ᮮ⢥âá⢮¢ âì â®ç­®: ®«ã祭® "$1", ®¦¨¤ ¥âáï "$2"
-% When calling a function declared with \var{var} parameters, the variables in
-% the function call must be of exactly the same type. There is no automatic
-% type conversion.
-parser_e_no_super_class=03070_E_„ ­­ë© ª« áá ­¥ ï¥âáï த¨â¥«ì᪨¬ ª« áᮬ ⥪ã饣® ª« áá 
-% When calling inherited methods, you are trying to call a method of a strange
-% class. You can only call an inherited method of a parent class.
-parser_e_self_not_in_method=03071_E_SELF p §p¥è ¥âáï ⮫쪮 ¢ ¬¥â®¤ å
-% You are trying to use the \var{self} parameter outside an object's method.
-% Only methods get passed the \var{self} parameters.
-parser_e_generic_methods_only_in_methods=03072_E_Œ¥â®¤ë ¬®£yâ ¢ë§ë¢ âìáï ⮫쪮 ¢ ¤py£¨å ¬¥â®¤ å ­ ¯pï¬yî á ¨¤¥­â¨ä¨ª â®p®¬ ⨯  ª« áá 
-% A construction like \var{sometype.somemethod} is only allowed in a method.
-parser_e_illegal_colon_qualifier=03073_E_H¥¯p ¢¨«ì­®¥ ¨á¯®«ì§®¢ ­¨¥ ':'
-% You are using the format \var{:} (colon) 2 times on an expression that
-% is not a real expression.
-parser_e_illegal_set_expr=03074_E_Žè¨¡ª  ¯à®¢¥àª¨ ¯à¨­ ¤«¥¦­®á⨠ª ¤¨ ¯ §®­ã ¢ ª®­áâàãªâ®à¥ ­ ¡®à  ¨«¨ ¤¢®©­®¬ í«¥¬¥­â¥ ­ ¡®à 
-% The declaration of a set contains an error. Either one of the elements is
-% outside the range of the set type, either two of the elements are in fact
-% the same.
+% Œ¥â®¤ ª« áá  ¨«¨ ®¡ê¥ªâ  ­¥ ¬®¦¥â ¡ëâì ®¡ê¥­ ª ª
+% \var{export}.
+parser_e_call_by_ref_without_typeconv=03069_E_’¨¯ ¯ à ¬¥âà  no. $1 ¯à¨ ¯¥à¥¤ ç¥ ¯® áá뫪¥ ¤®«¦¥­ ᮢ¯ ¤ âì: ¯®«ã祭® "$2", ®¦¨¤ «®áì "$3"
+% ਠ¢ë§®¢¥ ä㭪樨, ¨¬¥î饩 ¯ à ¬¥âàë ¯® áá뫪¥ (\var{var}), ⨯ ¯ à ¬¥âà 
+% ¤®«¦¥­ áâண® ᮢ¯ ¤ âì á ®¡ê¥­­ë¬. €¢â®¬ â¨ç¥áª®¥ ¯à¥®¡à §®¢ ­¨¥ ⨯®¢
+% ¢ í⮬ á«ãç ¥ ®âáãâáâ¢ã¥â.
+parser_e_no_super_class=03070_E_Š« áá ­¥ ï¥âáï த¨â¥«ì᪨¬ ¤«ï ⥪ã饣® ª« áá 
+% ਠ¢ë§®¢¥ ã­ á«¥¤®¢ ­­®£® ¬¥â®¤  㪠§ ­ ª« áá, ®â«¨ç­ë© ®â த¨â¥«ì᪮£®.
+% “­ á«¥¤®¢ ­­ë© ¬¥â®¤ ¬®¦­® ¢ë§ë¢ âì ⮫쪮 ã த¨â¥«ì᪮£® ª« áá .
+parser_e_self_not_in_method=03071_E_SELF ¤®¯ãá⨬ ⮫쪮 ¢ ¬¥â®¤ å
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï ¯ à ¬¥âà  \var{self} ¢­¥ ¬¥â®¤  ®¡ê¥ªâ .
+%  à ¬¥âà \var{self} ¯¥à¥¤ ¥âáï ⮫쪮 ¢ ¬¥â®¤ë.
+parser_e_generic_methods_only_in_methods=03072_E_‚ë§®¢ ¬¥â®¤®¢ á ¨¤¥­â¨ä¨ª â®à®¬ ⨯  ª« áá  ¢®§¬®¦¥­ ⮫쪮 ¨§ ¤àã£¨å ¬¥â®¤®¢
+% Š®­áâàãªæ¨ï ¢¨¤  \var{sometype.somemethod} ¤®¯ãá⨬  ⮫쪮 ¢­ãâਠ¬¥â®¤®¢.
+parser_e_illegal_colon_qualifier=03073_E_H¥¢¥à­®¥ ¨á¯®«ì§®¢ ­¨¥ ':'
+% ”®à¬ â \var{:} (¤¢®¥â®ç¨¥) 2 à §  ¨á¯®«ì§ã¥âáï ­  ¢ëà ¦¥­¨¨, ª®â®à®¥ ­¥ ï¥âáï ¢¥é¥á⢥­­ë¬.
+parser_e_illegal_set_expr=03074_E_Žè¨¡ª  ¯à®¢¥àª¨ ¤¨ ¯ §®­  ¢ ª®­áâàãªâ®à¥ ¬­®¦¥á⢠ ¨«¨ ¯®¢â®àïî騩áï í«¥¬¥­â ¬­®¦¥á⢠
+% Žè¨¡ª  ¢ ®¡ê¥­¨¨ ¬­®¦¥á⢠. ‹¨¡® ®¤¨­ ¨§ í«¥¬¥­â®¢ ¢ë室¨â §  ¤®¯ãáâ¨¬ë© ¤¨ ¯ §®­,
+% «¨¡® ª ª¨¥-«¨¡® ¤¢  í«¥¬¥­â  ¨¬¥îâ ®¤­® ¨ â® ¦¥ §­ ç¥­¨¥.
parser_e_pointer_to_class_expected=03075_E_ަ¨¤ ¥âáï yª § â¥«ì ­  ®¡ê¥ªâ
-% You specified an illegal type in a \var{New} statement.
-% The extended synax of \var{New} needs an object as a parameter.
+% ˆá¯®«ì§®¢ ­ ­¥¢¥à­ë© ⨯ ¢ ¢ëà ¦¥­¨¨ \var{New}.
+%  áè¨à¥­­ë© ᨭ⠪á¨á \var{New} âॡã¥â ¯ à ¬¥âà  â¨¯  ®¡ê¥ªâ.
parser_e_expr_have_to_be_constructor_call=03076_E_‚ëp ¦¥­¨¥ ¤®«¦­® ¢ë§ë¢ âì ª®­áâpyªâ®p
-% When using the extended syntax of \var{new}, you must specify the constructor
-% method of the object you are trying to create. The procedure you specified
-% is not a constructor.
+% ਠ¨á¯®«ì§®¢ ­¨¨ à áè¨à¥­­®£® ᨭ⠪á¨á  \var{new} ­ã¦­® 㪠§ë¢ âì ª®­áâàãªâ®à ®¡ê¥ªâ .
+% “ª § ­­ ï ¯à®æ¥¤ãà  ­¥ ï¥âáï ª®­áâàãªâ®à®¬.
parser_e_expr_have_to_be_destructor_call=03077_E_‚ëp ¦¥­¨¥ ¤®«¦­® ¢ë§ë¢ âì ¤¥áâpyªâ®p
-% When using the extended syntax of \var{dispose}, you must specify the
-% destructor method of the object you are trying to dispose of.
-% The procedure you specified is not a destructor.
-parser_e_invalid_record_const=03078_E_H¥¢¥p­ë© ¯®p冷ª í«¥¬¥­â®¢ ⨯  RECORD
-% When declaring a constant record, you specified the fields in the wrong
-% order.
-parser_e_false_with_expr=03079_E_’¨¯ ¢ëp ¦¥­¨ï ¤®«¦­® ¡ëâì CLASS ¨«¨ RECORD
-% A \var{with} statement needs an argument that is of the type \var{record}
-% or \var{class}. You are using \var{with} on an expression that is not of
-% this type.
-parser_e_void_function=03080_E_p®æ¥¤ypë ­¥ ¬®£yâ ¢®§¢p é âì §­ ç¥­¨ï
-% In \fpc, you can specify a return value for a function when using
-% the \var{exit} statement. This error occurs when you try to do this with a
-% procedure. Procedures cannot return a value.
+% ਠ¨á¯®«ì§®¢ ­¨¨ à áè¨à¥­­®£® ᨭ⠪á¨á  \var{dispose} ­ã¦­® 㪠§ë¢ âì ¤¥áâàãªâ®à ®¡ê¥ªâ .
+% “ª § ­­ ï ¯à®æ¥¤ãà  ­¥ ï¥âáï ¤¥áâàãªâ®à®¬.
+parser_e_invalid_record_const=03078_E_H¥¢¥p­ë© ¯®p冷ª í«¥¬¥­â®¢ § ¯¨á¨
+% ਠ®¡ê¥­¨¨ ª®­áâ ­âë ⨯  § ¯¨áì, ¯®«ï 㪠§ ­ë ¢ ­¥¢¥à­®¬ ¯®à浪¥.
+parser_e_false_with_expr=03079_E_’¨¯ ¢ëp ¦¥­¨ï ¤®«¦¥­ ¡ëâì CLASS ¨«¨ RECORD
+% €à£ã¬¥­â ¢ëà ¦¥­¨ï \var{with} ¤®«¦¥­ ¡ëâì ⨯  \var{record} ¨«¨
+% \var{class}. ˆá¯®«ì§®¢ ­  à£ã¬¥­â á ⨯®¬, ®â«¨ç­ë¬ ®â 㪠§ ­­ëå.
+parser_e_void_function=03080_E_p®æ¥¤yp  ­¥ ¬®¦¥â ¢®§¢p é âì §­ ç¥­¨¥
+% \fpc ¯®§¢®«ï¥â 㪠§ âì ¢®§¢à é ¥¬®¥ §­ ç¥­¨¥ ¤«ï ä㭪樨 ¯à¨ ¨á¯®«ì§®¢ ­¨¨
+% ¢ëà ¦¥­¨ï \var{exit}. Žè¨¡ª  ¢®§­¨ª ¥â ¯à¨ ¯®¯ë⪥ ᤥ« âì íâ® ¢ ¯à®æ¥¤ãà¥.
+% à®æ¥¤ãà  ­¥ ¬®¦¥â ¢®§¢à é âì §­ ç¥­¨¥.
parser_e_constructors_always_objects=03081_E_Š®­áâpyªâ®pë ¨ ¤¥áâpyªâ®pë ¤®«¦­ë ¡ëâì ¬¥â®¤ ¬¨
-% You're declaring a procedure as destructor or constructor, when the
-% procedure isn't a class method.
+% ®¯ë⪠ ®¯à¥¤¥«¨âì ¯à®æ¥¤ãàã, ­¥ ïîéãîáï ¬¥â®¤®¬ ª« áá , ª ª ª®­áâàãªâ®à ¨«¨ ¤¥áâàãªâ®à.
parser_e_operator_not_overloaded=03082_E_ޝ¥p â®p ­¥ ¯¥p¥£py¦¥­
-% You're trying to use an overloaded operator when it isn't overloaded for
-% this type.
-parser_e_no_such_assignment=03083_E_¥à¥£à㦥­­®¥ á¢ï§ë¢ ­¨¥ ­¥¢®§¬®¦­® á ®¤¨­ ª®¢ë¬¨ ⨯ ¬¨ ¤ ­­ëå
-% You can not overload assignment for types
-% that the compiler considers as equal.
+% ®¯ë⪠ ¨á¯®«ì§®¢ âì ¯¥à¥£à㦥­­ë© ®¯¥à â®à, ª®£¤  ®­ ­¥ ¯¥à¥£à㦥­ ¤«ï ¤ ­­®£® ⨯ .
+parser_e_no_such_assignment=03083_E_¥¢®§¬®¦­® ¯¥à¥£à㧨âì ¯à¨á¢®¥­¨¥ ¤«ï ®¤¨­ ª®¢ëå ⨯®¢
+% ¥à¥£à㦥­­®¥ ¯à¨á¢®¥­¨¥ ­¥¢®§¬®¦­® ¤«ï ⨯®¢, ª®â®àë¥ ª®¬¯¨«ïâ®à áç¨â ¥â ®¤¨­ ª®¢ë¬¨.
parser_e_overload_impossible=03084_E_¥à¥£à㧪  ®¯¥à â®à  ­¥¢®§¬®¦­ 
-% The combination of operator, arguments and return type are
-% incompatible.
-parser_e_no_reraise_possible=03085_E_RERAISE §¤¥áì ­¥¢®§¬®¦¥­
-% You are trying to raise an exception where it isn't allowed. You can only
-% raise exceptions in an \var{except} block.
-parser_e_no_new_or_dispose_for_classes=03086_E_ áè¨p¥­­ë© ᨭ⠪á¨á NEW ¨ DISPOSE ¤«ï ª« áá  ­¥¤®¯yá⨬®
-% You cannot generate an instance of a class with the extended syntax of
-% \var{new}. The constructor must be used for that. For the same reason, you
-% cannot call \var{Dispose} to de-allocate an instance of a class, the
-% destructor must be used for that.
-parser_e_asm_incomp_with_function_return=03087_E_€áᥬ¡«¥p ­¥á®¢¬¥á⨬ á ⨯®¬, ª®â®p®¥ ¢®§p é ¥â äy­ªæ¨ï
-% You're trying to implement a \var{assembler} function, but the return type
-% of the function doesn't allow that.
-parser_e_procedure_overloading_is_off=03088_E_p®æ¥¤yp­ ï ¯¥à¥£à㧪  ®âª«î祭 
-% When using the \var{-So} switch, procedure overloading is switched off.
-% Turbo Pascal does not support function overloading.
-parser_e_overload_operator_failed=03089_E_¥¢®§¬®¦­® ¯à¥®¡à §¨âì íâ®â ®¯¥à â®à ¢ ¯¥à¥£à㦥­­ë© ®¯¥à â®à
-% You are trying to overload an operator which cannot be overloaded.
-% The following operators can be overloaded :
+% ‘®ç¥â ­¨¥ ®¯¥à â®à ,  à£ã¬¥­â®¢ ¨ ¢®§¢à é ¥¬®£® §­ ç¥­¨ï ï¥âáï ­¥á®¢¬¥á⨬ë¬.
+parser_e_no_reraise_possible=03085_E_®¢â®à­®¥ ¡à®á ­¨¥ ¨áª«î祭¨ï §¤¥áì ­¥¢®§¬®¦­®
+% ®¯ë⪠ ¯®¢â®à­®£® ¡à®á ­¨ï ¨áª«î祭¨ï ¢ ­¥¤®¯ãá⨬®¬ ¬¥áâ¥. â® à §à¥è¥­® ¤¥« âì ⮫쪮
+% ¢ ¡«®ª¥ \var{except}.
+parser_e_no_new_or_dispose_for_classes=03086_E_ áè¨p¥­­ë© ᨭ⠪á¨á NEW ¨ DISPOSE ­¥ à §à¥è¥­ ¤«ï ª« áᮢ
+% ª§¥¬¯«ïà ª« áá  ­¥ ¬®¦¥â ¡ëâì á®§¤ ­ á ¯®¬®éìî à áè¨à¥­­®£® ᨭ⠪á¨á 
+% \var{new}, ¤«ï í⮣® á«¥¤ã¥â ¨á¯®«ì§®¢ âì ª®­áâàãªâ®à. €­ «®£¨ç­®, ¤«ï
+% 㤠«¥­¨ï íª§¥¬¯«ïà  ª« áá  á«¥¤ã¥â ¨á¯®«ì§®¢ âì ­¥ \var{Dispose},   ¤¥áâàãªâ®à.
+parser_e_procedure_overloading_is_off=03088_E_¥à¥£à㧪  ¯p®æ¥¤yp ®âª«î祭 
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-So} ¯¥à¥£à㧪  ¯à®æ¥¤ãà ®âª«î祭 .
+% Turbo Pascal ­¥ ¯®¤¤¥à¦¨¢ ¥â ¯¥à¥£à㧪ã.
+parser_e_overload_operator_failed=03089_E_¥à¥£à㧪  í⮣® ®¯¥à â®à  ­¥¢®§¬®¦­ . ¥à¥£à㦠¥¬ë¥ ®¯¥à â®àë (¥á«¨ ¥áâì): $1
+% ®¯ë⪠ ¯¥à¥£à㧨âì ®¯¥à â®à, ª®â®àë© ­¥ ¬®¦¥â ¡ëâì ¯¥à¥£à㦥­.
+% ‘«¥¤ãî騥 ®¯¥à â®àë ¬®£ãâ ¡ëâì ¯¥à¥£à㦥­ë:
% \begin{verbatim}
% +, -, *, /, =, >, <, <=, >=, is, as, in, **, :=
% \end{verbatim}
-parser_e_comparative_operator_return_boolean=03090_E_‘à ¢­¨â¥«ì­ë© ®¯¥à â®à ¤®«¦¥­ ¢®§¢à â¨âì ¡ã«¥¢® §­ ç¥­¨¥
-% When overloading the \var{=} operator, the function must return a boolean
-% value.
-parser_e_only_virtual_methods_abstract=03091_E_’®«ìª® ¢¨àâã «ì­ë¥ ¬¥â®¤ë ¬®£ãâ ¡ëâì  ¡áâà ªâ­ë
-% You are declaring a method as abstract, when it isn't declared to be
-% virtual.
-parser_f_unsupported_feature=03092_F_ˆá¯®«ì§®¢ ­¨¥ ¯®ª  ­¥¯®¤¤¥à¦¨¢ ¥¬®© ®á®¡¥­­®á⨠ª®¬¯¨«ïâ®à 
-% You're trying to force the compiler into doing something it cannot do yet.
-parser_e_mix_of_classes_and_objects=03093_E_‘¬¥è¨¢ âì Š‹€‘‘› ¨ Žš…Š’› ­¥ ¯®§¢®«ï¥âáï
-% You cannot derive \var{objects} and \var{classes} intertwined . That is,
-% a class cannot have an object as parent and vice versa.
-parser_w_unknown_proc_directive_ignored=03094_W_¥¨§¢¥áâ­ ï ¤¨à¥ªâ¨¢  ¯à®æ¥¤ãàë, $1 ¨£­®à¨ày¥âáï
-% The procedure direcive you secified is unknown. Recognised procedure
-% directives are \var{cdecl}, \var{stdcall}, \var{popstack}, \var{pascal}
-% \var{register}, \var{export}.
-parser_e_absolute_only_one_var=03095_E_ABSOLUTE ¬®¦¥â ¡ëâì á¢ï§ ­  ⮫쪮 á Ž„Hމ ¯¥p¥¬¥­­®©
-% You cannot specify more than one variable before the \var{absolute} directive.
-% Thus, the following construct will provide this error:
+parser_e_comparative_operator_return_boolean=03090_E_ޝ¥à â®à áà ¢­¥­¨ï ¤®«¦¥­ ¢®§¢à é âì §­ ç¥­¨¥ ⨯  boolean
+% ਠ¯¥à¥£à㧪¥ ®¯¥à â®à  áà ¢­¥­¨ï \var{=}, äã­ªæ¨ï ¤®«¦­  ¢®§¢à é âì §­ ç¥­¨¥ ⨯  boolean.
+parser_e_only_virtual_methods_abstract=03091_E_’®«ìª® ¢¨àâã «ì­ë¥ ¬¥â®¤ë ¬®£ãâ ¡ëâì  ¡áâà ªâ­ë¬¨
+% ®¯ë⪠ ®¯à¥¤¥«¨âì  ¡áâà ªâ­ë© ¬¥â®¤, ­¥ ïî騩áï ¯à¨ í⮬ ¢¨àâã «ì­ë¬.
+parser_f_unsupported_feature=03092_F_ˆá¯®«ì§®¢ ­¨¥ ¯®ª  ­¥¯®¤¤¥à¦¨¢ ¥¬®© ®á®¡¥­­®á⨠ª®¬¯¨«ïâ®à !
+% ®¯ë⪠ § áâ ¢¨âì ª®¬¯¨«ïâ®à ᤥ« âì ­¥çâ®, 祣® ®­ ¯®ª  ¥é¥ ­¥ 㬥¥â.
+parser_e_mix_of_classes_and_objects=03093_E_‘¬¥è¨¢ ­¨¥ à §«¨ç­ëå ⨯®¢ ®¡ê¥ªâ®¢ (class, object, interface) ­¥ ¤®¯ã᪠¥âáï
+% ˆ§¬¥­¥­¨¥ ¡ §®¢®£® ⨯  ¯à¨ ­ á«¥¤®¢ ­¨¨ ­¥ ¤®¯ã᪠¥âáï. â®, ¢ ç áâ­®áâ¨, ®§­ ç ¥â, çâ®
+% class ­¥ ¬®¦¥â ¡ëâì ¯®à®¦¤¥­ ®â object, ¨ ­ ®¡®à®â.
+parser_w_unknown_proc_directive_ignored=03094_W_¥¨§¢¥áâ­ ï ¤¨à¥ªâ¨¢  ¯à®æ¥¤ãàë: "$1", ¨£­®à¨à®¢ ­®
+% “ª § ­­ ï ¤¨à¥ªâ¨¢  ¯à®æ¥¤ãàë ­¥¨§¢¥áâ­  ª®¬¯¨«ïâ®àã.
+parser_e_absolute_only_one_var=03095_E_ABSOLUTE ¬®¦¥â ¡ëâì 㪠§ ­® ⮫쪮 ¤«ï ®¤­®© ¯¥p¥¬¥­­®©
+% ¥«ì§ï 㪠§ë¢ âì ¡®«¥¥ ®¤­®© ¯¥à¥¬¥­­®© ¯¥à¥¤ ¤¨à¥ªâ¨¢®© \var{absolute}.
+% ‘«¥¤ãîé ï ª®­áâàãªæ¨ï ¯à¨¢¥¤¥â ª ®è¨¡ª¥:
% \begin{verbatim}
% Var Z : Longint;
% X,Y : Longint absolute Z;
% \end{verbatim}
-% \item [ absolute can only be associated a var or const ]
-% The address of a \var{absolute} directive can only point to a variable or
-% constant. Therefore, the following code will produce this error:
-% \begin{verbatim}
-% Procedure X;
-%
-% var p : longint absolute x;
-% \end{verbatim}
-%
parser_e_absolute_only_to_var_or_const=03096_E_ABSOLUTE ¬®¦¥â ¡ëâì á¢ï§ ­  ⮫쪮 á ¯¥p¥¬¥­­®© ¨«¨ ª®­á⠭⮩
-% The address of a \var{absolute} directive can only point to a variable or
-% constant. Therefore, the following code will produce this error:
+% €¤à¥á ¤¨à¥ªâ¨¢ë \var{absolute} ¬®¦¥â 㪠§ë¢ âì ⮫쪮 ­  ¯¥à¥¬¥­­ãî ¨«¨
+% ª®­áâ ­âã. ‘«¥¤ãî騩 ª®¤ ¯à¨¢¥¤¥â ª ®è¨¡ª¥:
% \begin{verbatim}
% Procedure X;
%
% var p : longint absolute x;
% \end{verbatim}
%
-parser_e_initialized_only_one_var=03097_E_’®«ìª® Ž„H€ ¯¥p¥¬¥­­ ï ¬®¦¥â ¡ëâì ¨­¨æ¨ «¨§¨p®¢ ­ 
-% You cannot specify more than one variable with a initial value
-% in Delphi syntax.
-parser_e_abstract_no_definition=03098_E_€¡áâà ªâ­ë¥ ¬¥â®¤ë ­¥ ¤®«¦­ë ¨¬¥âì ®¯à¥¤¥«¥­¨¥ (â® ¥áâì ¨¬¥âì ⥫®)
-% Abstract methods can only be declared, you cannot implement them. They
-% should be overridden by a descendant class.
-parser_e_overloaded_must_be_all_global=03099_E_â  ¯¥à¥£à㦥­­ ï äã­ªæ¨ï ­¥ ¬®¦¥â ¡ëâì «®ª «ì­®©, ¨ ¤®«¦­  íªá¯®àâ¨à®¢ âìáï
-% You are defining a overloaded function in the implementation part of a unit,
-% but there is no corresponding declaration in the interface part of the unit.
-parser_w_virtual_without_constructor=03100_W_‚¨àâã «ì­ë¥ ¬¥â®¤ë ¨á¯®«ì§ãîâáï ¡¥§ ª®­áâàãªâ®à  ¢ $1
-% If you declare objects or classes that contain virtual methods, you need
-% to have a constructor and destructor to initialize them. The compiler
-% encountered an object or class with virtual methods that doesn't have
-% a constructor/destructor pair.
-parser_m_macro_defined=03101_M_ޝp¥¤¥«¥­ ¬ ªp®á: $1
-% When \var{-vm} is used, the compiler tells you when it defines macros.
-parser_m_macro_undefined=03102_M_Œ ªp®á ­¥®¯p¥¤¥«¥­: $1
-% When \var{-vm} is used, the compiler tells you when it undefines macros.
-parser_m_macro_set_to=03103_M_Œ ªp®á $1 yáâ ­®¢«¥­ ¢ $2
-% When \var{-vm} is used, the compiler tells you what values macros get.
-parser_i_compiling=03104_I_Š®¬¯¨«¨p®¢ ­¨¥ $1
-% When you turn on information messages (\var{-vi}), the compiler tells you
-% what units it is recompiling.
-parser_u_parsing_interface=03105_U_€­ «¨§¨à㥬 ¨­â¥à䥩á­ãî ç áâì ¬®¤y«ï $1
-% This tells you that the reading of the interface
-% of the current unit starts
-parser_u_parsing_implementation=03106_U_€­ «¨§¨à㥬 ॠ«¨§ æ¨®­­ãî ç áâì ¬®¤y«ï $1
-% This tells you that the code reading of the implementation
-% of the current unit, library or program starts
-parser_d_compiling_second_time=03107_D_®¢â®à­®¥ ª®¬¯¨«¨à®¢ ­¨¥ $1
-% When you request debug messages (\var{-vd}) the compiler tells you what
-% units it recompiles for the second time.
-parser_e_no_paras_allowed=03108_E_‘¢®©á⢠ ¬ áᨢ  ¢ í⮩ â®çª¥ ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% You cannot use array properties at that point in the source.
-parser_e_no_property_found_to_override=03109_E_H¥â ­¨ª ª¨å ᢮©á⢠¤«ï ¯¥p¥®¯p¥¤¥«¥­¨ï
-% You want to overrride a property of a parent class, when there is, in fact,
-% no such property in the parent class.
-parser_e_only_one_default_property=03110_E_’®«ìª® ®¤­® § ¤ ­­®¥ ¯®-㬮«ç ­¨î ᢮©á⢮ p §p¥è ¥âáï, ­ ©¤¥­® y­ á«¥¤®¢ ­­®¥, § ¤ ­­®¥ ¯® y¬®«ç ­¨î, ᢮©á⢮ ¢ ª« áᥠ$1
-% You specified a property as \var{Default}, but a parent class already has a
-% default property, and a class can have only one default property.
-parser_e_property_need_paras=03111_E_‡ ¤ ­­®¥ ¯®-㬮«ç ­¨î ᢮©á⢮ ¤®«¦­® ¡ëâì ᢮©á⢮¬ ¬ áᨢ 
-% Only array properties of classes can be made \var{default} properties.
-parser_e_constructor_cannot_be_not_virtual=03112_E_‚¨pây «ì­ë¥ ª®­áâpyªâ®pë ¯®¤¤¥p¦¨¢ îâáï ⮫쪮 ¢ ª« áᮢëå ¬®¤¥«ïå ®¡ê¥ªâ 
-% You cannot have virtual constructors in objects. You can only have them
-% in classes.
-parser_e_no_default_property_available=03113_E_H¥â ᢮©áâ¢
-% You try to access a default property of a class, but this class (or one of
-% its ancestors) doesn't have a default property.
+parser_e_initialized_only_one_var=03097_E_ˆ­¨æ¨ «¨§ æ¨ï ¤®¯ãá⨬  ⮫쪮 ¤«ï ®¤­®© ¯¥à¥¬¥­­®©
+% ¥¤®¯ãá⨬® 㪠§ ­¨¥ ­ ç «ì­®£® §­ ç¥­¨ï ¡®«¥¥ 祬 ¤«ï ®¤­®© ¯¥à¥¬¥­­®© ¢
+% ᨭ⠪á¨á¥ Delphi.
+parser_e_abstract_no_definition=03098_E_€¡áâà ªâ­ë¥ ¬¥â®¤ë ­¥ ¬®£ãâ ¨¬¥âì ॠ«¨§ æ¨î (⥫®)
+% €¡áâà ªâ­ë¥ ¬¥â®¤ë ¬®£ãâ ¨¬¥âì ⮫쪮 ®¡ê¥­¨¥, ॠ«¨§ æ¨ï ¤«ï ­¨å ­¥¤®¯ãá⨬ . Ž­¨
+% ¤®«¦­ë ¡ëâì ¯¥à¥ªàëâë ¢ ã­ á«¥¤®¢ ­­ëå ª« áá å.
+parser_e_overloaded_must_be_all_global=03099_E_â  ¯¥à¥£à㦥­­ ï äã­ªæ¨ï ­¥ ¬®¦¥â ¡ëâì «®ª «ì­®© (¤®«¦­  íªá¯®àâ¨à®¢ âìáï)
+% ®¯ë⪠ ®¯à¥¤¥«¨âì ¯¥à¥£à㦥­­ãî äã­ªæ¨î ¢ ᥪ樨 implementation ¬®¤ã«ï,
+% ¤«ï ª®â®à®© ®âáãâáâ¢ã¥â ®¡ê¥­¨¥ ¢ ᥪ樨 interface.
+parser_w_virtual_without_constructor=03100_W_‚¨àâã «ì­ë¥ ¬¥â®¤ë ¨á¯®«ì§ãîâáï ¡¥§ ª®­áâàãªâ®à  ¢ "$1"
+% ਠ®¡ê¥­¨¨ ®¡ê¥ªâ  ¨«¨ ª« áá , ᮤ¥à¦ é¥£® ¢¨àâã «ì­ë¥ ¬¥â®¤ë, ¤«ï
+% ¨å ª®à४⭮© ¨­¨æ¨ «¨§ æ¨¨ âॡã¥âáï ª®­áâàãªâ®à. Š®¬¯¨«ïâ®à ¢áâà¥â¨« ®¡ê¥­¨¥
+% ª« áá  ¨«¨ ®¡ê¥ªâ  á ¢¨àâã «ì­ë¬¨ ¬¥â®¤ ¬¨, ­® ¡¥§ ¯ àë ª®­áâàãªâ®à/¤¥áâàãªâ®à.
+parser_c_macro_defined=03101_CL_ޝp¥¤¥«¥­ ¬ ªp®á: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ \var{-vc} ª®¬¯¨«ïâ®à á®®¡é ¥â ®¡ ®¯à¥¤¥«¥­¨¨ ¬ ªà®á®¢.
+parser_c_macro_undefined=03102_CL_“¤ «¥­® ®¯à¥¤¥«¥­¨¥ ¬ ªà®á : $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ \var{-vc} ª®¬¯¨«ïâ®à á®®¡é ¥â ® ⮬, çâ® ¬ ªà®á ¡®«ìè¥ ­¥ ®¯à¥¤¥«¥­.
+parser_c_macro_set_to=03103_CL_Œ ªp®á $1 yáâ ­®¢«¥­ ¢ $2
+% ਠ¨á¯®«ì§®¢ ­¨¨ \var{-vc} ª®¬¯¨«ïâ®à á®®¡é ¥â ®¡ ¨§¬¥­¥­¨¨ §­ ç¥­¨ï ¬ ªà®á .
+parser_i_compiling=03104_I_Š®¬¯¨«ïæ¨ï $1
+% ਠ¢ª«î祭¨¨ ¨­ä®à¬ æ¨®­­ëå á®®¡é¥­¨© (\var{-vi}), ª®¬¯¨«ïâ®à á®®¡é ¥â ® ⮬,
+% ª ª¨¥ ¬®¤ã«¨ ®­ ª®¬¯¨«¨àã¥â.
+parser_u_parsing_interface=03105_UL_€­ «¨§ ¨­â¥àä¥©á  ¬®¤y«ï $1
+% ‘®®¡é ¥â ® ­ ç «¥ à §¡®à  ¨­â¥à䥩᭮© ç á⨠⥪ã饣® ¬®¤ã«ï.
+parser_u_parsing_implementation=03106_UL_€­ «¨§ ॠ«¨§ æ¨¨ ¬®¤y«ï $1
+% ‘®®¡é ¥â ® ­ ç «¥ à §¡®à  ॠ«¨§ æ¨¨ ⥪ã饣® ¬®¤ã«ï, ¯à®£à ¬¬ë ¨«¨ ¡¨¡«¨®â¥ª¨.
+parser_d_compiling_second_time=03107_DL_®¢â®à­ ï ª®¬¯¨«ïæ¨ï $1
+% ਠ¢ª«î祭¨¨ ®â« ¤®ç­ëå á®®¡é¥­¨© (\var{-vd}) ª®¬¯¨«ïâ®à á®®¡é ¥â ® ⮬,
+% ª ª¨¥ ¬®¤ã«¨ ®­ ª®¬¯¨«¨àã¥â ¯®¢â®à­®.
+parser_e_no_property_found_to_override=03109_E_Žâáãâáâ¢ã¥â ᢮©á⢮ ¤«ï ¯¥p¥®¯p¥¤¥«¥­¨ï
+% ®¯ë⪠ ¯¥à¥®¯à¥¤¥«¨âì ᢮©á⢮ த¨â¥«ì᪮£® ª« áá , ¯à¨ ®âáãâá⢨¨ â ª®¢®£® ¢ த¨â¥«ì᪮¬ ª« áá¥.
+parser_e_only_one_default_property=03110_E_„®¯ãá⨬® ⮫쪮 ®¤­® ᢮©á⢮ ¯® 㬮«ç ­¨î
+% ‘¢®©á⢮ ®¯à¥¤¥«¥­® ª ª \var{Default}, ­® த¨â¥«ì᪨© ª« áá 㦥 ¨¬¥¥â ®¯à¥¤¥«¥­­®¥ â ª¨¬ ¦¥ ®¡à §®¬
+% ᢮©á⢮.
+parser_e_property_need_paras=03111_E_‘¢®©á⢮ ¯® 㬮«ç ­¨î ¤®«¦­® ¨¬¥âì ⨯ ¬ áᨢ 
+% ’®«ìª® ᢮©á⢠ ⨯  ¬ áᨢ ¬®£ãâ ¡ëâì ®¡ê¥­ë ª ª \var{default}.
+parser_e_constructor_cannot_be_not_virtual=03112_E_‚¨pây «ì­ë¥ ª®­áâpyªâ®pë ¤®¯ãá⨬ë ⮫쪮 ¢ ª« áá å
+% ‚¨àâã «ì­ë¥ ª®­áâàãªâ®àë ¤®¯ãá⨬ë ⮫쪮 ¢ ª« áá å, ¨å ­¥«ì§ï
+% ®¡êïâì ¢ ®¡ê¥ªâ å.
+parser_e_no_default_property_available=03113_E_Žâáãâáâ¢ã¥â ᢮©á⢮ ¯® 㬮«ç ­¨î
+% ®¯ë⪠ ¤®áâ㯠 ª ᢮©áâ¢ã ¯® 㬮«ç ­¨î ª« áá , ª®â®àë© ­¥ ¨¬¥¥â â ª®£® ᢮©á⢠.
parser_e_cant_have_published=03114_E_Š« áá ­¥ ¬®¦¥â ¨¬¥âì PUBLISHED à §¤¥«, ¨á¯®«ì§y©â¥ ª«îç {$M+}
-% If you want a \var{published} section in a class definition, you must
-% use the \var{\{\$M+\}} switch, whch turns on generation of type
-% information.
-parser_e_forward_declaration_must_be_resolved=03115_E_FORWARD ®¯p¥¤¥«¥­¨¥ ª« áá  $1 ¤®«¦­® ¡ëâì ॠ«¨§®¢ ­® §¤¥áì, çâ®¡ë ¨á¯®«ì§®¢ âì ª« áá ª ª ¯à¥¤®ª
-% To be able to use an object as an ancestor object, it must be defined
-% first. This error occurs in the following situation:
+% …᫨ âॡã¥âáï à §¤¥« \var{published} ¢ ®¡ê¥­¨¨ ª« áá , á«¥¤ã¥â
+% ¨á¯®«ì§®¢ âì ª«îç \var{\{\$M+\}}, ª®â®àë© ¢ª«î砥⠣¥­¥à æ¨î ¨­ä®à¬ æ¨¨ ® ⨯ å.
+parser_e_forward_declaration_must_be_resolved=03115_E_ ­­¥¥ ®¯p¥¤¥«¥­¨¥ ª« áá  "$1" ¤®«¦­® ¡ëâì à §à¥è¥­® §¤¥áì, çâ®¡ë ¨á¯®«ì§®¢ âì ¥£® ª ª ¯à¥¤®ª
+% —â®¡ë ª« áá ¬®¦­® ¡ë«® ¨á¯®«ì§®¢ âì ª ª ¯à¥¤®ª, ®­ ¤®«¦¥­ ¡ëâì á­ ç «  ®¯à¥¤¥«¥­.
+% Žè¨¡ª  ¢®§­¨ª ¥â ¢ á«¥¤ãî饩 á¨âã æ¨¨:
% \begin{verbatim}
% Type ParentClas = Class;
% ChildClass = Class(ParentClass)
% ...
% end;
% \end{verbatim}
-% Where \var{ParentClass} is declared but not defined.
+% ƒ¤¥ \var{ParentClass} ®¡ê¥­, ­® ­¥ ®¯à¥¤¥«¥­.
parser_e_no_local_operator=03116_E_‹®ª «ì­ë¥ ®¯¥p â®pë ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% You cannot overload locally, i.e. inside procedures or function
-% definitions.
-parser_e_proc_dir_not_allowed_in_interface=03117_E_p®æ¥¤yp­ ï ¤¨p¥ªâ¨¢  $1 ­¥ p §p¥è¥­  ¢ ¨­â¥à䥩᭮© ç á⨠¬®¤ã«ï
-% This procedure directive is not allowed in the \var{interface} section of
-% a unit. You can only use it in the \var{implementation} section.
-parser_e_proc_dir_not_allowed_in_implementation=03118_E_p®æ¥¤yp­ ï ¤¨p¥ªâ¨¢  $1 ­¥ p §p¥è¥­  ¢ ॠ«¨§ æ¨®­­®© ç á⨠¬®¤ã«ï
-% This procedure directive is not defined in the \var{implementation} section of
-% a unit. You can only use it in the \var{interface} section.
-parser_e_proc_dir_not_allowed_in_procvar=03119_E_p®æ¥¤yp­ ï ¤¨p¥ªâ¨¢  $1 ­¥ p §p¥è¥­  ¢ PROCVAR ®¯p¥¤¥«¥­¨¨
-% This procedure directive cannot be part of a procedural or function
-% type declaration.
-parser_e_function_already_declared_public_forward=03120_E_”ã­ªæ¨ï $1 㦥 ®¡ê¥­  ª ª PUBLIC ¨«¨ FORWARD
-% You will get this error if a function is defined as \var{forward} twice.
-% Or it is once in the \var{interface} section, and once as a \var{forward}
-% declaration in the \var{implmentation} section.
-parser_e_not_external_and_export=03121_E_H¥«ì§ï ¨á¯®«ì§®¢ âì EXPORT ¨ EXTERNAL ¢¬¥áâ¥
-% These two procedure directives are mutually exclusive
-parser_e_name_keyword_expected=03122_E_ަ¨¤ ¥âáï ª«î祢®¥ á«®¢® NAME
-% The definition of an external variable needs a \var{name} clause.
-parser_w_not_supported_for_inline=03123_W_$1 ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ¢­yâp¨ INLINE ¯p®æ¥¤ypë/äy­ªæ¨¨
-% Inline procedures don't support this declaration.
-parser_w_inlining_disabled=03124_W_‚ª«î祭¨¥ INLINE ®âª«î祭®
-% Inlining of procedures is disabled.
+% ޝ¥à â®à ­¥«ì§ï ¯¥à¥£à㧨âì «®ª «ì­®, â.¥. ¢­ãâਠ®¯à¥¤¥«¥­¨ï ¯à®æ¥¤ãàë ¨«¨
+% ä㭪樨.
+parser_e_proc_dir_not_allowed_in_interface=03117_E_„¨p¥ªâ¨¢  ¯à®æ¥¤ãàë "$1" ­¥¤®¯ãá⨬  ¢ ¨­â¥à䥩᭮© ç á⨠¬®¤ã«ï
+% „ ­­ ï ¤¨à¥ªâ¨¢  ­¥ ¤®¯ãá⨬  ¢ ᥪ樨 \var{interface} ¬®¤ã«ï.
+% …¥ ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ¢ ᥪ樨 \var{implementation}.
+parser_e_proc_dir_not_allowed_in_implementation=03118_E_„¨p¥ªâ¨¢  ¯à®æ¥¤ãàë "$1" ­¥¤®¯ãá⨬  ¢ ॠ«¨§ æ¨®­­®© ç á⨠¬®¤ã«ï
+% „ ­­ ï ¤¨à¥ªâ¨¢  ­¥ ¤®¯ãá⨬  ¢ ᥪ樨 \var{implementation} ¬®¤ã«ï.
+% …¥ ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ¢ ᥪ樨 \var{interface}.
+parser_e_proc_dir_not_allowed_in_procvar=03119_E_„¨p¥ªâ¨¢  ¯à®æ¥¤ãàë "$1" ­¥¤®¯ãá⨬  ¢ ®¡ê¥­¨¨ ¯à®æ¥¤ãà­®© ¯¥à¥¬¥­­®©
+% „ ­­ ï ¤¨à¥ªâ¨¢  ­¥ ¬®¦¥â ¡ëâì ç áâìî ®¡ê¥­¨ï ⨯  ¯à®æ¥¤ãàë ¨«¨ ä㭪樨.
+parser_e_function_already_declared_public_forward=03120_E_”ã­ªæ¨ï "$1" 㦥 ®¡ê¥­  ª ª PUBLIC ¨«¨ FORWARD
+% Žè¨¡ª  ¢®§­¨ª ¥â ¯à¨ ¤¢ãªà â­®¬ ®¡ê¥­¨¨ ä㭪樨 ª ª \var{forward}.
+% ˆ«¨ ¯à¨ ®¡ê¥­¨¨ ¥¥ ¢ ᥪ樨 \var{interface} ¨ ¯®á«¥¤ãî饬 ®¤­®ªà â­®¬ ®¡ê¥­¨¨ ª ª \var{forward}
+% ¢ ᥪ樨 \var{implmentation}.
+parser_e_not_external_and_export=03121_E_H¥«ì§ï ¨á¯®«ì§®¢ âì EXPORT ᮢ¬¥áâ­® á EXTERNAL
+% ⨠¤¢¥ ¤¨à¥ªâ¨¢ë ïîâáï ¢§ ¨¬®¨áª«îç î騬¨
+parser_w_not_supported_for_inline=03123_W_"$1" ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ¢­yâp¨ INLINE ¯p®æ¥¤ypë/äy­ªæ¨¨
+% ‚áâà ¨¢ ¥¬ë¥ ¯à®æ¥¤ãàë ­¥ ¯®¤¤¥à¦¨¢ îâ íâ®â ⨯ ®¡ê¥­¨ï.
+parser_w_inlining_disabled=03124_W_‚áâà ¨¢ ­¨¥ (INLINE) ®âª«î祭®
+% ‚áâà ¨¢ ­¨¥ ¯à®æ¥¤ãà ®âª«î祭®.
parser_i_writing_browser_log=03125_I_‡ ¯¨á뢠¥¬ «®£ ¡p y§¥p  $1
-% When information messages are on, the compiler warns you when it
-% writes the browser log (generated with the \var{\{\$Y+ \}} switch).
-parser_h_maybe_deref_caret_missing=03126_H_Œ®¦¥â ¡ëâì ®âáyâáâ¢y¥â p §ë¬¥­®¢ ­­ë© yª § â¥«ì
-% The compiler thinks that a pointer may need a dereference.
-parser_f_assembler_reader_not_supported=03127_F_‚ë¡p ­­ë© á⨫ì ç⥭¨ï  áᥬ¡«¥p  ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% The selected assembler reader (with \var{\{\$ASMMODE xxx\}} is not
-% supported. The compiler can be compiled with or without support for a
-% particular assembler reader.
-parser_e_proc_dir_conflict=03128_E_p®æ¥¤yp­ ï ¤¨p¥ªâ¨¢  $1 ª®­ä«¨ªây¥â á ¤py£¨¬¨ ¤¨p¥ªâ¨¢ ¬¨
-% You specified a procedure directive that conflicts with other directives.
-% for instance \var{cdecl} and \var{pascal} are mutually exclusive.
-parser_e_call_convention_dont_match_forward=03129_E_‘®£« è¥­¨¥ ® ¢ë§®¢¥ ¯p®æ¥¤ypë/äy­ªæ¨¨ ­¥ ᮮ⢥âáâ¢ã¥â yª § ­­®¬y ¢ëè¥ ¢ FORWARD
-% This error happens when you declare a function or procedure with
-% e.g. \var{cdecl;} but omit this directive in the implementation, or vice
-% versa. The calling convention is part of the function declaration, and
-% must be repeated in the function definition.
-parser_e_register_calling_not_supported=03130_E_‚ë§®¢ p¥£¨áâp®¢ ("FAST CALL") ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% The \var{register} calling convention, i.e., arguments are passed in
-% registers instead of on the stack is not supported. Arguments are always
-% passed on the stack.
+% Š®£¤  ¢ª«îç¥­ë ¨­ä®à¬ æ¨®­­ë¥ á®®¡é¥­¨ï, ª®¬¯¨«ïâ®à á®®¡é ¥â
+% ® § ¯¨á¨ ¤ ­­ëå ¤«ï ¡à ã§¥à  (¢ª«îç ¥¬®£® ¤¨à¥ªâ¨¢®© \var{\{\$Y+ \}}).
+parser_h_maybe_deref_caret_missing=03126_H_‚®§¬®¦­®, ¯à®¯ã饭® p §ë¬¥­®¢ ­¨¥ yª § â¥«ï
+% Š®¬¯¨«ïâ®à áç¨â ¥â, ç⮠㪠§ â¥«ì ¬®¦¥â âॡ®¢ âì ࠧ묥­®¢ ­¨ï.
+parser_f_assembler_reader_not_supported=03127_F_‚ë¡p ­­ë© ⨯  áᥬ¡«¥p  ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
+% ‚ë¡à ­­ë© ⨯  áᥬ¡«¥à  (á ¯®¬®éìî \var{\{\$ASMMODE xxx\}}) ­¥ ¯®¤¤¥à¦¨¢ ¥âáï.
+% ®¤¤¥à¦ª  ⮣® ¨«¨ ¨­®£®  áᥬ¡«¥à  ¬®¦¥â ¡ëâì ¯®¤ª«î祭  ¯à¨ ᡮથ ª®¬¯¨«ïâ®à .
+parser_e_proc_dir_conflict=03128_E_„¨p¥ªâ¨¢  ¯à®æ¥¤ãàë "$1" ­¥á®¢¬¥á⨬  á ¤py£¨¬¨ ¤¨p¥ªâ¨¢ ¬¨
+% “ª § ­­ ï ¤¨à¥ªâ¨¢  ­¥á®¢¬¥á⨬  á ¤à㣨¬¨ ¤¨à¥ªâ¨¢ ¬¨.
+%  ¯à¨¬¥à, \var{cdecl} ¨ \var{pascal} ¨áª«îç îâ ¤à㣠¤à㣠.
+parser_e_call_convention_dont_match_forward=03129_E_’¨¯ ¢ë§®¢  ¯p®æ¥¤ypë/äy­ªæ¨¨ ­¥ ᮮ⢥âáâ¢ã¥â yª § ­­®¬y à ­¥¥
+% Žè¨¡ª  ¯à®¨á室¨â ¯à¨ ®¡ê¥­¨¨ ¯à®æ¥¤ãàë ¨«¨ ä㭪樨, ­ ¯à¨¬¥à,
+% ª ª \var{cdecl;} ¨ ¯à®¯ã᪮¬ í⮩ ¤¨à¥ªâ¨¢ë ¯à¨ ®¯à¥¤¥«¥­¨¨, ¨«¨ ­ ®¡®à®â.
+% ’¨¯ ¢ë§®¢  ï¥âáï ç áâìî ®¡ê¥­¨ï ¯à®æ¥¤ãàë ¨ ¤®«¦¥­ ¯®¢â®àïâìáï
+% ¯à¨ ¥¥ ®¯à¥¤¥«¥­¨¨.
parser_e_property_cant_have_a_default_value=03131_E_‘¢®©á⢮ ­¥ ¬®¦¥â ¨¬¥âì §­ ç¥­¨¥ ¯® y¬®«ç ­¨î
-% Set properties or indexed properties cannot have a default value.
-parser_e_property_default_value_must_const=03132_E_‡­ ç¥­¨¥ ¯® y¬®«ç ­¨î y ᢮©á⢠ ¤®«¦­® ¡ëâì ª®­á⠭⮩
-% The value of a \var{default} declared property must be known at compile
-% time. The value you specified is only known at run time. This happens
-% .e.g. if you specify a variable name as a default value.
-parser_e_cant_publish_that=03133_E_‘¨¬¢®« ­¥ ¬®¦¥â ¡ëâì PUBLISHED, ⮫쪮 ª« áá
-% Only class type variables can be in a \var{published} section of a class
-% if they are not declared as a property.
-parser_e_cant_publish_that_property=03134_E_â®â ¢¨¤ ᢮©á⢠ ­¥ ¬®¦¥â ¡ëâì PUBLISHED
-% Properties in a \var{published} section cannot be array properties.
-% they must be moved to public sections. Properties in a \var{published}
-% section must be an ordinal type, a real type, strings or sets.
-parser_w_empty_import_name=03135_W_“ª § ­­®¥ ¨¬ï ¨¬¯®àâ  ¯yáâ®
-% Both index and name for the import are 0 or empty
-parser_e_empty_import_name=03136_W_’ॡã¥âáï ¨¬ï ¨¬¯®àâ 
-% Some targets need a name for the imported procedure or a cdecl specifier
-parser_e_used_proc_name_changed=03137_E_‚­ãâ७­¥¥ ¨¬ï ä㭪樨, ¨§¬¥­¥­­® ¯®á«¥ ¨á¯®«ì§®¢ ­¨ï ä㭪樨
-% This is an internal error; please report any occurrences of this error
-% to the \fpc team.
+% ‘¢®©á⢠ ⨯  ¬­®¦¥á⢮ ¨«¨ ¨­¤¥ªá¨à®¢ ­­ë¥ ᢮©á⢠ ­¥ ¬®£ãâ ¨¬¥âì §­ ç¥­¨¥ ¯® 㬮«ç ­¨î.
+parser_e_property_default_value_must_const=03132_E_‡­ ç¥­¨¥ ᢮©á⢠ ¯® y¬®«ç ­¨î ¤®«¦­® ¡ëâì ª®­á⠭⮩
+% ‡­ ç¥­¨¥ ᢮©á⢠, ®¡ê¥­­®¥ ª ª \var{default}, ¤®«¦­® ¡ëâì ¨§¢¥áâ­® ¢® ¢à¥¬ï ª®¬¯¨«ï樨.
+% Žè¨¡ª  ¯à®¨á室¨â, ¥á«¨ 㪠§ ­® §­ ç¥­¨¥, ¨§¢¥áâ­®¥ ⮫쪮 ¢® ¢à¥¬ï ¢ë¯®«­¥­¨ï, ­ ¯à¨¬¥à, ¨¬ï ¯¥à¥¬¥­­®©.
+parser_e_cant_publish_that=03133_E_‘¨¬¢®« ­¥ ¬®¦¥â ¡ëâì PUBLISHED, §¤¥áì ¤®¯ãá⨬ ⮫쪮 ª« áá
+% ’®«ìª® ¯¥à¥¬¥­­ë¥ ⨯  ª« áá  ¬®£ãâ ¡ëâì ¢ \var{published} ᥪ樨 ®¡ê¥­¨ï ª« áá ,
+% ¥á«¨ ®­¨ ­¥ ®¡ê¥­ë ª ª ᢮©á⢮.
+parser_e_cant_publish_that_property=03134_E_‘¢®©á⢮ í⮣® ⨯  ­¥ ¬®¦¥â ¡ëâì PUBLISHED
+% ‘¢®©á⢠ ¢ \var{published} ᥪ樨 ­¥ ¬®£ãâ ¡ëâì ⨯  ¬ áᨢ, ®­¨
+% ¤®«¦­ë ¡ëâì ¯¥à¥­¥á¥­ë ¢ ᥪæ¨î public. ‘¢®©á⢠ ¢ ᥪ樨 \var{published}
+% ¬®£ãâ ¡ëâì ¯¥à¥ç¨á«ï¥¬®£®, ¢¥é¥á⢥­­®£®, áâப®¢®£® ⨯  «¨¡® ¬­®¦¥á⢠¬¨.
+parser_e_empty_import_name=03136_E_’ॡã¥âáï ¨¬ï ¨¬¯®àâ 
+% „«ï ­¥ª®â®àëå ¯« âä®à¬ âॡã¥âáï ¨¬ï ¨¬¯®àâ¨à㥬®© ¯à®æ¥¤ãàë ¨«¨ 㪠§ â¥«ï cdecl
parser_e_division_by_zero=03138_E_„¥«¥­¨¥ ­  ­®«ì
-% There is a divsion by zero encounted
+% ந§®è«® ¤¥«¥­¨¥ ­  ­®«ì.
parser_e_invalid_float_operation=03139_E_H¥¯p ¢¨«ì­ ï ®¯¥p æ¨ï á ¯« ¢ î饩 § ¯ï⮩
-% An operation on two real type values produced an overflow or a division
-% by zero.
-parser_e_array_lower_less_than_upper_bound=03140_E_‚¥på­ïï £p ­¨æ  ¤¨ ¯ §®­  ¬¥­ìè¥, 祬 ­¨¦­ïï £p ­¨æ 
-% The upper bound of a \var{case} label is less than the lower bound and this
-% is not possible
-parser_w_string_too_long=03141_W_‘âப  "$1" ¡®«ìè¥ ç¥¬ $2
-% The size of the constant string is larger than the size you specified in
-% string type definition
-parser_e_string_larger_array=03142_E_‘âப®¢ ï ¤«¨­  ¡®«ìè¥, 祬 ¤«¨­  ¬ áᨢ  ᨬ¢®«®¢
-% The size of the constant string is larger than the size you specified in
-% the array[x..y] of char definition
-parser_e_ill_msg_expr=03143_E_H¥¢¥p­®¥ ¢ëp ¦¥­¨¥ ¯®á«¥ ¤¨p¥ªâ¨¢ë á®®¡é¥­¨ï
-% \fpc supports only integer or string values as message constants
-parser_e_ill_msg_param=03144_E_Ž¡p ¡®â稪¨ á®®¡é¥­¨© ¬®£yâ ¡p âì ⮫쪮 ®¤¨­ § ¯p®á ¢ áá뫮筮¬ ¯ p ¬¥âp¥
-% A method declared with the \var{message}-directive as message handler
-% can take only one parameter which must be declared as call by reference
-% Parameters are declared as call by reference using the \var{var}-directive
-parser_e_duplicate_message_label=03145_E_®¢â®p­®¥ ®¯p¥¤¥«¥­¨¥ ¬¥âª¨ á®®¡é¥­¨ï: $1
-% A label for a message is used twice in one object/class
+% ޝ¥à æ¨ï ­ ¤ ¤¢ã¬ï ¢¥é¥á⢥­­ë¬¨ ç¨á« ¬¨ ¢ë§¢ «  ¯¥à¥¯®«­¥­¨¥ ¨«¨ ¤¥«¥­¨¥ ­  ­®«ì.
+parser_e_array_lower_less_than_upper_bound=03140_E_‚¥på­ïï £p ­¨æ  ¤¨ ¯ §®­  ¬¥­ìè¥, 祬 ­¨¦­ïï
+% ‚¥àå­ïï £à ­¨æ  ¢ ®¡ê¥­¨¨ ¬ áᨢ  ¬¥­ìè¥ ­¨¦­¥© £à ­¨æë, çâ® ­¥¤®¯ãá⨬®.
+parser_w_string_too_long=03141_W_‘âப  "$1" ¤«¨­­¥¥, 祬 "$2"
+% „«¨­  áâப®¢®© ª®­áâ ­âë ¯à¥¢ë蠥⠤«¨­ã, 㪠§ ­­ãî ¢ ®¡ê¥­¨¨ ⨯  áâப¨.
+parser_e_string_larger_array=03142_E_„«¨­  áâப¨ ¯à¥¢ë蠥⠤«¨­ã ¬ áᨢ  ᨬ¢®«®¢
+% „«¨­  áâப®¢®© ª®­áâ ­âë ¯à¥¢ëè ¥â à §¬¥à, 㪠§ ­­ë© ¢ ®¡ê¥­¨¨ ¬ áᨢ 
+% array[x..y] of char.
+parser_e_ill_msg_expr=03143_E_H¥¢¥p­®¥ ¢ëp ¦¥­¨¥ ¯®á«¥ ¤¨p¥ªâ¨¢ë message
+% \fpc ¯®¤¤¥à¦¨¢ ¥â ⮫쪮 楫®ç¨á«¥­­ë¥ ¨ áâப®¢ë¥ ¢ëà ¦¥­¨ï ª ª ¨¤¥­â¨ä¨ª â®àë á®®¡é¥­¨©.
+parser_e_ill_msg_param=03144_E_Ž¡p ¡®â稪¨ á®®¡é¥­¨© ¯à¨­¨¬ îâ ⮫쪮 ®¤¨­ ¯ à ¬¥âà ¯® áá뫪¥
+% Œ¥â®¤, ®¡ê¥­­ë© á ¤¨à¥ªâ¨¢®© \var{message} ª ª ®¡à ¡®â稪 á®®¡é¥­¨©,
+% ¬®¦¥â ¯à¨­¨¬ âì ⮫쪮 ®¤¨­ ¯ à ¬¥âà, ª®â®àë© ¤®«¦¥­ ¯¥à¥¤ ¢ âìáï ¯® áá뫪¥.
+%  à ¬¥âà ¯¥à¥¤ ¥âáï ¯® áá뫪¥ ¯®á।á⢮¬ ¤¨à¥ªâ¨¢ë \var{var}.
+parser_e_duplicate_message_label=03145_E_®¢â®p­ ï ¬¥âª  á®®¡é¥­¨ï: "$1"
+% ޤ­  ¨ â  ¦¥ ¬¥âª  á®®¡é¥­¨ï ¨á¯®«ì§®¢ ­  ¤¢ ¦¤ë ¢ ®¤­®¬ ®¡ê¥ªâ¥/ª« áá¥.
parser_e_self_in_non_message_handler=03146_E_SELF ¬®¦¥â ¡ëâì ⮫쪮 ª ª ï¢­ë© ¯ à ¬¥âà ¢ ®¡à ¡®â稪 å á®®¡é¥­¨ï
-% The self parameter can be passed only explicitly in a method which
-% is declared as message method handler.
-parser_e_threadvars_only_sg=03147_E_¥p¥¬¥­­ë¥ âp¥©¤®¢ ¬®£yâ ¡ëâì ⮫쪮 áâ â¨ç¥áª¨¬¨ ¨«¨ £«®¡ «ì­ë¬¨
-% Threadvars must be static or global, you can't declare a thread
-% local to a procedure. Local variables are always local to a thread,
-% because every thread has its own stack and local variables
-% are stored on the stack
-parser_f_direct_assembler_not_allowed=03148_F_àאַ© áâ¨«ì  áᥬ¡«¥p  ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ä®p¬ â®¬ ¢ë室­®£® ä ©« 
-% You can't use direct assembler when using a binary writer, choose an
-% other outputformat or use an other assembler reader
-parser_w_no_objpas_use_mode=03149_W_H¥ § £py¦ ©â¥ OBJPAS ¬®¤y«ì, ¨á¯®«ì§y©â¥ {$mode objfpc} ¨«¨ {$mode delphi} ¢¬¥áâ® í⮣®
-% You're trying to load the ObjPas unit manual from a uses clause. This is
-% not a good idea to do, you can better use the \var{\{\$mode objfpc\}} or
-% \var{\{\$mode delphi\}}
-% directives which load the unit automaticly
-parser_e_no_object_override=03150_E_¥p¥®¯p¥¤¥«¥­¨¥ ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­­® ¢ ®¡ê¥ªâ å
-% Override isn't support for objects, use VIRTUAL instead to override
-% a method of an anchestor object
-parser_e_cant_use_inittable_here=03151_E_’¨¯ ¤ ­­ëå, ª®â®pë© âp¥¡y¥â INITILIZATION/FINALIZATION ­¥ ¬®¦¥â ¨á¯®«ì§®¢ âìáï ¢ p §«¨ç­ëå § ¯¨áïå
-% Some data type (e.g. \var{ansistring}) needs initialization/finalization
-% code which is implicitly generated by the compiler. Such data types
-% can't be used in the variant part of a record.
-parser_e_resourcestring_only_sg=03152_E_‘âப®¢ë¥ à¥áãàáë ¬®£ãâì ¡ëâì ⮫쪮 áâ â¨ç¥áª¨¬¨ ¨«¨ £«®¡ «ì­ë¬¨
-% Resourcestring can not be declared local, only global or using the static
-% directive.
+%  à ¬¥âà self ¬®¦¥â ¡ëâì ⮫쪮 ® ¯¥à¥¤ ­ ¢ ¬¥â®¤, ®¡ê¥­­ë© ª ª ®¡à ¡®â稪 á®®¡é¥­¨©.
+parser_e_threadvars_only_sg=03147_E_¥p¥¬¥­­ë¥ threadvar ¬®£yâ ¡ëâì ⮫쪮 áâ â¨ç¥áª¨¬¨ ¨«¨ £«®¡ «ì­ë¬¨
+% ¥à¥¬¥­­ë¥ threadvar ¤®«¦­ë ¡ëâì áâ â¨ç¥áª¨¬¨ ¨«¨ £«®¡ «ì­ë¬¨, ¨å ­¥«ì§ï ®¡êïâì «®ª «ì­®
+% ¢ ¯à®æ¥¤ãà¥. ‹®ª «ì­ë¥ ¯¥à¥¬¥­­ë¥ ¯à®æ¥¤ãàë ¢á¥£¤  ïîâáï «®ª «ì­ë¬¨ ¤«ï ¯®â®ª ,
+% ¯®â®¬ã çâ® ª ¦¤ë© ¯®â®ª ¨¬¥¥â ᮡá⢥­­ë© á⥪,   «®ª «ì­ë¥ ¯¥à¥¬¥­­ë¥ åà ­ïâáï ­  á⥪¥.
+parser_f_direct_assembler_not_allowed=03148_F_’¨¯  áᥬ¡«¥p  direct ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ¯à¨ ¤¢®¨ç­®¬ ä®p¬ â¥ ¢ë室­®£® ä ©« 
+% ’¨¯  áᥬ¡«¥à  direct ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ᮢ¬¥áâ­® á ¤¢®¨ç­ë¬ ä®à¬ â®¬ ¢ë室­ëå ä ©«®¢,
+% ¨á¯®«ì§ã©â¥ ¤à㣮© ¢ë室­®© ä®à¬ â ¨«¨ ¤à㣮©  áᥬ¡«¥à.
+parser_w_no_objpas_use_mode=03149_W_H¥ § £py¦ ©â¥ ¬®¤ã«ì OBJPAS ¢àãç­ãî, ¨á¯®«ì§y©â¥ {$mode objfpc} ¨«¨ {$mode delphi}
+% ®¯ë⪠ § £à㧨âì ¬®¤ã«ì ObjPas ¢àãç­ãî ¢ ᥪ樨 uses. â®â ¬®¤ã«ì ¯à¥¤­ §­ ç¥­ ¤«ï
+%  ¢â®¬ â¨ç¥áª®© § £à㧪¨ á ¯®¬®éìî ¤¨à¥ªâ¨¢ \var{\{\$mode objfpc\}} ¨«¨
+% \var{\{\$mode delphi\}}.
+parser_e_no_object_override=03150_E_OVERRIDE ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­® ¢ ®¡ê¥ªâ å
+% „¨à¥ªâ¨¢  override ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ®¡ê¥ªâ®¢, ¤«ï ¯¥à¥ªàëâ¨ï ¬¥â®¤®¢ த¨â¥«ì᪮£®
+% ®¡ê¥ªâ  á«¥¤ã¥â ¨á¯®«ì§®¢ âì \var{virtual}.
+parser_e_cant_use_inittable_here=03151_E_’¨¯ ¤ ­­ëå, âp¥¡ãî騩 ¨­¨æ¨ «¨§ æ¨¨/䨭 «¨§ æ¨¨, ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ¢ à¨ ­â­ëå § ¯¨áïå
+% ¥ª®â®àë¥ â¨¯ë ¤ ­­ëå (­ ¯à¨¬¥à, \var{ansistring}) âॡãîâ ª®¤ ¨­¨æ¨ «¨§ æ¨¨/䨭 «¨§ æ¨¨,
+% ª®â®àë© ­¥ï¢­® £¥­¥à¨àã¥âáï ª®¬¨¯¨«ïâ®à®¬. ’ ª¨¥ â¨¯ë ¤ ­­ëå ­¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ­ë
+% ¢ ¢ à¨ ­â­®© ç á⨠§ ¯¨á¥©.
+parser_e_resourcestring_only_sg=03152_E_‘âப¨ à¥áãàᮢ ¬®£ãâ ¡ëâì ⮫쪮 áâ â¨ç¥áª¨¬¨ ¨«¨ £«®¡ «ì­ë¬¨
+% ‘âப¨ à¥áãàᮢ ­¥ ¬®£ãâ ¡ëâì ®¡ê¥­ë ­  «®ª «ì­®¬ ã஢­¥, ⮫쪮 ­  ã஢­¥ ¬®¤ã«ï.
parser_e_exit_with_argument_not__possible=03153_E_à®æ¥¤ãà  Exit á  à£ã¬¥­â®¬ §¤¥áì ­¥¤®¯ãá⨬ 
-% an exit statement with an argument for the return value can't be used here, this
-% can happen e.g. in \var{try..except} or \var{try..finally} blocks
-parser_e_stored_property_must_be_boolean=03154_E_’¨¯ á®å࠭塞®£® ᨬ¢®«  ¤®«¦¥­ ¡ëâì boolean
-% If you specify a storage symbol in a property declaration, it must be of
-% the type boolean
-parser_e_ill_property_storage_sym=03155_E_â®â ⨯ ᨬ¢®«  ­¥ ¬®¦¥â ¡ëâì á®åp ­¥­ ¢ í⮬ ᢮©á⢥
-% You can't use this type of symbol as storage specifier in property
-% declaration. You can use only methods with the result type boolean,
-% boolean class fields or boolean constants
-parser_e_only_publishable_classes_can__be_published=03156_E_’®«ìª® ª« áá, ª®â®pë© ª®¬¯¨«¨py¥âáï ¢ $M+ p¥¦¨¬¥ ¬®¦¥â ¡ëâì published
-% In the published section of a class can be only class as fields used which
-% are compiled in $M+ or which are derived from such a class. Normally
-% such a class should be derived from TPersitent
+% ‚ë§®¢ exit á  à£ã¬¥­â®¬ ¤«ï ¢®§¢à é ¥¬®£® §­ ç¥­¨ï ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¢ í⮬ ¬¥áâ¥,
+% ¢ ç áâ­®áâ¨, ¢ ¡«®ª å \var{try..except} ¨«¨ \var{try..finally}.
+parser_e_stored_property_must_be_boolean=03154_E_’¨¯ ᨬ¢®«  stored ¤®«¦¥­ ¡ëâì boolean
+% …᫨ ¢ ®¡ê¥­¨¨ ᢮©á⢠ ¨á¯®«ì§ã¥âáï ᨬ¢®« stored, ®­ ¤®«¦¥­ ¨¬¥âì ⨯ boolean.
+parser_e_ill_property_storage_sym=03155_E_â®â ᨬ¢®« ­¥¤®¯ãá⨬ ¢ ª ç¥á⢥ stored
+% „ ­­ë© ⨯ ᨬ¢®«  ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¤«ï 㪠§ ­¨ï ¯à¨§­ ª  á®åà ­¥­¨ï ᢮©áâ¢.
+% „®¯ãá⨬® ¨á¯®«ì§®¢ âì ¬¥â®¤ë, ¢®§¢à é î騥 boolean, ¯®«ï ⨯  boolean,
+% «¨¡® ª®­áâ ­âë í⮣® ⨯ .
+parser_e_only_publishable_classes_can_be_published=03156_E_’®«ìª® ª« ááë, ᪮¬¯¨«¨p®¢ ­­ë¥ ¢ ०¨¬¥ $M+, ¬®£ãâ ¡ëâì published
+% ‚ ᥪ樨 published ®¡ê¥­¨ï ª« áá  ¬®£ã⠨ᯮ«ì§®¢ âìáï ¯®«ï ⮫쪮 ⨯  ª« áá ,
+% ª®â®àë© ª®¬¯¨«¨àã¥âáï ¢ ०¨¬¥ $M+ ¨«¨ ã­ á«¥¤®¢ ­­ë© ®â â ª®£® ª« áá . Ž¡ëç­®
+% ¨á¯®«ì§ãîâáï ­ á«¥¤­¨ª¨ TPersitent.
parser_e_proc_directive_expected=03157_E_ަ¨¤ ¥âáï ¯p®æ¥¤yp­ ï ¤¨p¥ªâ¨¢ 
-% When declaring a procedure in a const block you used a ; after the
-% procedure declaration after which a procedure directive must follow.
-% Correct declarations are:
+% Žè¨¡ª  ¯à®¨á室¨â, ¥á«¨ ¢ ¤¨à¥ªâ¨¢¥ \var{\{\$Calling\}} ­¥ 㪠§ ­ ⨯ ¢ë§®¢ .
+% ’ ª¦¥ ¯à®¨á室¨â, ¥á«¨ ¯à¨ ®¡ê¥­¨¨ ¯à®æ¥¤ãà ¢ ¡«®ª¥ ª®­á⠭⠨ᯮ«ì§ã¥âáï ; ¯®á«¥
+% ®¡ê¥­¨ï ¯à®æ¥¤ãàë, ¯®á«¥ 祣® ¤®«¦­  á«¥¤®¢ âì ¯à®æ¥¤ãà­ ï ¤¨à¥ªâ¨¢ .
+% ਬ¥àë ¯à ¢¨«ì­ëå ®¡ê¥­¨©:
% \begin{verbatim}
% const
% p : procedure;stdcall=nil;
% p : procedure stdcall=nil;
% \end{verbatim}
-parser_e_invalid_property_index_value=03158_E_‡­ ç¥­¨¥ ᢮©á⢠ ¨­¤¥ªá  ¤®«¦­® ¡ëâì ®¡ëç­®£® ⨯ 
-% The value you use to index a property must be of an ordinal type, for
-% example an integer or enumerated type.
+parser_e_invalid_property_index_value=03158_E_‡­ ç¥­¨¥ ¨­¤¥ªá  ᢮©á⢠ ¤®«¦­® ¡ëâì ¯®à浪®¢®£® ⨯ 
+% ‡­ ç¥­¨¥, ¨á¯®«ìã§¥¬®¥ ª ª ¨­¤¥ªá ᢮©á⢠, ¤®«¦­® ¡ëâì ¯®à浪®¢®£® ⨯ , ­ ¯à¨¬¥à,
+% æ¥«ë¬ ç¨á«®¬ ¨«¨ ¯¥à¥ç¨á«¥­¨¥¬.
parser_e_procname_to_short_for_export=03159_E_ˆ¬ï ¯p®æ¥¤ypë ᫨誮¬ ª®p®âª®¥ ¤«ï íªá¯®pâ 
-% The length of the procedure/function name must be at least 2 characters
-% long. This is because of a bug in dlltool which doesn't parse the .def
-% file correct with a name of length 1.
-parser_e_dlltool_unit_var_problem=03160_E_Žâáãâáâ¢ãîé ï DEFFILE § ¯¨áì ¬®¦¥â ¡ëâì á®§¤ ­  ¤«ï £«®¡ «ì­ëå ¯¥à¥¬¥­­ëå ¬®¤ã«ï
-parser_e_dlltool_unit_var_problem2=03161_E_Š®¬¯¨«¨à®¢ ­¨¥ ¡¥§ -WD ®¯æ¨¨
-parser_f_need_objfpc_or_delphi_mode=03162_F_‚ ¬ ­¥®¡å®¤¨¬ ObjFpc (-S2) ¨«¨ Delphi (-Sd) p¥¦¨¬ ᮢ¬¥á⨬®á⨠¤«ï ª®¬¯¨«ï樨 í⮣® ¬®¤y«ï
-% You need to use {$mode objfpc} or {$mode delphi} to compile this file.
-% Or use the equivalent commandline switches -S2 or -Sd.
-parser_e_no_export_with_index_for_target=03163_E_H¥ ¬®£y íªá¯®pâ¨p®¢ âì á í⨬ ¨­¤¥ªá®¬ ¯®¤ $1
-% Exporting of functions or procedures with a specified index is not
-% support on all targets. The only platforms currently supporting
-% export with index are OS/2 and Win32.
-parser_e_no_export_of_variables_for_target=03164_E_ªá¯®pâ¨p®¢ ­¨¥ ¯¥p¥¬¥­­ëå ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ¯®¤ $1
-% Exporting of variables is not support on all targets. The only platform
-% currently supporting export of variables is Win32.
-parser_e_improper_guid_syntax=03165_E_¥¯®¤å®¤ï騩 GUID ᨭ⠪á¨á
-parser_f_interface_cant_have_variables=03166_F_Interface ­¥ ¬®¦¥â ¨¬¥âì ¯¥à¥¬¥­­ëå
-parser_f_interface_cant_have_constr_or_destr=03167_F_Interface ­¥ ¬®¦¥â ¨¬¥âì ª®­áâàãªâ®à  ¨«¨ destructor
-parser_w_interface_mapping_notfound=03168_W_à®æ¥¤ãà  ­ §¢ ­­ ï "$1" ­¥ ­ ©¤¥­  ¯®¤å®¤ï饩 ¤«ï ॠ«¨§ æ¨¨ $2.$3
-parser_e_interface_id_expected=03169_E_’ॡã¥âáï inteface
-% This happens when the compiler scans a \var{class} declaration that contains
-% \var{interface} function name mapping code like this:
+% „«¨­  íªá¯®àâ­®£® ¨¬¥­¨ ¯à®æ¥¤ãàë/ä㭪樨 ¤®«¦­  á®áâ ¢«ïâì ¯® ªà ©­¥© ¬¥à¥ 2 ᨬ¢®« .
+% â® ®¡ãá«®¢«¥­® ®è¨¡ª®© ¢ ã⨫¨â¥ dlltool, ª®â®à ï ­¥ ¬®¦¥â ª®à४⭮ ¯à®ç¨â âì .def ä ©«
+% á ¤«¨­®© ¨¬¥­, à ¢­®© 1.
+parser_e_dlltool_unit_var_problem=03160_E_¥¢®§¬®¦­® á®§¤ âì § ¯¨áì DEFFILE ¤«ï £«®¡ «ì­ëå ¯¥à¥¬¥­­ëå ¬®¤ã«ï
+parser_e_dlltool_unit_var_problem2=03161_E_Š®¬¯¨«¨àã©â¥ ¡¥§ ª«îç  -WD
+% â®â ä ©« ­¥®¡å®¤¨¬® ª®¬¯¨«¨à®¢ âì ¡¥§ 㪠§ ­¨ï ª«îç  -WD ¢ ª®¬ ­¤­®© áâப¥.
+parser_f_need_objfpc_or_delphi_mode=03162_F_„«ï í⮣® ¬®¤ã«ï ­¥®¡å®¤¨¬ ०¨¬ ObjFpc (-S2) ¨«¨ Delphi (-Sd)
+% „«ï ª®¬¯¨«ï樨 ¤ ­­®£® ¬®¤ã«ï âॡã¥âáï {$mode objfpc} or {$mode delphi},
+% «¨¡® ¨á¯®«ì§®¢ ­¨¥  ­ «®£¨ç­ëå ª«î祩 ª®¬ ­¤­®© áâப¨ -S2 ¨«¨ -Sd.
+parser_e_no_export_with_index_for_target=03163_E_ªá¯®pâ ¯® ¨­¤¥ªáã ­¥¢®§¬®¦¥­ ¯®¤ $1
+% ªá¯®àâ ¯à®æ¥¤ãà/ä㭪権 á 㪠§ ­¨¥¬ ¨­¤¥ªá  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¯« âä®à¬ë ­ §­ ç¥­¨ï.
+parser_e_no_export_of_variables_for_target=03164_E_ªá¯®pâ ¯¥p¥¬¥­­ëå ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ¯®¤ $1
+% ªá¯®àâ ¯¥à¥¬¥­­ëå ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¯« âä®à¬ë ­ §­ ç¥­¨ï.
+parser_e_improper_guid_syntax=03165_E_¥¢¥à­ë© ᨭ⠪á¨á GUID
+% Žè¨¡ª  ¢ ᨭ⠪á¨á¥ GUID. Š®à४â­ë© GUID ¤®«¦¥­ ¡ëâì ¢ ä®à¬¥
+% \begin{verbatim}
+% {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
+% \end{verbatim}
+% ƒ¤¥ ª ¦¤ë© \var{X} ¯à¥¤áâ ¢«ï¥â ᮡ®© è¥áâ­ ¤æ â¥à¨ç­ãî æ¨äàã.
+parser_w_interface_mapping_notfound=03168_W_¥ ­ ©¤¥­  ¯à®æ¥¤ãà  á ¨¬¥­¥¬ "$1", ¯®¤å®¤ïé ï ¤«ï ॠ«¨§ æ¨¨ $2.$3
+% Š®¬¯¨«ïâ®à ­¥ ¬®¦¥â ­ ©â¨ ¯à®æ¥¤ãàã, ¯®¤å®¤ïéãî ¤«ï ॠ«¨§ æ¨¨ 㪠§ ­­®£® ¬¥â®¤  ¨­â¥à䥩á .
+% à®æ¥¤ãà  á ᮢ¯ ¤ î騬 ¨¬¥­¥¬ ­ ©¤¥­ , ­® ­¥ ᮢ¯ ¤ ¥â ᯨ᮪ ¯ à ¬¥â஢.
+parser_e_interface_id_expected=03169_E_ަ¨¤ ¥âáï ¨¤¥­â¨ä¨ª â®à ¨­â¥à䥩á 
+% நá室¨â ¯à¨  ­ «¨§¥ ®¡ê¥­¨ï \var{class}, ª®â®à®¥ ᮤ¥à¦¨â
+% ®¯¨á ­¨¥ ᮮ⢥âáâ¢¨ï ¬¥â®¤®¢ \var{interface} ¯® ¨¬¥­¨, ­ ¯à¨¬¥à:
% \begin{verbatim}
% type
% TMyObject = class(TObject, IDispatch)
% function IUnknown.QueryInterface=MyQueryInterface;
% ....
% \end{verbatim}
-% and the \var{interface} before the dot not listed in the inheritance list.
-parser_e_type_cant_be_used_in_array_index=03170_E_’¨¯ "$1" ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ª ª ¨­¤¥ªá ¬ áᨢ 
-% Types like DWord or Int64 aren't allowed as array index type
-parser_e_no_con_des_in_interfaces=03171_E_Con- ¨ destructor ­¥ ¯®§¢®«ïîâáï ¢ interface
-% Constructor and destructor declarations aren't allowed in interface
-% In the most cases the method \var{QueryInterface} of \var{IUnknown} can
-% be used to create a new interface.
-parser_e_no_access_specifier_in_interfaces=03172_E_‘¯¥æ¨ä¨ª â®àë ¤®áâ㯠 ­¥ ¬®£ã⠨ᯮ«ì§®¢ âìáï ¢ INTERFACES
-% The access specifiers \var{public}, \var{private}, \var{protected} and
-% \var{pusblished} can't be used in interfaces because all methods
-% of an interfaces must be public.
-parser_e_no_vars_in_interfaces=03173_E_Interface ­¥ ¬®¦¥â ¨¬¥âì ¯®«¥©, ⮫쪮 ¬¥â®¤ë
-% Declarations of fields aren't allowed in interfaces. An interface
-% can contain only methods
-parser_e_no_local_external=03174_E_¥ ¬®£ã ®¯à¥¤¥«¨âì «®ª «ì­ãî ¯à®æ¥¤ãàã ª ª EXTERNAL
-% Declaring local procedures as external is not possible. Local procedures
-% get hidden parameters that will make the chance on errors very high
-parser_w_skipped_fields_before=03175_W_¥ª®â®àë¥ ¯®«ï, ­ å®¤ï騥áï ¯¥à¥¤ "$1" ­¥ ¡ë«¨ ¨­¨æ¨ «¨§¨à®¢ ­ë
-% In Delphi mode, not all fields of a typed constant record have to be
-% initialized, but the compiler warns you when it detects such situations.
-parser_e_skipped_fields_before=03176_E_¥ª®â®àë¥ ¯®«ï, ­ å®¤ï騥áï ¯¥à¥¤ "$1" ­¥ ¡ë«¨ ¨­¨æ¨ «¨§¨à®¢ ­ë
-% In all syntax modes but Delphi mode, you can't leave some fields uninitialized
-% in the middle of a typed constant record
-parser_h_skipped_fields_after=03177_H_¥ª®â®àë¥ ¯®«ï, ­ å®¤ï騥áï ¯¥à¥¤ "$1" ­¥ ¡ë«¨ ¨­¨æ¨ «¨§¨à®¢ ­ë
-% You can leave some fields at the end of a type constant record uninitialized
-% (the compiler will initialize them to zero automatically), but the the
-% compiler gives a hint because it can be the source of a problem.
-parser_e_varargs_need_cdecl_and_external=03178_E_VarArgs ¤¨à¥ªâ¨¢  ¡¥§ CDecl ¨ External
-% The varargs directive can only be used with procedures or functions
-% that are declared with CDecl and External directives. The varargs directive
-% is only meant to provide a compatible interface to C functions like printf.
-parser_e_self_call_by_value=03179_E_Self ¤®«¦¥­ ¡ëâì ­®à¬ «ì­ë¬ (call-by-value) ¯ à ¬¥â஬
-% You can't declare self as a const or var parameter, it must always be
-% a call-by-value parameter
-parser_e_interface_has_no_guid=03180_E_ˆ­â¥à䥩á "$1" ­¥ ¨¬¥¥â ¨¤¥­â¨ä¨ª â®à  interface
-% When you want to assign an interface to a constant, then the interface
-% must have a GUID value set.
-parser_e_illegal_field_or_method=03181_E_¥¨§¢¥áâ­ë© ¯®«¥ ª« áá  ¨«¨ ¬¥â®¤  "$1"
-% Properties must refer to a field or method in the same class.
-parser_w_proc_overriding_calling=03182_W_¥à¥®¯à¥¤¥«¥­¨¥ ᮣ« è¥­¨ï ® ¢ë§®¢ å ¬¥¦¤ã "$1" ¨ "$2"
-% There are two directives in the procedure declaration that specify a calling
-% convention. Only the last directive will be used
-parser_e_no_procvarobj_const=03183_E_’¨¯¨§¨à®¢ ­­ ï ª®­áâ ­â  (⨯ procedure ¨«¨ object) ¬®¦¥â ¡ëâì ¨­¨æ¨ «¨§¨à®¢ ­­  ⮫쪮 ¢ NIL
-% You can't assign the address of a method to a typed constant which has a
-% 'procedure of object' type, because such a constant requires two addresses:
-% that of the method (which is known at compile time) and that of the object or
-% class instance it operates on (which can not be known at compile time).
+% ¨ ¨¬ï \var{interface} ¯¥à¥¤ â®çª®© ­¥ ¯¥à¥ç¨á«¥­® ¢ ᯨ᪥ ­ á«¥¤®¢ ­¨ï.
+parser_e_type_cant_be_used_in_array_index=03170_E_’¨¯ "$1" ­¥ ¬®¦¥â ¨á¯®«ì§®¢ âìáï ª ª ¨­¤¥ªá ¬ áᨢ 
+% ’ ª¨¥ ⨯ë, ª ª \var{qword} ¨«¨ \var{int64}, ­¥¤®¯ãáâ¨¬ë ¢ ª ç¥á⢥ ¨­¤¥ªá®¢ ¬ áᨢ 
+parser_e_no_con_des_in_interfaces=03171_E_Constructor ¨ destructor ­¥¤®¯ãáâ¨¬ë ¢ interface
+% ˆá¯®«ì§®¢ ­¨¥ ª®­áâàãªâ®à®¢ ¨ ¤¥áâàãªâ®à®¢ ¢ ¨­â¥à䥩á å ­¥ à §à¥è ¥âáï.
+% ‚ ¡®«ì設á⢥ á«ãç ¥¢ ¤«ï á®§¤ ­¨ï íª§¥¬¯«ï஢ ¨­â¥àä¥©á  ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¬¥â®¤
+% \var{QueryInterface} ¨­â¥àä¥©á  \var{IUnknown}.
+parser_e_no_access_specifier_in_interfaces=03172_E_“ª § ­¨¥ ⨯  ¤®áâ㯠 ­¥¤®¯ãá⨬® ¢ interface
+% ’¨¯ ¤®áâ㯠 \var{public}, \var{private}, \var{protected} ¨
+% \var{pusblished} ­¥ ¬®¦¥â ¡ëâì 㪠§ ­ ¤«ï ¬¥â®¤®¢ ¨­â¥à䥩á .
+% ‚ᥠ¬¥â®¤ë ¨­âä¥àä¥©á  ï¢«ïîâáï ®¡é¥¤®áâ㯭묨 (public).
+parser_e_no_vars_in_interfaces=03173_E_Interface ­¥ ¬®¦¥â ᮤ¥à¦ âì ¯®«ï
+% Ž¡ê¥­¨¥ ¯®«¥© ¢ ¨­â¥à䥩ᥠ­¥ ¤®¯ã᪠¥âáï. ˆ­â¥àä¥©á ¬®¦¥â
+% ᮤ¥à¦ âì ⮫쪮 ¬¥â®¤ë.
+parser_e_no_local_proc_external=03174_E_‹®ª «ì­ ï ¯à®æ¥¤ãà  ­¥ ¬®¦¥â ¡ëâì EXTERNAL
+% Ž¡ê¥­¨¥ «®ª «ì­ëå ¯à®æ¥¤ãà ª ª external ­¥¢®§¬®¦­®. ‹®ª «ì­ë¥ ¯à®æ¥¤ãàë
+% ¯®«ãç îâ áªàëâë¥ ¯ à ¬¥âàë, çâ® ¤¥« ¥â ¢¥à®ïâ­®áâì ®è¨¡®ª ®ç¥­ì ¢ë᮪®©.
+parser_w_skipped_fields_before=03175_W_¥ª®â®àë¥ ¯®«ï ¯¥à¥¤ "$1" ­¥ ¡ë«¨ ¨­¨æ¨ «¨§¨à®¢ ­ë
+% ‚ ०¨¬¥ Delphi, ¨­¨æ¨ «¨§ æ¨ï ­¥ª®â®àëå ¯®«¥© ª®­áâ ­â ⨯  § ¯¨áì ¬®¦¥â ¡ëâì ¯à®¯ã饭 ,
+% ­® ª®¬¯¨«ïâ®à ¯à¥¤ã¯à¥¦¤ ¥â ® ­ «¨ç¨¨ â ª®© á¨âã æ¨¨.
+parser_e_skipped_fields_before=03176_E_¥ª®â®àë¥ ¯®«ï ¯¥à¥¤ "$1" ­¥ ¡ë«¨ ¨­¨æ¨ «¨§¨à®¢ ­ë
+% ‚ ०¨¬ å, ®â«¨ç­ëå ®â Delphi, ­¥ ¤®¯ã᪠¥âáï ®áâ ¢«ïâì ­¥¨­¨æ¨ «¨§¨à®¢ ­­ë¥ ¯®«ï
+% ¢ á¥à¥¤¨­¥ ª®­áâ ­âë ⨯  § ¯¨áì.
+parser_w_skipped_fields_after=03177_W_¥ª®â®àë¥ ¯®«ï ¯®á«¥ "$1" ­¥ ¡ë«¨ ¨­¨æ¨ «¨§¨à®¢ ­ë
+% ®«ï ¢ ª®­æ¥ ª®­áâ ­âë ⨯  § ¯¨áì ¬®£ãâ ¡ëâì ®áâ ¢«¥­ë ¡¥§ ¨­¨æ¨ «¨§ æ¨¨
+% (ª®¬¯¨«ïâ®à  ¢â®¬ â¨ç¥áª¨ ¨­¨æ¨ «¨§¨àã¥â ¨å ­ã«¥¢ë¬¨ §­ ç¥­¨ï¬¨). â®
+% ¬®¦¥â ïâìáï ¯à¨ç¨­®© ­¥ª®â®àëå ¯à®¡«¥¬.
+parser_e_varargs_need_cdecl_and_external=03178_E_„¨à¥ªâ¨¢  VarArgs (¨«¨ '...' ¢ MacPas) ¡¥§ CDecl/CPPDecl/MWPascal ¨ External
+% „¨à¥ªâ¨¢  varargs (¨«¨ ¯ à ¬¥âà ``...'' ¢ ०¨¬¥ MacPas) ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­  ⮫쪮 á
+% ¯à®æ¥¤ãà ¬¨/äã­ªæ¨ï¬¨, ®¡ê¥­­ë¬¨ á ¤¨à¥ªâ¨¢ ¬¨ \var{external} ¨ ®¤­®© ¨§ \var{cdecl},
+% \var{cppdecl} ¨«¨ \var{mwpascal}. â  ä㭪樮­ «ì­®áâì ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¤«ï
+% ᮢ¬¥á⨬®á⨠á äã­ªæ¨ï¬¨ ï§ëª  C ⨯  printf.
+parser_e_self_call_by_value=03179_E_Self ¤®«¦¥­ ¡ëâì ¯ à ¬¥â஬ á ¯¥à¥¤ ç¥© ¯® §­ ç¥­¨î
+%  à ¬¥âà Self ­¥ ¬®¦¥â ¡ëâì ¯¥à¥¤ ­ ¯® áá뫪¥ (á var ¨«¨ const), ¥£® ­ã¦­® ¯¥à¥¤ ¢ âì ¯®
+% §­ ç¥­¨î
+parser_e_interface_has_no_guid=03180_E_ˆ­â¥à䥩á "$1" ­¥ ¨¬¥¥â ¨¤¥­â¨ä¨ª â®à 
+% ਠ¯à¨á¢®¥­¨¨ ¨­â¥àä¥©á  ª®­áâ ­â¥, ¨­â¥àä¥©á ¤®«¦¥­ ¨¬¥âì §­ ç¥­¨¥ GUID.
+parser_e_illegal_field_or_method=03181_E_¥¨§¢¥áâ­ë© ¨¤¥­â¨ä¨ª â®à ¯®«ï ¨«¨ ¬¥â®¤  "$1"
+% ‘¢®©á⢠ ¤®«¦­ë ááë« âìáï ­  ¯®«ï ¨ ¬¥â®¤ë ⮣® ¦¥ ª« áá , ¢ ª®â®à®¬ ®¡ê¥­ë.
+parser_w_proc_overriding_calling=03182_W_’¨¯ ¢ë§®¢  "$2" ¯¥à¥ªà뢠¥â "$1"
+% ‚ ®¡ê¥­¨¨ ¯à®æ¥¤ãàë ¯à¨áãâáâ¢ãîâ ¤¢¥ ¤¨à¥ªâ¨¢ë, ®¯à¥¤¥«ïî騥 ⨯ ¢ë§®¢ .
+% 㤥⠨ᯮ«ì§®¢ ­  ¯®á«¥¤­ïï ¤¨à¥ªâ¨¢ .
+parser_e_no_procvarobj_const=03183_E_Š®­áâ ­â  â¨¯  "procedure of object" ¬®¦¥â ¡ëâì ¨­¨æ¨ «¨§¨à®¢ ­  ⮫쪮 §­ ç¥­¨¥¬ NIL
+% €¤à¥á ¬¥â®¤  ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¤«ï ¨­¨æ¨ «¨§ æ¨¨ ⨯¨§¨à®¢ ­­®© ª®­áâ ­âë ⨯ 
+% 'procedure of object', ¯®â®¬ã çâ® â ª ï ª®­áâ ­â  á®á⮨⠨§ ¤¢ãå  ¤à¥á®¢:
+%  ¤à¥á ¬¥â®¤  (¨§¢¥áâ­ë© ¢® ¢à¥¬ï ª®¬¯¨«ï樨) ¨  ¤à¥á íª§¥¬¯«ïà  ®¡ê¥ªâ  ¨«¨
+% ª« áá  (­¥ ¬®¦¥â ¡ëâì ®¯à¥¤¥«¥­ ¯à¨ ª®¬¯¨«ï樨).
+parser_e_default_value_only_one_para=03184_E_‡­ ç¥­¨¥ ¯® 㬮«ç ­¨î ¬®¦¥â ¡ëâì ¯à¨á¢®¥­® ⮫쪮 ®¤­®¬ã ¯ à ¬¥âàã
+% ¥¢®§¬®¦­® ¯à¨á¢®¨âì §­ ç¥­¨¥ ¯® 㬮«ç ­¨î áà §ã ­¥áª®«ìª¨¬ ¯ à ¬¥âà ¬.
+% ‘«¥¤ãî騩 ª®¤ ­¥¢¥à¥­:
+% \begin{verbatim}
+% Procedure MyProcedure (A,B : Integer = 0);
+% \end{verbatim}
+% ‚¬¥áâ® íâ® á«¥¤ã¥â ®¡êâì ¯à®æ¥¤ãàã ª ª:
+% \begin{verbatim}
+% Procedure MyProcedure (A : Integer = 0; B : Integer = 0);
+% \end{verbatim}
+parser_e_default_value_expected_for_para=03185_E_„«ï "$1" âॡã¥âáï §­ ç¥­¨¥ ¯® 㬮«ç ­¨î
+% “ª § ­­ë© ¯ à ¬¥âà âॡã¥â §­ ç¥­¨¥ ¯® 㬮«ç ­¨î.
+parser_w_unsupported_feature=03186_W_ˆá¯®«ì§®¢ ­¨¥ ¯®ª  ­¥¯®¤¤¥à¦¨¢ ¥¬®© ®á®¡¥­­®á⨠ª®¬¯¨«ïâ®à !
+% ®¯ë⪠ § áâ ¢¨âì ª®¬¯¨«ïâ®à ᤥ« âì ­¥çâ®, 祣® ®­ ¯®ª  ¥é¥ ­¥ 㬥¥â.
+parser_h_c_arrays_are_references=03187_H_Œ áᨢë C ¯¥à¥¤ îâáï ¯® áá뫪¥
+% ¥à¥¤ ç  ¬ áᨢ®¢ ¢ ä㭪樨 ­  ï§ëª¥ C ¢á¥£¤ 
+% ®áãé¥á⢫ï¥âáï ¯®á।á⢮¬ 㪠§ â¥«ï (â.¥. ¯® áá뫪¥).
+parser_e_C_array_of_const_must_be_last=03188_E_Œ áᨢ ª®­áâ ­â ¢ C ¤®«¦¥­ ¡ëâì ¯®á«¥¤­¨¬ ¯ à ¬¥â஬
+% ¥«ì§ï ¤®¡ ¢«ïâì ¤à㣨¥ ¯ à ¬¥âàë ¯®á«¥ ¯ à ¬¥âà  â¨¯  \var{array of const},
+% ¯¥à¥¤ ¢ ¥¬®£® ¢ äã­ªæ¨î, ®¡ê¥­­ãî ª ª \var{cdecl}, ¯®â®¬ã çâ® ¤«ï ­¥£®
+% § à ­¥¥ ­¥ ¨§¢¥á⥭ à §¬¥à ¤ ­­ëå, ¯®¬¥é ¥¬ëå ­  á⥪.
+parser_h_type_redef=03189_H_®¢â®à­®¥ ®¡ê¥­¨¥ ⨯  "$1"
+% ‘®®¡é ¥â ® ⮬, çâ® ¤«ï à ­¥¥ ®¯à¥¤¥«¥­­®£® ⨯  ¢áâà¥â¨«®áì
+% ¯®¢â®à­®¥ ®â«¨ç î饥áï ®¡ê¥­¨¥. â® ¬®¦¥â ¡ëâì (  ¬®¦¥â ¨ ­¥ ¡ëâì)
+% ¯à¨ç¨­®© ®è¨¡®ª.
+parser_w_cdecl_has_no_high=03190_W_”㭪樨 cdecl ­¥ ¨¬¥îâ ¯ à ¬¥âà  high
+% ‚ ä㭪樨, ®¡ê¥­­ë¥ ª ª cdecl, ­¥ ¯¥à¥¤ ¥âáï áªàëâë© ¯ à ¬¥âà high.
+parser_w_cdecl_no_openstring=03191_W_”㭪樨 cdecl ­¥ ¯®¤¤¥à¦¨¢ îâ ®âªàëâë¥ áâப¨
+% ‘âப¨ ⨯  openstring ­¥ ¯®¤¤¥à¦¨¢ îâáï ¢ cdecl äã­ªæ¨ïå.
+parser_e_initialized_not_for_threadvar=03192_E_ˆ­¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥­­®© ⨯  threadvar ­¥¢®§¬®¦­ 
+% ¥à¥¬¥­­ë¥, ®¡ê¥­­ë¥ ª ª threadvar, ­¥ ¬®£ãâ ¨¬¥âì ­ ç «ì­®£® §­ ç¥­¨ï.
+% Ž­¨ ¢á¥£¤  ¯®«ãç îâ ­ã«¥¢®¥ §­ ç¥­¨¥ ¯à¨ áâ à⥠­®¢®£® ¯®â®ª .
+parser_e_msg_only_for_classes=03193_E_„¨à¥ªâ¨¢  message à §à¥è¥­  ⮫쪮 ¤«ï ª« áᮢ
+% „¨à¥ªâ¨¢  message ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 ¤«ï ⨯®¢ Class.
+parser_e_procedure_or_function_expected=03194_E_ަ¨¤ ¥âáï "procedure" ¨«¨ "function"
+% Š« áá-¬¥â®¤®¬ ¬®£ãâ ¡ëâì ⮫쪮 ¤«ï ¯à®æ¥¤ãàë ¨ ä㭪樨.
+parser_e_illegal_calling_convention=03195_W_’¨¯ ¢ë§®¢  ¨£­®à¨à®¢ ­: "$1"
+% ¥ª®â®àë¥ â¨¯ë ¢ë§®¢®¢ ¯®¤¤¥à¦¨¢ îâáï ⮫쪮 ­  ®¯à¥¤¥«¥­­ëå ¯à®æ¥áá®à å. ’ ª, ¤«ï ¡®«ì設á⢠
+% ­¥-i386 ¯®¤¤¥à¦¨¢ îâáï ⮫쪮 â¨¯ë ¢ë§®¢  áâ ­¤ àâ­®£® ABI.
+parser_e_no_object_reintroduce=03196_E_REINTRODUCE ­¥«ì§ï ¨á¯®«ì§®¢ âì ¤«ï ®¡ê¥ªâ®¢
+% „¨à¥ªâ¨¢  \var{reintroduce} ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ®¡ê¥ªâ®¢.
+parser_e_paraloc_only_one_para=03197_E_ á¯®«®¦¥­¨¥  à£ã¬¥­â®¢ ­¥ ¬®¦¥â ᮢ¯ ¤ âì
+% …᫨ à á¯®«®¦¥­¨¥  à£ã¬¥­â®¢ 㪠§ë¢ îâáï ®, ª ª ⮣® âॡãîâ ­¥ª®â®àë¥
+% â¨¯ë ¢ë§®¢®¢ syscall, à á¯®«®¦¥­¨¥ ª ¦¤®£® ¨§  à£ã¬¥­â®¢ ¤®«¦­® ¡ëâì ã­¨ª «ì­ë¬,
+% ª®­áâàãªæ¨¨ ¢¨¤  \var{procedure p(i,j : longint 'r1');} ­¥ ¤®¯ã᪠îâáï.
+parser_e_paraloc_all_paras=03198_E_㦭® 㪠§ âì à á¯®«®¦¥­¨¥ ¤«ï ¢á¥å  à£ã¬¥­â®¢
+% …᫨ à á¯®«®¦¥­¨¥ 㪠§ ­® ¤«ï ®¤­®£®  à£ã¬¥­â®¢, ¥£® ­ã¦­® 㪠§ âì ¨ ¤«ï ¢á¥å
+% ®áâ «ì­ëå.
+parser_e_illegal_explicit_paraloc=03199_E_¥¨§¢¥áâ­®¥ à á¯®«®¦¥­¨¥  à£ã¬¥­â 
+% “ª § ­­®¥ à á¯®«®¦¥­¨¥ ­¥ ï¥âáï ¤®¯ãáâ¨¬ë¬ á â®çª¨ §à¥­¨ï ª®¬¯¨«ïâ®à .
+parser_e_32bitint_or_pointer_variable_expected=03200_E_ަ¨¤ ¥âáï 32-¡¨â­®¥ 楫®¥ «¨¡® 㪠§ â¥«ì
+% libbase ¤«ï MorphOS/AmigaOS ¬®¦­® § ¤ ¢ âì ⮫쪮 ª ª \var{longint}, \var{dword}, «¨¡® 㪠§ â¥«ì
+% «î¡®£® ⨯ .
+parser_e_goto_outside_proc=03201_E_¥ ¤®¯ã᪠¥âáï goto ¬¥¦¤ã à §«¨ç­ë¬¨ ¯à®æ¥¤ãà ¬¨
+% ¥ ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ­¨¥ \var{goto} ¤«ï ¯¥à¥å®¤  ­  ¬¥âªã, ®¯à¥¤¥«¥­­ãî ¢­¥
+% ⥪ã饩 ¯à®æ¥¤ãàë. ‘«¥¤ãî騩 ¯à¨¬¥à ¤¥¬®­áâà¨àã¥â ¯à®¡«¥¬ã:
+% \begin{verbatim}
+% ...
+% procedure p1;
+% label
+% l1;
+%
+% procedure p2;
+% begin
+% goto l1; // â  ¨­áâàãªæ¨ï goto ­¥ à §à¥è ¥âáï
+% end;
+%
+% begin
+% p2
+% l1:
+% end;
+% ...
+%
+% \end{verbatim}
+parser_f_too_complex_proc=03202_F_‘«¨èª®¬ á«®¦­ ï ¯à®æ¥¤ãà , ­¥ 墠⠥â ॣ¨áâ஢
+% ’¥«® ¯à®æ¥¤ãàë ï¥âáï ᫨誮¬ á«®¦­ë¬ ¤«ï ª®¬¯¨«ï樨. ‘«¥¤ã¥â à §¡¨âì ¥¥
+% ­  ­¥áª®«ìª® ¡®«¥¥ ¯à®áâëå ¯à®æ¥¤ãà.
+parser_e_illegal_expression=03203_E_¥¤®¯ãá⨬®¥ ¢ëà ¦¥­¨¥
+% Œ®¦¥â ¢®§­¨ª âì ¯® à §­ë¬ ¯à¨ç¨­ ¬.  ¨¡®«¥¥ ç áâ® - ¯à¨ ¢ëç¨á«¥­¨¨
+% ª®­áâ ­â­ëå ¢ëà ¦¥­¨©.
+parser_e_invalid_integer=03204_E_¥¢¥à­®¥ 楫®ç¨á«¥­­®¥ ¢ëà ¦¥­¨¥
+% ‚ëà ¦¥­¨¥ ­¥ ï¥âáï æ¥«ë¬ ç¨á«®¬, ¢ â® ¢à¥¬ï ª ª ª®¬¯¨«ïâ®à ®¦¨¤ ¥â
+% ¨¬¥­­® 楫®ç¨á«¥­­ë© १ã«ìâ â.
+parser_e_invalid_qualifier=03205_E_¥¢¥à­ë© ª¢ «¨ä¨ª â®à
+% நá室¨â ¯® ®¤­®© ¨§ á«¥¤ãîé¨å ¯à¨ç¨­:
+% \begin{itemize}
+% \item ®¯ë⪠ ¤®áâ㯠 ª ¯®«î ¯¥à¥¬¥­­®©, ª®â®à ï ­¥ ï¥âáï § ¯¨áìî.
+% \item “ª § ­¨¥ ¨­¤¥ªá  ¤«ï ¯¥à¥¬¥­­®©, ­¥ ïî饩áï ¬ áᨢ®¬.
+% \item  §ë¬¥­®¢ ­¨¥ ¯¥à¥¬¥­­®©, ­¥ ïî饩áï 㪠§ â¥«¥¬.
+% \end{itemize}
+parser_e_upper_lower_than_lower=03206_E_‚¥àå­¨© ¯à¥¤¥« ¤¨ ¯ §®­  < ­¨¦­¥£®
+% ਠ®¡ê¥­¨¨ ¯®¤¤¨ ¯ §®­ , ­¨¦­¨© ¯à¥¤¥« ®ª § «áï ¡®«ìè¥
+% ¢¥àå­¥£®.
+parser_e_macpas_exit_wrong_param=03207_E_ à ¬¥âà Exit ¤®«¦¥­ ¡ëâì ¨¬¥­¥¬ ⥪ã饩 ¯à®æ¥¤ãàë
+% ¥-«®ª «ì­ë© exit ­¥ ¤®¯ã᪠¥âáï. â  ®è¨¡ª  ¢®§­¨ª ¥â ⮫쪮 ¢ ०¨¬¥ MacPas.
+parser_e_illegal_assignment_to_count_var=03208_E_¥¢¥à­®¥ ¯à¨á¢®¥­¨¥ ¯¥à¥¬¥­­®© for-横«  "$1"
+% ’¨¯ ¯¥à¥¬¥­­®© ¤«ï 横«  \var{for} ¤®«¦¥­ ¡ëâì ¯®à浪®¢ë¬.
+% ‚¥é¥á⢥­­ë¥ ¨ áâப®¢ë¥ â¨¯ë ­¥ ¤®¯ã᪠îâáï. Šà®¬¥ ⮣®, ­¥ ¤®¯ã᪠¥âáï ¯à¨á¢®¥­¨¥
+% ã¯à ¢«ïî饩 ¯¥à¥¬¥­­®© ¢­ãâਠ横«  (ªà®¬¥ ०¨¬®¢ Delphi ¨ TP). …᫨ âॡã¥âáï
+% ¯à¨á¢®¥­¨¥, ¢¬¥á⮠横«  for á«¥¤ã¥â ¨á¯®«ì§®¢ âì ¯à¥¤­ §­ ç¥­­ë¥ ¤«ï í⮣®
+% 横«ë while ¨«¨ repeat.
+parser_e_no_local_var_external=03209_E_‹®ª «ì­ ï ¯¥à¥¬¥­­ ï ­¥ ¬®¦¥â ¡ëâì EXTERNAL
+% Ž¡ê¥­¨¥ «®ª «ì­ëå ¯¥à¥¬¥­­ëå ª ª ¢­¥è­¨å ­¥ ¤®¯ã᪠¥âáï. ‚­¥è­¨¬¨ ¬®£ãâ ¡ëâì
+% ⮫쪮 £«®¡ «ì­ë¥ ¯¥à¥¬¥­­ë¥.
+parser_e_proc_already_external=03210_E_à®æ¥¤ãà  ã¦¥ ®¡ê¥­  ª ª EXTERNAL
+% à®æ¥¤ãà  ã¦¥ ®¡ê¥­  á ¤¨à¥ªâ¨¢®© EXTERNAL ¢ ¨­â¥à䥩ᥠ¬®¤ã«ï ¨«¨
+% ¢ à ­­¥¬ ®¡ê¥­¨¨.
+parser_w_implicit_uses_of_variants_unit=03211_W_¥ï¢­®¥ ¨á¯®«ì§®¢ ­¨¥ ¬®¤ã«ï Variants
+% ‚ ¬®¤ã«¥ ¨á¯®«ì§ã¥âáï ⨯ Variant, ­® ¬®¤ã«ì Variants ­¥ ¯®¤ª«î祭 ­¨ ª ®¤­®¬ã ¨§ ¨á¯®«ì§ã¥¬ëå
+% ¬®¤ã«¥©. Š®¬¯¨«ïâ®à ­¥ï¢­® ¤®¡ ¢«ï¥â Variants ¢ ᯨ᮪ ¨á¯®«ì§ã¥¬ëå ¬®¤ã«¥©.
+% —â®¡ë ¨§¡ ¢¨âìáï ®â ¯à¥¤ã¯à¥¦¤¥­¨ï, ¤®¡ ¢ì⥠Variants ¢ ᯨ᮪ uses.
+parser_e_no_static_method_in_interfaces=03212_E_Œ¥â®¤ë class and static ­¥ ¤®¯ã᪠îâáï ¢ INTERFACE
+% ‘¯¥æ¨ä¨ª â®à \var{class} ¨ ¤¨à¥ªâ¨¢  \var{static} ­¥ ¯à¨¬¥­¨¬ë ¢ ¨­â¥à䥩á å,
+% â.ª. ¢á¥ ¬¥â®¤ë ¨­â¥àä¥©á  ¤®«¦­ë ¡ëâì ¯ã¡«¨ç­ë¬¨.
+parser_e_arithmetic_operation_overflow=03213_E_¥à¥¯®«­¥­¨¥ ¢  à¨ä¬¥â¨ç¥áª®© ®¯¥à æ¨¨
+% ޝ¥à æ¨ï ­ ¤ 楫묨 ç¨á« ¬¨ ¯à¨¢¥«  ª ¯¥à¥¯®«­¥­¨î
+parser_e_protected_or_private_expected=03214_E_ަ¨¤ ¥âáï "protected" ¨«¨ "private"
+% \var{strict} ¬®¦¥â ¨á¯®«ì§®¢ âìáï ⮫쪮 ¢ á®ç¥â ­¨¨ á \var{protected} ¨«¨ \var{private}.
+parser_e_illegal_slice=03215_E_SLICE ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢­¥ ᯨ᪠ ¯ à ¬¥â஢
+% \var{slice} ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ¤«ï  à£ã¬¥­â®¢, ¯à¨­¨¬ îé¨å ⨯ ®âªàë⮣® ¬ áᨢ 
+parser_e_dispinterface_cant_have_parent=03216_E_DISPINTERFACE ­¥ ¬®¦¥â ¨¬¥âì த¨â¥«ï
+% DISPINTERFACE ï¥âáï ®á®¡ë¬ â¨¯®¬ ¨­â¥àä¥©á  ¨ ­¥ ¬®¦¥â ¨¬¥âì த¨â¥«ì᪨© ª« áá
+parser_e_dispinterface_needs_a_guid=03217_E_„«ï DISPINTERFACE âॡã¥âáï GUID
+% DISPINTERFACE ¢á¥£¤  âॡã¥â ¨¤¥­â¨ä¨ª æ¨¨ á ¯®¬®éìî GUID
+parser_w_overridden_methods_not_same_ret=03218_W_¥à¥ªàëâë¥ ¬¥â®¤ë ¤®«¦­ë ¨¬¥âì ®¤¨­ ª®¢ë© ⨯ १ã«ìâ â . â®â ª®¤ ¨á¯®«ì§ã¥â ®è¨¡ªã ¢ ¯ àá¥à¥ Delphi ¨ ¡ã¤¥â à ¡®â âì ­¥¯à¥¤áª §ã¥¬® ("$2" ¯¥à¥ªàëâ® "$1", ¨¬¥î騬 ¤à㣮© ⨯ १ã«ìâ â )
+% ¥à¥ªàëâë¥ ¬¥â®¤ë ¤®«¦­ë ¢®§¢à é âì ®¤¨­ ¨ â®â ¦¥ ⨯ १ã«ìâ â .
+% ¥ª®â®àë¥ ¢¥àᨨ Delphi ¯®§¢®«ïîâ ¨§¬¥­ïâì ⨯ë १ã«ìâ â  ¨ ¤ ¦¥ ¯à¥¢à é âì
+% ¯à®æ¥¤ãàë ¢ ä㭪樨, ­® à ¡®â®á¯®á®¡­®áâì ¯®«ã祭­®£® ª®¤  § ¢¨á¨â ®â
+% ¨á¯®«ì§®¢ ­­ëå ⨯®¢ ¨ ᯮᮡ  ¢ë§®¢  ¬¥â®¤®¢.
+parser_e_dispid_must_be_ord_const=03219_E_Dispatch ID ¤®«¦­ë ¡ëâì ¯®à浪®¢ë¬¨ ª®­áâ ­â ¬¨
+% ‡  ª«îç¥¢ë¬ á«®¢®¬ \var{dispid} ¤®«¦­  á«¥¤®¢ âì ¯®à浪®¢ ï ª®­áâ ­â  (¨­¤¥ªá).
+parser_e_array_range_out_of_bounds=03220_E_„¨ ¯ §®­ ¬ áᨢ  ᫨誮¬ ¢¥«¨ª
+% ¥§ ¢¨á¨¬® ®â ª®«¨ç¥á⢠ ¯ ¬ïâ¨, § ­¨¬ ¥¬®© í«¥¬¥­â ¬¨, ¬ áá¨¢ë ­¥ ¬®£ãâ ᮤ¥à¦ âì
+% ¡®«ìè¥ ç¥¬ high(ptrint) í«¥¬¥­â®¢. Šà®¬¥ ⮣®, ⨯ ¤¨ ¯ §®­  ¤®«¦¥­ ¡ëâì ¯®¤¤¨ ¯ §®­®¬
+% ⨯  ptrint.
+parser_e_packed_element_no_var_addr=03221_E_¥«ì§ï ¢§ïâì  ¤à¥á í«¥¬¥­â®¢/¯®«¥© ¯®¡¨â­®-㯠ª®¢ ­­ëå ¬ áᨢ®¢/§ ¯¨á¥©
+% ®«ï § ¯¨á¨ ¨«¨ í«¥¬¥­âë ¬ áᨢ , ®¡ê¥­­ëå ª ª \var{packed} ¢ ०¨¬¥ Mac Pascal («¨¡® ª ª
+% \var{packed} ¢ «î¡®¬ ०¨¬¥ ¯à¨ ãá«®¢¨¨ \var{\{\$bitpacking on\}}), ¡ã¤ãâ 㯠ª®¢ ­ë ­  ã஢­¥
+% ¡¨â. â® ®§­ ç ¥â ­¥¢®§¬®¦­®áâì ¯®«ã祭¨ï  ¤à¥á®¢ ®â¤¥«ì­ëå í«¥¬¥­â®¢ ¬ áᨢ  ¨«¨ ¯®«¥© § ¯¨á¨.
+% ˆáª«î祭¨¥¬ ¨§ í⮣® ¯à ¢¨«  ïîâáï 㯠ª®¢ ­­ë¥ ¬ áᨢë, à §¬¥à í«¥¬¥­â®¢ ª®â®àëå ªà â¥­ 8 ¡¨â ¬.
+parser_e_packed_dynamic_open_array=03222_E_„¨­ ¬¨ç¥áª¨¥ ¬ áá¨¢ë ­¥ ¬®£ãâ ¡ëâì 㯠ª®¢ ­­ë¬¨
+% “¯ ª®¢ ­­ë¬¨ ¬®£ãâ ¡ëâì ⮫쪮 ®¡ëç­ë¥ (¨, ¢®§¬®¦­®, ¢ ¡ã¤ã饬 â ª¦¥ ®âªàëâë¥) ¬ áᨢë.
+parser_e_packed_element_no_loop=03223_E_«¥¬¥­âë/¯®«ï ¯®¡¨â­®-㯠ª®¢ ­­ëå ¬ áᨢ®¢/§ ¯¨á¥© ­¥«ì§ï ¨á¯®«ì§®¢ âì ª ª ¯¥à¥¬¥­­ë¥ 横«  for
+% ®«ï § ¯¨á¨ ¨«¨ í«¥¬¥­âë ¬ áᨢ , ®¡ê¥­­ëå ª ª \var{packed} ¢ ०¨¬¥ Mac Pascal («¨¡® ª ª
+% \var{packed} ¢ «î¡®¬ ०¨¬¥ ¯à¨ ãá«®¢¨¨ \var{\{\$bitpacking on\}}), ¡ã¤ãâ 㯠ª®¢ ­ë ­  ã஢­¥
+% ¡¨â. ® ¯à¨ç¨­ ¬ ¡ëáâத¥©áâ¢¨ï ¨å ­¥«ì§ï ¨á¯®«ì§®¢ âì ª ª ¯¥à¥¬¥­­ë¥ ¤«ï for-横« .
+parser_e_type_and_var_only_in_generics=03224_E_VAR ¨ TYPE ¤®¯ãá⨬ë ⮫쪮 ¢ ®¡®¡é¥­¨ïå (generic)
+% ˆá¯®«ì§®¢ ­¨¥ VAR ¨ TYPE ¤«ï ®¡ê¥­¨ï ­®¢ëå ⨯®¢ ¢­ãâਠ®¡ê¥ªâ  à §à¥è ¥âáï ⮫쪮 ¤«ï
+% ®¡®¡é¥­¨©.
+parser_e_cant_create_generics_of_this_type=03225_E_â®â ⨯ ­¥ ¬®¦¥â ¡ëâì ®¡®¡é¥­¨¥¬
+% Ž¡®¡é¥­¨ï ¤®¯ã᪠îâáï ⮫쪮 ¤«ï ª« áᮢ, ®¡ê¥ªâ®¢, ¨­â¥à䥩ᮢ ¨ § ¯¨á¥©.
+parser_w_no_lineinfo_use_switch=03226_W_¥ ¯®¤ª«î砩⥠¬®¤ã«ì LINEINFO ¢àãç­ãî, ¨á¯®«ì§ã©â¥ ¤«ï í⮣® ª«îç -gl
+% ¥ ¯®¤ª«î砩⥠¬®¤ã«ì LINEINFO ¢àãç­ãî, ¨á¯®«ì§®¢ ­¨¥ ª«îç  \var{-gl}  ¢â®¬ â¨ç¥áª¨ ¯®¤ª«îç ¥â
+% à §«¨ç­ë¥ ¬®¤ã«¨ ¢ § ¢¨á¨¬®á⨠®â ⨯  £¥­¥à¨à㥬®© ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨.
+parser_e_no_funcret_specified=03227_E_„«ï ä㭪樨 "$1" ­¥ 㪠§ ­ ⨯ १ã«ìâ â 
+% ¥à¢®¥ ®¡ê¥­¨¥ ä㭪樨 ¤®«¦­® ¡ëâì ¯®«­ë¬, ¢ª«îç ï ¢á¥ ¯ à ¬¥âàë ¨ ⨯ १ã«ìâ â .
+parser_e_special_onlygenerics=03228_E_‘¯¥æ¨ «¨§ æ¨ï ¢®§¬®¦­  ⮫쪮 ¤«ï ®¡®¡é¥­­ëå ⨯®¢.
+% ’¨¯ë, ­¥ ïî騥áï ®¡®¡é¥­¨ï¬¨, ­¥ ¬®£ãâ ¡ëâì ᯥ樠«¨§¨à®¢ ­ë.
+parser_e_no_generics_as_params=03229_E_Ž¡®¡é¥­¨ï ­¥«ì§ï ¨á¯®«ì§®¢ âì ª ª ¯ à ¬¥âàë ᯥ樠«¨§ æ¨¨ ¤àã£¨å ®¡®¡é¥­¨©
+% ਠᯥ樠«¨§ æ¨¨ ®¡®¡é¥­¨ï, ¢ ª ç¥á⢥ ¯ à ¬¥â஢ ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ®¡ëç­ë¥ ⨯ë.
+parser_e_type_object_constants=03230_E_Š®­áâ ­â­ë¥ ®¡ê¥ªâë, ᮤ¥à¦ é¨¥ VMT, ­¥ ¤®¯ã᪠îâáï
+% …᫨ ®¡ê¥ªâ âॡã¥â VMT ¨§-§  ­ «¨ç¨ï ª®­áâàãªâ®à  «¨¡® ¢¨àâã «ì­ëå ¬¥â®¤®¢,
+% á®§¤ ­¨¥ ª®­áâ ­â ¥£® ⨯  ­¥ ¤®¯ã᪠¥âáï. ‚ ०¨¬ å TP ¨ Delphi, ⥬ ­¥ ¬¥­¥¥,
+% íâ® à §à¥è¥­® ¢ 楫ïå ᮢ¬¥á⨬®áâ¨.
+parser_e_label_outside_proc=03231_E_¥ ¤®¯ã᪠¥âáï ¢§ï⨥  ¤à¥á®¢ ¬¥â®ª, ®¯à¥¤¥«¥­­ëå ¢­¥ ⥪ã饩 ®¡« á⨠¢¨¤¨¬®áâ¨
+% ¥ à §à¥è ¥âáï ¯®«ã祭¨¥  ¤à¥á®¢ ¬¥â®ª, ­ å®¤ïé¨åáï ¢­¥ ⥪ã饩 ¯à®æ¥¤ãàë.
+parser_e_initialized_not_for_external=03233_E_¥ ¤®¯ã᪠¥âáï ¨­¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥­­ëå, ®¡ê¥­­ëå ª ª external
+% ¥à¥¬¥­­ë¥, ®¡ê¥­­ë¥ ª ª external, ­¥ ¬®£ãâ ¨¬¥âì §­ ç¥­¨¥ ¯® 㬮«ç ­¨î.
+parser_e_illegal_function_result=03234_E_¥¢¥à­ë© ⨯ ¢®§¢à é ¥¬®£® §­ ç¥­¨ï
+% ¥ª®â®àë¥ â¨¯ë, â ª¨¥ ª ª ä ©«ë, ­¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ­ë ¢ ª ç¥á⢥ १ã«ìâ â  ä㭪樨.
+parser_e_no_common_type=03235_E_Žâáãâáâ¢ã¥â ®¡é¨© ⨯ ¤«ï "$1" ¨ "$2"
+% —â®¡ë ¢ë¯®«­¨âì ®¯¥à æ¨î ­ ¤ 楫묨 ç¨á« ¬¨, ª®¬¯¨«ïâ®à ¯à¨¢®¤¨â ¨å ª ®¡é¥¬ã ⨯ã,
+% 祣® ¥¬ã ¢ ¤ ­­®¬ á«ãç ¥ ­¥ 㤠¥âáï. „«ï ®¯à¥¤¥«¥­¨ï ®¡é¥£® ⨯  ®¯¥à ­¤®¢
+% ª®¬¯¨«ïâ®à ¡¥à¥â ¬¥­ì襥 ¨§ ¬¨­¨¬ «ì­ëå §­ ç¥­¨© ®¡®¨å ⨯®¢ ¨ ¡®«ì襥 ¨§ ¬ ªá¨¬ «ì­ëå
+% §­ ç¥­¨©. ޡ鍩 ⨯ ¡ã¤¥â ¨¬¥âì ¤¨ ¯ §®­ ¬¨­¨¬ã¬..¬ ªá¨¬ã¬.
+parser_e_no_generics_as_types=03236_E_Ž¡®¡é¥­¨ï ¡¥§ ᯥ樠«¨§ æ¨¨ ­¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ­ë ª ª ⨯ ¯¥à¥¬¥­­®©
+% Ž¡®¡é¥­¨ï ¢á¥£¤  ¤®«¦­ë ¡ëâì ᯥ樠«¨§¨à®¢ ­ë ¯¥à¥¤ ¨á¯®«ì§®¢ ­¨¥¬ ¢ ª ç¥á⢥ ⨯  ¤«ï ¯¥à¥¬¥­­ëå.
+parser_w_register_list_ignored=03237_W_¥à¥ç¥­ì ॣ¨áâ஢ ¤«ï ¯à®æ¥¤ãà ¯®«­®áâìî ­   áᥬ¡«¥à¥ ¨£­®à¨à®¢ ­
+% ‚ ¯à®æ¥¤ãà å, ­ ¯¨á ­­ëå ¯®«­®áâìî ­   áᥬ¡«¥à¥, ¯¥à¥ç¥­ì ¨§¬¥­¥­­ëå ॣ¨áâ஢ ¨£­®à¨àã¥âáï.
+parser_e_implements_must_be_class_or_interface=03238_E_‘¢®©á⢮ implements ¤®«¦­® ¡ëâì ⨯  ª« áá ¨«¨ ¨­â¥à䥩á
+% ‘¢®©á⢮, ॠ«¨§ãî饥 ¨­â¥à䥩á, ¤®«¦­® ¨¬¥âì ⨯ ª« áá  ¨«¨ ¨­â¥à䥩á .
+parser_e_implements_must_have_correct_type=03239_E_‘¢®©á⢮ implements ¤®«¦­® ॠ«¨§®¢ë¢ âì ¨­â¥à䥩á 㪠§ ­­®£® ⨯ , ­ ©¤¥­® "$1" ®¦¨¤ «®áì "$2"
+% ‘¢®©á⢮, ॠ«¨§ãî饥 ¨­â¥à䥩á, ॠ«¨§ã¥â ­¥ â®â ⨯ ¨­â¥à䥩á .
+parser_e_implements_must_read_specifier=03240_E_‘¢®©á⢮ implements ¤®«¦­® ¡ëâì ¤®áâã¯­ë¬ ¤«ï ç⥭¨ï
+% ‘¢®©á⢮, ॠ«¨§ãî饥 ¨­â¥à䥩á, ¤®«¦­® ¨¬¥âì ᯥæ¨ä¨ª â®à read.
+parser_e_implements_must_not_have_write_specifier=03241_E_‘¢®©á⢮ implements ­¥ ¤®«¦­® ¡ëâì ¤®áâã¯­ë¬ ¤«ï § ¯¨á¨
+% ‘¢®©á⢮, ॠ«¨§ãî饥 ¨­â¥à䥩á, ­¥ ¬®¦¥â ¨¬¥âì ᯥæ¨ä¨ª â®à write.
+parser_e_implements_must_not_have_stored_specifier=03242_E_‘¢®©á⢮ implements ­¥ ¬®¦¥â ¡ëâì stored
+% ‘¢®©á⢮, ॠ«¨§ãî饥 ¨­â¥à䥩á, ­¥ ¬®¦¥â ¨¬¥âì ᯥæ¨ä¨ª â®à stored.
+parser_e_implements_uses_non_implemented_interface=03243_E_‘¢®©á⢮ implements ¨á¯®«ì§®¢ ­® ¤«ï ­¥à¥ «¨§®¢ ­­®£® ¨­â¥à䥩á : "$1"
+% ˆ­â¥à䥩á, ॠ«¨§ã¥¬ë© ᢮©á⢮¬, ¤®«¦¥­ ¡ëâì ¢ ᯨ᪥ ¨­â¥à䥩ᮢ, ॠ«¨§ã¥¬ëå ª« áᮬ.
+parser_e_unsupported_real=03244_E_‚ëç¨á«¥­¨ï á ¯« ¢ î饩 § ¯ï⮩ ­¥ ¤®áâã¯­ë ¤«ï 楫¥¢®© ¯« âä®à¬ë
+% ‚áâà¥â¨«®áì ¢¥é¥á⢥­­®¥ ¢ëà ¦¥­¨¥, ­® ­  楫¥¢®© ¯« âä®à¬¥ ®­¨ ­¥ ¯®¤¤¥à¦¨¢ îâáï
+parser_e_class_doesnt_implement_interface=03245_E_Š« áá "$1" ­¥ ॠ«¨§ã¥â ¨­â¥à䥩á "$2"
+% „¥«¥£¨à®¢ ­­ë© ¨­â¥àä¥©á ­¥ ॠ«¨§®¢ ­ ª« áᮬ, 㪠§ ­­ë¬ ¢ ¢ëà ¦¥­¨¨ implements.
+parser_e_class_implements_must_be_interface=03246_E_’¨¯, ¨á¯®«ì§ã¥¬ë© implements, ¤®«¦¥­ ¡ëâì ¨­â¥à䥩ᮬ
+% ‡  ª«îç¥¢ë¬ á«®¢®¬ \var{implements} ¤®«¦­® á«¥¤®¢ âì ¨¬ï ⨯  ¨­â¥à䥩á .
+parser_e_cant_export_var_different_name=03247_E_  í⮩ ¯« âä®à¬¥ ¯¥à¥¬¥­­ë¥ ­¥«ì§ï íªá¯®àâ¨à®¢ âì á ¤à㣨¬ ¨¬¥­¥¬, ¤®¡ ¢ì⥠¨¬ï ª ®¡ê¥­¨î á ¯®¬®éìî ¤¨à¥ªâ¨¢ë "export" (¨¬ï ¯¥à¥¬¥­­®©: $1, ®¡ê¥­­®¥ ¨¬ï íªá¯®àâ : $2)
+% On most targets it is not possible to change the name under which a variable
+% is exported inside the \var{exports} statement of a library.
+% In that case, you have to specify the export name at the point where the
+% variable is declared, using the \var{export} and \var{alias} directives.
+parser_e_weak_external_not_supported=03248_E_‘¨¬¢®«ë "weak external" ­¥ ¯®¤¤¥à¦¨¢ îâáï ­  楫¥¢®© ¯« âä®à¬¥
+% A "weak external" symbol is a symbol which may or may not exist at (either static
+% or dynamic) link time. This concept may not be available (or implemented yet)
+% on the current cpu/OS target.
+parser_e_forward_mismatch=03249_E_’¨¯ ­¥ ᮮ⢥âáâ¢ã¥â à ­­¥¬ã ®¡ê¥­¨î
+% ਠ࠭­¥¬ ®¡ê¥­¨¨ ª« áᮢ ¨ ¨­â¥à䥩ᮢ ⨯ë à ­­¥£® ¨ ä ªâ¨ç¥áª®£® ®¡ê¥­¨©
+% ¤®«¦­ë ᮢ¯ ¤ âì.  ­¥¥ ®¡ê¥­­ë© ¨­â¥àä¥©á ­¥ ¬®¦¥â ¡ëâì ¯à¥¢à é¥­ ¢ ª« áá.
+parser_n_ignore_lower_visibility=03250_N_‚¨àâã «ì­ë© ¬¥â®¤ "$1" ¨¬¥¥â ¬¥­ìèãî ¢¨¤¨¬®áâì ($2), 祬 ¢ த¨â¥«ì᪮¬ ª« áᥠ$3 ($4)
+% ¥à¥ªà뢠î騩 ¢¨àâã «ì­ë© ¬¥â®¤ ¢¨¤¨¬®áâì ¬¥­ìè¥, 祬 ¯¥à¥ªà뢠¥¬ë©. â® ¬®¦¥â ¯à¨¢®¤¨âì ª
+% ­¥®¦¨¤ ­­ë¬ १ã«ìâ â ¬. …᫨ ­®¢ ï ¢¨¤¨¬®áâì - private, â® ¢ë§®¢ inherited ¢ ­®¢®¬ ª« áá¥
+% ¯®â®¬ª  ¬®¦¥â ¢ë§ë¢ âì ¬¥â®¤ á ¡®«ì襩 ¢¨¤¨¬®áâìî ¢ த¨â¥«ì᪮¬ ª« áá¥, ¨£­®à¨àãï private ¬¥â®¤.
+parser_e_field_not_allowed_here=03251_E_®«ï ­¥«ì§ï ®¡êïâì ¯®á«¥ ¬¥â®¤®¢ ¨«¨ ᢮©áâ¢, á­ ç «  ­ ç­¨â¥ ­®¢ãî ᥪæ¨î ¢¨¤¨¬®áâ¨
+% ®á«¥ ®¡ê¥­¨ï ¬¥â®¤  ¨«¨ ᢮©á⢠ ¢ ª« áᥠ¨«¨ ®¡ê¥ªâ¥, ¤ «ì­¥©è¥¥ ®¡ê¥­¨¥ ¯®«¥© ¢®§¬®¦­®
+% ⮫쪮 ¢ ­®¢®© ᥪ樨 ®¡« á⨠¢¨¤¨¬®á⨠(\var{public}, \var{private} ¨ â.¤.). â® ­¥®¡å®¤¨¬®
+% ¤«ï ®¤­®§­ ç­®£® ¯®­¨¬ ­¨ï ª®¤  ª®¬¯¨«ïâ®à®¬, ¯®áª®«ìªã ¬®¤¨ä¨ª â®àë ¬¥â®¤®¢,
+% â ª¨¥ ª ª \var{default} ¨ \var{register} ¬®£ãâ â ª¦¥ ¨á¯®«ì§®¢ âìáï ª ª ¨¬¥­  ¯®«¥©.
+parser_e_no_local_para_def=03252_E_ à ¬¥âàë ­¥ ¬®£ãâ ᮤ¥à¦ âì «®ª «ì­ë¥ ®¡ê¥­¨ï ⨯®¢. ˆá¯®«ì§ã©â¥ ®â¤¥«ì­®¥ ®¡ê¥­¨¥ ⨯  ¢ ¡«®ª¥ type.
+% ‚  áª «¥ ᥬ ­â¨ç¥áª¨ à ¢­®§­ ç­ë¥ â¨¯ë ­¥ áç¨â îâáï ¨¤¥­â¨ç­ë¬¨.
+% ¥à¥¬¥­­ë¥ ¨«¨ ¯ à ¬¥âàë áç¨â îâáï ®¤­®â¨¯­ë¬¨ ⮫쪮 ¢ ⮬ á«ãç ¥, ¥á«¨ ®­¨ ááë« îâáï ­  ®¤­® ¨ â® ¦¥
+% ®¡ê¥­¨¥ ⨯ .
+% Š ª á«¥¤á⢨¥, ®¡ê¥­¨¥ ⨯®¢ ¢ ᯨ᪥ ¯ à ¬¥â஢ ­¥ ¤®¯ã᪠¥âáï, â.ª. ­  «®ª «ì­®¥ ®¡ê¥­¨¥ ­¥¢®§¬®¦­®
+% á®á« âìáï ¨§¢­¥, ¨ ¤¢  § £®«®¢ª  ¯à®æ¥¤ãàë ¢ ¨­â¥à䥩᭮© ¨ ॠ«¨§ æ¨®­­®© ç á⨠¬®¤ã«ï ®¡ê﫨 ¡ë
+% ¤¢  à §«¨ç­ëå ⨯ . ˆ¬¥©â¥ ¢ ¢¨¤ã, çâ® ¢ëà ¦¥­¨ï ¢¨¤  ``file of byte'' ¨«¨ ``string[50]'' â ª¦¥ ®¯à¥¤¥«ïîâ
+% ­®¢ë© ⨯.
% \end{description}
-
#
-# p®¢¥pª  ⨯®¢
+# Type Checking
+#
+# 04087 is the last used one
#
-% \section{Type checking errors}
-% This section lists all errors that can occur when type checking is
-% performed.
+% \section{Žè¨¡ª¨ ¯à®¢¥àª¨ ⨯®¢}
+% ‚ à §¤¥«¥ ¯¥à¥ç¨á«¥­ë ¢á¥ ®è¨¡ª¨, ª®â®àë¥ ¬®£ãâ ¢®§­¨ª âì ¢ ¯à®æ¥áá¥
+% ¯à®¢¥àª¨ ⨯®¢.
% \begin{description}
-type_e_mismatch=04000_E_H¥¯p ¢¨«ì­ë© ⨯
-% This can happen in many cases:
+type_e_mismatch=04000_E_’¨¯ ­¥ ᮢ¯ ¤ ¥â
+% Œ®¦¥â ¨¬¥âì ¬¥áâ® ¢® ¬­®£¨å á«ãç ïå:
% \begin{itemize}
-% \item The variable you're assigning to is of a different type than the
-% expression in the assignment.
-% \item You are calling a function or procedure with parameters that are
-% incompatible with the parameters in the function or procedure definition.
+% \item à¨á¢ ¨¢ ¥¬ ï ¯¥à¥¬¥­­ ï ¨¬¥¥â ⨯, ®â«¨ç­ë© ®â ¯à¨á¢ ¨¢ ¥¬®£® ¢ëà ¦¥­¨ï.
+% \item ‚ë§®¢ ä㭪樨 ¨«¨ ¯à®æ¥¤ãàë á ¯ à ¬¥âà ¬¨, ­¥á®¢¬¥á⨬묨
+% á ⥬¨, ª®â®àë¥ ¡ë«¨ ¨á¯®«ì§®¢ ­ë ¯à¨ ®¡ê¥­¨¨ ä㭪樨.
% \end{itemize}
-type_e_incompatible_types=04001_E_H¥á®¢¬¥á⨬®áâì ⨯®¢: ¯®«y稫¨ $1,   ®¦¨¤ «¨ $2
-% There is no conversion possible between the two types
-% Another possiblity is that they are declared in different
-% declarations:
+type_e_incompatible_types=04001_E_H¥á®¢¬¥áâ¨¬ë¥ â¨¯ë: ¯®«y祭® "$1", ®¦¨¤ «®áì "$2"
+% ८¡à §®¢ ­¨¥ ¨§ ®¤­®£® ⨯  ¢ ¤à㣮© ­¥¢®§¬®¦­®.
+% ’ ª¦¥ ¢®§¬®¦­®, çâ® â¨¯ë ®¡ê¥­ë ¢ à §«¨ç­ëå ®¡ê¥­¨ïå:
% \begin{verbatim}
% Var
% A1 : Array[1..10] Of Integer;
% A2 : Array[1..10] Of Integer;
%
% Begin
-% A1:=A2; { This statement gives also this error, it
-% is due the strict type checking of pascal }
+% A1:=A2; { ਢ¥¤¥â ª ®è¨¡ª¥ ¨§-§  âॡ®¢ ­¨ï
+% áâண®£® ᮮ⢥âá⢨ï ⨯®¢ ¢  áª «¥ }
% End.
% \end{verbatim}
-type_e_not_equal_types=04002_E_H¥á®®â¢¥âá⢨¥ ⨯®¢ ¬¥¦¤y $1 ¨ $2
-% The types are not equal
-type_e_type_id_expected=04003_E_ަ¨¤ ¥âáï ¢ëà ¦¥­¨¥ ⨯  TYPE
-% The identifier is not a type, or you forgot to supply a type identifier.
-type_e_variable_id_expected=04004_E_ަ¨¤ ¥âáï ¢ëà ¦¥­¨¥ ⨯  VAR
-% This happens when you pass a constant to a \var{Inc} var or \var{Dec}
-% procedure. You can only pass variables as arguments to these functions.
-type_e_integer_expr_expected=04005_E_ަ¨¤ ¥âáï ¢ëp ¦¥­¨¥ ⨯  INTEGER, ­® ¯®«ã稫¨ "$1"
-% The compiler expects an expression of type integer, but gets a different
-% type.
-type_e_boolean_expr_expected=04006_E_ަ¨¤ ¥âáï ¢ëà ¦¥­¨¥ ⨯  BOOLEAN, ­® ¯®«ã稫¨ "$1"
-% The expression must be a boolean type, it should be return true or
+type_e_not_equal_types=04002_E_H¥á®¢¯ ¤¥­¨¥ ⨯®¢ ¬¥¦¤y "$1" ¨ "$2"
+% ’¨¯ë ­¥ à ¢­ë
+type_e_type_id_expected=04003_E_ަ¨¤ ¥âáï ¨¤¥­â䨪 â®à ⨯ 
+% ˆ¤¥­â¨ä¨ª â®à ­¥ ï¥âáï ⨯®¬, «¨¡® ¨¤¥­â¨ä¨ª â®à ⨯  ¯à®¯ã饭.
+type_e_variable_id_expected=04004_E_ަ¨¤ ¥âáï ¨¤¥­â¨ä¨ª â®à ¯¥à¥¬¥­­®©
+% நá室¨â ¯à¨ ¯®¯ë⪥ ¯¥à¥¤ ç¨ ª®­áâ ­âë ¢ ¯à®æ¥¤ãàã \var{Inc} ¨«¨ \var{Dec}.
+% ˆ¬ ¬®¦­® ¯¥à¥¤ ¢ âì ⮫쪮 ¯¥à¥¬¥­­ë¥.
+type_e_integer_expr_expected=04005_E_ަ¨¤ ¥âáï ¢ëp ¦¥­¨¥ ⨯  INTEGER, ­® ¯®«ã祭® "$1"
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â ¢ëà ¦¥­¨¥ ⨯  integer, ­® ¯®«ã砥⠭¥çâ® ¨­®¥.
+type_e_boolean_expr_expected=04006_E_ަ¨¤ ¥âáï ¢ëà ¦¥­¨¥ ⨯  BOOLEAN, ­® ¯®«ã祭® "$1"
+% ‚ëà ¦¥­¨¥ ¤®«¦­® ¡ëâì ¡ã«¥¢®£® ⨯ , ¤®«¦­® ¡ëâì ¢®§¢à é¥­® true ¨«¨
% false.
-type_e_ordinal_expr_expected=04007_E_ަ¨¤ ¥âáï ¢ëp ¦¥­¨¥ â ª®£®-¦¥ ⨯ 
-% The expression must be of ordinal type, i.e., maximum a \var{Longint}.
-% This happens, for instance, when you specify a second argument
-% to \var{Inc} or \var{Dec} that doesn't evaluate to an ordinal value.
-type_e_pointer_type_expected=04008_E_ަ¨¤ ¥âáï ⨯ POINTER, ­® ¯®«ã稫¨ "$1"
-% The variable or expression isn't of the type \var{pointer}. This
-% happens when you pass a variable that isn't a pointer to \var{New}
-% or \var{Dispose}.
-type_e_class_type_expected=04009_E_ަ¨¤ ¥âáï ⨯ CLASS, ­® ¯®«ã稫¨ "$1"
-% The variable of expression isn't of the type \var{class}. This happens
-% typically when
+type_e_ordinal_expr_expected=04007_E_ަ¨¤ ¥âáï ¢ëp ¦¥­¨¥ ¯®à浪®¢®£® ⨯ 
+% ’¨¯ ¢ëà ¦¥­¨ï ¤®«¦¥­ ¡ëâì ¯®à浪®¢ë¬, â.¥., ¬ ªá¨¬ã¬ \var{Longint}.
+% நá室¨â, ­ ¯à¨¬¥à, ¥á«¨ ¢â®à®©  à£ã¬¥­â
+% \var{Inc} ¨«¨ \var{Dec} ­¥ ¢ëç¨á«ï¥âáï ª ª ¯®à浪®¢ë© ⨯.
+type_e_pointer_type_expected=04008_E_ަ¨¤ ¥âáï ⨯ POINTER, ­® ¯®«ã祭® "$1"
+% ¥à¥¬¥­­ ï ¨«¨ ¢ëà ¦¥­¨¥ ¨¬¥¥â ⨯, ®â«¨ç­ë© ®â \var{pointer}. நá室¨â,
+% ­ ¯à¨¬¥à, ¯à¨ ¯¥à¥¤ ç¥ 楫®© ¯¥à¥¬¥­­®© ¢ ª ç¥á⢥  à£ã¬¥­â  \var{New}
+% ¨«¨ \var{Dispose}.
+type_e_class_type_expected=04009_E_ަ¨¤ ¥âáï ⨯ CLASS, ­® ¯®«ã祭® "$1"
+% ¥à¥¬¥­­ ï ¨«¨ ¢ëà ¦¥­¨¥ ¨¬¥¥â ⨯, ®â«¨ç­ë© ®â \var{class}. Ž¡ëç­®
+% á«ãç ¥âáï, ¥á«¨
% \begin{enumerate}
-% \item The parent class in a class declaration isn't a class.
-% \item An exception handler (\var{On}) contains a type identifier that
-% isn't a class.
+% \item ®¤¨â¥«ì᪨© ª« áá ¢ ®¡ê¥­¨¨ ª« áá  ­¥ ï¥âáï ª« áᮬ.
+% \item Ž¡à ¡®â稪 ¨áª«î祭¨© (\var{On}) ᮤ¥à¦¨â ¨¤¥­â¨ä¨ª â®à ⨯ ,
+% ­¥ ïî騩áï ª« áᮬ.
% \end{enumerate}
-type_e_varid_or_typeid_expected=04010_E_ަ¨¤ ¥âáï ¯¥p¥¬¥­­ ï ¨«¨ ¨¤¥­â¨ä¨ª â®p
-% The argument to the \var{High} or \var{Low} function is not a variable
-% nor a type identifier.
-type_e_cant_eval_constant_expr=04011_E_H¥¢®§¬®¦­® p áç¨â âì §­ ç¥­¨¥ ª®­áâ ­âë
-% No longer in use.
-type_e_set_element_are_not_comp=04012_E_“áâ ­®¢ª  í«¥¬¥­â®¢ ¬ áᨢ  ­¥¢®§¬®¦­ 
-% You are trying to make an operation on two sets, when the set element types
-% are not the same. The base type of a set must be the same when taking the
-% union
-type_e_set_operation_unknown=04013_E_ޝ¥p æ¨ï ­¥ p¥ «¨§®¢ ­  ¤«ï ­ ¡®p®¢ §­ ç¥­¨©
-% several binary operations are not defined for sets
-% like div mod ** (also >= <= for now)
-type_w_convert_real_2_comp=04014_W_€¢â®¬ â¨ç¥áª®¥ ¯p¥®¡p §®¢ ­¨¥ ⨯®¢ ¨§ REAL ¢ COMP, ª®â®pë© ï¢«ï¥âáï ç¨á«®¬ ⨯  INTEGER
-% An implicit type conversion from a real type to a \var{comp} is
-% encountered. Since \var{Comp} is a 64 bit integer type, this may indicate
-% an error.
-type_h_use_div_for_int=04015_H_ˆá¯®«ì§y©â¥ DIV ¢¬¥áâ® í⮣®, ¤«ï ¯®«y祭¨ï 楫®ç¨á«¥­­®£® p¥§y«ìâ â 
-% When hints are on, then an integer division with the '/' operator will
-% procuce this message, because the result will then be of type real
-type_e_strict_var_string_violation=04016_E_‘âp®ª®¢ë¥ ⨯ë p §­ë¥ ¨§-§  $V+ p¥¦¨¬ 
-% When compiling in \var{\{\$V+\}} mode, the string you pass as a parameter
-% should be of the exact same type as the declared parameter of the procedure.
-type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_SUCC ¨«¨ PRED ­  ¯¥p¥ç¨á«¥­¨ïå á ­ §­ ç¥­¨ï¬¨ ­¥¢®§¬®¦­ë
-% When you declared an enumeration type which has assignments in it, as in C,
-% like in the following:
+type_e_cant_eval_constant_expr=04011_E_H¥¢®§¬®¦­® ¢ëç¨á«¨âì ª®­áâ ­â­®¥ ¢ëà ¦¥­¨¥
+% நá室¨â, ¥á«¨ £à ­¨æë ®¡ê¥­­®£® ¬ áᨢ  ­¥ ¢ëç¨á«ïîâáï ª ª ¯®à浪®¢ë¥ ª®­áâ ­âë.
+type_e_set_element_are_not_comp=04012_E_«¥¬¥­âë ¬­®¦¥á⢠ ­¥ ᮢ¬¥á⨬ë
+% ‚®§­¨ª ¥â ¯à¨ ®¯¥à æ¨¨ ­ ¤ ¤¢ã¬ï ¬­®¦¥á⢠¬¨, ¨¬¥î騬¨ à §«¨ç­ë© ⨯ í«¥¬¥­â®¢.
+% „«ï ®¡ê¥¤¨­¥­¨ï ¬­®¦¥á⢠®­¨ ¤®«¦­ë ¨¬¥âì ®¤¨­ ª®¢ë© ¡ §®¢ë© ⨯.
+type_e_set_operation_unknown=04013_E_ޝ¥p æ¨ï ­¥ p¥ «¨§®¢ ­  ¤«ï ¬­®¦¥áâ¢
+% ¥ª®â®àë¥ ¯ à­ë¥ ®¯¥à æ¨¨ ­¥ ®¯à¥¤¥«¥­ë ¤«ï ¬­®¦¥áâ¢,
+% ­ ¯à¨¬¥à, div mod ** (â ª¦¥, ¢ ­ áâ®ï饥 ¢à¥¬ï, >= <=).
+type_w_convert_real_2_comp=04014_W_€¢â®¬ â¨ç¥áª®¥ ¯p¥®¡p §®¢ ­¨¥ ¨§ ¢¥é¥á⢥­­®£® ⨯  ¢ COMP, ª®â®pë© ï¢«ï¥âáï æ¥«®ç¨á«¥­­ë¬
+% ‚áâà¥â¨«®áì ­¥ï¢­®¥ ¯à¥®¡à §®¢ ­¨¥ ¢¥é¥á⢥­­®£® ⨯  ¢ \var{comp}.
+% ®áª®«ìªã \var{Comp} ï¥âáï 64-¡¨â­ë¬ 楫ë¬, íâ® ¬®¦¥â ᢨ¤¥â¥«ìá⢮¢ âì ®¡ ®è¨¡ª¥.
+type_h_use_div_for_int=04015_H_„«ï ¯®«y祭¨ï 楫®ç¨á«¥­­®£® p¥§y«ìâ â  ¨á¯®«ì§y©â¥ DIV
+% ਠ¢ª«î祭­ëå ¯®¤áª §ª å, á®®¡é¥­¨¥ ¡ã¤¥â ¢ë¤ ¢ âìáï ¯à¨ æ¥«®ç¨á«¥­­®¬ ¤¥«¥­¨¨
+% á ¯®¬®éìî '/', ¯®áª®«ìªã १ã«ìâ â ¢ í⮬ á«ãç ¥ ¡ã¤¥â ¢¥é¥á⢥­­ë¬.
+type_e_strict_var_string_violation=04016_E_’¨¯ë áâப ­¥ ᮢ¯ ¤ îâ ¨§-§  ०¨¬  $V+
+% ਠª®¬¯¨«ï樨 ¢ ०¨¬¥ \var{\{\$V+\}}, ⨯ áâப, ¯¥à¥¤ ¢ ¥¬ëå ª ª ¯ à ¬¥âàë,
+% ¤®«¦¥­ ¢ â®ç­®á⨠ᮢ¯ ¤ âì á ⨯®¬ ¢ ®¡ê¥­¨¨ ä㭪樨.
+type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_SUCC ¨«¨ PRED ­¥¢®§¬®¦­ë ­  ¯¥p¥ç¨á«¥­¨ïå á ¯à¨á¢®¥­¨ï¬¨
+% …᫨ ¯¥à¥ç¨á«ï¥¬ë© ⨯ ᮤ¥à¦¨â ¯à¨á¢®¥­¨ï, ª ª ¢ ï§ëª¥ C,
+% ­ ¯à¨¬¥à:
+% \begin{verbatim}
+% Tenum = (a,b,e:=5);
+% \end{verbatim}
+% â® ¤«ï ­¥£® ­¥«ì§ï ¨á¯®«ì§®¢ âì ä㭪樨 \var{Succ} ¨«¨ \var{Pred}.
+type_e_cant_read_write_type=04018_E_—⥭¨¥ ¨ § ¯¨áì ¯¥p¥¬¥­­ëå í⮣® ⨯  ­¥¢®§¬®¦­ 
+% ®¯ë⪠ ç⥭¨ï (\var{read}) ¨«¨ § ¯¨á¨ (\var{write}) ¯¥à¥¬¥­­®©, ⨯ ª®â®à®© ­¥
+% ¯®¤¤¥à¦¨¢ ¥âáï, ¢ ä ©« ⨯  ⥪áâ. ®¤¤¥à¦¨¢ îâáï ⮫쪮 楫ë¥,
+% ¡ã«¥¢ë, ¢¥é¥á⢥­­ë¥ ¯¥à¥¬¥­­ë¥, ¯¥à¥¬¥­­ë¥ ⨯  pchar ¨ áâப¨.
+type_e_no_readln_writeln_for_typed_file=04019_E_Readln ¨«¨ Writeln ­¥¤®¯ãáâ¨¬ë ­  ⨯¨§¨à®¢ ­­®¬ ä ©«¥
+% \var{readln} ¨ \var{writeln} ¤®¯ã᪠îâáï ⮫쪮 ¤«ï ⥪á⮢ëå ä ©«®¢.
+type_e_no_read_write_for_untyped_file=04020_E_Read ¨«¨ Write ­¥¤®¯ãáâ¨¬ë ­  ­¥â¨¯¨§¨à®¢ ­­®¬ ä ©«¥
+% \var{read} ¨ \var{write} ¤®¯ã᪠îâáï ⮫쪮 ¤«ï ⥪á⮢ëå ¨ ⨯¨§¨à®¢ ­­ëå ä ©«®¢.
+type_e_typeconflict_in_set=04021_E_Š®­ä«¨ªâ ⨯®¢ ¬¥¦¤y í«¥¬¥­â ¬¨ ¬­®¦¥á⢠
+% ’¨¯ ¯® ªà ©­¥© ¬¥à¥ ®¤­®£® í«¥¬¥­â  ­¥ ᮢ¯ ¤ ¥â á ¡ §®¢ë¬ ⨯®¬ ¬­®¦¥á⢠.
+type_w_maybe_wrong_hi_lo=04022_W_Lo/Hi(dword/qword) ¢®§¢p é îâ ¬« ¤è¥¥/áâ à襥 word/dword
+% \fpc ¯®¤¤¥à¦¨¢ ¥â ¯¥à¥£à㦥­­ë¥ ¢ à¨ ­âë \var{lo/hi} ¤«ï \var{longint/dword/int64/qword},
+% ª®â®àë¥ ¢®§¢à é îâ ¬« ¤èãî/áâ àèãî ¯®«®¢¨­ã  à£ã¬¥­â  (⨯  word/dword). TP ¢á¥£¤  ¨á¯®«ì§ã¥â
+% 16-¡¨â­ë¥ \var{lo/hi}, ª®â®àë¥ ¢á¥£¤  ¢®§¢à é îâ ¡¨âë 0..7 ¤«ï \var{lo} ¨
+% ¡¨âë 8..15 ¤«ï \var{hi}. …᫨ âॡã¥âáï ¯®¢¥¤¥­¨¥ TP, ­ã¦­® ¯à¨¢¥á⨠ à£ã¬¥­â
+% ª \var{word/integer}.
+type_e_integer_or_real_expr_expected=04023_E_ަ¨¤ ¥âáï ¢ëp ¦¥­¨¥ 楫®£® ¨«¨ ¢¥é¥á⢥­­®£® ⨯ 
+% ¥à¢ë©  à£ã¬¥­â \var{str} ¤®«¦¥­ ¨¬¥âì æ¥«ë© «¨¡® ¢¥é¥á⢥­­ë© ⨯.
+type_e_wrong_type_in_array_constructor=04024_E_H¥¢¥p­ë© ⨯ "$1" ¢ ª®­áâpyªâ®p¥ ¬ áᨢ 
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï ­¥¤®¯ãá⨬®£® ⨯  ¢ ª®­áâàãªâ®à¥ ¬ áᨢ .
+type_e_wrong_parameter_type=04025_E_H¥á®¢¯ ¤¥­¨¥ ⨯   p£y¬¥­â  # $1: ¯®«ã祭® "$2", ®¦¨¤ «®áì "$3"
+% ®¯ë⪠ ¯¥à¥¤ âì ­¥¢¥à­ë© ⨯ ¤«ï 㪠§ ­­®£® ¯ à ¬¥âà .
+type_e_no_method_and_procedure_not_compatible=04026_E_Œ¥â®¤ (¯¥p¥¬¥­­ ï) ¨ ¯p®æ¥¤yp  (¯¥p¥¬¥­­ ï) ­¥ ᮢ¬¥á⨬ë
+% ¥«ì§ï ¯à¨á¢®¨âì ¬¥â®¤ ¯¥à¥¬¥­­®© ⨯  ¯à®æ¥¤ãà , ¨«¨ ¯à®æ¥¤ãàã ¯¥à¥¬¥­­®© ⨯ 
+% ¬¥â®¤.
+type_e_wrong_math_argument=04027_E_¥¢¥à­ ï ª®­áâ ­â  ¯¥p¥¤ ­  ¢áâ஥­­®© ¬ â¥¬ â¨ç¥áª®© äy­ªæ¨¨
+% Š®­áâ ­â­ë©  à£ã¬¥­â ä㭪樨 ln ¨«¨ sqrt ­ å®¤¨âáï ¢­¥ ®¯à¥¤¥«¥­­®£® ¤«ï ­¨å
+% ¤¨ ¯ §®­ .
+type_e_no_addr_of_constant=04028_E_H¥«ì§ï ¢§ïâì  ¤à¥á ª®­áâ ­â­®£® ¢ëà ¦¥­¨ï
+% ‚§ïâì  ¤à¥á ª®­áâ ­â­®£® ¢ëà ¦¥­¨ï ­¥¢®§¬®¦­®, ¯®â®¬ã çâ® ª®­áâ ­âë ­¥
+% åà ­ïâáï ¢ ¯ ¬ïâ¨. Œ®¦­® ¯®¯à®¡®¢ âì ®¡êâì ⨯¨§¨à®¢ ­­ãî ª®­áâ ­âã.
+type_e_argument_cant_be_assigned=04029_E_€à£ã¬¥­âã ­¥¢®§¬®¦­® ¯à¨á¢®¨âì §­ ç¥­¨¥
+% ‚ ª ç¥á⢥ ¯ à ¬¥âà  ¯® áá뫪¥ ¬®£ãâ ¡ëâì ¯¥à¥¤ ­ë ⮫쪮 ⥠¢ëà ¦¥­¨ï,
+% ª®â®àë¥ ¬®¦­® ¨á¯®«ì§®¢ âì á «¥¢®© áâ®à®­ë ®¯¥à â®à  ¯à¨á¢ ¨¢ ­¨ï.
+% ‡ ¬¥ç ­¨ï: ‘¢®©á⢠ ¬®¦­® ¨á¯®«ì§®¢ âì á «¥¢®© áâ®à®­ë ¯à¨á¢ ¨¢ ­¨ï, ­®
+% ­¥«ì§ï ¯¥à¥¤ ¢ âì ¯® áá뫪¥.
+type_e_cannot_local_proc_to_procvar=04030_E_‹®ª «ì­ ï ¯à®æ¥¤ãà  ­¥ ¬®¦¥â ¡ëâì ¯à¨á¢®¥­  ¯¥à¥¬¥­­®© ¯à®æ¥¤ãà­®£® ⨯ 
+% à¨á¢®¥­¨¥ «®ª «ì­ëå ¯à®æ¥¤ãà/ä㭪権 ¯à®æ¥¤ãà­ë¬ ¯¥à¥¬¥­­ë¬ ­¥ ¤®¯ã᪠¥âáï,
+% â.ª. ã ­¨å ¤à㣮© ᯮᮡ ¢ë§®¢ . ‹®ª «ì­ë¥ ¯à®æ¥¤ãàë/ä㭪樨
+% ¬®¦­® ¯à¨á¢®¨âì ⮫쪮 ­¥â¨¯¨§¨à®¢ ­­®¬ã 㪠§ â¥«î.
+type_e_no_assign_to_addr=04031_E_H¥«ì§ï ¯à¨á¢®¨âì §­ ç¥­¨¥  ¤p¥áy
+% ¥ ¤®¯ã᪠¥âáï ¯à¨á¢®¥­¨¥ §­ ç¥­¨©  ¤à¥á ¬ ¯¥à¥¬¥­­ëå, ª®­áâ ­â, ¯à®æ¥¤ãà
+% ¨ ä㭪権. …᫨ ¨¤¥­â¨ä¨ª â®à ï¥âáï ¯à®æ¥¤ãà­®© ¯¥à¥¬¥­­®©, ¬®¦­® ¯®¯à®¡®¢ âì
+% ª®¬¯¨«ïæ¨î á ª«î箬 -So.
+type_e_no_assign_to_const=04032_E_H¥«ì§ï ¯à¨á¢®¨âì §­ ç¥­¨¥ ª®­áâ ­â¥
+% ¥ ¤®¯ã᪠¥âáï ¯à¨á¢®¥­¨¥ §­ ç¥­¨© ¯¥à¥¬¥­­ë¬, ®¡ê¥­­ë¬ ª ª ª®­áâ ­â­ë¥.
+% Š ª ¯à ¢¨«®, íâ® ¯ à ¬¥âàë, ®¡ê¥­­ë¥ ª ª const. —â®¡ë ¨å ¬®¦­® ¡ë«®
+% ¯à¨á¢ ¨¢ âì, ¯®¬¥­ï©â¥ ¨å ­  var ¨«¨ ­  ¯ à ¬¥âà-§­ ç¥­¨¥.
+type_e_array_required=04033_E_’p¥¡y¥âáï ⨯ ¬ áᨢ 
+% ਠ¤®áâ㯥 ª ¯¥à¥¬¥­­®© ¯® ¨­¤¥ªáã '[<x>]' ⨯ í⮩ ¯¥à¥¬¥­­®© ¤®«¦­  ¡ëâì
+% ¬ áᨢ®¬. ‚ ०¨¬¥ FPC â ª¦¥ ¤®¯ã᪠îâáï 㪠§ â¥«¨.
+type_e_interface_type_expected=04034_E_’ॡã¥âáï ⨯ ¨­â¥à䥩á , ­® ¯®«ã祭® "$1"
+% Š®¬¯¨«ïâ®à ®¦¨¤ « ¢áâà¥â¨âì ¨¬ï ⨯  ¨­â¥à䥩á , ­® ¢áâà¥â¨« çâ®-â® ¤à㣮¥.
+% Žè¨¡ª  ¬®¦¥â ¡ëâì ¢ë§¢ ­  á«¥¤ãî騬 ª®¤®¬:
+% \begin{verbatim}
+% Type
+% TMyStream = Class(TStream,Integer)
+% \end{verbatim}
+type_h_mixed_signed_unsigned=04035_H_‘¬¥è¨¢ ­¨¥ §­ ª®¢ëå ¨ ¡¥§§­ ª®¢ëå ¢ëà ¦¥­¨© ¤ ¥â 64-¡¨â­ë© १ã«ìâ â
+% ਠ¤¥«¥­¨¨ (¨«¨ ¢ëç¨á«¥­¨¨ ®áâ âª ) §­ ª®¢®£® ¢ëà ¦¥­¨ï ­  ¡¥§§­ ª®¢®¥ (¨«¨ ­ ®¡®à®â),
+% ¨«¨ ¦¥ ¢ª«î祭  ¯à®¢¥àª  ¯¥à¥¯®«­¥­¨© ¨/¨«¨ ¤¨ ¯ §®­®¢ ¨ ¨á¯®«ì§ã¥âáï  à¨ä¬¥â¨ç¥áª®¥
+% ¢ëà ¦¥­¨¥ (+, -, *, div, mod), ¢ ª®â®à®¬ ¢áâà¥ç îâáï ª ª §­ ª®¢ë¥, â ª ¨ ¡¥§§­ ª®¢ë¥ §­ ç¥­¨ï,
+% ¢ëç¨á«¥­¨¥ ¡ã¤¥â ¯à®¨§¢®¤¨âìáï ¢ 64-¡¨â­®¬ ०¨¬¥, ª®â®àë© ¬¥¤«¥­­¥¥ ®¡ëç­®©
+% 32-¡¨â­®©  à¨ä¬¥â¨ª¨. ⮣® ¬®¦­® ¨§¡¥¦ âì, ¯à¨¢¥¤ï ⨯ ®¤­®£® ¨§ ®¯¥à ­¤®¢ ª ⨯ã
+% ¤à㣮£®.
+type_w_mixed_signed_unsigned2=04036_W_‘¬¥è¨¢ ­¨¥ §­ ª®¢ëå ¨ ¡¥§§­ ª®¢ëå ¢ëà ¦¥­¨© ⨯  ¬®¦¥â ¢ë§¢ âì ®è¨¡ªã ¢ë室  §  ¤¨ ¯ §®­
+% ਠ¨á¯®«ì§®¢ ­¨¨ ¤¢®¨ç­ëå ®¯¥à æ¨© (and, or, xor), ®¤¨­ ¨§ ®¯¥à ­¤®¢ ª®â®àëå
+% ï¥âáï ¡¥§§­ ª®¢ë¬ ¢ëà ¦¥­¨¥¬,   ¤à㣮© - ¢ëà ¦¥­¨¥¬ á® §­ ª®¬, ¨ ¢ª«î祭 
+% ¯à®¢¥àª  ¤¨ ¯ §®­®¢, ¬®¦¥â ¢®§­¨ª­ãâì ®è¨¡ª , â.ª. ¢ í⮬ á«ãç ¥ ®¡  ®¯¥à ­¤ 
+% ¡ã¤ã⠯८¡à §®¢ ­ë ¢ ¡¥§§­ ª®¢ë© cardinal. ⮣® ¬®¦­® ¨§¡¥¦ âì, ¯à¨¢¥¤ï ⨯
+% ®¤­®£® ¨§ ®¯¥à ­¤®¢ ª ⨯㠤à㣮£®.
+type_e_typecast_wrong_size_for_assignment=04037_E_ਢ¥¤¥­¨¥ ⨯®¢ à §­®£® à §¬¥à  ($1 -> $2) ¢ ¯à¨á¢ ¨¢ ­¨¨
+% ਢ¥¤¥­¨¥ ⨯  ª ⨯㠤à㣮£® à §¬¥à  ­¥¢®§¬®¦­®, ¥á«¨ ¯¥à¥¬¥­­ ï ¨á¯®«ì§ã¥âáï
+% ¢ ¯à¨á¢ ¨¢ ­¨¨.
+type_e_array_index_enums_with_assign_not_possible=04038_E_¥à¥ç¨á«¥­¨ï á ¯à¨á¢®¥­¨ï¬¨ ­¥«ì§ï ¨á¯®«ì§®¢ âì ª ª ¨­¤¥ªá ¬ áᨢ 
+% «¥¬¥­âë ¯¥à¥ç¨á«ï¥¬®£® ⨯ , ®¡ê¥­­®£® á ¯à¨á¢®¥­¨ï¬¨, ª ª ¢ ï§ëª¥ C,
+% ­ ¯à¨¬¥à:
% \begin{verbatim}
% Tenum = (a,b,e:=5);
% \end{verbatim}
-% you cannot use the \var{Succ} or \var{Pred} functions on them.
-type_e_cant_read_write_type=04018_E_H¥¢®§¬®¦­® ¯p®ç¥áâì ¨«¨ § ¯¨á âì ¯¥p¥¬¥­­yî í⮣® ⨯ 
-% You are trying to \var{read} or \var{write} a variable from or to a
-% file of type text, which doesn't support that. Only integer types,
-% booleans, reals, pchars and strings can be read from/written to a text file.
-type_e_no_readln_writeln_for_typed_file=04019_E_¥¢®§¬®¦­® ¨á¯®«ì§®¢ âì Readln ¨«¨ Writeln ­  ⨯¨§¨à®¢ ­­®¬ ä ©«¥
-% \var{readln} and \var{writeln} are only allowed for text files.
-type_e_no_read_write_for_untyped_file=04020_E_¥¢®§¬®¦­® ¨á¯®«ì§®¢ âì Read ¨«¨ Write ­  ­¥â¨¯¨§¨à®¢ ­­®¬ ä ©«¥
-% \var{read} and \var{write} are only allowed for text or typed files.
-type_e_typeconflict_in_set=04021_E_Žè¨¡ª  ⨯®¢ ¬¥¦¤y í«¥¬¥­â ¬¨ ­ ¡®p 
-% There is at least one set element which is of the wrong type, i.e. not of
-% the set type.
-type_w_maybe_wrong_hi_lo=04022_W_LO/HI (LONGINT/DWORD) ¢®§¢p é îâ áâ p襥/¬« ¤è¥¥ á«®¢®
-% \fpc supports an overloaded version of \var{lo/hi} for \var{longint/dword/int64/qword}
-% which returns the lower/upper word/dword of the argument. TP always uses
-% a 16 bit \var{lo/hi} which returns always bits 0..7 for \var{lo} and the
-% bits 8..15 for \var{hi}. If you want the TP behavior you have
-% to type cast the argument to \var{word/integer}
-type_e_integer_or_real_expr_expected=04023_E_ަ¨¤ ¥âáï ¢ëp ¦¥­¨¥ ⨯  INTEGER ¨«¨ REAL
-% The first argument to \var{str} must a real or integer type.
-type_e_wrong_type_in_array_constructor=04024_E_H¥¢¥p­ë© ⨯ "$1" ¢ ¬ áᨢ¥ ª®­áâpyªâ®p 
-% You are trying to use a type in an array constructor which is not
-% allowed.
-type_e_wrong_parameter_type=04025_E_H¥á®¢¬¥á⨬®áâì ⨯®¢ ¢  p£y¬¥­â¥ # $1: ®«ã稫¨ "$2", ­® ®¦¨¤ ¥âáï "$3"
-% You are trying to pass an invalid type for the specified parameter.
-type_e_no_method_and_procedure_not_compatible=04026_E_Œ¥â®¤ (¯¥p¥¬¥­­ ï) ¨ p®æ¥¤yp  (¯¥p¥¬¥­­ ï) ­¥ ᮢ¬¥á⨬ë
-% You can't assign a method to a procedure variable or a procedure to a
-% method pointer.
-type_e_wrong_math_argument=04027_E_‡ ¯p¥é¥­­ ï ª®­áâ ­â , ¡ë«  ¯¥p¥¤ ­  ª ¢­yâp¥­­¥© ¬ â¥¬ â¨ç¥áª®© äy­ªæ¨¨
-% The constant argument passed to a ln or sqrt function is out of
-% the definition range of these functions.
-type_e_no_addr_of_constant=04028_E_H¥ ¬®£y ¯®«yç¨âì  ¤p¥á ª®­áâ ­âë
-% It's not possible to get the address of a constant, because they
-% aren't stored in memory, you can try making it a typed constant.
-type_e_argument_cant_be_assigned=04029_E_€à£ã¬¥­â ­¥ ¬®¦¥â ¡ëâì á¢ï§ ­ á
-% Only expressions which can be on the left side of an
-% assignment can be passed as call by reference argument
-% Remark: Properties can be only
-% used on the left side of an assignment, but they can't be used as arguments
-type_e_cannot_local_proc_to_procvar=04030_E_¥¬®£ã á¢ï§ âì «®ª «ì­ãî ¯à®æ¥¤ãàã/äã­ªæ¨î á ¯à®æ¥¤ãà­®© ¯¥à¥¬¥­­®©
-% It's not allowed to assign a local procedure/function to a
-% procedure variable, because the calling of local procedure/function is
-% different. You can only assign local procedure/function to a void pointer.
-type_e_no_assign_to_addr=04031_E_H¥ ¬®£y ¯®¤¢ï§ âì §­ ç¥­¨¥ ª  ¤p¥áy
-% It's not allowed to assign a value to an address of a variable,constant,
-% procedure or function. You can try compiling with -So if the identifier
-% is a procedure variable.
-type_e_no_assign_to_const=04032_E_H¥ ¬®£y ¯®¤¢ï§ âì §­ ç¥­¨¥ ª ª®­áâ ­â¥
-% It's not allowed to assign a value to a variable which is declared
-% as a const. This is normally a parameter declared as const, to allow
-% changing make the parameter value or var.
-type_e_array_required=04033_E_’p¥¡y¥âáï ⨯ array
-% If you are accessing a variable using an index '[<x>]' then
-% the type must be an array. In FPC mode also a pointer is allowed.
-type_e_interface_type_expected=04034_E_âॡã¥âáï ⨯ interface, ­® ¯®«ã稫¨ "$1"
-type_w_mixed_signed_unsigned=04035_W_‘¬¥è¨¢ ­¨¥ §­ ª®¢ëå ¢ëà ¦¥­¨© ¨ cardinal ⨯  ¤ ¥â 64bit १ã«ìâ â
-% If you divide (or calculate the modulus of) a signed expression by a cardinal (or vice versa),
-% or if you have overflow and/or range checking turned on and use an arithmetical
-% expression (+, -, *, div, mod) in which both signed numbers and cardinals appear,
-% then everything has to be evaluated in 64bit which is slower than normal
-% 32bit arithmetics. You can avoid this by typecasting one operand so it
-% matches the result type of the other one.
-type_w_mixed_signed_unsigned2=04036_W_‘¬¥è¨¢ ­¨¥ §­ ª®¢ëå ¢ëà ¦¥­¨© ¨ cardinal ⨯  ¬®¦¥â ¤ âì ®è¨¡ªã ¢ë室  §  ¤¨ ¯ §®­
-% If you use a binary operator (and, or, xor) and one of
-% the operands is a cardinal while the other one is a signed expression, then,
-% if range checking is turned on, you may get a range check error because in
-% such a case both operands are converted to cardinal before the operation is
-% carried out. You can avoid this by typecasting one operand so it
-% matches the result type of the other one.
-type_e_typecast_wrong_size_for_assignment=04037_E_ਢ¥¤¥­¨¥ ⨯  ¨§ $1 ¢ $2 ­¥¢®§¬®¦­® ¯à¨ ¯à¨á¢ ¨¢ ­¨¨, â ª ª ª ®¯¥à ­¤ë ¨¬¥îâ à §­ë© à §¬¥à
-% Type casting to a type with a different size is not allowed when the variable is
-% used for assigning.
+% ­¥«ì§ï ¨á¯®«ì§®¢ âì ª ª ¨­¤¥ªáë ¬ áᨢ®¢.
+type_e_classes_not_related=04039_E_’¨¯ë ª« áᮢ ¨«¨ ®¡ê¥ªâ®¢ "$1" ¨ "$2" ­¥ ᮮ⭮áïâáï
+% ਢ¥¤¥­¨¥ ⨯  ®¤­®£® ª« áá  ¨«¨ ®¡ê¥ªâ  ª ¤à㣮¬ã, ­¥ ¨¬¥î饣® ª ­¥¬ã ®â­®è¥­¨ï.
+% â® ­ ¢¥à­ïª  ¯à¨¢¥¤¥â ª ®è¨¡ª ¬.
+type_w_classes_not_related=04040_W_’¨¯ë ª« áᮢ "$1" ¨ "$2" ­¥ ᮮ⭮áïâáï
+% ਢ¥¤¥­¨¥ ⨯  ®¤­®£® ª« áá  ¨«¨ ®¡ê¥ªâ  ª ¤à㣮¬ã, ­¥ ¨¬¥î饣® ª ­¥¬ã ®â­®è¥­¨ï.
+% â® ­ ¢¥à­ïª  ¯à¨¢¥¤¥â ª ®è¨¡ª ¬.
+type_e_class_or_interface_type_expected=04041_E_ަ¨¤ ¥âáï ⨯ ª« áá  ¨«¨ ¨­â¥à䥩á , ­® ¯®«ã祭® "$1"
+% Š®¬¯¨«ïâ®à ®¦¨¤ « ¢áâà¥â¨âì ¨¬ï ª« áá  ¨«¨ ¨­â¥à䥩á , ­® ¢áâà¥â¨« çâ®-â® ¤à㣮¥.
+type_e_type_is_not_completly_defined=04042_E_’¨¯ "$1" ­¥ ®¯à¥¤¥«¥­ ¯®«­®áâìî
+% ந室¨â, ¥á«¨ ⨯ ­¥ ®¯à¥¤¥«¥­ ¯®«­®áâìî, ­ ¯à¨¬¥à, í⮠⨯ 㪠§ â¥«ï, ª®â®àë© ãª §ë¢ ¥â
+% ­  ­¥®¯à¥¤¥«¥­­ë© ⨯.
+type_w_string_too_long=04043_W_‘âப®¢ë© «¨â¥à « ᮤ¥à¦¨â ¡®«ìè¥ á¨¬¢®«®¢, 祬 ¬®¦¥â ¢¬¥áâ¨âì shortstring
+% ®¯ë⪠ ¯à¨á¢®¨âì ª®à®âª®© áâப¥ ª®­áâ ­â­®¥ §­ ç¥­¨¥, ª®â®à®¥ ᮤ¥à¦¨â ¡®«ìè¥ á¨¬¢®«®¢,
+% 祬 ¬ ªá¨¬ «ì­ ï ¤«¨­  áâப¨.
+type_w_signed_unsigned_always_false=04044_W_‘à ¢­¥­¨¥ ¢á¥£¤  «®¦­® ¨§-§  ¤¨ ¯ §®­®¢ §­ ç¥­¨©
+% ‘à ¢­¥­¨¥ ¡¥§§­ ª®¢®£® §­ ç¥­¨ï á® §­ ª®¢®© ª®­á⠭⮩, ¬¥­ì襩 ­ã«ï. ¥§ã«ìâ â â ª®£® ¢ëà ¦¥­¨ï
+% ¡ã¤¥â ¢á¥£¤  «®¦­ë¬. ‘«¥¤ã¥â ® ¯à¨¢¥á⨠⨯ ª®­áâ ­âë ª ­ã¦­®¬ã ¤¨ ¯ §®­ã.
+type_w_signed_unsigned_always_true=04045_W_‘à ¢­¥­¨¥ ¢á¥£¤  ¨á⨭­® ¨§-§  ¤¨ ¯ §®­®¢ §­ ç¥­¨©
+% ‘à ¢­¥­¨¥ ¡¥§§­ ª®¢®£® §­ ç¥­¨ï á® §­ ª®¢®© ª®­á⠭⮩, ¬¥­ì襩 ­ã«ï. ¥§ã«ìâ â â ª®£® ¢ëà ¦¥­¨ï
+% ¡ã¤¥â ¢á¥£¤  ¨á⨭­ë¬. ‘«¥¤ã¥â ® ¯à¨¢¥á⨠⨯ ª®­áâ ­âë ª ­ã¦­®¬ã ¤¨ ¯ §®­ã.
+type_w_instance_with_abstract=04046_W_‘®§¤ ­¨¥ ª« áá  "$1" á  ¡áâà ªâ­ë¬ ¬¥â®¤®¬ "$2"
+% ‘®§¤ ¥âáï íª§¥¬¯«ïà ª« áá , ᮤ¥à¦ é¥£® ­¥¯¥à¥ªàëâë©  ¡áâà ªâ­ë© ¬¥â®¤.
+% ‚ë§®¢ â ª®£® ¬¥â®¤  ¢® ¢à¥¬ï ¢ë¯®«­¥­¨ï ¯à®£à ¬¬ë ¯à¨¢¥¤¥â ª ®è¨¡ª¥ 211.
+% ‚ᥠ ¡áâà ªâ­ë¥ ¬¥â®¤ë ¤®«¦­ë ¡ëâì ¯¥à¥ªàëâë.
+type_h_in_range_check=04047_H_‹¥¢ë© ®¯¥à ­¤ ®¯¥à â®à  IN ¤®«¦¥­ ¨¬¥âì à §¬¥à ¡ ©â 
+% ‹¥¢ë© ®¯¥à ­¤ ®¯¥à â®à  \var{in} ­¥ ï¥âáï ¯®à浪®¢ë¬ ¨«¨ ¯¥à¥ç¨á«ï¥¬ë¬ §­ ç¥­¨¥¬,
+% ¯®¬¥é î騬áï ¢ 8 ¡¨â, íâ® ¬®¦¥â ¯à¨¢®¤¨âì ª ®è¨¡ª ¬ ¯à®¢¥àª¨ ¤¨ ¯ §®­ . ޝ¥à â®à \var{in}
+% ¢ ­ áâ®ï饥 ¢à¥¬ï ¯®¤¤¥à¦¨¢ ¥â «¥¢ë© ®¯¥à ­¤ ⮫쪮 ¡ ©â®¢®£® ¤¨ ¯ §®­ . ‚ á«ãç ¥
+% ¯¥à¥ç¨á«¥­¨©, à §¬¥à®¬ í«¥¬¥­â®¢ ¯¥à¥ç¨á«¥­¨ï ¬®¦­® ã¯à ¢«ïâì á ¯®¬®éìî
+% ª«î祩 \var{\{\$PACKENUM\}} ¨«¨ \var{\{\$Zn\}}.
+type_w_smaller_possible_range_check=04048_W_¥á®¢¯ ¤¥­¨¥ à §¬¥à®¢ ⨯®¢, ¢®§¬®¦­  ¯®â¥àï ¤ ­­ëå / ®è¨¡ª¨ ¤¨ ¯ §®­ 
+% à¨á¢®¥­¨¥ ⨯㠬¥­ì襣® à §¬¥à , 祬 ¨á室­ë© ⨯. â® ¬®¦¥â ¯à¨¢®¤¨âì ª ®è¨¡ª ¬ ¯à®¢¥àª¨
+% ¤¨ ¯ §®­ , ¨«¨ ç áâ¨ç­®© ¯®â¥à¥ ¤ ­­ëå.
+type_h_smaller_possible_range_check=04049_H_¥á®¢¯ ¤¥­¨¥ à §¬¥à®¢ ⨯®¢, ¢®§¬®¦­  ¯®â¥àï ¤ ­­ëå / ®è¨¡ª¨ ¤¨ ¯ §®­ 
+% à¨á¢®¥­¨¥ ⨯㠬¥­ì襣® à §¬¥à , 祬 ¨á室­ë© ⨯. â® ¬®¦¥â ¯à¨¢®¤¨âì ª ®è¨¡ª ¬ ¯à®¢¥àª¨
+% ¤¨ ¯ §®­ , ¨«¨ ç áâ¨ç­®© ¯®â¥à¥ ¤ ­­ëå.
+type_e_cant_take_address_of_abstract_method=04050_E_‚§ï⨥  ¤à¥á   ¡áâࠪ⭮£® ¬¥â®¤  ­¥¢®§¬®¦­®
+% €¡áâà ªâ­ë© ¬¥â®¤ ­¥ ¨¬¥¥â ⥫ , ¯®íâ®¬ã  ¤à¥á ¡à âì ­¥ ®â 祣®.
+type_e_assignment_not_allowed=04051_E_¥¢®§¬®¦­® ¯à¨á¢®¥­¨¥ ä®à¬ «ì­ëå ¯ à ¬¥â஢ ¨ ®âªàëâëå ¬ áᨢ®¢
+% ®¯ë⪠ ¯à¨á¢®¨âì §­ ç¥­¨¥ ä®à¬ «ì­®¬ã (­¥â¨¯¨§¨à®¢ ­­®¬ã var, const ¨«¨ out)
+% ¯ à ¬¥âàã, «¨¡® ®âªàë⮬㠬 áᨢã.
+type_e_constant_expr_expected=04052_E_ަ¨¤ ¥âáï ª®­áâ ­â­®¥ ¢ëà ¦¥­¨¥
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â ª®­áâ ­â­®¥ ¢ëà ¦¥­¨¥, ­® ¯®«ã砥⠯¥à¥¬¥­­®¥.
+type_e_operator_not_supported_for_types=04053_E_ޝ¥à æ¨ï "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ⨯®¢ "$2" ¨ "$3"
+% “ª § ­­ ï ®¯¥à æ¨ï ­¥¤®¯ãá⨬  ¤«ï 㪠§ ­­ëå ⨯®¢.
+type_e_illegal_type_conversion=04054_E_¥¤®¯ãá⨬®¥ ¯à¨¢¥¤¥­¨¥ ⨯®¢: "$1" ª "$2"
+% ਠ¯à¨¢¥¤¥­¨¨ ⨯®¢ á«¥¤ã¥â ᮡ«î¤ âì à ¢¥­á⢮ à §¬¥à®¢ ¨áâ®ç­¨ª  ¨ ¯®«ãç â¥«ï.
+type_h_pointer_to_longint_conv_not_portable=04055_H_८¡à §®¢ ­¨¥ ¬¥¦¤ã ¯®à浪®¢ë¬¨ ⨯ ¬¨ ¨ 㪠§ â¥«ï¬¨ ï¥âáï ­¥¯®àâ¨à㥬ë¬
+% Š®¤, ¢ ª®â®à®¬ 㪠§ â¥«¨ ¯à¨¢®¤ïâáï ª longint (¨«¨ ­ ®¡®à®â), ­¥ ¡ã¤¥â à ¡®â âì
+% ­  ¯« âä®à¬ å, ã ª®â®àëå à §¬¥à 㪠§ â¥«ï à ¢¥­ 64 ¡¨â ¬.
+type_w_pointer_to_longint_conv_not_portable=04056_W_८¡à §®¢ ­¨¥ ¬¥¦¤ã ¯®à浪®¢ë¬¨ ⨯ ¬¨ ¨ 㪠§ â¥«ï¬¨ ï¥âáï ­¥¯®àâ¨à㥬ë¬
+% ਢ¥¤¥­¨¥ 㪠§ â¥«¥© ª ¯®à浪®¢ë¬ ⨯ ¬ ¤à㣮£® à §¬¥à  (¨«¨ ­ ®¡®à®â), ¬®¦¥â
+% ¢ë§ë¢ âì ¯à®¡«¥¬ë. â® ¯à¥¤ã¯à¥¦¤¥­¨¥ ¯®¬®£ ¥â ­ å®¤¨âì ᯥæ¨ä¨ç­ë© 32-¡¨â­ë© ª®¤, ¢ ª®â®à®¬
+% ⨯ longint/cardinal ¨á¯®«ì§ã¥âáï ¢§ ¨¬®§ ¬¥­ï¥¬® á 㪠§ â¥«ï¬¨. ¥è¥­¨¥ § ª«îç ¥âáï ¢ ¨á¯®«ì§®¢ ­¨¨
+% ⨯®¢ ptrint/ptruint.
+type_e_cant_choose_overload_function=04057_E_¥¢®§¬®¦­® ®¯à¥¤¥«¨âì, ª®â®àãî ¨§ ¯¥à¥£à㦥­­ëå ä㭪樨 ¢ë§ë¢ âì
+% ‚ë§®¢ ¯¥à¥£à㦥­­®© ä㭪樨 ᮠᯨ᪮¬ ¯ à ¬¥â஢, ª®â®àë© ­¥ ᮮ⢥âáâ¢ã¥â ­¨
+% ®¤­®© ¨§ ®¡ê¥­­ëå ä㭪権.  ¯à¨¬¥à, ¥á«¨ ®¡ê¥­ë ä㭪樨 á ¯ à ¬¥âà ¬¨
+% ⨯  \var{word} ¨ \var{longint},   ¢ë§®¢ ¯à®¨§¢®¤¨âáï á ¯ à ¬¥â஬ ⨯ 
+% \var{integer}.
+type_e_illegal_count_var=04058_E_¥¢¥à­ ï ¯¥à¥¬¥­­ ï áç¥â稪 
+% ’¨¯ ¯¥à¥¬¥­­®© ¤«ï 横«  \var{for} ¤®«¦¥­ ¡ëâì ¯®à浪®¢ë¬.
+% ‚¥é¥á⢥­­ë¥ ¨ áâப®¢ë¥ â¨¯ë ­¥ ¤®¯ã᪠îâáï.
+type_w_double_c_varargs=04059_W_‚¥é¥á⢥­­ ï ª®­áâ ­â  ¯à¥®¡à §®¢ ­  ¢ double ¤«ï ä-樨 C á ¯¥à¥¬¥­­ë¬ ç¨á«®¬ ¯ à ¬¥â஢
+% ‚ ï§ëª¥ C ¢¥é¥á⢥­­ë¥ ª®­áâ ­âë ¯® 㬮«ç ­¨î ¨¬¥îâ ⨯ double. ®í⮬㠯ਠ¯¥à¥¤ ç¥
+% ¢¥é¥á⢥­­®© ª®­áâ ­âë ¢ äã­ªæ¨î ­  C á ¯¥à¥¬¥­­ë¬ ç¨á«®¬  à£ã¬¥­â®¢ FPC
+% ¯® 㬮«ç ­¨î ¯à¥®¡à §ã¥â ¥¥ ¢ double. …᫨ íâ® ¯®¢¥¤¥­¨¥ ­¥¦¥« â¥«ì­®,
+% ¯à¨¢¥¤¨â¥ ª®­áâ ­âã ª ­ã¦­®¬ã ⨯ã ®.
+type_e_class_or_cominterface_type_expected=04060_E_ަ¨¤ ¥âáï ⨯ ª« áá  ¨«¨ COM-¨­â¥à䥩á , ­® ¯®«ã祭® "$1"
+% ¥ª®â®àë¥ ®¯¥à â®àë, â ª¨¥ ª ª AS, ¯à¨¬¥­¨¬ë ⮫쪮 ª ª« áá ¬ ¨«¨ COM-¨­â¥à䥩ᠬ.
+type_e_no_const_packed_array=04061_E_Š®­áâ ­â­ë¥ 㯠ª®¢ ­­ë¥ ¬ áá¨¢ë ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ îâáï
+% ¥«ì§ï ®¡êâì ª®­áâ ­âã ⨯  (¯®¡¨â­®)㯠ª®¢ ­­ë© ¬ áᨢ.
+type_e_got_expected_packed_array=04062_E_¥á®¢¯ ¤¥­¨¥ ⨯   à£ã¬¥­â  no. $1: ®«ã祭® "$2" ®¦¨¤ «®áì "(Bit)Packed Array"
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â (¯®¡¨â­®)㯠ª®¢ ­­ë© ¬ áᨢ ¢ ª ç¥á⢥ 㪠§ ­­®£® ¯ à ¬¥âà .
+type_e_got_expected_unpacked_array=04063_E_¥á®¢¯ ¤¥­¨¥ ⨯   à£ã¬¥­â  no. $1: ®«ã祭® "$2" ®¦¨¤ «®áì "(not packed) Array"
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â ®¡ëç­ë© (­¥ã¯ ª®¢ ­­ë©) ¬ áᨢ ¢ ª ç¥á⢥ 㪠§ ­­®£® ¯ à ¬¥âà .
+type_e_no_packed_inittable=04064_E_«¥¬¥­âë 㯠ª®¢ ­­®£® ¬ áᨢ  ­¥ ¬®£ãâ ¨¬¥âì ⨯, âॡãî騩 ¨­¨æ¨ «¨§ æ¨¨
+% “¯ ª®¢ ­­ë¥ ¬ áᨢë á ⨯ ¬¨, âॡãî騬¨ ¨­¨æ¨ «¨§ æ¨î (â ª¨¬¨ ª ª ansistring, ¨«¨ § ¯¨á¨, ᮤ¥à¦ é¨¥
+% ansistring), ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ îâáï.
+type_e_no_const_packed_record=04065_E_Š®­áâ ­â­ë¥ 㯠ª®¢ ­­ë¥ § ¯¨á¨ ¨ ®¡ê¥ªâë ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ îâáï
+% ‚ ­ áâ®ï饥 ¢à¥¬ï ­¥«ì§ï ®¡êâì ª®­áâ ­âã ⨯  (¯®¡¨â­®)㯠ª®¢ ­­ ï § ¯¨áì/®¡ê¥ªâ.
+type_w_untyped_arithmetic_unportable=04066_W_€à¨ä¬¥â¨ª  "$1" ­¥â¨¯¨§¨à®¢ ­­ëå 㪠§ â¥«¥© ­¥á®¢¬¥á⨬  á ०¨¬®¬ {$T+}, ¯à¥¤« £ ¥âáï ¯à¨¢¥¤¥­¨¥ ⨯ 
+% ‘«®¦¥­¨¥/¢ëç¨â ­¨¥ ­¥â¨¯¨§¨à®¢ ­­ëå 㪠§ â¥«¥© ¬®¦¥â à ¡®â âì ¯®-¤à㣮¬ã ¢ ०¨¬¥ \var{\{\$T+\}},
+% ¯à¨¢¥¤¨â¥ ⨯ ª ⨯¨§¨à®¢ ­­®¬ã 㪠§ â¥«î.
+type_e_cant_take_address_of_local_subroutine=04076_E_¥«ì§ï ¢§ïâì  ¤à¥á ¯à®æ¥¤ãàë, ¯®¬¥ç¥­­®© ª ª «®ª «ì­ ï
+% ‚§ï⨥  ¤à¥á  ¯à®æ¥¤ãàë, ¯®¬¥ç¥­­®© ª ª «®ª «ì­ ï, ­¥¢®§¬®¦­®.
+type_e_cant_export_local=04077_E_à®æ¥¤ãà , ®â¬¥ç¥­­ ï ª ª «®ª «ì­ ï, ­¥ ¬®¦¥â ¡ëâì íªá¯®àâ¨à®¢ ­  ¨§ ¬®¤ã«ï
+% à®æ¥¤ãà , ®â¬¥ç¥­­ ï ª ª «®ª «ì­ ï, ­¥ ¬®¦¥â ¡ëâì íªá¯®àâ¨à®¢ ­  ¨§ ¬®¤ã«ï.
+type_e_not_automatable=04078_E_’¨¯ ­¥  ¢â®¬ â¨§¨à㥬ë©: "$1"
+% ‚ ª ç¥á⢥  ¢â®¬ â¨§¨à®¢ ­­ëå ¤®¯ã᪠îâáï byte, integer, longint, smallint, currency, single, double,
+% ansistring, widestring, tdatetime, variant, olevariant, wordbool ¨ ¢á¥ ¨­â¥à䥩á­ë¥ ⨯ë.
+type_h_convert_add_operands_to_prevent_overflow=04079_H_ਢ¥¤¥­¨¥ ®¯¥à ­¤®¢ ª "$1" ¯¥à¥¤ á«®¦¥­¨¥¬ ¯à¥¤®â¢à â¨â ®è¨¡ª¨ ¯¥à¥¯®«­¥­¨ï.
+% ‘«®¦¥­¨¥ ¬®¦¥â ¢ë§ë¢ âì ¯¥à¥¯®«­¥­¨¥. ’.ª. १ã«ìâ â ¯à¥®¡à §ã¥âáï ¢ ⨯ ¡®«ì襣® à §¬¥à ,
+% ¯¥à¥¯®«­¥­¨ï ¬®¦­® ¨§¡¥¦ âì, ¯à¨¢¥¤ï ®¯¥à ­¤ë ª ⨯ã १ã«ìâ â  ¯¥à¥¤ á«®¦¥­¨¥¬.
+type_h_convert_sub_operands_to_prevent_overflow=04080_H_ਢ¥¤¥­¨¥ ®¯¥à ­¤®¢ ª "$1" ¯¥à¥¤ ¢ëç¨â ­¨¥¬ ¯à¥¤®â¢à â¨â ®è¨¡ª¨ ¯¥à¥¯®«­¥­¨ï.
+% ‚ëç¨â ­¨¥ ¬®¦¥â ¢ë§ë¢ âì ¯¥à¥¯®«­¥­¨¥. ’.ª. १ã«ìâ â ¯à¥®¡à §ã¥âáï ¢ ⨯ ¡®«ì襣® à §¬¥à ,
+% ¯¥à¥¯®«­¥­¨ï ¬®¦­® ¨§¡¥¦ âì, ¯à¨¢¥¤ï ®¯¥à ­¤ë ª ⨯ã १ã«ìâ â  ¯¥à¥¤ ¢ëç¨â ­¨¥¬.
+type_h_convert_mul_operands_to_prevent_overflow=04081_H_ਢ¥¤¥­¨¥ ®¯¥à ­¤®¢ ª "$1" ¯¥à¥¤ 㬭®¦¥­¨¥¬ ¯à¥¤®â¢à â¨â ®è¨¡ª¨ ¯¥à¥¯®«­¥­¨ï.
+% “¬­®¦¥­¨¥ ¬®¦¥â ¢ë§ë¢ âì ¯¥à¥¯®«­¥­¨¥. ’.ª. १ã«ìâ â ¯à¥®¡à §ã¥âáï ¢ ⨯ ¡®«ì襣® à §¬¥à ,
+% ¯¥à¥¯®«­¥­¨ï ¬®¦­® ¨§¡¥¦ âì, ¯à¨¢¥¤ï ®¯¥à ­¤ë ª ⨯ã १ã«ìâ â  ¯¥à¥¤ 㬭®¦¥­¨¥¬.
+type_w_pointer_to_signed=04082_W_ਢ¥¤¥­¨¥ 㪠§ â¥«¥© ª æ¥«ë¬ á® §­ ª®¬ ¬®¦¥â ¯à¨¢®¤¨âì ª ®è¨¡ª ¬ áà ¢­¥­¨ï ¨ ¢ë室㠧  ¤¨ ¯ §®­, ¨á¯®«ì§ã©â¥ ¡¥§§­ ª®¢ë© ⨯.
+% ‚¨àâã «ì­®¥  ¤à¥á­®¥ ¯à®áâà ­á⢮ ­  32-¡¨â­ëå á¨á⥬ å ¨¬¥¥â ¤¨ ¯ §®­ ®â \$00000000 ¤® \$ffffffff.
+% Œ­®£¨¥ ®¯¥à æ¨®­­ë¥ á¨áâ¥¬ë ¯®§¢®«ïî⠢뤥«ïâì ¯ ¬ïâì á¢ëè¥ \$80000000, ­ ¯à¨¬¥à, Windows ¨ Linux
+% ¤®¯ã᪠îâ 㪠§ â¥«¨ ¢ ¤¨ ¯ §®­¥ ®â \$0000000 ¤® \$bfffffff. …᫨ ¯à¨¢®¤¨âì 㪠§ â¥«¨ ª §­ ª®¢ë¬ ⨯ ¬,
+% ¬®£ãâ ¢®§­¨ª âì ®è¨¡ª¨ ¯¥à¥¯®«­¥­¨ï ¨ ¤¨ ¯ §®­ , ªà®¬¥ ⮣®, \$80000000 < \$7fffffff.
+% â® ¬®¦¥â ¢ë§ë¢ âì á«ãç ©­ë¥ ®è¨¡ª¨ ¢ ª®¤¥ ­ ¯®¤®¡¨¥ "if p>q".
+type_interface_has_no_guid=04083_E_’¨¯ ¨­â¥àä¥©á  $1 ­¥ ¨¬¥¥â GUID
+% ਠ¨á¯®«ì§®¢ ­¨¨ ®¯¥à â®à  as ­ã¦­ë© ¨­â¥à䥩á, â.¥ ¯à ¢ë© ®¯¥à ­¤ ®¯¥à â®à  as,
+% ¤®«¦¥­ ¨¬¥âì ¯à ¢¨«ì­ë© GUID.
+type_e_invalid_objc_selector_name=04084_E_¥¢¥à­®¥ ¨¬ï ᥫ¥ªâ®à 
+% ‘¥«¥ªâ®à Objective-C ­¥ ¬®¦¥â ¡ëâì ¯ãáâë¬, ®­ ¤®«¦¥­ ¡ëâì ¨¤¥­â¨ä¨ª â®à®¬ «¨¡® ®¤¨­®ç­ë¬ ¤¢®¥â®ç¨¥¬,
+% ¨, ¥á«¨ ®­ ᮤ¥à¦¨â ¤¢®¥â®ç¨¥, â® ¤®«¦¥­ ¤¢®¥â®ç¨¥¬ ¨ § ª ­ç¨¢ âìáï.
+type_e_expected_objc_method_but_got=04085_E_ަ¨¤ ¥âáï ¬¥â®¤ Objective-C, ­® ¯®«ã祭® $1
+% ‘¥«¥ªâ®à ¬®¦¥â ¡ëâì á®§¤ ­ ⮫쪮 ¤«ï ¬¥â®¤®¢ Objective-C, ­¨ª ª®© ¤à㣮© ⨯
+% ¯à®æ¥¤ãà/ä㭪権/¬¥â®¤®¢ ­¥¤®¯ãá⨬.
+type_e_expected_objc_method=04086_E_ަ¨¤ ¥âáï ¬¥â®¤ Objective-C ¨«¨ ª®­áâ ­â­®¥ ¨¬ï ¬¥â®¤ 
+% ‘¥«¥ªâ®à ¬®¦¥â ¡ëâì á®§¤ ­ ⮫쪮 ¤«ï ¬¥â®¤®¢ Objective-C, «¨¡® ¯ã⥬ 㪠§ ­¨ï ¨¬¥­¨
+% ¢ ¢¨¤¥ áâப®¢®© ª®­áâ ­âë, «¨¡® á ¨á¯®«ì§®¢ ­¨ï ¨¤¥­â¨ä¨ª â®à  ¬¥â®¤  Objective-C,
+% ¤¥©á⢨⥫쭮£® ¢ ⥪ã饩 ®¡« á⨠¢¨¤¨¬®áâ¨.
+type_e_no_type_info=04087_E_ˆ­ä®à¬ æ¨ï ® ⨯¥ ­¥¤®áâ㯭  ¤«ï í⮣® ⨯ 
+% ˆ­ä®à¬ æ¨ï ® ⨯¥ ­¥ £¥­¥à¨àã¥âáï ¤«ï ­¥ª®â®àëå ⨯®¢, â ª¨å ª ª ¯¥à¥ç¨á«¥­¨ï á à §à뢠¬¨
+% ¢ ¤¨ ¯ §®­¥ §­ ç¥­¨© (¢ª«îç ï ¯¥à¥ç¨á«¥­¨ï, ã ª®â®àëå ­¨¦­ïï £à ­¨æ  ¤¨ ¯ §®­  ®â«¨ç ¥âáï ®â
+% ­ã«ï).
+type_e_ordinal_or_string_expr_expected=04088_E_’ॡã¥âáï ¢ëà ¦¥­¨¥ ¯®à浪®¢®£® ¨«¨ áâப®¢®£® ⨯ 
+% ‚ëà ¦¥­¨¥ ¤®«¦­® ¨¬¥âì ¯®à浪®¢ë© ¨«¨ áâப®¢ë© ⨯.
+type_e_string_expr_expected=04089_E_’ॡã¥âáï áâப®¢®¥ ¢ëà ¦¥­¨¥
+% ‚ëà ¦¥­¨¥ ¤®«¦­® ¨¬¥âì áâப®¢ë© ⨯.
% \end{description}
-
#
# Symtable
#
+# 05064 is the last used one
+#
% \section{Symbol handling}
-% This section lists all the messages that concern the handling of symbols.
-% This means all things that have to do with procedure and variable names.
+% „ ­­ë© à §¤¥« ᮤ¥à¦¨â á®®¡é¥­¨ï, ®â­®áï騥áï ª ®¡à ¡®âª¥ ᨬ¢®«®¢,
+% â.¥. ¢á¥£®, çâ® á¢ï§ ­® á ¨¬¥­ ¬¨ ¯à®æ¥¤ãà ¨ ¯¥à¥¬¥­­ëå.
% \begin{description}
-sym_e_id_not_found=05000_E_ˆ¤¥­â¨ä¨ª â®p ­¥ ­ ©¤¥­ $1
-% The compiler doesn't know this symbol. Usually happens when you misspel
-% the name of a variable or procedure, or when you forgot to declare a
-% variable.
+sym_e_id_not_found=05000_E_ˆ¤¥­â¨ä¨ª â®p "$1" ­¥ ­ ©¤¥­
+% „ ­­ë© ᨬ¢®« ­¥¨§¢¥á⥭ ª®¬¯¨«ïâ®àã. Ž¡ëç­® ¯à®¨á室¨â ¯à¨ ®è¨¡ª å ­ ¯¨á ­¨ï
+% ¨¬¥­¨ ¯¥à¥¬¥­­®© ¨«¨ ¯à®æ¥¤ãàë, ¨«¨ ¥á«¨ ¢ë § ¡ë«¨ ®¡êâì
+% ¯¥à¥¬¥­­ãî.
sym_f_internal_error_in_symtablestack=05001_F_‚­yâp¥­­ïï ®è¨¡ª  ¢ SymTableStack()
% An internal error occurred in the compiler; If you encounter such an error,
% please contact the developers and try to provide an exact description of
% the circumstances in which the error occurs.
-sym_e_duplicate_id=05002_E_„¢®©­®© ¨¤¥­â¨ä¨ª â®p $1
-% The identifier was already declared in the current scope.
+sym_e_duplicate_id=05002_E_ˆ¤¥­â¨ä¨ª â®p "$1" ¯®¢â®àï¥âáï
+% “ª § ­­ë© ¨¤¥­â¨ä¨ª â®à 㦥 ¡ë« ®¡ê¥­ ¢ ⥪ã饩 ®¡« áâ¨.
sym_h_duplicate_id_where=05003_H_ˆ¤¥­â¨ä¨ª â®p y¦¥ ®¯p¥¤¥«¥­ ¢ $1 (áâp®ª  $2)
-% The identifier was already declared in a previous scope.
-sym_e_unknown_id=05004_E_H¥¨§¢¥áâ­ë© ¨¤¥­â¨ä¨ª â®p $1
-% The identifier encountered hasn't been declared, or is used outside the
-% scope where it's defined.
-sym_e_forward_not_resolved=05005_E_FORWARD ­¥ ­ ©¤¥­ $1
-% This can happen in two cases:
+% ˆ¤¥­â¨ä¨ª â®à 㦥 ¡ë« ®¡ê¥­ ¢ 㪠§ ­­®© ®¡« áâ¨.
+sym_e_unknown_id=05004_E_H¥¨§¢¥áâ­ë© ¨¤¥­â¨ä¨ª â®p "$1"
+% “ª § ­­ë© ¨¤¥­â¨ä¨ª â®à ­¥ ¡ë« ®¡ê¥­, «¨¡® ¨á¯®«ì§ã¥âáï §  ¯à¥¤¥« ¬¨
+% ®¡« áâ¨, ¤«ï ª®â®à®© ®­ ¡ë« ®¯à¥¤¥«¥­.
+sym_e_forward_not_resolved=05005_E_ ­­¥¥ ®¡ê¥­¨¥ "$1" ­¥ à¥è¥­®
+% Œ®¦¥â ¯à®¨á室¨âì ¢ ¤¢ãå á«ãç ïå:
% \begin{itemize}
-% \item This happens when you declare a function (in the \var{interface} part, or
-% with a \var{forward} directive, but do not implement it.
-% \item You reference a type which isn't declared in the current \var{type}
-% block.
+% \item …᫨ äã­ªæ¨ï ®¡ê¥­  (¢ ᥪ樨 \var{interface}, «¨¡®
+% á ¤¨à¥ªâ¨¢®© \var{forward}, ­® ­¥ ॠ«¨§®¢ ­ .
+% \item ਠáá뫪¥ ­  ⨯, ª®â®àë© ­¥ ®¡ê¥­ ¢ ⥪ã饬 ¡«®ª¥ \var{type}.
% \end{itemize}
-sym_f_id_already_typed=05006_F_ˆ¤¥­â¨ä¨ª â®p y¦¥ ®¯p¥¤¥«¥­ ª ª ⨯
-% You are trying to redefine a type.
sym_e_error_in_type_def=05007_E_Žè¨¡ª  ¢ ®¯p¥¤¥«¥­¨¨ ⨯ 
-% There is an error in your definition of a new array type:
-% \item One of the range delimiters in an array declaration is erroneous.
-% For example, \var{Array [1..1.25]} will trigger this error.
-sym_e_type_id_not_defined=05008_E_’¨¯ ¨¤¥­â¨ä¨ª â®p  ­¥ ®¯p¥¤¥«¥­
-% The type identifier has not been defined yet.
-sym_e_forward_type_not_resolved=05009_E_FORWARD ⨯ ­¥ ­ ©¤¥­ $1
-% A symbol was forward defined, but no declaration was encountered.
-sym_e_only_static_in_static=05010_E_’®«ìª® áâ â¨ç¥áª¨¥ ¯¥à¥¬¥­­ë¥ ¬®£ã⠨ᯮ«ì§®¢ âìáï ¢ áâ â¨ç¥áª¨å ¨«¨ ¢­¥è­¨å ¬¥â®¤ å
-% A static method of an object can only access static variables.
-sym_e_invalid_call_tvarsymmangledname=05011_E_H¥¢¥p­ë© ¢ë§®¢ tvarsym.mangledname()
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-sym_f_type_must_be_rec_or_class=05012_F_ަ¨¤ ¥âáï ⨯ RECORD ¨«¨ CLASS
-% The variable or expression isn't of the type \var{record} or \var{class}.
-sym_e_no_instance_of_abstract_object=05013_E_Ž¡p §æë ª« áᮢ ¨«¨ ®¡ê¥ªâ®¢ á  ¡áâp ªâ­ë¬ ¬¥â®¤®¬ ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% You are trying to generate an instance of a class which has an abstract
-% method that wasn't overridden.
-sym_w_label_not_defined=05014_W_Œ¥âª  ­¥ ®¯p¥¤¥«¥­  $1
-% A label was declared, but not defined.
-sym_e_label_used_and_not_defined=05015_E_Œ¥âª  $1 ¨á¯®«ì§ã¥âáï, ­® ­¥®¯à¥¤¥«¥­ 
-% A label was declared and used, but not defined.
-sym_e_ill_label_decl=05016_E_H¥¢¥p­®¥ ®¯à¥¤¥«¥­¨¥ ¬¥âª¨
-% This error should never happen; it occurs if a label is defined outside a
-% procedure or function.
+% Žè¨¡ª  ¯à¨ ®¯à¥¤¥«¥­¨¨ ­®¢®£® ⨯  ¬ áᨢ :
+% \item ޤ­  ¨§ £à ­¨æ ¤¨ ¯ §®­  ï¥âáï ®è¨¡®ç­®©.
+%  ¯à¨¬¥à, \var{Array [1..1.25]} ¢ë§®¢¥â ¤ ­­ãî ®è¨¡ªã.
+sym_e_forward_type_not_resolved=05009_E_ ­­¥¥ ®¡ê¥­¨¥ ⨯  "$1" ­¥ à¥è¥­®
+% ‘¨¬¢®« ¡ë« ®¡ê¥­ § à ­¥¥, ­® ®¯à¥¤¥«¥­¨¥ ¤«ï ­¥£® ­¥ ¡ë«® ®¡­ à㦥­®.
+sym_e_only_static_in_static=05010_E_’®«ìª® áâ â¨ç¥áª¨¥ ¯¥à¥¬¥­­ë¥ ¬®£ã⠨ᯮ«ì§®¢ âìáï ¢ áâ â¨ç¥áª¨å ¬¥â®¤ å ¨«¨ ¢­¥ ¬¥â®¤®¢
+% ‘â â¨ç¥áª¨© ¬¥â®¤ ®¡ê¥ªâ  ¨¬¥¥â ¤®áâ㯠⮫쪮 ª áâ â¨ç¥áª¨¬ ¯¥à¥¬¥­­ë¬.
+sym_f_type_must_be_rec_or_class=05012_F_ަ¨¤ ¥âáï ⨯ record ¨«¨ class
+% ¥à¥¬¥­­ ï ¨«¨ ¢ëà ¦¥­¨¥ ¨¬¥¥â ⨯, ®â«¨ç­ë© ®â \var{record} ¨«¨ \var{class}.
+sym_e_no_instance_of_abstract_object=05013_E_ª§¥¬¯«ïàë ª« áᮢ ¨«¨ ®¡ê¥ªâ®¢ á  ¡áâp ªâ­ë¬ ¬¥â®¤®¬ ­¥ ¤®¯ã᪠îâáï
+% ®¯ë⪠ á®§¤ âì íª§¥¬¯«ïà ª« áá  á  ¡áâà ªâ­ë¬ ¬¥â®¤®¬, ª®â®àë© ­¥ ¡ë« ¯¥à¥ªàëâ.
+sym_w_label_not_defined=05014_W_Œ¥âª  "$1" ­¥ ®¯p¥¤¥«¥­ 
+% Œ¥âª  ¡ë«  ®¡ê¥­ , ­® ­¥ ¡ë«  ®¯à¥¤¥«¥­ .
+sym_e_label_used_and_not_defined=05015_E_Œ¥âª  "$1" ¨á¯®«ì§ã¥âáï, ­® ­¥ ®¯à¥¤¥«¥­ 
+% Œ¥âª  ¡ë«  ®¡ê¥­  ¨ ¨á¯®«ì§®¢ ­ , ­® ­¥ ¡ë«  ®¯à¥¤¥«¥­ .
+sym_e_ill_label_decl=05016_E_H¥¢¥p­®¥ ®¡ê¥­¨¥ ¬¥âª¨
+% நá室¨â, ¥á«¨ ¬¥âª  ®¡ê¥­  ¢­¥ ¯à®æ¥¤ãàë ¨«¨ ä㭪樨; í⮣® ­¨ª®£¤ 
+% ­¥ ¤®«¦­® á«ãç âìáï.
sym_e_goto_and_label_not_supported=05017_E_GOTO ¨ LABEL ­¥ ¯®¤¤¥p¦¨¢ îâáï (¨á¯®«ì§y©â¥ ª«îç -Sg)
-% You must compile a program which has \var{label}s and \var{goto} statements
-% with the \var{-Sg} switch. By default, \var{label} and \var{goto} aren't
-% supported.
+% ணࠬ¬ã, ᮤ¥à¦ éãî ¬¥âª¨ ¨ ¯¥à¥å®¤ë \var{goto}, ­¥®¡å®¤¨¬® ª®¬¯¨«¨à®¢ âì
+% á ª«î箬 \var{-Sg}. ® 㬮«ç ­¨î, ¬¥âª¨ ¨ ¯¥à¥å®¤ë ­¥ ¯®¤¤¥à¦¨¢ îâáï.
sym_e_label_not_found=05018_E_Œ¥âª  ­¥ ­ ©¤¥­ 
-% A \var{goto label} was encountered, but the label isn't declared.
-sym_e_id_is_no_label_id=05019_E_â®â ¨¤¥­â¨ä¨ª â®p ­¥ ¬¥âª 
-% The identifier specified after the \var{goto} isn't of type label.
+% ‚áâà¥â¨«®áì \var{goto label}, ­® ¬¥âª  ­¥ ¡ë«  ®¡ê¥­ .
+sym_e_id_is_no_label_id=05019_E_ˆ¤¥­â¨ä¨ª â®p ­¥ ï¥âáï ¬¥âª®©
+% ˆ¤¥­â¨ä¨ª â®à, á«¥¤ãî騩 §  \var{goto}, ­¥ ¨¬¥¥â ⨯ ¬¥âª¨.
sym_e_label_already_defined=05020_E_®¢â®p­®¥ ®¯p¥¤¥«¥­¨¥ ¬¥âª¨
-% You are defining a label twice. You can define a label only once.
-sym_e_ill_type_decl_set=05021_E_¥¢¥p­®¥ ®¡ê¥­¨¥ ⨯  í«¥¬¥­â®¢ ­ ¡®à 
-% The declaration of a set contains an invalid type definition.
-sym_e_class_forward_not_resolved=05022_E_FORWARD ®¯p¥¤¥«¥­¨¥ ª« áá  ­¥ ®¡­ py¦¥­® $1
-% You declared a class, but you didn't implement it.
-sym_n_unit_not_used=05023_H_Œ®¤ã«ì $1 ­¥ ¨á¯®«ì§ã¥âáï ¢ $2
-% The unit referenced in the \var{uses} clause is not used.
-sym_h_para_identifier_not_used=05024_H_ p ¬¥âp ­¥ ¨á¯®«ì§y¥âáï $1
-% This is a warning. The identifier was declared (locally or globally) but
-% wasn't used (locally or globally).
-sym_n_local_identifier_not_used=05025_N_‹®ª «ì­ ï ¯¥p¥¬¥­­ ï ­¥ ¨á¯®«ì§y¥âáï $1
-% You have declared, but not used a variable in a procedure or function
-% implementation.
-sym_h_para_identifier_only_set=05026_H_‡­ ç¥­¨¥ ¯ à ¬¥âà  $1 á¢ï§ ­  á 祬-â®, ­® ­¥ ¨á¯®«ì§ã¥âáï
-% This is a warning. The identifier was declared (locally or globally)
-% set but not used (locally or globally).
-sym_n_local_identifier_only_set=05027_N_‹®ª «ì­ ï ¯¥à¥¬¥­­ ï $1 á¢ï§ ­  á 祬-â®, ­® ­¥ ¨á¯®«ì§ã¥âáï
-% The variable in a procedure or function
-% implementation is declared, set but never used.
-sym_h_local_symbol_not_used=05028_H_‹®ª «ì­ë© ᨬ¢®« $1 $2 ­¥¨á¯®«ì§ã¥âáï
-% A local symbol is never used.
-sym_n_private_identifier_not_used=05029_N_Private ¯®«¥ $1.$2 ­¥¨á¯®«ì§ã¥âáï
-sym_n_private_identifier_only_set=05030_N_Private ¯®«¥ $1.$2 á¢ï§ ­  á 祬-â®, ­® ­¥ ¨á¯®«ì§ã¥âáï
-sym_n_private_method_not_used=05031_N_Private ¬¥â®¤ $1.$2 ­¥¨á¯®«ì§ã¥âáï
-
-
-sym_e_set_expected=05032_E_ަ¨¤ ¥âáï yáâ ­®¢ª  ⨯ 
-% The variable or expression isn't of type \var{set}. This happens in an
-% \var{in} statement.
-sym_w_function_result_not_set=05033_W_¥§y«ìâ â äy­ªæ¨¨ ª ¦¥âáï ­¥ yáâ ­®¢«¥­
-% You can get this warning if the compiler thinks that a function return
-% value is not set. This will not be displayed for assembler procedures,
-% or procedures that contain assembler blocks.
-sym_w_wrong_C_pack=05034_W_’¨¯ $1 ­¥ª®à४⭮ ¢ë஢­¥­ ¢ ⥪ã饩 § ¯¨á¨ C ï§ëª 
-% Arrays with sizes not multiples of 4 will be wrongly aligned
-% for C structures.
-sym_e_illegal_field=05035_E_H¥¨§¢¥áâ­®¥ ¯®«¥ ¢ § ¯¨á¨ $1
-% The field doesn't exist in the record definition.
-sym_n_uninitialized_local_variable=05036_W_‹®ª «ì­ ï ¯¥p¥¬¥­­ ï $1 ª ¦¥âáï ­¥ ¨­¨æ¨ «¨§¨p®¢ ­ 
-sym_n_uninitialized_variable=05037_W_¥p¥¬¥­­ ï $1 ª ¦¥âáï ­¥ ¨­¨æ¨ «¨§¨p®¢ ­ 
-% These messages are displayed if the compiler thinks that a variable will
-% be used (i.e. appears in the right-hand-side of an expression) when it
-% wasn't initialized first (i.e. appeared in the left-hand side of an
-% assigment)
-sym_e_id_no_member=05038_E_ˆ¤¥­â¨ä¨ª â®p ­¥ yª §ë¢ ¥â ­¨ ­  ª ª®© í«¥¬¥­â $1
-% When using the extended syntax of \var{new}, you must specify the constructor
-% method of the class you are trying to create. The procedure you specified
-% does not exist.
-sym_b_param_list=05039_B_H ©¤¥­® ®¯p¥¤¥«¥­¨¥: $1
-% You get this when you use the \var{-vb} switch. In case an overloaded
-% procedure is not found, then all candidate overloaded procedures are
-% listed, with their parameter lists.
-sym_e_segment_too_large=05040_E_‘¥£¬¥­â ¤ ­­ëå ᫨誮¬ ¡®«ì让 (¬ ªá. 2GB)
-% You get this when you declare an array whose size exceeds the 2GB limit.
+% ®¯ë⪠ ®¯à¥¤¥«¨âì ¬¥âªã ¤¢ ¦¤ë. Œ¥âª  ¬®¦¥â ¡ëâì ®¯à¥¤¥«¥­  ⮫쪮 ®¤¨­ à §.
+sym_e_ill_type_decl_set=05021_E_¥¢¥p­®¥ ®¡ê¥­¨¥ ⨯  í«¥¬¥­â®¢ ¬­®¦¥á⢠
+% Ž¡ê¥­¨¥ ¬­®¦¥á⢠ ᮤ¥à¦¨â ­¥¤®¯ãá⨬®¥ ®¯à¥¤¥«¥­¨¥ ⨯ .
+sym_e_class_forward_not_resolved=05022_E_ ­¥¥ ®¡ê¥­¨¥ ª« áá  "$1" ­¥ à¥è¥­®
+% Š« áá ¡ë« ®¡ê¥­, ­® ­¥ ¡ë« ॠ«¨§®¢ ­.
+sym_n_unit_not_used=05023_H_Œ®¤ã«ì "$1" ­¥ ¨á¯®«ì§ã¥âáï ¢ $2
+% Œ®¤ã«ì, 㪠§ ­­ë© ¢ ᥪ樨 \var{uses}, ­¥ ¨á¯®«ì§ã¥âáï.
+sym_h_para_identifier_not_used=05024_H_ p ¬¥âp "$1" ­¥ ¨á¯®«ì§y¥âáï
+% ˆ¤¥­â¨ä¨ª â®à ¡ë« ®¡ê¥­ («®ª «ì­® ¨«¨ £«®¡ «ì­®), ­®
+% ­¥ ¡ë« ¨á¯®«ì§®¢ ­.
+sym_n_local_identifier_not_used=05025_N_‹®ª «ì­ ï ¯¥p¥¬¥­­ ï "$1" ­¥ ¨á¯®«ì§y¥âáï
+% ¥à¥¬¥­­ ï ®¡ê¥­ , ­® ­¥ ¨á¯®«ì§®¢ ­  ¢ ॠ«¨§ æ¨¨ ¯à®æ¥¤ãàë
+% ¨«¨ ä㭪樨.
+sym_h_para_identifier_only_set=05026_H_ à ¬¥âà-§­ ç¥­¨¥ "$1" ¯à¨á¢®¥­, ­® ­¥ ¨á¯®«ì§®¢ ­
+%  à ¬¥âàã ¯à¨á¢®¥­® §­ ç¥­¨¥, ª®â®à®¥ ¢ ¤ «ì­¥©è¥¬ ­¨£¤¥ ­¥ ¨á¯®«ì§ã¥âáï.
+sym_n_local_identifier_only_set=05027_N_‹®ª «ì­ ï ¯¥à¥¬¥­­ ï "$1" ¯à¨á¢®¥­ , ­® ­¥ ¨á¯®«ì§®¢ ­ 
+% ‹®ª «ì­®© ¯¥à¥¬¥­­®© ¯à¨á¢®¥­® §­ ç¥­¨¥, ª®â®à®¥ ¢ ¤ «ì­¥©è¥¬ ­¨£¤¥ ­¥ ¨á¯®«ì§ã¥âáï.
+sym_h_local_symbol_not_used=05028_H_‹®ª «ì­ë© ᨬ¢®« $1 "$2" ­¥ ¨á¯®«ì§ã¥âáï
+% ‹®ª «ì­ë© ᨬ¢®« ­¥ ¨á¯®«ì§ã¥âáï.
+sym_n_private_identifier_not_used=05029_N_Private ¯®«¥ "$1.$2" ­¥ ¨á¯®«ì§ã¥âáï
+% “ª § ­­®¥ private ¯®«¥ ®¯à¥¤¥«¥­®, ­® ­¥ ¨á¯®«ì§ã¥âáï ­¨£¤¥ ¢ ª®¤¥.
+sym_n_private_identifier_only_set=05030_N_Private ¯®«¥ "$1.$2" ¯à¨á¢®¥­®, ­® ­¥ ¨á¯®«ì§®¢ ­®
+% “ª § ­­®¥ private ¯®«¥ ®¯à¥¤¥«¥­® ¨ ¥¬ã ¯à¨á¢®¥­® §­ ç¥­¨¥, ª®â®à®¥ ­¨£¤¥ ­¥ ç¨â ¥âáï.
+sym_n_private_method_not_used=05031_N_Private ¬¥â®¤ "$1.$2" ­¥ ¨á¯®«ì§ã¥âáï
+% “ª § ­­ë© private ¬¥â®¤ ®¯à¥¤¥«¥­, ­® ­¥ ¨á¯®«ì§ã¥âáï ­¨£¤¥ ¢ ª®¤¥.
+sym_e_set_expected=05032_E_ަ¨¤ ¥âáï ⨯ ¬­®¦¥á⢠
+% ¥à¥¬¥­­ ï ¨«¨ ¢ëà ¦¥­¨¥ ¨¬¥¥â ⨯, ®â«¨ç­ë© ®â \var{set}. â® á«ãç ¥âáï ¢
+% ¢ëà ¦¥­¨ïå \var{in}.
+sym_w_function_result_not_set=05033_W_¥§y«ìâ â äy­ªæ¨¨, ¢®§¬®¦­®, ­¥ ¯à¨á¢®¥­
+% ।ã¯à¥¦¤¥­¨¥ ¢ë¤ ¥âáï, ¥á«¨ ª®¬¯¨«ïâ®à ¯®« £ ¥â, ç⮠१ã«ìâ â, ¢®§¢à é ¥¬ë© ä㭪樥©,
+% ­¥ ¯à¨á¢®¥­. …᫨ äã­ªæ¨ï ­ ¯¨á ­  ­   áᥬ¡«¥à¥, ¨«¨ ᮤ¥à¦¨â  áᥬ¡«¥à­ë© ¡«®ª,
+% ¯à¥¤ã¯à¥¦¤¥­¨¥ ­¥ ¢ë¤ ¥âáï.
+sym_w_wrong_C_pack=05034_W_’¨¯ "$1" ­¥ª®à४⭮ ¢ë஢­¥­ ¢ ⥪ã饩 § ¯¨á¨ ¤«ï ï§ëª  C
+% Œ áᨢë á à §¬¥à ¬¨, ­¥ ªà â­ë¬¨ 4, ¡ã¤ãâ ­¥¢¥à­® ¢ë஢­¥­ë ¢ áâàãªâãà å ï§ëª  C.
+sym_e_illegal_field=05035_E_H¥¨§¢¥áâ­®¥ ¯®«¥ § ¯¨á¨ "$1"
+% “ª § ­­®¥ ¯®«¥ ®âáãâáâ¢ã¥â ¢ ®¯à¥¤¥«¥­¨¨ § ¯¨á¨.
+sym_w_uninitialized_local_variable=05036_W_‹®ª «ì­ ï ¯¥p¥¬¥­­ ï "$1" ­¥ ¨­¨æ¨ «¨§¨p®¢ ­ 
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï, ª®£¤  ª®¬¯¨«ïâ®à áç¨â ¥â, çâ® «®ª «ì­ ï ¯¥à¥¬¥­­ ï ¡ã¤¥â
+% ¨á¯®«ì§®¢ ­  (â.¥. ¢áâà¥â¨« áì ¢ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï), ­® ­¥ ¡ë« 
+% ¨­¨æ¨ «¨§¨à®¢ ­  (â.¥. ­¥ ¯®ï¢«ï« áì à ­¥¥ ¢ «¥¢®© ç á⨠¯à¨á¢ ¨¢ ­¨ï).
+sym_w_uninitialized_variable=05037_W_¥p¥¬¥­­ ï "$1" ­¥ ¨­¨æ¨ «¨§¨p®¢ ­ 
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï, ª®£¤  ª®¬¯¨«ïâ®à áç¨â ¥â, çâ® ¯¥à¥¬¥­­ ï ¡ã¤¥â ¨á¯®«ì§®¢ ­ 
+% (â.¥. ¢áâà¥â¨« áì ¢ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï), ­® ­¥ ¡ë«  ¨­¨æ¨ «¨§¨à®¢ ­  (â.¥.
+% ­¥ ¯®ï¢«ï« áì à ­¥¥ ¢ «¥¢®© ç á⨠¯à¨á¢ ¨¢ ­¨ï).
+sym_e_id_no_member=05038_E_ˆ¤¥­â¨ä¨ª â®p ­¥ ®¯à¥¤¥«ï¥â í«¥¬¥­â "$1"
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï ¯à¨ ¯®¯ë⪥ ¤®áâ㯠 ª ­¥®¯à¥¤¥«¥­­®¬ã ¯®«î § ¯¨á¨
+% ¨«¨ ®¡ê¥ªâ , «¨¡® ¬¥â®¤ã.
+sym_h_param_list=05039_H_H ©¤¥­® ®¯p¥¤¥«¥­¨¥: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vh}, ¥á«¨ ­¥ ­ ©¤¥­  ¯¥à¥£à㦥­­ ï ¯à®æ¥¤ãà ,
+% ¯¥à¥ç¨á«ïîâáï ¢á¥ ¯®¤å®¤ï騥 ¯¥à¥£à㦥­­ë¥ ¯à®æ¥¤ãàë ¨ ᯨ᪨ ¨å
+% ¯ à ¬¥â஢.
+sym_e_segment_too_large=05040_E_‘«¨èª®¬ ¡®«ì让 í«¥¬¥­â ¤ ­­ëå
+% ‚뤠¥âáï ¯à¨ ¯®¯ë⪥ ®¡êâì í«¥¬¥­â ¤ ­­ëå, à §¬¥à ª®â®à®£® ¯à¥¢ëè ¥â
+% ãáâ ­®¢«¥­­ë© ¯à¥¤¥« (2 ƒ ¤«ï ¯à®æ¥áá®à®¢ 80386+/68020+)
+sym_e_no_matching_implementation_found=05042_E_¥ ­ ©¤¥­  ¯®¤å®¤ïé ï ॠ«¨§ æ¨ï ¬¥â®¤  ¨­â¥àä¥©á  "$1"
+% ¥ ­ ©¤¥­ ¬¥â®¤, ª®â®àë© ¬®£ ¡ë ॠ«¨§®¢ âì 㪠§ ­­ë© ¬¥â®¤ ¨­â¥à䥩á .
+% ஢¥àìâ¥ â¨¯ë  à£ã¬¥­â®¢ ¨ â¨¯ë ¢®§¢à é ¥¬ëå §­ ç¥­¨©.
+sym_w_deprecated_symbol=05043_W_‘¨¬¢®« "$1" ãáâ à¥«
+% ˆá¯®«ì§®¢ ­ ᨬ¢®« (¯¥à¥¬¥­­ ï, ¯à®æ¥¤ãà  ¨ â.¯.), ª®â®àë© ¡ë«
+% ®¡ê¥­ ª ª \var{deprecated}. ’ ª®© ãáâ à¥¢è¨© ᨬ¢®« ¬®¦¥â ¡ëâì
+% ­¥¤®áâ㯥­ ¢ ­®¢ëå ¢¥àá¨ïå ¬®¤ã«ï / ¡¨¡«¨®â¥ª¨. ® ¢®§¬®¦­®áâ¨,
+% ­ã¦­® ¨§¡¥£ âì ¨á¯®«ì§®¢ ­¨ï ãáâ à¥¢è¨å ᨬ¢®«®¢.
+sym_w_non_portable_symbol=05044_W_‘¨¬¢®« "$1" ­¥ ¯®àâ ¡¥«¥­
+% ˆá¯®«ì§®¢ ­ ᨬ¢®« (¯¥à¥¬¥­­ ï, ¯à®æ¥¤ãà  ¨ â.¯.), ª®â®àë© ¡ë«
+% ®¡ê¥­ ª ª \var{platform}. ‡­ ç¥­¨¥, ¨á¯®«ì§®¢ ­¨¥ ¨ ¤®áâ㯭®áâì
+% â ª®£® ᨬ¢®«  § ¢¨á¨â ®â ¯« âä®à¬ë. …᫨ ¨á室­ë© ª®¤ ¤®«¦¥­ ¡ëâì
+% ¯®àâ¨à㥬ë¬, ¨á¯®«ì§®¢ âì â ª¨¥ ᨬ¢®«ë ­¥ á«¥¤ã¥â.
+sym_w_non_implemented_symbol=05055_W_‘¨¬¢®« "$1" ­¥ ॠ«¨§®¢ ­
+% ˆá¯®«ì§®¢ ­ ᨬ¢®« (¯¥à¥¬¥­­ ï, ¯à®æ¥¤ãà  ¨ â.¯.), ª®â®àë© ¡ë«
+% ®¡ê¥­ ª ª \var{unimplemented}. â®â ᨬ¢®« ®¯à¥¤¥«¥­,
+% ­® ¥é¥ ­¥ ॠ«¨§®¢ ­ ¤«ï ¤ ­­®© ¯« âä®à¬ë.
+sym_e_cant_create_unique_type=05056_E_â®â ⨯ ­¥«ì§ï ¨á¯®«ì§®¢ âì ¤«ï ®¡ê¥­¨ï ã­¨ª «ì­®£® ⨯ 
+% ਠ®¡ê¥­¨¨ ã­¨ª «ì­®£® ⨯  á ¯®¬®éìî ¢ëà ¦¥­¨ï \var{type newtype = type oldtype;}
+% ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ¯à®áâë¥ â¨¯ë (¯®à浪®¢ë¥, ¢¥é¥á⢥­­ë¥ ¨ áâப®¢ë¥).
+sym_h_uninitialized_local_variable=05057_H_‹®ª «ì­ ï ¯¥à¥¬¥­­ ï "$1" ­¥ ¨­¨æ¨ «¨§¨à®¢ ­ 
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï, ª®£¤  ª®¬¯¨«ïâ®à áç¨â ¥â, çâ® «®ª «ì­ ï ¯¥à¥¬¥­­ ï ¡ã¤¥â
+% ¨á¯®«ì§®¢ ­  (â.¥. ¢áâà¥â¨« áì ¢ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï), ­® ­¥ ¡ë« 
+% ¨­¨æ¨ «¨§¨à®¢ ­  (â.¥. ­¥ ¯®ï¢«ï« áì à ­¥¥ ¢ «¥¢®© ç á⨠¯à¨á¢ ¨¢ ­¨ï).
+sym_h_uninitialized_variable=05058_H_¥à¥¬¥­­ ï "$1" ­¥ ¨­¨æ¨ «¨§¨à®¢ ­ 
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï, ª®£¤  ª®¬¯¨«ïâ®à áç¨â ¥â, çâ® ¯¥à¥¬¥­­ ï ¡ã¤¥â
+% ¨á¯®«ì§®¢ ­  (â.¥. ¢áâà¥â¨« áì ¢ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï), ­® ­¥ ¡ë« 
+% ¨­¨æ¨ «¨§¨à®¢ ­  (â.¥. ­¥ ¯®ï¢«ï« áì à ­¥¥ ¢ «¥¢®© ç á⨠¯à¨á¢ ¨¢ ­¨ï).
+sym_w_function_result_uninitialized=05059_W_¥à¥¬¥­­ ï १ã«ìâ â  ä㭪樨 ­¥ ¨­¨æ¨ «¨§¨à®¢ ­ 
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï, ª®£¤  ª®¬¯¨«ïâ®à áç¨â ¥â, çâ® ¯¥à¥¬¥­­ ï १ã«ìâ â 
+% ä㭪樨 ¡ã¤¥â ¨á¯®«ì§®¢ ­  (â.¥. ¢áâà¥â¨« áì ¢ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï),
+% ­® ­¥ ¡ë«  ¨­¨æ¨ «¨§¨à®¢ ­  (â.¥. ­¥ ¯®ï¢«ï« áì à ­¥¥ ¢ «¥¢®© ç áâ¨
+% ¯à¨á¢ ¨¢ ­¨ï).
+sym_h_function_result_uninitialized=05060_H_¥à¥¬¥­­ ï १ã«ìâ â  ä㭪樨 ­¥ ¨­¨æ¨ «¨§¨à®¢ ­ 
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï, ª®£¤  ª®¬¯¨«ïâ®à áç¨â ¥â, çâ® ¯¥à¥¬¥­­ ï १ã«ìâ â 
+% ä㭪樨 ¡ã¤¥â ¨á¯®«ì§®¢ ­  (â.¥. ¢áâà¥â¨« áì ¢ ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï),
+% ­® ­¥ ¡ë«  ¨­¨æ¨ «¨§¨à®¢ ­  (â.¥. ­¥ ¯®ï¢«ï« áì à ­¥¥ ¢ «¥¢®© ç áâ¨
+% ¯à¨á¢ ¨¢ ­¨ï).
+sym_w_identifier_only_read=05061_W_¥à¥¬¥­­ ï "$1" ç¨â ¥âáï, ­® ­¥ ¯à¨á¢®¥­ 
+% ‡­ ç¥­¨¥ ¯¥à¥¬¥­­®© áç¨â뢠¥âáï, ­® ­¨£¤¥ ­¥ ¯à¨á¢ ¨¢ ¥âáï.
+sym_h_abstract_method_list=05062_H_ ©¤¥­  ¡áâà ªâ­ë© ¬¥â®¤: $1
+% ਠ¢ë¤ ç¥ ¯à¥¤ã¯à¥¦¤¥­¨ï ® á®§¤ ­¨¨ ª« áá /®¡ê¥ªâ  á  ¡áâà ªâ­ë¬¨ ¬¥â®¤ ¬¨
+% íâ  ¯®¤áª §ª  ®¡«¥£ç ¥â ¯®¨áª ¯à®¡«¥¬­®£® ¬¥â®¤ .
+sym_w_experimental_symbol=05063_W_‘¨¬¢®« "$1" ï¥âáï íªá¯¥à¨¬¥­â «ì­ë¬
+% ˆá¯®«ì§®¢ ­ ᨬ¢®« (¯¥à¥¬¥­­ ï, ¯à®æ¥¤ãà  ¨ â.¯.), ª®â®àë© ¡ë«
+% ®¡ê¥­ ª ª \var{experimental}. ªá¯¥à¨¬¥­â «ì­ë¥ ᨬ¢®«ë ¬®£ãâ
+% ¨á祧­ãâì ¨«¨ ¨§¬¥­¨âì ¯®¢¥¤¥­¨¥ ¢ ¡ã¤ã饩 ¢¥àᨨ. ˆá¯®«ì§®¢ ­¨ï
+% â ª¨å ᨬ¢®«®¢ á«¥¤ã¥â ¯® ¢®§¬®¦­®á⨠¨§¡¥£ âì.
+sym_w_forward_not_resolved=05064_W_ ­¥¥ ®¡ê¥­¨¥ "$1" ­¥ à §à¥è¨«®áì, ¯à¥¤¯®« £ ¥âáï external
+% நá室¨â, ¥á«¨ äã­ªæ¨ï ¡ë«  ®¡ê¥­  ¢ ᥪ樨 \var{interface} ¬®¤ã«ï ¢ ०¨¬¥ macpas,
+% ­® ­¥ ¡ë«  ॠ«¨§®¢ ­ .
% \end{description}
-
#
-# Codegenerator
+# Š®¤®£¥­¥à â®à
+#
+# 06049 ­®¬¥à ¯®á«¥¤­¥£® á®®¡é¥­¨ï
#
% \section{Code generator messages}
-% This section lists all messages that can be displayed if the code
-% generator encounters an error condition.
+%  §¤¥« ᮤ¥à¦¨â á®®¡é¥­¨ï, ª®â®àë¥ ¬®£ãâ ¡ëâì ¢ë¤ ­ë ¯à¨ ®è¨¡ª å
+% ª®¤®£¥­¥à æ¨¨.
% \begin{description}
-cg_e_break_not_allowed=06000_E_BREAK ­¥ p §p¥è¥­®
-% You're trying to use \var{break} outside a loop construction.
-cg_e_continue_not_allowed=06001_E_CONTINUE ­¥ p §p¥è¥­®
-% You're trying to use \var{continue} outside a loop construction.
-cg_e_too_complex_expr=06002_E_‚ëp ¦¥­¨¥ ᫨誮¬ á«®¦­®¥ - ¯¥p¥¯®«­¥­¨¥ á⥪  FPU
-% Your expression is too long for the compiler. You should try dividing the
-% construct over multiple assignments.
-cg_e_illegal_expression=06003_E_H¥¯p ¢¨«ì­®¥ ¢ëp ¦¥­¨¥
-% This can occur under many circumstances. Mostly when trying to evaluate
-% constant expressions.
-cg_e_invalid_integer=06004_E_H¥¯p ¢¨«ì­®¥ 楫®ç¨á«¥­­®¥ ¢ëp ¦¥­¨¥
-% You made an expression which isn't an integer, and the compiler expects the
-% result to be an integer.
-cg_e_invalid_qualifier=06005_E_H¥¤¥©á⢨⥫ì­ë© ᯥæ¨ä¨ª â®p
-% One of the following is happening :
-% \begin{itemize}
-% \item You're trying to access a field of a variable that is not a record.
-% \item You're indexing a variable that is not an array.
-% \item You're dereferencing a variable that is not a pointer.
-% \end{itemize}
-cg_e_upper_lower_than_lower=06006_E_‚¥på­¨© ¯p¥¤¥« ¤¨ ¯ §®­  ¬¥­ìè¥ ­¨¦­¥£® ¯p¥¤¥« .
-% You are declaring a subrange, and the lower limit is higher than the high
-% limit of the range.
-cg_e_illegal_count_var=06007_E_H¥¢¥p­ ï ¯¥à¥¬¥­­ ï-áç¥â稪
-% The type of a \var{for} loop variable must be an ordinal type.
-% Loop variables cannot be reals or strings.
-cg_e_cant_choose_overload_function=06008_E_¥ ¬®£ã ®¯à¥¤¥«¨âì, ªâ® '¯¥à¥£à㦠«' äã­ªæ¨î, çâ®¡ë ¥¥ ¢ë§¢ âì
-% You're calling overloaded functions with a parameter that doesn't correspond
-% to any of the declared function parameter lists. e.g. when you have declared
-% a function with parameters \var{word} and \var{longint}, and then you call
-% it with a parameter which is of type \var{integer}.
-cg_e_parasize_too_big=06009_E_ §¬¥p ᯨ᪠ ¯ p ¬¥âp®¢ ¯p¥¢ëᨫ ¤®¯yáâ¨¬ë© ¯p¥¤¥« ¢ 65535 ¡ ©â (64kb)
-% The I386 processor limits the parameter list to 65535 bytes (the \var{RET}
-% instruction causes this)
-cg_e_illegal_type_conversion=06010_E_H¥¯p ¢¨«ì­®¥ ¯p¥®¡p §®¢ ­¨¥ ⨯®¢
-% When doing a type-cast, you must take care that the sizes of the variable and
-% the destination type are the same.
-cg_d_pointer_to_longint_conv_not_portable=06011_D_Š®­¢¥pâ æ¨ï ¬¥¦¤y ORDINAL ¨ POINTER ­¥¢®§¬®¦­  ¨§-§  ®âáãâáâ¢¨ï ¯®¤¤¥à¦ª¨ ã ¯« âä®à¬ë
-% If you typecast a pointer to a longint, this code will not compile
-% on a machine using 64bit for pointer storage.
-cg_e_file_must_call_by_reference=06012_E_” ©«®¢ë¥ â¨¯ë ¤®«¦­ë ¡ëâì ¯¥p¥¬¥­­ë¬¨
-% You cannot specify files as value parameters, i.e. they must always be
-% declared \var{var} parameters.
-cg_e_cant_use_far_pointer_there=06013_E_ˆá¯®«ì§®¢ ­¨¥ FAR yª § â¥«ï §¤¥áì ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-% Free Pascal doesn't support far pointers, so you cannot take the address of
-% an expression which has a far reference as a result. The \var{mem} construct
-% has a far reference as a result, so the following code will produce this
-% error:
+cg_e_parasize_too_big=06009_E_ §¬¥p ᯨ᪠ ¯ p ¬¥âp®¢ ¯p¥¢ëè ¥â 65535 ¡ ©â
+% à®æ¥áá®à I386 ®£à ­¨ç¨¢ ¥â ᯨ᮪ ¯ à ¬¥â஢ ¤® 65535 ¡ ©â (¨§-§  ®á®¡¥­­®áâ¨
+% ¨­áâàãªæ¨¨ \var{RET})
+cg_e_file_must_call_by_reference=06012_E_” ©«®¢ë¥ ⨯ë á«¥¤ã¥â ¯¥à¥¤ ¢ âì ¯® áá뫪¥
+% ” ©«ë ­¥«ì§ï ¯¥à¥¤ ¢ âì ¯® §­ ç¥­¨î, â.¥. ®­¨ ¢á¥£¤  ¤®«¦­ë ¡ëâì ®¡ê¥­ë
+% ª ª \var{var} ¯ à ¬¥âàë.
+cg_e_cant_use_far_pointer_there=06013_E_ˆá¯®«ì§®¢ ­¨¥ FAR yª § â¥«ï §¤¥áì ­¥¤®¯ãá⨬®
+% Free Pascal ­¥ ¯®¤¤¥à¦¨¢ ¥â ¤ «ì­¨¥ 㪠§ â¥«¨, ¯®í⮬㠭¥¢®§¬®¦­® ¢§ïâì  ¤à¥á
+% ¢ëà ¦¥­¨ï, ¢ १ã«ìâ â¥ ª®â®à®£® ¯®«ãç¨âáï ¤ «ì­¨© 㪠§ â¥«ì. Š®­áâàãªæ¨ï \var{mem}
+% ï¥âáï ¯à¨¬¥à®¬ â ª®£® ¢ëà ¦¥­¨ï, ¯®í⮬ã á«¥¤ãî騩 ª®¤ ¢ë§®¢¥â ¤ ­­ãî ®è¨¡ªã:
% \begin{verbatim}
% var p : pointer;
% ...
% p:=@mem[a000:000];
% \end{verbatim}
-cg_e_var_must_be_reference=06014_E_H¥¯p ¢¨«ì­ë© ¢ë§®¢ ¯ p ¬¥âp  ¯® áá뫪¥
-% You are trying to pass a constant or an expression to a procedure that
-% requires a \var{var} parameter. Only variables can be passed as a \var{var}
-% parameter.
-cg_e_dont_call_exported_direct=06015_E_ˆá¯®«ì§®¢ ­¨¥ EXPORT ®¯p¥¤¥«ï¥â, çâ® íâ  äy­ªæ¨ï ­¥ ¬®¦¥â §¤¥áì ¢ë§ë¢ âìáï
-% No longer in use.
-cg_w_member_cd_call_from_method=06016_W_‚®§¬®¦­® ­¥¯p ¢¨«ì­ë© ¢ë§®¢ ª®­áâpyªâ®p  ¨«¨ ¤¥áâpyªâ®p  (­¥ ᮮ⢥âáâ¢y¥â ⥪y饬y ª®­â¥ªáây)
-% No longer in use.
+cg_e_dont_call_exported_direct=06015_E_‚ë§®¢ EXPORT ä㭪樨 ­¥¢®§¬®¦¥­
+% ®«ìè¥ ­¥ ¨á¯®«ì§ã¥âáï.
+cg_w_member_cd_call_from_method=06016_W_‚®§¬®¦­®, ­¥¢¥à­ë© ¢ë§®¢ ª®­áâpyªâ®p  ¨«¨ ¤¥áâpyªâ®p 
+% Ž¡­ à㦥­ ¢ë§®¢ ª®­áâàãªâ®à  ¨«¨ ¤¥áâàãªâ®à  ¨§ ¬¥â®¤ . â®, ᪮॥ ¢á¥£®, ¯à¨¢¥¤¥â ª
+% ¯à®¡«¥¬ ¬, â.ª. ¤«ï ª®­áâàãªâ®à®¢/¤¥áâàãªâ®à®¢ âॡãîâáï ®á®¡ë¥ ¯ à ¬¥âàë.
cg_n_inefficient_code=06017_N_H¥íä䥪⨢­ë© ª®¤
-% You construction seems dubious to the compiler.
+%  ¯¨á ­­ ï ¢ ¬¨ ª®­áâàãªæ¨ï ª ¦¥âáï ª®¬¯¨«ïâ®à㠮祭ì ᮬ­¨â¥«ì­®©.
cg_w_unreachable_code=06018_W_H¥¤®á⨦¨¬ë© ª®¤
-% You specified a loop which will never be executed. Example:
+%  ¯¨á ­­ ï ª®­áâàãªæ¨ï ­¨ª®£¤  ­¥ ¡ã¤¥â ¢ë¯®«­¥­ . ਬ¥à:
% \begin{verbatim}
% while false do
% begin
% {.. code ...}
% end;
% \end{verbatim}
-cg_e_stackframe_with_esp=06019_E_‚ë§®¢ ¯p®æ¥¤ypë á STACKFRAME ESP/SP
-% The compiler encountered a procedure or function call inside a
-% procedure that uses a \var{ESP/SP} stackframe. Normally, when a call is
-% done the procedure needs a \var{EBP} stackframe.
-cg_e_cant_call_abstract_method=06020_E_€¡áâp ªâ­ë¥ ¬¥â®¤ë ­¥ ¬®£yâ ¢ë§ë¢ âìáï ­ ¯pï¬yî
-% You cannot call an abstract method directy, instead you must call a
-% overriding child method, because an abstract method isn't implemented.
-cg_f_internal_error_in_getfloatreg=06021_F_‚­yâp¥­­ïï ®è¨¡ª  ¢ getfloatreg(), p á¯p¥¤¥«¥­¨¥ ¯p®¢ «¥­®!
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-cg_f_unknown_float_type=06022_F_H¥¨§¢¥áâ­ë© ⨯ ¯« ¢ î饩 § ¯ï⮩
-% The compiler cannot determine the kind of float that occurs in an expression.
-cg_f_secondvecn_base_defined_twice=06023_F_SecondVecn() ¡ §  ®¯p¥¤¥«¥­  ¤¢ ¦¤ë
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-cg_f_extended_cg68k_not_supported=06024_F_ áè¨p¥­¨ï cg68k ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% The \var{extended} type is not supported on the m68k platform.
-cg_f_32bit_not_supported_in_68000=06025_F_¥§§­ ª®¢ë¥ 32-¡¨â­ë¥ ç¨á«  ­¥ ¯®¤¤¥p¦¨¢ îâáï ¢ MC680x0 p¥¦¨¬¥
-% The cardinal is not supported on the m68k platform.
-cg_f_internal_error_in_secondinline=06026_F_‚­yâp¥­­ïï ®è¨¡ª  ¢ secondinline()
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-cg_d_register_weight=06027_D_¥£¨áâp $1 ¢¥á¨â $2 $3
-% Debugging message. Shown when the compiler considers a variable for
-% keeping in the registers.
-cg_e_stacklimit_in_local_routine=06028_E_‹¨¬¨â á⥪  ¢ «®ª «ì­®© ¯®¤¯p®£p ¬¬¥ ¨áç¥p¯ ­
-% Your code requires a too big stack. Some operating systems pose limits
-% on the stack size. You should use less variables or try ro put large
-% variables on the heap.
-cg_d_stackframe_omited=06029_D_STACK FRAME ®¯y饭ë
-% Some procedure/functions do not need a complete stack-frame, so it is omitted.
-% This message will be displayed when the {-vd} switch is used.
-cg_e_unable_inline_object_methods=06031_E_‚ ®¡ê¥ªâ å ¨«¨ ª« áá å ­¥«ì§ï ¨á¯®«ì§®¢ âì INLINE
-% You cannot have inlined object methods.
-cg_e_unable_inline_procvar=06032_E_‚ ¢ë§®¢ å PROCVAR ­¥«ì§ï ¨á¯®«ì§®¢ âì INLINE
-% A procedure with a procedural variable call cannot be inlined.
-cg_e_no_code_for_inline_stored=06033_E_H¥â ª®¤  ¢ INLINE
-% The compiler couldn't store code for the inline procedure.
-cg_e_no_call_to_interrupt=06034_E_àאַ© ¢ë§®¢ ¯à®æ¥¤ãàë-¯à¥à뢠­¨ï $1 ­¥¢®§¬®¦¥­
-% You can not call an interrupt procedure directly from FPC code
-cg_e_can_access_element_zero=06035_E_Hy«¥¢®© í«¥¬¥­â ¤«¨­­®© áâp®ª¨ ­¥¤®áây¯¥­, ¨á¯®«ì§y©â¥ ¢¬¥áâ® í⮣® SETLENGTH ¨«¨ LENGTH
-% You should use \var{setlength} to set the length of an ansi/wide/longstring
-% and \var{length} to get the length of such kinf of string
-cg_e_include_not_implemented=06036_E_‚ª«î祭¨ï ¨ ¨áª«î祭¨ï ­¥ ¯®¤¤¥p¦¨¢ îâáï ¢ CASE
-% \var{include} and \var{exclude} are only partially
-% implemented for \var{i386} processors
-% and not at all for \var{m68k} processors.
-cg_e_cannot_call_cons_dest_inside_with=06037_E_Š®­áâpyªâ®pë ¨«¨ ¤¥áâpyªâ®pë ­¥ ¬®£yâ ¢ë§ë¢ âìáï ¢­yâp¨ 'WITH' ¯p¥¤«®¦¥­¨©
-% Inside a \var{With} clause you cannot call a constructor or destructor for the
-% object you have in the \var{with} clause.
-cg_e_cannot_call_message_direct=06038_E_H¥«ì§ï ¢ë§ë¢ âì ¬¥â®¤ ®¡p ¡®â稪  ᮡë⨩ ­¥¯®áp¥¤á⢥­­®
+cg_e_cant_call_abstract_method=06020_E_€¡áâp ªâ­ë¥ ¬¥â®¤ë ­¥«ì§ï ¢ë§ë¢ âì ­ ¯pï¬yî
+% €¡áâà ªâ­ë© ¬¥â®¤ ­¥«ì§ï ¢ë§¢ âì ­¥¯®á।á⢥­­®, ¢¬¥áâ® ­¥£® á«¥¤ã¥â ¢ë§ë¢ âì
+% ¯¥à¥ªà뢠î騩 ¬¥â®¤ ¯®â®¬ª , ¯®â®¬ã çâ®  ¡áâà ªâ­ë© ¬¥â®¤ ­¥ ¨¬¥¥â ॠ«¨§ æ¨¨.
+cg_d_register_weight=06027_DL_¥£¨áâp $1 ¢¥á $2 $3
+% Žâ« ¤®ç­®¥ á®®¡é¥­¨¥. ‚뢮¤¨âáï, ª®£¤  ª®¬¯¨«ïâ®à à áᬠâਢ ¥â ¢®§¬®¦­®áâì
+% à §¬¥é¥­¨ï ¯¥à¥¬¥­­ëå ¢ ॣ¨áâà å.
+cg_d_stackframe_omited=06029_DL_Š ¤à á⥪  ­¥ á®§¤ ­ (­¥ âॡã¥âáï)
+% ¥ª®â®àë¬ ¯à®æ¥¤ãà ¬/äã­ªæ¨ï¬ ­¥ âॡã¥âáï ¯®«­ë© ª ¤à á⥪ , ¨ ¥£® ¬®¦­® ®¯ãáâ¨âì.
+% ‘®®¡é¥­¨¥ ¢ë¢®¤¨âáï ¯à¨ ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vd}.
+cg_e_unable_inline_object_methods=06031_E_Œ¥â®¤ë ®¡ê¥ªâ å ¨«¨ ª« áᮢ ­¥ ¬®£ãâ ¡ëâì ¢áâà ¨¢ ¥¬ë¬¨ (inline)
+% Œ¥â®¤ë ®¡ê¥ªâ  ­¥«ì§ï ¢áâà ¨¢ âì.
+cg_e_unable_inline_procvar=06032_E_‚ë§®¢ë ¯à®æ¥¤ãà­ëå ¯¥à¥¬¥­­ëå ­¥ ¬®£ã£ ¡ëâì ¢áâà ¨¢ ¥¬ë¬¨ (inline)
+% ‚ë§®¢ ¯à®æ¥¤ãà­®© ¯¥à¥¬¥­­®© ­¥ ¬®¦¥â ¡ëâì ¢áâ஥­.
+cg_e_no_code_for_inline_stored=06033_E_H¥â ª®¤  ¤«ï inline
+% Š®¬¯¨«ïâ®à ­¥ ᬮ£ á®åà ­¨âì ª®¤ ¤«ï ¢áâà ¨¢ ¥¬®© ¯à®æ¥¤ãàë.
+cg_e_can_access_element_zero=06035_E_Hy«¥¢®© í«¥¬¥­â ansi/wide- áâp®ª¨ ­¥¤®áây¯¥­, ¨á¯®«ì§y©â¥ (set)length
+% „«ï ¨§¬¥­¥­¨ï ¤«¨­ë áâப¨ ⨯  ansi/wide/longstring á«¥¤ã¥â ¨á¯®«ì§®¢ âì
+% ¯à®æ¥¤ãàã \var{setlength},   ¤«ï ¯®«ã祭¨ï - äã­ªæ¨î \var{length}.
+cg_e_cannot_call_cons_dest_inside_with=06037_E_Š®­áâpyªâ®p ¨«¨ ¤¥áâpyªâ®p ­¥«ì§ï ¢ë§ë¢ âì ¢­yâp¨ ¢ëà ¦¥­¨© 'WITH'
+% ‚­ãâਠª®­áâàãªæ¨¨ \var{With} ¢ë§®¢ ª®­áâàãªâ®à  ¨«¨ ¤¥áâàãªâ®à  ¤«ï ®¡ê¥ªâ - à£ã¬¥­â 
+% \var{with} ­¥¢®§¬®¦¥­.
+cg_e_cannot_call_message_direct=06038_E_H¥¯®á।á⢥­­ë© ¢ë§®¢ ¬¥â®¤ -®¡p ¡®â稪  ᮡë⨩ ­¥¢®§¬®¦¥­
% A message method handler method can't be called directly if it contains an
% explicit self argument
-cg_e_goto_inout_of_exception_block=06039_E_¥à¥å®¤ §  ¢­¥è­îî áâ®à®­ã ¢ exception ¡«®ª¥
-% It isn't allowed to jump in or outside of an exception block like \var{try..finally..end;}:
+cg_e_goto_inout_of_exception_block=06039_E_¥à¥å®¤ ç¥à¥§ £à ­¨æã ¡«®ª  ¨áª«î祭¨©
+% ¥à¥å®¤ ¢­ãâàì ¡«®ª  ®¡à ¡®âª¨ ¨áª«î祭¨© \var{try..finally..end;} ¨«¨ ¨§ ­¥£® ­¥ ¤®¯ã᪠¥âáï:
% \begin{verbatim}
% label 1;
%
@@ -1377,641 +1644,1190 @@ cg_e_goto_inout_of_exception_block=06039_E_¥à¥å®¤ §  ¢­¥è­îî áâ®à®­ã ¢ exceptio
%
% try
% if not(final) then
-% goto 1; // this line will cause an error
+% goto 1; // ¢ í⮩ áâப¥ ¡ã¤¥â ®è¨¡ª 
% finally
% ...
% end;
% 1:
% ...
% \end{verbatim}
-% \end{description}
-cg_e_control_flow_outside_finally=06040_E_Š®­â஫¨àãî騥 ¢ëà ¦¥­¨ï (break,continue ¨ exit) ¢ ¡«®ª¥ finally - ­¥¤®¯ãá⨬ë
-% It isn't allowed to use the control flow statements \var{break},
-% \var{continue} and \var{exit}
-% inside a finally statement. The following example shows the problem:
+cg_e_control_flow_outside_finally=06040_E_“¯à ¢«ïî騥 ¢ëà ¦¥­¨ï (break, continue ¨ exit) ­¥¤®¯ãáâ¨¬ë ¢ ¡«®ª¥ finally
+% ˆá¯®«ì§®¢ ­¨¥ ¢ëà ¦¥­¨©, ¨§¬¥­ïîé¨å 室 ¢ë¯®«­¥­¨ï (\var{break},
+% \var{continue} ¨ \var{exit}), ­¥ ¤®¯ã᪠¥âáï
+% ¢­ãâਠ¡«®ª  finally. ‘«¥¤ãî騩 ª®¤ ¢ë§®¢¥â ®è¨¡ªã:
% \begin{verbatim}
% ...
% try
% p;
% finally
% ...
-% exit; // This exit ISN'T allowed
+% exit; // â®â exit ­¥¤®¯ãá⨬
% end;
% ...
%
% \end{verbatim}
-% If the procedure \var{p} raises an exception the finally block is
-% executed. If the execution reaches the exit, it's unclear what to do:
-% exiting the procedure or searching for another exception handler
+% …᫨ ¯à¨ ¢ë¯®«­¥­¨¨ ¯à®æ¥¤ãà  \var{p} ¯à®¨á室¨â ¨áª«î祭¨¥, ¢ë¯®«­ï¥âáï ¡«®ª
+% finally. …᫨ ¢ë¯®«­¥­¨¥ ¤®å®¤¨â ¤® exit, ­¥¯®­ïâ­® çâ® ¤¥« âì:
+% ¢ë室¨âì ¨§ ¯à®æ¥¤ãਠ¨«¨ ¨áª âì ¤à㣮© ®¡à ¡®â稪 ¨áª«î祭¨©.
+cg_w_parasize_too_big=06041_W_ §¬¥à ¯ à ¬¥â஢ ¯à¥¢ë蠥⠯।¥« ¤«ï ­¥ª®â®àëå ¯à®æ¥áá®à®¢
+% ާ­ ç ¥â, çâ® ¡ë«® ®¡ê¥­® ¡®«¥¥ 64 ª ©â ¯ à ¬¥â஢, çâ®
+% ¬®¦¥â ­¥ ¯®¤¤¥à¦¨¢ âìáï ¯à¨ ª®¬¯¨«ï樨 ¤«ï ¤àã£¨å ¯« âä®à¬.
+cg_w_localsize_too_big=06042_W_ §¬¥à «®ª «ì­ëå ¯¥à¥¬¥­­ëå ¯à¥¢ë蠥⠯।¥« ¤«ï ­¥ª®â®àëå ¯à®æ¥áá®à®¢
+% ާ­ ç ¥â, çâ® ¡ë«® ®¡ê¥­® ¡®«¥¥ 32 ª ©â «®ª «ì­ëå ¯¥à¥¬¥­­ëå, çâ®
+% ¬®¦¥â ­¥ ¯®¤¤¥à¦¨¢ âìáï ¯à¨ ª®¬¯¨«ï樨 ¤«ï ¤àã£¨å ¯« âä®à¬.
+cg_e_localsize_too_big=06043_E_ §¬¥à «®ª «ì­ëå ¯¥à¥¬¥­­ëå ¯à¥¢ë蠥⠤®¯ãáâ¨¬ë© ¯à¥¤¥«
+% ާ­ ç ¥â, çâ® ®¡ê¥­® ¡®«¥¥ 32 ª ©â «®ª «ì­ëå ¯¥à¥¬¥­­ëå, çâ®
+% ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®£® ¯à®æ¥áá®à .
+cg_e_break_not_allowed=06044_E_BREAK ­¥¤®¯ãá⨬®
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï \var{break} ¢­¥ ª®­áâàãªæ¨¨ 横« .
+cg_e_continue_not_allowed=06045_E_CONTINUE ­¥¤®¯ãá⨬®
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï \var{continue} ¢­¥ ª®­áâàãªæ¨¨ 横« .
+cg_f_unknown_compilerproc=06046_F_¥¨§¢¥áâ­ ï ¢­ãâ७­ïï ¯à®æ¥¤ãà  "$1". ஢¥àì⥠¢¥àá¨î ¡¨¡«¨®â¥ª¨ RTL.
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â, çâ® ¡¨¡«¨®â¥ª  ¢à¥¬¥­¨ ¢ë¯®«­¥­¨ï (RTL) ᮤ¥à¦¨â ®¯à¥¤¥«¥­­ë¥ ¯à®æ¥¤ãàë. …᫨
+% ¢ë ¢¨¤¨â¥ íâ® á®®¡é¥­¨¥, ­¥ § ­¨¬ ïáì á ¬®áâ®ï⥫쭮© ¬®¤¨ä¨ª æ¨¥© ª®¤  ¡¨¡«¨®â¥ª¨ RTL, â®, ᪮॥
+% ¢á¥£®, ¨á¯®«ì§ã¥¬ ï ¡¨¡«¨®â¥ª  RTL ­¥ ᮮ⢥âáâ¢ã¥â ª®¬¯¨«ïâ®àã. …᫨ ¦¥ ¢ë ¬®¤¨ä¨æ¨à®¢ «¨ RTL, §­ ç¨â,
+% ¢ë 㤠«¨«¨ ¯à®æ¥¤ãàã, ª®â®à ï ­ã¦­  ª®¬¯¨«ïâ®àã ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï.
+cg_f_unknown_system_type=06047_F_¥ ­ ©¤¥­ á¨á⥬­ë© ⨯ "$1". ஢¥àì⥠¢¥àá¨î ¡¨¡«¨®â¥ª¨ RTL.
+% Š®¬¯¨«ïâ®à ®¦¨¤ ¥â, çâ® ¡¨¡«¨®â¥ª  ¢à¥¬¥­¨ ¢ë¯®«­¥­¨ï (RTL) ᮤ¥à¦¨â ®¯à¥¤¥«¥­­ë¥ ®¡ê¥­¨ï
+% ⨯®¢. …᫨ ¢ë ¢¨¤¨â¥ íâ® á®®¡é¥­¨¥, ­¥ § ­¨¬ ïáì á ¬®áâ®ï⥫쭮© ¬®¤¨ä¨ª æ¨¥© ª®¤  ¡¨¡«¨®â¥ª¨ RTL, â®,
+% ᪮॥ ¢á¥£®, ¨á¯®«ì§ã¥¬ ï ¡¨¡«¨®â¥ª  RTL ­¥ ᮮ⢥âáâ¢ã¥â ª®¬¯¨«ïâ®àã. …᫨ ¦¥ ¢ë ¬®¤¨ä¨æ¨à®¢ «¨ RTL,
+% §­ ç¨â, ¢ë 㤠«¨«¨ ⨯, ­ã¦­ë© ª®¬¯¨«ïâ®àã ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï.
+cg_h_inherited_ignored=06048_H_‚ë§®¢  ¡áâࠪ⭮£® ¬¥â®¤  ¯®á।á⢮¬ inherited ¨£­®à¨à®¢ ­
+% ‘®®¡é¥­¨¥ ¢ë¤ ¥âáï ⮫쪮 ¢ ०¨¬¥ Delphi, ¯à¨ ¯®¯ë⪥ ¢ë§¢ âì  ¡áâà ªâ­ë© ¬¥â®¤
+% த¨â¥«ì᪮£® ª« áá  á ¯®¬®éìî \var{inherited;}. ’ ª®© ¢ë§®¢ ¨£­®à¨àã¥âáï.
+cg_e_goto_label_not_found=06049_E_Œ¥âª  "$1" ­¥ ®¯à¥¤¥«¥­  ¨«¨ 㤠«¥­  ®¯â¨¬¨§ æ¨¥©
+% Œ¥âª , ¨á¯®«ì§®¢ ­­ ï ¢ goto, ­¥ ®¯à¥¤¥«¥­  «¨¡® ¡ë«  㤠«¥­  ¯à¨ 㤠«¥­¨¨
+% ­¥¤®áâ㯭®£® ª®¤ .
+% \end{description}
# EndOfTeX
#
# Assembler reader
#
-asmr_d_start_reading=07000_D_H ç¨­ ¥¬ ç¨â âì $1 áâ¨«ì  áᥬ¡«¥p 
-% This informs you that an assembler block is being parsed
-asmr_d_finish_reading=07001_D_Š®­¥æ ç⥭¨ï $1 áâ¨«ï  áᥬ¡«¥p 
-% This informs you that an assembler block has finished.
-asmr_e_none_label_contain_at=07002_E_—â®-â®, ­® ­¥ ¬¥âª , ᮤ¥p¦¨â @
-% A identifier which isn't a label can't contain a @.
-asmr_w_override_op_not_supported=07003_W_¥p¥®¯p¥¤¥«¥­­ë¥ ®¯¥p â®pë ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% The Override operator is not supported
+# 07107 is the last used one
+#
+asmr_d_start_reading=07000_DL_H ç «® ç⥭¨ï  áᥬ¡«¥p  ⨯  $1
+% ˆ­ä®à¬¨àã¥â ® ­ ç «¥ ç⥭¨ï  áᥬ¡«¥à­®£® ¡«®ª .
+asmr_d_finish_reading=07001_DL_Š®­¥æ ç⥭¨ï  áᥬ¡«¥p  ⨯  $1
+% ˆ­ä®à¬¨àã¥â ® § ¢¥à襭¨¨ ç⥭¨ï  áᥬ¡«¥à­®£® ¡«®ª .
+asmr_e_none_label_contain_at=07002_E_’®ª¥­, ­¥ ïî騩áï ¬¥âª®©, ᮤ¥p¦¨â @
+% ˆ¤¥­â¨ä¨ª â®à, ­¥ ïî騩áï ¬¥âª®©, ­¥ ¬®¦¥â ᮤ¥à¦ âì ᨬ¢®« @.
asmr_e_building_record_offset=07004_E_Žè¨¡ª  ¯®áâp®¥­¨ï ᬥ饭¨ï ¢ § ¯¨á¨
-% There has an error occured while building the offset of a record/object
-% structure, this can happend when there is no field specified at all or
-% an unknown field identifier is used.
-asmr_e_offset_without_identifier=07005_E_OFFSET ¨á¯®«ì§y¥âáï ¡¥§ ¨¤¥­â¨ä¨ª â®p 
-% You can only use OFFSET with an identifier. Other syntaxes aren't
-% supported
-asmr_e_type_without_identifier=07006_E_TYPE ¨á¯®«ì§y¥âáï ¡¥§ ¨¤¥­â¨ä¨ª â®p 
-% You can only use TYPE with an identifier. Other syntaxes aren't
-% supported
-asmr_e_no_local_or_para_allowed=07007_E_H¥ ¬®£y §¤¥áì ¨á¯®«ì§®¢ âì «®ª «ì­ë¥ ¯¥p¥¬¥­­ë¥ ¨«¨ ¯ p ¬¥âpë
-% You can't use a local variable or parameter here, mostly because the
-% addressing of locals and parameters is done using the %ebp register so the
-% address can't be get directly.
+% Žè¨¡ª  ¢ëç¨á«¥­¨ï ᬥ饭¨ï ¢ § ¯¨á¨/®¡ê¥ªâ¥, ¬®¦¥â ¯à®¨á室¨âì, ¥á«¨
+% ¯®«¥ ­¥ 㪠§ ­® ¢®®¡é¥ ¨«¨ ¨á¯®«ì§®¢ ­ ­¥¨§¢¥áâ­ë© ¨¤¥­â¨ä¨ª â®à ¯®«ï.
+asmr_e_offset_without_identifier=07005_E_ˆá¯®«ì§®¢ ­¨¥ OFFSET ¡¥§ ¨¤¥­â¨ä¨ª â®p 
+% Š«î祢®¥ á«®¢® OFFSET ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ᮢ¬¥áâ­® á ¨¤¥­â¨ä¨ª â®à®¬.
+% „à㣨¥ ᨭ⠪á¨áë ­¥ ¯®¤¤¥à¦¨¢ îâáï.
+asmr_e_type_without_identifier=07006_E_ˆá¯®«ì§®¢ ­¨¥ TYPE ¡¥§ ¨¤¥­â¨ä¨ª â®p 
+% Š«î祢®¥ á«®¢® TYPE ¬®¦­® ¨á¯®«ì§®¢ âì ⮫쪮 ᮢ¬¥áâ­® á ¨¤¥­â¨ä¨ª â®à®¬.
+% „à㣨¥ ᨭ⠪á¨áë ­¥ ¯®¤¤¥à¦¨¢ îâáï.
+asmr_e_no_local_or_para_allowed=07007_E_‡¤¥áì ­¥«ì§ï ¨á¯®«ì§®¢ âì «®ª «ì­ë¥ ¯¥p¥¬¥­­ë¥ ¨«¨ ¯ p ¬¥âpë
+% ‹®ª «ì­ë¥ ¯¥à¥¬¥­­ë¥ ¨ ¯ à ¬¥âàë ®¡ëç­®  ¤à¥áãîâáï ª ª ᬥ饭¨¥ ®â ॣ¨áâà 
+% %ebp, ¯®íâ®¬ã ¨å  ¤à¥á ­¥ ¬®¦¥â ¡ëâì ¯®«ã祭 ­¥¯®á।á⢥­­®.
asmr_e_need_offset=07008_E_‡¤¥áì ­¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì OFFSET
-% You need to use OFFSET <id> here to get the address of the identifier.
+% „«ï ¯®«ã祭¨ï  ¤à¥á  ¤ ­­®£® ¨¤¥­â¨ä¨ª â®à  ­¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì OFFSET <id>.
asmr_e_need_dollar=07009_E_‡¤¥áì ­¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì §­ ª ¤®«« à  ('$')
-% You need to use $<id> here to get the address of the identifier.
-asmr_e_cant_have_multiple_relocatable_symbols=07010_E_H¥ ¬®£y ¨á¯®«ì§®¢ âì ¬­®¦¥á⢥­­ë¥ ¯¥p¥¬¥é ¥¬ë¥ ᨬ¢®«ë
-% You can't have more than one relocatable symbol (variable/typed constant)
-% in one argument.
-asmr_e_only_add_relocatable_symbol=07011_E_¥p¥¬¥é ¥¬ë© ᨬ¢®« ¬®¦¥â ¡ëâì ⮫쪮 ¤®¡ ¢«¥­
-% Relocatable symbols (variable/typed constant) can't be used with other
-% operators. Only addition is allowed.
-asmr_e_invalid_constant_expression=07012_E_H¥¯p ¢¨«ì­®¥ ¢ëp ¦¥­¨¥ ¢ ª®­áâ ­â¥
-% There is an error in the constant expression.
-asmr_e_relocatable_symbol_not_allowed=07013_E_¥p¥¬¥é ¥¬ë¥ ᨬ¢®«ë §¤¥áì ­¥ p §p¥è¥­ë
-% You can't use a relocatable symbol (variable/typed constant) here.
+% „«ï ¯®«ã祭¨ï  ¤à¥á  ¤ ­­®£® ¨¤¥­¨ä¨ª â®à  ­¥®¡å®¤¨¬® ¨á¯®«ì§®¢ âì $<id>.
+asmr_e_cant_have_multiple_relocatable_symbols=07010_E_H¥ ¤®¯ã᪠îâáï ¬­®¦¥á⢥­­ë¥ ¯¥p¥¬¥é ¥¬ë¥ ᨬ¢®«ë
+% ¥ ¤®¯ã᪠¥âáï ¡®«¥¥ ®¤­®£® ¯¥à¥¬¥é ¥¬®£® ᨬ¢®«  (¯¥à¥¬¥­­ ï/⨯¨§¨à®¢ ­­ ï ª®­áâ ­â )
+% ¢ ®¤­®¬  à£ã¬¥­â¥.
+asmr_e_only_add_relocatable_symbol=07011_E_¥p¥¬¥é ¥¬ë© ᨬ¢®« ¤®¯ã᪠¥â ⮫쪮 á«®¦¥­¨¥
+% ¥à¥¬¥é ¥¬ë¥ ᨬ¢®«ë (¯¥à¥¬¥­­ë¥/⨯¨§¨à®¢ ­­ë¥ ª®­áâ ­âë) ­¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ­ë á ¤à㣨¬¨
+% ®¯¥à â®à ¬¨. „®¯ã᪠¥âáï ⮫쪮 á«®¦¥­¨¥.
+asmr_e_invalid_constant_expression=07012_E_H¥¢¥à­®¥ ª®­áâ ­â­®¥ ¢ëp ¦¥­¨¥
+% Žè¨¡ª  ¢ ª®­áâ ­â­®¬ ¢ëà ¦¥­¨¨.
+asmr_e_relocatable_symbol_not_allowed=07013_E_¥p¥¬¥é ¥¬ë© ᨬ¢®« §¤¥áì ­¥ p §p¥è¥­
+% ‚ ¤ ­­®¬ ¬¥á⥠­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ ¯¥à¥¬¥é ¥¬ë© ᨬ¢®« (¯¥à¥¬¥­­ ï/⨯¨§¨à®¢ ­­ ï ª®­áâ ­â ).
asmr_e_invalid_reference_syntax=07014_E_H¥¢¥p­ë© ᨭ⠪á¨á áá뫪¨
-% There is an error in the reference.
-asmr_e_local_para_unreachable=07015_E_‚ë ­¥ ¬®¦¥â¥ ¤®áâ¨çì $1 ¨§ í⮣® ª®¤ 
-% You can not read directly the value of local or para
-% of a higher level in assembler code (except for
-% local assembler code without parameter nor locals).
+% ‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¢ § ¯¨á¨ áá뫪¨.
+asmr_e_local_para_unreachable=07015_E_$1 ­¥¤®áâ㯭® ¨§ í⮣® ª®¤ 
+% ‚® ¢«®¦¥­­®© ¯à®æ¥¤ãॠ­¥¢®§¬®¦¥­ ¯àאַ© ¤®áâ㯠ª §­ ç¥­ï¬ «®ª «ì­ëå ¯¥à¥¬¥­­ëå ¨«¨ ¯ à ¬¥â஢
+% ¢­¥è­¥© ¯à®æ¥¤ãàë (ªà®¬¥ á«ãç ï, ª®£¤  ¢«®¦¥­­ ï ¯à®æ¥¤ãà  á ¬  ­¥ ¨¬¥¥â ¯ à ¬¥â஢ ¨ «®ª «ì­ëå
+% ¯¥à¥¬¥­­ëå).
asmr_e_local_label_not_allowed_as_ref=07016_E_‹®ª «ì­ë¥ ᨬ¢®«ë ¨«¨ ¬¥âª¨ ­¥«ì§ï ¨á¯®«ì§®¢ âì ª ª áá뫪¨
% ‚ë ­¥ ¬®¦¥â¥ ¨á¯®«ì§®¢ âì «®ª «ì­ë¥ ᨬ¢®«ë ¨«¨ ¬¥âª¨ ª ª áá뫪¨
-asmr_e_wrong_base_index=07017_E_H¥¢¥p­ ï ¡ §  ¨ ¨­¤¥ªá ¢ ¨á¯®«ì§®¢ ­¨¨ p¥£¨áâp 
-% There is an error with the base and index register
-asmr_w_possible_object_field_bug=07018_W_‚®§¬®¦­ ï ®è¨¡ª  ¢ ã¯à ¢«¥­¨¨ ¯®«ï ®¡ê¥ªâ 
-% Fields of objects or classes can be reached directly in normal or objfpc
-% modes but TP and Delphi modes treat the field name as a simple offset.
-asmr_e_wrong_scale_factor=07019_E_H¥¢¥p­ë© ¬ èâ ¡ ä ªâ®p  (?ª®íä䍿¨¥­â ‹ ¬¥? :-&)
-% The scale factor given is wrong, only 1,2,4 and 8 are allowed
-asmr_e_multiple_index=07020_E_Œ­®¦¥á⢥­­®¥ ¨á¯®«ì§®¢ ­¨¥ ¨­¤¥ªá  p¥£¨áâp 
-% You are trying to use more than one index register
+asmr_e_wrong_base_index=07017_E_H¥¢¥p­®¥ ¨á¯®«ì§®¢ ­¨¥ ॣ¨áâ஢ ¡ §ë ¨ ¨­¤¥ªá 
+% Žè¨¡ª  ¯à¨ ¨á¯®«ì§®¢ ­¨¨ ॣ¨áâ஢ ¡ §ë ¨ ¨­¤¥ªá 
+asmr_w_possible_object_field_bug=07018_W_‚®§¬®¦­ ï ®è¨¡ª  ¢ ®¡à ¡®âª¥ ¯®«ï ®¡ê¥ªâ 
+% ®«ï ª« áᮢ/®¡ê¥ªâ®¢ ­¥¤®áâã¯­ë ­ ¯àï¬ãî ¢ ०¨¬ å fpc ¨ objfpc,
+% ­® ¢ ०¨¬ å TP ¨ Delphi ¨¬¥­  ¯®«¥© ®¡à ¡ â뢠îâáï ª ª ®¡ëç­ë¥ ᬥ饭¨ï.
+asmr_e_wrong_scale_factor=07019_E_H¥¢¥p­ë© ¬­®¦¨â¥«ì
+% “ª § ­ ­¥¢¥à­ë© ¬­®¦¨â¥«ì, à §à¥è¥­ë ⮫쪮 §­ ç¥­¨ï 1,2,4 ¨ 8
+asmr_e_multiple_index=07020_E_Œ­®¦¥á⢥­­®¥ ¨á¯®«ì§®¢ ­¨¥ ¨­¤¥ªá­®£® p¥£¨áâp 
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï ¡®«¥¥ 祬 ®¤­®£® ¨­¤¥ªá­®£® ॣ¨áâà .
asmr_e_invalid_operand_type=07021_E_H¥¢¥p­ë© ⨯ ®¯¥p ­¤ 
-% The operand type doesn't match with the opcode used
-asmr_e_invalid_string_as_opcode_operand=07022_E_H¥¢¥p­ ï áâp®ª , ª ª ®¯¥p ­¤ ª®¤  ®¯¥p æ¨¨: $1
-% The string specified as operand is not correct with this opcode
+% ’¨¯ ®¯¥à ­¤  ­¥ ᮮ⢥âáâ¢ã¥â ª®¤ã ª®¬ ­¤ë.
+asmr_e_invalid_string_as_opcode_operand=07022_E_‘âp®ª  ­¥¯à¨£®¤­  ¢ ª ç¥á⢥ ®¯¥p ­¤  ¨­áâàãªæ¨¨: $1
+% ‘âப , 㪠§ ­­ ï ª ª ®¯¥à ­¤, ­¥ª®à४⭠ ¤«ï ¤ ­­®© ª®¬ ­¤ë.
asmr_w_CODE_and_DATA_not_supported=07023_W_@CODE ¨ @DATA ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% @CODE and @DATA are unsupported and are ignored.
-asmr_e_null_label_ref_not_allowed=07024_E_yáâë¥ áá뫪¨ ¬¥â®ª ­¥ p §p¥è¥­ë
-asmr_e_expr_zero_divide=07025_E_„¥«¥­¨¥ ­  ­®«ì ¢ ¢ëà ¦¥­¨¨
+% @CODE ¨ @DATA ­¥ ¯®¤¤¥à¦¨¢ îâáï ¨ ¨£­®à¨àãîâáï.
+asmr_e_null_label_ref_not_allowed=07024_E_‘á뫪¨ ­  ¡¥§ë¬ï­­ë¥ ¬¥âª¨ ­¥ ¤®¯ã᪠îâáï
+asmr_e_expr_zero_divide=07025_E_„¥«¥­¨¥ ­  ­®«ì ¢ ¢ëà ¦¥­¨¨  áᥬ¡«¥à 
+% ‚ ª®­áâ ­â­®¬ ¢ëà ¦¥­¨¨ ᮤ¥à¦¨âáï ¤¥«¥­¨¥ ­  ­®«ì
asmr_e_expr_illegal=07026_E_¥¢¥à­®¥ ¢ëà ¦¥­¨¥
-asmr_e_escape_seq_ignored=07027_E_Esc-¯®á«¥¤®¢ â¥«ì­®áâì ¨£­®p¨py¥âáï: $1
+% Š®­áâ ­â­®¥ ¢ëà ¦¥­¨¥ ­¥¢¥à­®
+asmr_e_escape_seq_ignored=07027_E_Escape-¯®á«¥¤®¢ â¥«ì­®áâì ¨£­®p¨p®¢ ­ : $1
+% ‚ áâப¥ á⨫ï ï§ëª  C ᮤ¥à¦¨âáï ­¥¨§¢¥áâ­ ï escape-¯®á«¥¤®¢ â¥«ì­®áâì,
+% ª®â®à ï ¨£­®à¨àã¥âáï.
asmr_e_invalid_symbol_ref=07028_E_H¥¢¥p­ ï áá뫪  ­  ᨬ¢®«
asmr_w_fwait_emu_prob=07029_W_FWAIT ¬®¦¥â ¢ë§¢ âì ¯p®¡«¥¬ë í¬y«ï樨 á EMU387
asmr_w_fadd_to_faddp=07030_W_$1 ¡¥§ ®¯¥à ­¤  â࠭᫨àã¥âáï ¢ $1P
-asmr_w_enter_not_supported_by_linux=07031_W_ENTER ¨­áâàãªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¢ Linux kernel
-% ENTER instruction can generate a stack page fault that is not
-% caught correctly by the i386 Linux page handler.
+asmr_w_enter_not_supported_by_linux=07031_W_ˆ­áâàãªæ¨ï ENTER ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ï¤à®¬ Linux
+% ˆ­áâàãªæ¨ï ENTER ¬®¦¥â ¯à¨¢¥á⨠ª ®è¨¡ª¥ § é¨âë áâà ­¨æë á⥪ , ª®â®à ï ­¥ª®à४⭮
+% "«®¢¨âáï" ®¡à ¡®â稪®¬ ¢ i386 Linux.
asmr_w_calling_overload_func=07032_W_‚ë§®¢ ¯¥p¥£py¦¥­­®© äy­ªæ¨¨ ¢  áᥬ¡«¥p¥
-asmr_e_unsupported_symbol_type=07033_E_H¥ ¯®¤¤¥p¦¨¢ ¥¬ë© ⨯ ᨬ¢®«  ¢ ®¯¥p ­¤¥
-asmr_e_constant_out_of_bounds=07034_E_®áâ®ï­­®¥ §­ ç¥­¨¥ ¢­¥ £p ­¨æ
-asmr_e_error_converting_decimal=07035_E_Žè¨¡ª  ¯p¨ ¯p¥®¡p §®¢ ­¨¨ ¤¥áïâ¨ç­®£® ç¨á«  $1
-asmr_e_error_converting_octal=07036_E_Žè¨¡ª  ¯p¨ ¯p¥®¡p §®¢ ­¨¨ ¢®á¬¥p¨ç­®£® ç¨á«  $1
-asmr_e_error_converting_binary=07037_E_Žè¨¡ª  ¯p¨ ¯p¥®¡p §®¢ ­¨¨ ¤¢®¨ç­®£® ç¨á«  $1
-asmr_e_error_converting_hexadecimal=07038_E_Žè¨¡ª  ¯p¨ ¯p¥®¡p §®¢ ­¨¨ è¥áâ­ ¤æ â¥p¨ç­®£® ç¨á«  $1
+% ‚ë§®¢ ¯¥à¥£à㦥­­®© ä㭪樨 ¨§  áᥬ¡«¥à­®£® ¡«®ª ,
+% ª ª ¯à ¢¨«®, ï¥âáï ¯à¨§­ ª®¬ ¯à®¡«¥¬ë.
+asmr_e_unsupported_symbol_type=07033_E_H¥ ¯®¤¤¥p¦¨¢ ¥¬ë© ⨯ ᨬ¢®«  ¤«ï ®¯¥p ­¤ 
+asmr_e_constant_out_of_bounds=07034_E_‡­ ç¥­¨¥ ª®­áâ ­âë ¢­¥ ¤¨ ¯ §®­ 
+asmr_e_error_converting_decimal=07035_E_"$1" ­¥ ï¥âáï ¤¥áïâ¨ç­ë¬ ç¨á«®¬
+% ¥¢¥à­ë© ᨭ⠪á¨á ¤¥áïâ¨ç­®£® ç¨á« .
+asmr_e_error_converting_octal=07036_E_"$1" ­¥ ï¥âáï ¢®á쬥p¨ç­ë¬ ç¨á«®¬
+% ¥¢¥à­ë© ᨭ⠪á¨á ¢®á쬥à¨ç­®£® ç¨á« .
+asmr_e_error_converting_binary=07037_E_"$1" ­¥ ï¥âáï ¤¢®¨ç­ë¬ ç¨á«®¬
+% ¥¢¥à­ë© ᨭ⠪á¨á ¤¢®¨ç­®£® ç¨á« .
+asmr_e_error_converting_hexadecimal=07038_E_"$1" ­¥ ï¥âáï è¥áâ­ ¤æ â¥p¨ç­ë¬ ç¨á«®¬
+% ¥¢¥à­ë© ᨭ⠪á¨á è¥áâ­ ¤æ â¥à¨ç­®£® ç¨á« .
asmr_h_direct_global_to_mangled=07039_H_$1 ¯p¥®¡p §®¢ ­® ¢ $2
-asmr_w_direct_global_is_overloaded_func=07040_W_$1 á¢ï§ ­ á ¯¥p¥£py¦¥­­®© äy­ªæ¨¥©
-asmr_e_cannot_use_SELF_outside_a_method=07041_E_H¥ ¬®£y ¨á¯®«ì§®¢ âì SELF ¢­¥ ¬¥â®¤ 
-asmr_e_cannot_use_OLDEBP_outside_nested_procedure=07042_E_H¥ ¬®£y ¨á¯®«ì§®¢ âì __OLDEBP ¢­¥ ¢«®¦¥­­®© ¯p®æ¥¤ypë
-asmr_e_void_function=07043_W_”y­ªæ¨ï ª®â®p ï ®¯p¥¤¥«¥­  ª ª '­¥ ¢®§p é îé ï §­ ç¥­¨©' ­¥ ¬®¦¥â ¨å ¢®§¢p é âì
+asmr_w_direct_global_is_overloaded_func=07040_W_$1 á¢ï§ ­® á ¯¥p¥£py¦¥­­®© äy­ªæ¨¥©
+asmr_e_cannot_use_SELF_outside_a_method=07041_E_H¥ ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ­¨¥ SELF ¢­¥ ¬¥â®¤ 
+% ¥¤®¯ãá⨬ ï áá뫪  ­  ᨬ¢®« \var{self}.
+%   \var{self} ¬®¦­® ááë« âìáï ⮫쪮 ¢ ¬¥â®¤ å.
+asmr_e_cannot_use_OLDEBP_outside_nested_procedure=07042_E_H¥ ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ­¨¥ OLDEBP ¢­¥ ¢«®¦¥­­®© ¯p®æ¥¤ypë
+% ¥¤®¯ãá⨬ ï áá뫪  ­  ᨬ¢®« \var{oldebp}.
+%   \var{oldebp} ¬®¦­® ááë« âìáï ⮫쪮 ¢® ¢«®¦¥­­ëå ¯à®æ¥¤ãà å.
+asmr_e_void_function=07043_W_஥楤ãàë ­¥ ¬®£ãâ ¢®§¢p é âì §­ ç¥­¨ï ¨§  áᥬ¡«¥à­®£® ª®¤ 
+% ®¯ë⪠ ¢¥à­ãâì §­ ç¥­¨¥ ¨§ ¯à®æ¥¤ãàë. à®æ¥¤ãà  ­¥ ¬®¦¥â ¢®§¢à é âì §­ ç¥­¨ï.
asmr_e_SEG_not_supported=07044_E_SEG ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-asmr_e_size_suffix_and_dest_dont_match=07045_E_‘yä䨪á p §¬¥p  ¨  ¤p¥á â ¨«¨ ¨á室­ë© p §¬¥p ­¥ ᮮ⢥âáâ¢yîâ
-asmr_w_size_suffix_and_dest_dont_match=07046_W_‘yä䨪á p §¬¥p  ¨  ¤p¥á â ¨«¨ ¨á室­ë© p §¬¥p ­¥ ᮮ⢥âáâ¢yîâ
-asmr_e_syntax_error=07047_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¯à¨  áᥬ¡«¨à®¢ ­¨¨
-asmr_e_invalid_opcode_and_operand=07048_E_H¥¢¥p­ ï ª®¬¡¨­ æ¨ï ª®¤  ®¯¥p æ¨¨ ¨ ®¯¥p ­¤®¢
-asmr_e_syn_operand=07049_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¢ ®¯¥p ­¤¥ ¯à¨  áᥬ¡«¨à®¢ ­¨¨
-asmr_e_syn_constant=07050_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¢ ª®­á⠭⥠¯à¨  áᥬ¡«¨à®¢ ­¨¨
+asmr_e_size_suffix_and_dest_dont_match=07045_E_‘yä䨪á p §¬¥p  ­¥ ᮮ⢥âáâ¢ã¥â à §¬¥àã ®¯¥à ­¤®¢
+%  §¬¥à ॣ¨áâà  ¨ áãä䨪á à §¬¥à  ¢ ª®¤¥ ª®¬ ­¤ë ­¥ ᮮ⢥âá¢ãîâ. ‘ª®à¥¥ ¢á¥£®,
+% ª®¬ ­¤   áᥬ¡«¥à  § ¯¨á ­  á ®è¨¡ª®©.
+asmr_w_size_suffix_and_dest_dont_match=07046_W_‘yä䨪á p §¬¥p  ­¥ ᮮ⢥âáâ¢ã¥â à §¬¥àã ®¯¥à ­¤®¢
+%  §¬¥à ॣ¨áâà  ¨ áãä䨪á à §¬¥à  ¢ ª®¤¥ ª®¬ ­¤ë ­¥ ᮮ⢥âá¢ãîâ. ‘ª®à¥¥ ¢á¥£®,
+% ª®¬ ­¤   áᥬ¡«¥à  § ¯¨á ­  á ®è¨¡ª®©.
+asmr_e_syntax_error=07047_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª   áᥬ¡«¥à 
+% ‘¨­â ªá¨ç¥áª ï ®è¨¡ª   áᥬ¡«¥à 
+asmr_e_invalid_opcode_and_operand=07048_E_H¥¢¥p­ ï ª®¬¡¨­ æ¨ï ª®¬ ­¤ë ¨ ®¯¥p ­¤®¢
+% „ ­­ ï ª®¬ ­¤  ­¥ ¬®¦¥â ¨¬¥âì ®¯¥à ­¤ë ¤ ­­®£® ⨯ .
+asmr_e_syn_operand=07049_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª   áᥬ¡«¥à  ¢ ®¯¥p ­¤¥
+asmr_e_syn_constant=07050_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª   áᥬ¡«¥à  ¢ ª®­áâ ­â¥
asmr_e_invalid_string_expression=07051_E_H¥¢¥p­®¥ áâp®ª®¢®¥ ¢ëp ¦¥­¨¥
-asmr_w_const32bit_for_address=07052_W_ª®­áâ ­â  á ᨬ¢®«®¬ $1 ­¥ ¤«ï 32bit  ¤à¥á 
-asmr_e_unknown_opcode=07053_E_¥¨§¢¥áâ­ë© opcode $1
-asmr_e_invalid_or_missing_opcode=07054_E_H¥¢¥p­ ï ¨«¨ ¯p®¯y饭­ ï ª®¬ ­¤ 
-asmr_e_invalid_prefix_and_opcode=07055_E_H¥¢¥p­ ï ª®¬¡¨­ æ¨ï ¯p¥ä¨ªá  ¨ ª®¬ ­¤ë: $1
-asmr_e_invalid_override_and_opcode=07056_E_H¥¢¥p­ ï ª®¬¡¨­ æ¨ï ¯¥p¥®¯p¥¤¥«¥­¨ï ¨ ª®¬ ­¤ë: $1
+asmr_w_const32bit_for_address=07052_W_ª®­áâ ­â  á ᨬ¢®«®¬ $1 ¤«ï  ¤à¥á , à §¬¥à ª®â®à®£® ®â«¨ç ¥âáï ®â 㪠§ â¥«ï
+% Š®­áâ ­â­®¥ ¢ëà ¦¥­¨¥, ¯à¥¤áâ ¢«ïî饥  ¤à¥á, ­¥ 㬥頥âáï ¢ ¤¨ ¯ §®­ 㪠§ â¥«ï.
+% €¤à¥á, ᪮॥ ¢á¥£®, ­¥¢¥à¥­.
+asmr_e_unknown_opcode=07053_E_¥¨§¢¥áâ­ë© ª®¤ ®¯¥à æ¨¨ $1
+% ¥¨§¢¥áâ­ ï ª®¬ ­¤   áᥬ¡«¥à 
+asmr_e_invalid_or_missing_opcode=07054_E_H¥¢¥p­ ï ¨«¨ ¯p®¯y饭­ ï ®¯¥à æ¨ï
+asmr_e_invalid_prefix_and_opcode=07055_E_H¥¢¥p­ ï ª®¬¡¨­ æ¨ï ¯p¥ä¨ªá  ¨ ®¯¥à æ¨¨: $1
+asmr_e_invalid_override_and_opcode=07056_E_H¥¢¥p­ ï ª®¬¡¨­ æ¨ï ¯¥p¥®¯p¥¤¥«¥­¨ï ¨ ®¯¥à æ¨¨: $1
asmr_e_too_many_operands=07057_E_‘«¨èª®¬ ¬­®£® ®¯¥p ­¤®¢ ¢ áâp®ª¥
-asmr_w_near_ignored=07058_W_„¨à¥ªâ¨¢  NEAR ¨£­®p¨pã¥âáï
-asmr_w_far_ignored=07059_W_„¨à¥ªâ¨¢  FAR ¨£­®p¨pã¥âáï
+% ‘«¨èª®¬ ¬­®£® ®¯¥à ­¤®¢ ¤«ï ¤ ­­®© ª®¬ ­¤ë. ஢¥àì⥠ᨭ⠪á¨á.
+asmr_w_near_ignored=07058_W_„¨à¥ªâ¨¢  NEAR ¨£­®p¨p®¢ ­ 
+asmr_w_far_ignored=07059_W_„¨à¥ªâ¨¢  FAR ¨£­®p¨p®¢ ­ 
asmr_e_dup_local_sym=07060_E_®¢â®p­®¥ ®¯p¥¤¥«¥­¨¥ «®ª «ì­®£® ᨬ¢®«  $1
asmr_e_unknown_local_sym=07061_E_H¥¨§¢¥áâ­ë© «®ª «ì­ë© ᨬ¢®« $1
-asmr_e_unknown_label_identifier=07062_E_H¥¨§¢¥áâ­ ï ¬¥âª  ¨¤¥­â¨ä¨ª â®p  $1
-asmr_e_invalid_register=07063_E_¥¯à ¢¨«ì­®¥ ¨¬ï ॣ¨áâà 
-asmr_e_invalid_fpu_register=07064_E_H¥¯p ¢¨«ì­®¥ ¨¬ï p¥£¨áâp  ¤«ï ®¯¥p æ¨¨ á ¯« ¢ î饩 § ¯ï⮩
-asmr_e_nor_not_supported=07065_E_NOR ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
+asmr_e_unknown_label_identifier=07062_E_H¥¨§¢¥áâ­ ï ¬¥âª  $1
+asmr_e_invalid_register=07063_E_¥¢¥à­®¥ ¨¬ï ॣ¨áâà 
+% There is an unknown register name used as operand.
+asmr_e_invalid_fpu_register=07064_E_H¥¢¥à­®¥ ¨¬ï p¥£¨áâp  ¤«ï ®¯¥p æ¨¨ á ¯« ¢ î饩 § ¯ï⮩
+% ë«® ¨á¯®«ì§®¢ ­® ­¥¨§¢¥áâ­®¥ ¨¬ï ॣ¨áâà .
asmr_w_modulo_not_supported=07066_W_MODULO ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-asmr_e_invalid_float_const=07067_E_H¥¢¥p­ ï ª®­áâ ­â  (¯« ¢ îé ï § ¯ïâ ï): $1
-asmr_e_invalid_float_expr=07068_E_H¥¢¥p­®¥ ¢ëp ¦¥­¨¥ (¯« ¢ îé ï ®¯¥p æ¨ï)
+asmr_e_invalid_float_const=07067_E_H¥¢¥p­ ï ¢¥é¥á⢥­­ ï ª®­áâ ­â  $1
+% Š®­áâ ­â  á ¯« ¢ î饩 § ¯ï⮩, ®¡ê¥­­ ï ¢  áᥬ¡«¥à­®¬ ¡«®ª¥, ­¥¢¥à­ .
+asmr_e_invalid_float_expr=07068_E_H¥¢¥p­®¥ ¢¥é¥á⢥­­®¥ ¢ëp ¦¥­¨¥
+% ‚ëà ¦¥­¨¥ á ¯« ¢ î饩 § ¯ï⮩, ®¡ê¥­­®¥ ¢  áᥬ¡«¥à­®¬ ¡«®ª¥, ­¥¢¥à­®.
asmr_e_wrong_sym_type=07069_E_H¥¢¥p­ë© ⨯ ᨬ¢®« 
-asmr_e_cannot_index_relative_var=07070_E_H¥ ¬®£y ¨­¤¥ªá¨p®¢ âì «®ª «ì­yî ¯¥p¥¬¥­­yî ¨«¨ ¯ p ¬¥âp á p¥£¨áâp®¬
-asmr_e_invalid_seg_override=07071_E_H¥¢¥p­®¥ ¢ëp ¦¥­¨¥ ¯¥p¥®¯p¥¤¥«¥­­®£® ᥣ¬¥­â 
-asmr_w_id_supposed_external=07072_W_ˆ¤¥­â¨ä¨ª â®p $1, ¯p¥¤¯®«®¦¨¬ çâ® ®­ ¢­¥è­¨©
+asmr_e_cannot_index_relative_var=07070_E_H¥«ì§ï ¨­¤¥ªá¨p®¢ âì «®ª «ì­yî ¯¥p¥¬¥­­yî ¨«¨ ¯ p ¬¥âp á ¯®¬®éìî p¥£¨áâp 
+%  §®¢ë© ॣ¨áâà ¨á¯®«ì§ã¥âáï ¤«ï ¨­¤¥ªá æ¨¨ ᨬ¢®« , ª®â®àë© ã¦¥ ï¥âáï ®â­®á¨â¥«ì­ë¬
+% ¯® ®â­®è¥­¨î ª ॣ¨áâàã. â® ­¥¢®§¬®¦­®, ¨ ­ ¢¥à­ïª  ¯à¨¢¥¤¥â ª ®è¨¡ª¥ ¯à¨ ¢ë¯®«­¥­¨¨.
+asmr_e_invalid_seg_override=07071_E_H¥¢¥p­®¥ ¢ëp ¦¥­¨¥ ¯¥p¥®¯p¥¤¥«¥­¨ï ᥣ¬¥­â 
+asmr_w_id_supposed_external=07072_W_ˆ¤¥­â¨ä¨ª â®p $1, ¯p¥¤¯®«®¦¨â¥«ì­®, ¢­¥è­¨©
+% ‘á뫪  ­¥ ­¥®¯à¥¤¥«¥­­ë© ᨬ¢®«.â® ­¥ ï¥âáï ®è¨¡ª®©,
+% â.ª. ᨬ¢®« ¬®¦¥â ¨¬¥âì ¢­¥è­¥¥ ®¯à¥¤¥«¥­¨¥, ­® ¬®¦¥â ¯à¨¢¥á⨠ª ¯à®¡«¥¬ ¬
+% ¯à¨ ª®¬¯®­®¢ª¥, ¥á«¨ ᨬ¢®« ­¥ ¡ë« ®¯à¥¤¥«¥­ £¤¥-­¨¡ã¤ì ¥é¥.
asmr_e_string_not_allowed_as_const=07073_E_H¥«ì§ï ¨á¯®«ì§®¢ âì áâp®ª¨ ª ª ª®­áâ ­âë
-asmr_e_no_var_type_specified=07074_’¨¯ ¯¥p¥¬¥­­®© ­¥ yª § ­
-asmr_w_assembler_code_not_returned_to_text=07075_E_€áᥬ¡«¥p᪨© ª®¤ ­¥ ¢®§¢p é ¥âáï ¢ TEXT ᥣ¬¥­â
-asmr_e_not_directive_or_local_symbol=07076_E_$1 ­¥ ¤¨p¥ªâ¨¢  ¨ ­¥ «®ª «ì­ë© ᨬ¢®«
-asmr_w_using_defined_as_local=07077_E_ˆá¯®«ì§®¢ ­¨¥ ®¯p¥¤¥«¥­­®£® ¨¬¥­¨ ª ª «®ª «ì­ ï ¬¥âª 
+% ‘âப¨ ᨬ¢®«®¢ ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ª ç¥á⢥ ª®­áâ ­â.
+asmr_e_no_var_type_specified=07074_¥ 㪠§ ­ ⨯ ¯¥p¥¬¥­­®©
+% ‘¨­â ªá¨á ¯à¥¤¯®« £ ¥â ¨¬ï ⨯  ¯®á«¥ â®çª¨, ­® ®­® ­¥ ¡ë«® ®¡­ à㦥­®.
+asmr_w_assembler_code_not_returned_to_text=07075_E_€áᥬ¡«¥p­ë© ª®¤ ­¥ ¢®§¢p é ¥âáï ¢ ᥣ¬¥­â TEXT
+% ‚  áᥬ¡«¥à­®¬ ¡«®ª¥ ¡ë«  ¤¨à¥ªâ¨¢  ᬥ­ë ᥪ権, ­® ¢ ª®­æ¥ ¡«®ª  ®âáãâáâ¢ã¥â ¤¨à¥ªâ¨¢ 
+% ¢®§¢à â  ¢ ᥣ¬¥­â ⥪áâ . Œ®¦¥â ¡ëâì ¯à¨ç¨­®© ®è¨¡®ª ¯à¨ ª®¬¯®­®¢ª¥.
+asmr_e_not_directive_or_local_symbol=07076_E_$1 ­¥ ï¥âáï ¤¨p¥ªâ¨¢®© ¨«¨ «®ª «ì­ë¬ ᨬ¢®«®¬
+% “ª § ­­ë© ᨬ¢®« ­¥¨§¢¥á⥭.
+asmr_w_using_defined_as_local=07077_E_ˆá¯®«ì§®¢ ­¨¥ ®¯p¥¤¥«¥­­®£® ¨¬¥­¨ ¢ ª ç¥á⢥ «®ª «ì­®© ¬¥âª¨
asmr_e_dollar_without_identifier=07078_E_‘¨¬¢®« '$' ¨á¯®«ì§y¥âáï ¡¥§ ¨¤¥­â¨ä¨ª â®p 
-asmr_w_32bit_const_for_address=07079_W_32-¡¨â­ ï ª®­áâ ­â  á®§¤ ¥âáï ¤«ï  ¤p¥á 
-asmr_n_align_is_target_specific=07080_N_.ALIGN ¨á¯®«ì§y¥âáï ᯥ樠«ì­® ¤«ï yª § ­¨ï ¯« âä®p¬ë, ¨á¯®«ì§y©â¥ .BALIGN ¨«¨ .P2ALIGN
-asmr_e_cannot_access_field_directly_for_parameters=07081_E_H¥â ¤®áây¯  ª ¯®«î ¯ p ¬¥âp  ­ ¯pï¬yî, ¨á¯®«ì§y©â¥ p¥£¨áâpë
-% You should load the parameter first into a register and then access the
-% fields using that register.
-asmr_e_cannot_access_object_field_directly=07082_E_H¥â ¤®áây¯  ª ¯®«ï¬ ®¡ê¥ªâ®¢/ª« áᮢ ­ ¯pï¬yî, ¨á¯®«ì§y©â¥ p¥£¨áâpë
-% You should load the self pointer first into a register and then access the
-% fields using the register as base. By default the self pointer is available
-% in the esi register on i386.
-asmr_e_unable_to_determine_reference_size=07083_E_H¥ § ¤ ­ p §¬¥p ¨ ­¥¢®§¬®¦­® ®¯p¥¤¥«¨âì p §¬¥p ®¯¥p ­¤®¢
-% You should specify explicitly a size for the reference, because
-% compiler is unable to determine what size (byte,word,dword,etc.) it
-% should use for the reference.
-asmr_e_cannot_use_RESULT_here=07084_E_H¥ ¬®£y ¨á¯®«ì§®¢ âì RESULT ¢ í⮩ äy­ªæ¨¨
-asmr_h_RESULT_is_reg=07085_H_RESULT íâ® p¥£¨áâp $1
+% ‚ ª®­áâ ­â­®¬ ¢ëà ¦¥­¨¨ ¢áâà¥â¨«áï ¨¤¥­â¨ä¨ª â®à, ­¥ ­ ç¨­ î騩áï á ᨬ¢®«  $.
+asmr_w_32bit_const_for_address=07079_W_32-¡¨â­ ï ª®­áâ ­â  ¨á¯®«ì§®¢ ­  ¤«ï  ¤p¥á 
+% Š®­áâ ­â  ¨á¯®«ì§®¢ ­  ¢ ª ç¥á⢥  ¤à¥á . ⮠ï¥âáï ¯à¨§­ ª®¬ ®è¨¡ª¨,
+% ¯®áª®«ìªã  ¡á®«îâ­ ï  ¤à¥á æ¨ï ®¡ëç­® ­¥ à ¡®â ¥â.
+asmr_n_align_is_target_specific=07080_N_.ALIGN ï¥âáï ¯« âä®à¬¥­­®-§ ¢¨á¨¬®©, ¨á¯®«ì§y©â¥ .BALIGN ¨«¨ .P2ALIGN
+% „¥©á⢨¥ ¨ §­ ç¥­¨¥ ¤¨à¥ªâ¨¢ë .align ¬®¦¥â ¨§¬¥­ïâìáï ¢ § ¢¨á¨¬®á⨠®â
+% 楫¥¢®© ¯« âä®à¬ë.
+asmr_e_cannot_access_field_directly_for_parameters=07081_E_®«ï ¯ p ¬¥âp  ­¥¤®áâã¯­ë ­ ¯pï¬yî, ¨á¯®«ì§y©â¥ p¥£¨áâpë
+%  à ¬¥âà á«¥¤ã¥â § £à㧨âì ¢ ॣ¨áâà ¨ § â¥¬  ¤à¥á®¢ âì ¯®«ï ¯ à ¬¥âà  ®â­®á¨â¥«ì­®
+% í⮣® ॣ¨áâà .
+asmr_e_cannot_access_object_field_directly=07082_E_®«ï ®¡ê¥ªâ®¢/ª« áᮢ ­¥¤®áâã¯­ë ­ ¯pï¬yî, ¨á¯®«ì§y©â¥ p¥£¨áâpë
+% ‘«¥¤ã¥â § £à㧨âì 㪠§ â¥«ì ­  self ¢ ॣ¨áâà ¨ § â¥¬  ¤à¥á®¢ âì ¯®«ï, ¨á¯®«ì§ãï ॣ¨áâà
+% ¢ ª ç¥á⢥ ¡ §ë. ® 㬮«ç ­¨î 㪠§ â¥«ì ­  self ¤®áâ㯥­
+% ¢ ॣ¨áâॠesi ­  i386.
+asmr_e_unable_to_determine_reference_size=07083_E_ §¬¥p ®¯¥à ­¤®¢ ­¥ 㪠§ ­ ¨ ¥£® ®¯à¥¤¥«¥­¨¥ ­¥¢®§¬®¦­®
+%  §¬¥à áá뫪¨ á«¥¤ã¥â 㪠§ âì ®, â.ª. ª®¬¯¨«ïâ®à ­¥ ¬®¦¥â
+% ®¯à¥¤¥«¨âì, ª ª®© à §¬¥à (byte,word,dword ¨ â.¤.) ®­
+% ¤®«¦¥­ ¨á¯®«ì§®¢ âì.
+asmr_e_cannot_use_RESULT_here=07084_E_‚ í⮩ ä㭪樨 ¨á¯®«ì§®¢ âì RESULT ­¥«ì§ï
+% ¥ª®â®àë¥ ä㭪樨, ¢®§¢à é î騥 १ã«ìâ â á«®¦­®£® ⨯ , ­¥ ¬®£ã⠨ᯮ«ì§®¢ âì ¯¥à¥¬¥­­ãî
+% \var{result}.
asmr_w_adding_explicit_args_fXX=07086_W_"$1" ¡¥§ ®¯¥à ­¤  â࠭᫨àã¥âáï ¢ "$1 %st,%st(1)"
asmr_w_adding_explicit_first_arg_fXX=07087_W_"$1 %st(n)" â࠭᫨àã¥âáï ¢ "$1 %st,%st(n)"
asmr_w_adding_explicit_second_arg_fXX=07088_W_"$1 %st(n)" â࠭᫨àã¥âáï ¢ "$1 %st(n),%st"
asmr_e_invalid_char_smaller=07089_E_‘¨¬¢®« < §¤¥áì ­¥ à §à¥è¥­
+% ޝ¥à â®à ᤢ¨£  âॡã¥â ᨬ¢®«®¢ <<. ë« ®¡­ à㦥­ ⮫쪮 ®¤¨­ ¨§ ­¨å.
asmr_e_invalid_char_greater=07090_E_‘¨¬¢®« > §¤¥áì ­¥ à §à¥è¥­
-asmr_w_xdef_not_supported=07091_W_XDEF ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
-asmr_e_invalid_global_def=07092_E_¥¢¥à­ë© ᨭ⠪á¨á XDEF
+% ޝ¥à â®à ᤢ¨£  âॡã¥â ᨬ¢®«®¢ >>. ë« ®¡­ à㦥­ ⮫쪮 ®¤¨­ ¨§ ­¨å.
asmr_w_align_not_supported=07093_W_ALIGN ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
-asmr_e_no_inc_and_dec_together=07094_E_Inc ¨ Dec ­¥ ¬®£ãâ ¡ëâì ¢¬¥áâ¥
-asmr_e_invalid_reg_list_in_movem=07095_E_¥¢¥à­ë© reglist ¢ movem
-asmr_e_invalid_reg_list_for_opcode=07096_E_¥¢¥à­ë© reglist ¤«ï opcode
-asmr_e_68020_mode_required=07097_E_’ॡã¥âáï 68020 ०¨¬
-
+asmr_e_no_inc_and_dec_together=07094_E_Inc ¨ Dec ­¥ ¬®£ã⠨ᯮ«ì§®¢ âìáï ®¤­®¢à¥¬¥­­®
+% ޤ­®¢à¥¬¥­­®¥ ¨á¯®«ì§®¢ ­¨¥ ¨­ªà¥¬¥­â  ¨ ¤¥ªà¥¬¥­â  ¢ ®¤­®¬ ®¯¥à ­¤¥
+% ­  680x0. â® ­¥¤®¯ãá⨬®.
+asmr_e_invalid_reg_list_in_movem=07095_E_¥¢¥à­ë© ᯨ᮪ ॣ¨áâ஢ ¤«ï movem
+% ˆá¯®«ì§®¢ ­¨¥ ¨­áâàãªæ¨¨ \var{movem} á ­¥¢¥à­ë¬¨ ॣ¨áâà ¬¨ ¤«ï á®åà ­¥­¨ï/¢®ááâ ­®¢«¥­¨ï.
+asmr_e_invalid_reg_list_for_opcode=07096_E_¥¢¥à­ë© ᯨ᮪ ॣ¨áâ஢ ¤«ï ª®¬ ­¤ë
+asmr_e_higher_cpu_mode_required=07097_E_’ॡã¥âáï ०¨¬ ¡®«¥¥ ᮢ६¥­­®£® ¯à®æ¥áá®à  ($1)
+% ˆá¯®«ì§®¢ ­¨¥ ¨­áâàãªæ¨¨, ª®â®à ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¢ ⥪ã饬 ०¨¬¥ ¯à®æ¥áá®à .
+% ˆá¯®«ì§ã©â¥ ०¨¬ ¤«ï á«¥¤ãîé¨å ¯®ª®«¥­¨© ¯à®æ¥áá®à®¢.
+asmr_w_unable_to_determine_reference_size_using_dword=07098_W_ §¬¥à ®¯¥à ­¤®¢ ­¥ 㪠§ ­ ¨ ¥£® ­¥ 㤠¥âáï ®¯à¥¤¥«¨âì, ¨á¯®«ì§ã¥âáï DWORD ¯® 㬮«ç ­¨î
+%  §¬¥à áá뫪¨ á«¥¤ã¥â 㪠§ âì ®, â.ª. ª®¬¯¨«ïâ®à ­¥ ¬®¦¥â
+% ®¯à¥¤¥«¨âì, ª ª®© à §¬¥à (byte,word,dword ¨ â.¤.) ®­
+% ¤®«¦¥­ ¨á¯®«ì§®¢ âì. ‚뤠¥âáï ⮫쪮 ¢ ०¨¬¥ Delphi, ª®£¤ 
+% ¯® 㬮«ç ­¨î ¨á¯®«ì§ã¥âáï à §¬¥à DWORD.
+asmr_e_illegal_shifterop_syntax=07099_E_‘¨­â ªá¨ç¥áª ï ®è¨¡ª  ¢ ®¯¥à ­¤¥ ᤢ¨£ 
+% ’®«ìª® ARM;  áᥬ¡«¥à ARM ¯®¤¤¥à¦¨¢ ¥â â.­. ®¯¥à ­¤ ᤢ¨£ . ˆá¯®«ì§®¢ ­­ë© ¤«ï ­¥£® ᨭ⠪á¨á
+% ­¥¢¥à¥­. ਬ¥à ¨­áâàãªæ¨¨ á ®¯¥à ­¤®¬ ᤢ¨£ :
+% \begin{verbatim}
+% asm
+% orr r2,r2,r2,lsl #8
+% end;
+% \end{verbatim}
+asmr_e_packed_element=07100_E_€¤à¥á 㯠ª®¢ ­­®£® ª®¬¯®­¥­â  ­¥ ᮢ¯ ¤ ¥â á £à ­¨æ¥© ¡ ©â 
+% “¯ ª®¢ ­­ë¥ ª®¬¯®­¥­âë (¯®«ï § ¯¨á¥© ¨ í«¥¬¥­âë ¬ áᨢ®¢) ¬®£ãâ ­ ç¨­ âìáï
+% á ¯à®¨§¢®«ì­®£® ¡¨â  ¢ ¡ ©â¥. ‘«¥¤®¢ â¥«ì­®, ­  ¯à®æ¥áá®à¥, ­¥ ¯®¤¤¥à¦¨¢ î饣®
+% ¡¨â®¢ãî  ¤à¥á æ¨î ¯ ¬ï⨠(  ¢á¥ ¯®¤¤¥à¦¨¢ ¥¬ë¥ FPC ¯à®æ¥áá®àë ïîâáï ¨¬¥­­® â ª¨¬¨),
+% ¡ã¤¥â ¢ë¤ ­  ®è¨¡ª  ¯à¨ ¯®¯ë⪥ ¤®áâ㯠 ¯® ¨­¤¥ªáã ª ¬ áᨢ ¬, à §¬¥à í«¥¬¥­â  ª®â®àëå
+% ­¥ ªà â¥­ 8 ¡¨â ¬. â® á¯à ¢¥¤«¨¢® ¨ ¤«ï ¯®«¥© § ¯¨á¥© á â ª¨¬¨  ¤à¥á ¬¨.
+asmr_w_unable_to_determine_reference_size_using_byte=07101_W_ §¬¥à ®¯¥à ­¤®¢ ­¥ 㪠§ ­ ¨ ¥£® ­¥ 㤠¥âáï ®¯à¥¤¥«¨âì, ¨á¯®«ì§ã¥âáï BYTE ¯® 㬮«ç ­¨î
+%  §¬¥à áá뫪¨ á«¥¤ã¥â 㪠§ âì ®, â.ª. ª®¬¯¨«ïâ®à ­¥ ¬®¦¥â
+% ®¯à¥¤¥«¨âì, ª ª®© à §¬¥à (byte,word,dword ¨ â.¤.) ®­
+% ¤®«¦¥­ ¨á¯®«ì§®¢ âì. ‚뤠¥âáï ⮫쪮 ¢ ०¨¬¥ Delphi, ª®£¤ 
+% ¯® 㬮«ç ­¨î ¨á¯®«ì§ã¥âáï à §¬¥à BYTE.
+asmr_w_no_direct_ebp_for_parameter=07102_W_‡¤¥áì ­¥«ì§ï ¨á¯®«ì§®¢ âì +offset(%ebp) ¤«ï ¯ à ¬¥â஢
+% ˆá¯®«ì§®¢ ­¨¥ ¯àאַ© áá뫪¨ ¢¨¤  8(%ebp) ¤«ï ¯ à ¬¥â஢ ¯à®æ¥¤ãàë/ä㭪樨 ­¥¢¥à­®, ¥á«¨
+% ¯ à ¬¥âàë ­ å®¤ïâáï ¢ ॣ¨áâà å.
+asmr_w_direct_ebp_for_parameter_regcall=07103_W_ˆá¯®«ì§®¢ ­¨¥ +offset(%ebp) ­¥á®¢¬¥á⨬® á ⨯®¬ ¢ë§®¢  regcall
+% ˆá¯®«ì§®¢ ­¨¥ ¯àאַ© áá뫪¨ ¢¨¤  8(%ebp) ¤«ï ¯ à ¬¥â஢ ¯à®æ¥¤ãàë/ä㭪樨 ­¥¢¥à­®, ¥á«¨
+% ¯ à ¬¥âàë ­ å®¤ïâáï ¢ ॣ¨áâà å.
+asmr_w_direct_ebp_neg_offset=07104_W_ˆá¯®«ì§®¢ ­¨¥ -offset(%ebp) ¤«ï «®ª «ì­ëå ¯¥à¥¬¥­­ëå ­¥ ४®¬¥­¤ã¥âáï
+% ˆá¯®«ì§®¢ ­¨¥ ááë«®ª ¢¨¤  -8(%ebp) ¤«ï ¤®áâ㯠 ª «®ª «ì­ë¬ ¯¥à¥¬¥­­ë¬ ­¥ ४®¬¥­¤ã¥âáï.
+asmr_w_direct_esp_neg_offset=07105_W_ˆá¯®«ì§®¢ ­¨¥ -offset(%esp), ¢®§¬®¦¥­ á¡®© ¯à¨ ¤®áâ㯥 ¨«¨ ¯®â¥àï §­ ç¥­¨ï
+% ˆá¯®«ì§®¢ ­¨¥ ááë«®ª ¢¨¤  -8(%esp) ¤«ï ¤®áâ㯠 ª «®ª «ì­®¬ã á⥪㠭¥ ४®¬¥­¤ã¥âáï,
+% ¯®â®¬ã çâ® íâ  ç áâì á⥪  ¬®¦¥â ¡ëâì § â¥àâ  ¯à¨ ¢ë§®¢¥ «î¡®© ä㭪樨 ¨«¨ ¯à¨ ¯à¥à뢠­¨¨.
+asmr_e_no_vmtoffset_possible=07106_E_VMTOffset á«¥¤ã¥â ¨á¯®«ì§®¢ âì ¢ ª®¬¡¨­ æ¨¨ á ¢¨àâã «ì­ë¬ ¬¥â®¤®¬, "$1" ­¥ ï¥âáï ¢¨àâã «ì­ë¬
+% ’®«ìª® ¢¨àâã «ì­ë¥ ¬¥â®¤ë ¨¬¥îâ ᬥ饭¨¥ ¢ VMT.
+asmr_e_need_pic_ref=07107_E_‚ ०¨¬¥ ¯®§¨æ¨®­­®-­¥§ ¢¨á¨¬®£® ª®¤  ­ ©¤¥­  ¯®§¨æ¨®­­®-§ ¢¨á¨¬ ï áá뫪 
+% ¥¦¨¬ ª®¬¯¨«ï樨 ¯à¥¤ãᬠâਢ ¥â £¥­¥à æ¨î ¯®§¨æ¨®­­®-­¥§ ¢¨á¨¬®£® ª®¤ 
+% (PIC), ­® ¢ ¤ ­­®© ­ ¯¨á ­­®© ¢àãç­ãî  áᥬ¡«¥à­®© ¨­áâàãªæ¨¨ ᮤ¥à¦¨âáï
+% ¯®§¨æ¨®­­®-§ ¢¨á¨¬ ï áá뫪 .
#
# Assembler/binary writers
#
-asmw_f_too_many_asm_files=08000_F_‘«¨èª®¬ ¬­®£® ä ©«®¢ ¤«ï  áᥬ¡«¨p®¢ ­¨ï
-asmw_f_assembler_output_not_supported=08001_F_‚ë¡p ­­ë© ⨯  áᥬ¡«¥p  ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
+# 08020 is the last used one
+#
+asmw_f_too_many_asm_files=08000_F_‘«¨èª®¬ ¬­®£®  áᥬ¡«¥à­ëå ä ©«®¢
+% "“¬­ ï" ª®¬¯®­®¢ª  ¯à¨¢®¤¨â ª ¯®«ã祭¨î ᫨誮¬ ¡®«ì讣® ª®«¨ç¥á⢠
+%  áᥬ¡«¥à­ëå ä ©«®¢. Žâª«îç¨â¥ ¥¥.
+asmw_f_assembler_output_not_supported=08001_F_‚ë¡p ­­ë© ¢ë室­®© ä®à¬ â  áᥬ¡«¥p  ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
asmw_f_comp_not_supported=08002_F_COMP ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-asmw_f_direct_not_supported=08003_F_àאַ©  áᥬ¡«¥p §¤¥áì ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
-asmw_e_alloc_data_only_in_bss=08004_E_ á¯p¥¤¥«¥­¨¥ ¤ ­­ëå ¢ ¯ ¬ï⨠¢®§¬®¦­® ⮫쪮 ¢ BSS ᥪ樨
-asmw_f_no_binary_writer_selected=08005_F_¥ ¢ë¡à ­ áâ¨«ì  áᥬ¡«¨à®¢ ­¨ï
-asmw_e_opcode_not_in_table=08006_E_Asm: Š®¬ ­¤ë $1 ­¥â ¢ ᯨ᪥ ª®¬ ­¤
-asmw_e_invalid_opcode_and_operands=08007_E_Asm: $1 ­¥¢¥p­ ï ª®¬¡¨­ æ¨ï ®¯¥p ­¤®¢ ¢ ª®¬ ­¤¥
+asmw_f_direct_not_supported=08003_F_’¨¯  áᥬ¡«¥p  direct ­¥ ¯®¤¤¥p¦¨¢ ¥âáï á ¤¢®¨ç­ë¬ ¢ë室­ë¬ ä®à¬ â®¬
+% ’¨¯  áᥬ¡«¥à  direct ¯à¥¤¯®« £ ¥â § ¯¨áì ¯à®ç¨â ­­®£®  áᥬ¡«¥à­®£® ⥪áâ  ­ ¯àï¬ãî ¢ ¢ë室­®© ä ©«,
+% ¯à¨ í⮬ ¢ë室­®© ä ©« ­¥ ¬®¦¥â ¡ëâì ¤¢®¨ç­ë¬. ‚ë¡¥à¨â¥ ⥪áâ®¢ë© ä®à¬ â ¢ë室­ëå ä ©«®¢.
+asmw_e_alloc_data_only_in_bss=08004_E_‚뤥«¥­¨¥ ¯ ¬ï⨠¤«ï ¤ ­­ëå à §à¥è¥­® ⮫쪮 ¢ ᥪ樨 BSS
+asmw_f_no_binary_writer_selected=08005_F_¥ ¢ë¡à ­ ¤¢®¨ç­ë© ¢ë室­®© ä®à¬ â
+asmw_e_opcode_not_in_table=08006_E_Asm: Š®¤  ª®¬ ­¤ë $1 ­¥â ¢ ᯨ᪥
+asmw_e_invalid_opcode_and_operands=08007_E_Asm: $1 ­¥¢¥p­®¥ á®ç¥â ­¨¥ ª®¬ ­¤ë ¨ ®¯¥p ­¤®¢
asmw_e_16bit_not_supported=08008_E_Asm: 16-¡¨â­ë¥ áá뫪¨ ­¥ ¯®¤¤¥p¦¨¢ îâáï
-asmw_e_invalid_effective_address=08009_E_Asm: H¥¢¥p­ë© íä䥪⨢­ë©(?)  ¤p¥á
+asmw_e_invalid_effective_address=08009_E_Asm: H¥¢¥p­ë© íä䥪⨢­ë©  ¤p¥á
asmw_e_immediate_or_reference_expected=08010_E_Asm: ަ¨¤ ¥âáï IMMEDIATE ¨«¨ áá뫪 
-asmw_e_value_exceeds_bounds=08011_E_Asm: $1 §­ ç¥­¨¥ ¢ëè«® §  £p ­¨æë $2
-asmw_e_short_jmp_out_of_range=08012_E_Asm: SHORT JUMP ¢ë襫 §  £p ­¨æë ¤¨ ¯®§®­  $1
-asmw_e_undefined_label=08013_E_Asm: ¥®¯à¥¤¥«¥­­ ï ¬¥âª  $1
-asmw_e_comp_not_supported=08014_E_Asm: ’¨¯ Comp ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¯®¤ í⮩ ¯« âä®à¬®©
-asmw_e_extended_not_supported=08015_E_Asm: ’¨¯ Extend ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¯®¤ í⮩ ¯« âä®à¬®©
-asmw_e_duplicate_label=08016_E_Asm: ®¢â®à­ ï ¬¥âª  $1
+asmw_e_value_exceeds_bounds=08011_E_Asm: §­ ç¥­¨¥ $1 ¢ë室¨â §  £p ­¨æë $2
+asmw_e_short_jmp_out_of_range=08012_E_Asm: Š®à®âª¨© ¯¥à¥å®¤ ¢ë室¨â §  £p ­¨æë $1
+asmw_e_undefined_label=08013_E_Asm: Œ¥âª  $1 ­¥ ®¯à¥¤¥«¥­ 
+asmw_e_comp_not_supported=08014_E_Asm: ’¨¯ comp ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï í⮩ ¯« âä®à¬ë
+asmw_e_extended_not_supported=08015_E_Asm: ’¨¯ extended ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï í⮩ ¯« âä®à¬ë
+asmw_e_duplicate_label=08016_E_Asm: ®¢â®àïîé ïáï ¬¥âª  $1
+asmw_e_redefined_label=08017_E_Asm: ®¢â®à­®¥ ®¯à¥¤¥«¥­¨¥ ¬¥âª¨ $1
+asmw_e_first_defined_label=08018_E_Asm: ¥à¢®­ ç «ì­® ®¯à¥¤¥«ï¥âáï §¤¥áì
+asmw_e_invalid_register=08019_E_Asm: ¥¢¥à­ë© ॣ¨áâà $1
+asmw_e_16bit_32bit_not_supported=08020_E_Asm: 16- ¨ 32-¡¨â­ë¥ áá뫪¨ ­¥ ¯®¤¤¥à¦¨¢ îâáï
+asmw_e_64bit_not_supported=08021_E_Asm: 64-¡¨â­ë¥ ®¯¥à ­¤ë ­¥ ¯®¤¤¥à¦¨¢ îâáï
#
# Executing linker/assembler
#
+# 09032 is the last used one
+#
+# BeginOfTeX
+%
+% \section{Žè¨¡ª¨ áâ ¤¨¨  áᥬ¡«¨à®¢ ­¨ï/ª®¬¯®­®¢ª¨}
+% ¥à¥ç¨á«ïîâáï ®è¨¡ª¨, ª®â®àë¥ ¬®£ãâ ¨¬¥âì ¬¥áâ® ¢® ¢à¥¬ï ®¡à ¡®âª¨
+% ª®¬ ­¤­®© áâப¨ ¨ ä ©«®¢ ª®­ä¨£ãà æ¨¨.
+% \begin{description}
exec_w_source_os_redefined=09000_W_ˆá室­ ï ®¯¥p æ¨®­­ ï á¨á⥬  ¯¥p¥®¯p¥¤¥«¥­ 
-exec_i_assembling_pipe=09001_I_€áᥬ¡«¨py¥¬ (pipe) $1
-exec_d_cant_create_asmfile=09002_E_H¥ ¬®£y á®§¤ âì ä ©«  áᬥ¡«¥p : $1
-% The mentioned file can't be create. Check if you've
-% permission to create this file
-exec_e_cant_create_objectfile=09003_E_¥ ¬®£ã á®§¤ âì ®¡ê¥ªâ­ë© ä ©«: $1
-% The mentioned file can't be create. Check if you've
-% permission to create this file
-exec_e_cant_create_archivefile=09004_E_¥ ¬®£ã á®§¤ âì  à娢­ë© ä ©«: $1
-% The mentioned file can't be create. Check if you've
-% permission to create this file
-exec_e_assembler_not_found=09005_E_€áᥬ¡«¥p $1 ­¥ ­ ©¤¥­, ¨á¯®«ì§y¥¬ ¢¬¥áâ® ­¥£® ¢­¥è­¨©  áᥬ¡«¥p
-exec_t_using_assembler=09006_T_ˆá¯®«ì§y¥¬  áᥬ¡«¥p: $1
-exec_e_error_while_assembling=09007_E_Žè¨¡ª  ¯p¨  áᥬ¡«¨p®¢ ­¨¨ $1
-exec_e_cant_call_assembler=09008_E_H¥ ¬®£y ¢ë§¢ âì  áᥬ¡«¥p, ®è¨¡ª  $1. ˆá¯®«ì§y¥¬ ¢¬¥áâ® ­¥£® ¢­¥è­¨©  áᥬ¡«¥p
-exec_i_assembling=09009_I_€áᥬ¡«¨p®¢ ­¨¥ $1
-exec_i_assembling_smart=09010_I_ˆ­â¥«¥ªây «ì­®¥  áᥬ¡«¨p®¢ ­¨¥ $1
-exec_w_objfile_not_found=09011_W_Ž¡ê¥ªâ­ë© ä ©« $1 ­¥ ­ ©¤¥­, ª®¬¯®­®¢ª  ¬®¦¥â ¡ëâì ­¥y¤ ç­®© !
-exec_w_libfile_not_found=09012_W_¨¡«¨®â¥ª  $1 ­¥ ­ ©¤¥­ , ª®¬¯®­®¢ª  ¬®¦¥â ¡ëâì ­¥y¤ ç­®© !
+% ˆá室­ ï ®¯¥à æ¨®­­ ï á¨áâ¥¬ë ¯¥à¥®¯à¥¤¥«¥­ .
+exec_i_assembling_pipe=09001_I_€áᥬ¡«¨py¥âáï (pipe) $1
+% €áᥬ¡«¨à®¢ ­¨¥ á ¨á¯®«ì§®¢ ­¨¥¬ ª ­ «  (pipe) ¤«ï ®¡¬¥­  ¤ ­­ë¬¨ á ¢­¥è­¨¬  áᥬ¡«¥à®¬.
+exec_d_cant_create_asmfile=09002_E_H¥¢®§¬®¦­® á®§¤ âì  áᬥ¡«¥p­ë© ä ©«: $1
+% “ª § ­­ë© ä ©« ­¥ ¬®¦¥â ¡ëâì á®§¤ ­. ஢¥àìâ¥, ¥á«¨ «¨
+% à §à¥è¥­¨¥ ­  á®§¤ ­¨¥ ä ©« .
+exec_e_cant_create_objectfile=09003_E_¥¢®§¬®¦­® á®§¤ âì ®¡ê¥ªâ­ë© ä ©«: $1
+% “ª § ­­ë© ä ©« ­¥ ¬®¦¥â ¡ëâì á®§¤ ­. ஢¥àìâ¥, ¥á«¨ «¨
+% à §à¥è¥­¨¥ ­  á®§¤ ­¨¥ ä ©« .
+exec_e_cant_create_archivefile=09004_E_¥¢®§¬®¦­® á®§¤ âì ä ©«  à娢 : $1
+% “ª § ­­ë© ä ©« ­¥ ¬®¦¥â ¡ëâì á®§¤ ­. ஢¥àìâ¥, ¥á«¨ «¨
+% à §à¥è¥­¨¥ ­  á®§¤ ­¨¥ ä ©« .
+exec_e_assembler_not_found=09005_E_€áᥬ¡«¥p $1 ­¥ ­ ©¤¥­, ¯¥à¥å®¤ ­  ¢­¥è­îî á¡®àªã
+% ணࠬ¬   áᥬ¡«¥à  ­¥ ­ ©¤¥­ . Š®¬¯¨«ïâ®à á®§¤ áâ áªà¨¯â,
+% ¯®§¢®«ïî騩  áᥬ¡«¨à®¢ âì ¨ ᪮¬¯®­®¢ âì ¯à®£à ¬¬ã ¯®§¤­¥¥.
+exec_t_using_assembler=09006_T_ˆá¯®«ì§y¥âáï  áᥬ¡«¥p: $1
+% ˆ­ä®à¬ æ¨ï ® ⮬, ª ª®© ¨¬¥­­®  áᥬ¡«¥à ¨á¯®«ì§ã¥âáï.
+exec_e_error_while_assembling=09007_E_Žè¨¡ª   áᥬ¡«¨p®¢ ­¨ï, ª®¤ ¢®§¢à â  $1
+% ਠ®¡à ¡®âª¥ ä ©«  ¢­¥è­¨¬  áᥬ¡«¥à®¬ ¯à®¨§®è«  ®è¨¡ª . ®¤à®¡­®áâ¨
+% ¬®¦­® ­ ©â¨ ¢ à㪮¢®¤á⢥ ª ¨á¯®«ì§ã¥¬®© ¯à®£à ¬¬¥  áᥬ¡«¥à .
+exec_e_cant_call_assembler=09008_E_Žè¨¡ª  $1 ¯à¨ § ¯ã᪥  áᥬ¡«¥à , ¯¥à¥å®¤ ­  ¢­¥è­îî á¡®àªã
+% Žè¨¡ª  ¯à¨ § ¯ã᪥ ¢­¥è­¥£®  áᥬ¡«¥à . Š®¬¯¨«ïâ®à á®§¤ áâ áªà¨¯â,
+% ¯®§¢®«ïî騩  áᥬ¡«¨à®¢ âì ¨ ᪮¬¯®­®¢ âì ¯à®£à ¬¬ã ¯®§¤­¥¥.
+exec_i_assembling=09009_I_€áᥬ¡«¨pã¥âáï $1
+% ˆ­ä®à¬ æ¨ï ® ⮬, ª ª®© ä ©«  áᥬ¡«¨àã¥âáï.
+exec_i_assembling_smart=09010_I_€áᥬ¡«¨pã¥âáï á "㬭®©" ᡮમ© $1
+% ˆ­ä®à¬ æ¨ï ® ⮬, ª ª®© ä ©«  áᥬ¡«¨àã¥âáï á ¯®¤¤¥à¦ª®© "㬭®©" ᡮન.
+exec_w_objfile_not_found=09011_W_Ž¡ê¥ªâ­ë© ä ©« $1 ­¥ ­ ©¤¥­, ª®¬¯®­®¢ª  ¬®¦¥â ­¥ y¤ âìáï!
+% ޤ¨­ ¨§ ®¡ê¥ªâ­ëå ä ©«®¢ ­¥ ­ ©¤¥­, ¨ ª®¬¯®­®¢ª , ᪮॥ ¢á¥£®, ­¥ 㤠áâáï.
+% ஢¥àì⥠¯ãâ¨.
+exec_w_libfile_not_found=09012_W_¨¡«¨®â¥ª  $1 ­¥ ­ ©¤¥­ , ª®¬¯®­®¢ª  ¬®¦¥â ­¥ y¤ âìáï!
+% ޤ¨­ ¨§ ä ©«®¢ ¡¨¡«¨®â¥ª ­¥ ­ ©¤¥­, ¨ ª®¬¯®­®¢ª , ᪮॥ ¢á¥£®, ­¥ 㤠áâáï.
+% ஢¥àì⥠¯ãâ¨.
exec_e_error_while_linking=09013_E_Žè¨¡ª  ¯p¨ ª®¬¯®­®¢ª¥
-exec_e_cant_call_linker=09014_E_H¥ ¬®£y ¢ë§¢ âì ª®¬¯®­®¢é¨ª, ¨á¯®«ì§y¥¬ ¢¬¥áâ® ­¥£® ¢­¥è­¨© ª®¬¯®­®¢é¨ª
+% Ž¡é ï ®è¨¡ª  ¯à¨ ª®¬¯®­®¢ª¥.
+exec_e_cant_call_linker=09014_E_H¥ 㤠¥âáï ¢ë§¢ âì ª®¬¯®­®¢é¨ª, ¯¥à¥å®¤ ­  ¢­¥è­îî ª®¬¯®­®¢ªã
+% Žè¨¡ª  ¯à¨ § ¯ã᪥ ¢­¥è­¥£® ª®¬¯®­®¢é¨ª . Š®¬¯¨«ïâ®à á®§¤ áâ áªà¨¯â,
+% ¯®§¢®«ïî騩  áᥬ¡«¨à®¢ âì ¨ ᪮¬¯®­®¢ âì ¯à®£à ¬¬ã ¯®§¤­¥¥.
exec_i_linking=09015_I_Š®¬¯®­®¢ª  $1
-exec_e_util_not_found=09016_E_“⨫¨â  $1 ­¥ ­ ©¤¥­ , ¯¥p¥ª«îç ¥¬áï ­  ¢­¥è­îî «¨­ª®¢ªy
-exec_t_using_util=09017_T_ˆá¯®«ì§ã¥¬ ¢­¥è­îî ã⨫¨âã $1
+% ˆ­ä®à¬ æ¨ï ® ⮬, ª ª ï ¯à®£à ¬¬  ¨«¨ ¡¨¡«¨®â¥ª  ª®¬¯®­ã¥âáï.
+exec_e_util_not_found=09016_E_“⨫¨â  $1 ­¥ ­ ©¤¥­ , ¯¥p¥å®¤ ­  ¢­¥è­îî ª®¬¯®­®¢ªã
+% ‚­¥è­ïï ã⨫¨â  ­¥ ­ ©¤¥­ . Š®¬¯¨«ïâ®à á®§¤ áâ áªà¨¯â,
+% ¯®§¢®«ïî騩 ¯à®¨§¢¥á⨠­¥ã¤ ¢è¨¥áï ¤¥©áâ¢¨ï ¯®§¤­¥¥.
+exec_t_using_util=09017_T_ˆá¯®«ì§ã¥âáï ã⨫¨â  $1
+% ˆ­ä®à¬ æ¨®­­®¥ á®®¡é¥­¨¥ ® ⮬, ª ª ï ã⨫¨â  ¨á¯®«ì§ã¥âáï (®¡ëç­® íâ® ¯®áâ-¯à®æ¥áá®à).
exec_e_exe_not_supported=09018_E_‘®§¤ ­¨¥ ¨á¯®«­ï¥¬ëå ä ©«®¢ ­¥ ¯®¤¤¥p¦¨¢ ¥âáï
+% ‘®§¤ ­¨¥ ¨á¯®«­ï¥¬ëå ä ©«®¢ ¤«ï í⮩ ¯« âä®à¬ë ¥é¥ ­¥ ॠ«¨§®¢ ­® ¢ ª®¬¯¨«ïâ®à¥
+% ¨ ¯®â®¬ã ­¥¢®§¬®¦­®.
exec_e_dll_not_supported=09019_E_‘®§¤ ­¨¥ ¤¨­ ¬¨ç¥áª¨å ¡¨¡«¨®â¥ª (DLL) ­¥ ¯®¤¤¥p¦¨¢ îâáï
-exec_i_closing_script=09020_I_‡ ªp뢠¥¬ áªp¨¯â $1
-exec_e_res_not_found=09021_E_Š®¬¯¨«ïâ®p p¥áypᮢ ­¥ ­ ©¤¥­, ¯¥p¥ª«îç ¥¬áï ­  ¢­¥è­¨© ª®¬¯¨«ïâ®à à¥áãàᮢ
-exec_i_compilingresource=09022_I_Š®¬¯¨«¨py¥¬ p¥áypá $1
-exec_t_unit_not_static_linkable_switch_to_smart=09023_T_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᮡp ­ ¢ p¥¦¨¬¥ static, ¢ª«îç ¥¬ smart á¡®pªy
-exec_t_unit_not_smart_linkable_switch_to_static=09024_T_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᮡp ­ ¢ p¥¦¨¬¥ smart, ¢ª«îç ¥¬ static á¡®pªy
-exec_t_unit_not_shared_linkable_switch_to_static=09025_T_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᮡp ­ ¢ p¥¦¨¬¥ shared, ¢ª«îç ¥¬ static á¡®pªy
-exec_e_unit_not_smart_or_static_linkable=09026_E_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᮡp ­ ¢ p¥¦¨¬ å smart ¨«¨ static
+% ‘®§¤ ­¨¥ ¤¨­ ¬¨ç¥áª¨ § £à㦠¥¬ëå ¡¨¡«¨®â¥ª ¤«ï í⮩ ¯« âä®à¬ë ¥é¥ ­¥ ॠ«¨§®¢ ­® ¢ ª®¬¯¨«ïâ®à¥
+% ¨ ¯®â®¬ã ­¥¢®§¬®¦­®.
+exec_i_closing_script=09020_I_‘®§¤ ­ áªp¨¯â $1
+% ˆ­ä®à¬ æ¨ï ®¡ ®ª®­ç ­¨¨ § ¯¨á¨ áªà¨¯â  ¤«ï ¢­¥è­¥£®  áᥬ¡«¨à®¢ ­¨ï/ª®¬¯®­®¢ª¨.
+exec_e_res_not_found=09021_E_Š®¬¯¨«ïâ®p p¥áypᮢ "$1" ­¥ ­ ©¤¥­, ¯¥p¥å®¤ ¢® ¢­¥è­¨© ०¨¬
+% Žè¨¡ª  ¯à¨ § ¯ã᪥ ¢­¥è­¥£® ª®¬¯¨«ïâ®à  à¥áãàᮢ. Š®¬¯¨«ïâ®à á®§¤ áâ áªà¨¯â,
+% ¯®§¢®«ïî騩 ¢ë¯®«­¨âì ­¥ã¤ ¢è¨¥áï ¤¥©áâ¢¨ï ¨ § ¢¥àè¨âì á®§¤ ­¨¥ ¯à®£à ¬¬ë ¯®§¤­¥¥.
+exec_i_compilingresource=09022_I_Š®¬¯¨«ïæ¨ï p¥áypá  $1
+% ˆ­ä®à¬ æ¨ï ® ⮬, ª ª®© ä ©« à¥áãàᮢ ª®¬¯¨«¨àã¥âáï.
+exec_t_unit_not_static_linkable_switch_to_smart=09023_T_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᪮¬¯®­®¢ ­ áâ â¨ç¥áª¨, ¯¥à¥å®¤ ­  "㬭ãî" ª®¬¯®­®¢ªã
+% ‡ ¯à®è¥­  áâ â¨ç¥áª ï ª®¬¯®­®¢ª , ­® ¨á¯®«ì§®¢ ­­ë© ¬®¤ã«ì ­¥ ¤®¯ã᪠¥â íâ®â ०¨¬.
+exec_t_unit_not_smart_linkable_switch_to_static=09024_T_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᪮¬¯®­®¢ ­ ¢ "㬭®¬" p¥¦¨¬¥, ¯¥à¥å®¤ ­  áâ â¨ç¥áªãî ª®¬¯®­®¢ªã
+% ‡ ¯à®è¥­  "㬭 ï" ª®¬¯®­®¢ª , ­® ¨á¯®«ì§®¢ ­­ë© ¬®¤ã«ì ­¥ ¤®¯ã᪠¥â íâ®â ०¨¬.
+exec_t_unit_not_shared_linkable_switch_to_static=09025_T_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᪮¬¯®­®¢ ­ ¢ p¥¦¨¬¥ shared, ¯¥à¥å®¤ ­  áâ â¨ç¥áªãî ª®¬¯®­®¢ªã
+% ‡ ¯à®è¥­  à §¤¥«ï¥¬ ï ª®¬¯®­®¢ª , ­® ¨á¯®«ì§®¢ ­­ë© ¬®¤ã«ì ­¥ ¤®¯ã᪠¥â íâ®â ०¨¬.
+exec_e_unit_not_smart_or_static_linkable=09026_E_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᪮¬¯®­®¢ ­ ¢ p¥¦¨¬ å smart ¨«¨ static
+% ‡ ¯à®è¥­  "㬭 ï" ¨«¨ áâ â¨ç¥áª ï ª®¬¯®­®¢ª , ­® ¨á¯®«ì§®¢ ­­ë© ¬®¤ã«ì ­¥ ¤®¯ã᪠¥â ­¨ ®¤¨­ ¨§ íâ¨å ०¨¬®¢.
exec_e_unit_not_shared_or_static_linkable=09027_E_¬®¤y«ì $1 ­¥ ¬®¦¥â ¡ëâì ᮡp ­ ¢ p¥¦¨¬ å shared ¨«¨ static
-
+% ‡ ¯à®è¥­  à §¤¥«ï¥¬ ï ¨«¨ áâ â¨ç¥áª ï ª®¬¯®­®¢ª , ­® ¨á¯®«ì§®¢ ­­ë© ¬®¤ã«ì ­¥ ¤®¯ã᪠¥â ­¨ ®¤¨­ ¨§ íâ¨å ०¨¬®¢.
+exec_d_resbin_params=09028_D_‚ë§®¢ ª®¬¯¨«ïâ®à  à¥áãàᮢ "$1" á ª®¬ ­¤­®© áâப®© "$2"
+% ˆ­ä®à¬ æ¨ï ®¡ ¨á¯®«ì§ã¥¬®¬ ª®¬¯¨«ïâ®à¥ à¥áãàᮢ ¨ ¥£® ª®¬ ­¤­®© áâப¥.
+exec_e_error_while_compiling_resources=09029_E_Žè¨¡ª  ¯à¨ ª®¬¯¨«ï樨 à¥áãàᮢ
+% Š®¬¯¨«ïâ®à ¨«¨ ª®­¢¥àâ®à à¥áãàᮢ § ¢¥à訫áï á ®è¨¡ª®©.
+exec_e_cant_call_resource_compiler=09030_E_‚ë§®¢ ª®¬¯¨«ïâ®à  à¥áãàᮢ "$1" ­¥¢®§¬®¦¥­, ¯¥à¥å®¤ ¢® ¢­¥è­¨© ०¨¬
+% Žè¨¡ª  ¯à¨ ¢ë§®¢¥ ª®¬¯¨«ïâ®à  à¥áãàᮢ. Š®¬¯¨«ïâ®à á®§¤ áâ áªà¨¯â,
+% ¯®§¢®«ïî騩 ¯®¢â®à¨âì ­¥ã¤ ¢è¨¥áï ¤¥©áâ¢¨ï ¨ § ¢¥àè¨âì á®§¤ ­¨¥ ¯à®£à ¬¬ë
+% ¯®§¤­¥¥.
+exec_e_cant_open_resource_file=09031_E_¥¢®§¬®¦­® ®âªàëâì ä ©« à¥áãàᮢ "$1"
+% Žè¨¡ª  ¯à¨ ®âªàë⨨ 㪠§ ­­®£® ä ©«  à¥áãàᮢ.
+exec_e_cant_write_resource_file=09032_E_Žè¨¡ª  § ¯¨á¨ ä ©«  à¥áãàᮢ "$1"
+% Žè¨¡ª  ¯à¨ § ¯¨á¨ 㪠§ ­­®£® ä ©«  à¥áãàᮢ.
+%\end{description}
+# EndOfTeX
#
# Executable information
#
-execinfo_f_cant_process_executable=09028_F_H¥ ¬®¦¥¬ ¨á¯®«­¨âì ¨á¯®«­ï¥¬ë© ¬®¤y«ì $1
-execinfo_f_cant_open_executable=09029_F_H¥ ¬®£y ®âªpëâì ¨á¯®«­ï¥¬ë© ¬®¤y«ì $1
-execinfo_x_codesize=09030_X_ §¬¥p ª®¤ : $1 ¡ ©â
-execinfo_x_initdatasize=09031_X_ §¬¥p ¨­¨æ¨ «¨§¨pyî饩 ç áâ¨: $1 ¡ ©â
-execinfo_x_uninitdatasize=09032_X_ §¬¥p ¤¥-¨­¨æ¨ «¨§¨pyî饩 ç áâ¨: $1 ¡ ©â
-execinfo_x_stackreserve=09033_X_‡ p¥§¥p¢¨p®¢ ­­® á⥪ : $1 ¡ ©â
-execinfo_x_stackcommit=09034_X_ˆá¯®«ì§®¢ ­® á⥪ : $1 ¡ ©â
+# 09134 is the last used one
+#
+# BeginOfTeX
+% \section{ˆ­ä®à¬ æ¨ï ®¡ ¨á¯®«­ï¥¬ëå ä ©« å.}
+% ‘®¤¥à¦¨â á®®¡é¥­¨ï, ¢ë¤ ¢ ¥¬ë¥ ¯à¨ á®§¤ ­¨¨ ¨á¯®«­ï¥¬®£® ä ©« 
+% á ¨á¯®«ì§®¢ ­¨¥¬ ¢­ãâ७­¥£® ª®¬¯®­®¢é¨ª .
+% \begin{description}
+execinfo_f_cant_process_executable=09128_F_®áâ-®¡à ¡®âª  ¨á¯®«­ï¥¬®£® ä ©«  $1 ­¥¢®§¬®¦­ 
+% ” â «ì­ ï ®è¨¡ª  ¯à¨ ­¥¢®§¬®¦­®á⨠¯®áâ-®¡à ¡®âª¨ ¨á¯®«­ï¥¬®£® ä ©« .
+execinfo_f_cant_open_executable=09129_F_¥¢®§¬®¦­® ®âªàëâì ¨á¯®«­ï¥¬ë© ä ©« $1
+% ” â «ì­ ï ®è¨¡ª  ¯à¨ ­¥¢®§¬®¦­®á⨠®âªàëâì ¨á¯®«­ï¥¬ë© ä ©«.
+execinfo_x_codesize=09130_X_ §¬¥à ª®¤ : $1 ¡ ©â
+% ˆ­ä®à¬ æ¨ï ® à §¬¥à¥ á®§¤ ­­®© ᥪ樨 ª®¤ .
+execinfo_x_initdatasize=09131_X_ §¬¥à ¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå: $1 ¡ ©â
+% ˆ­ä®à¬ æ¨ï ® à §¬¥à¥ á®§¤ ­­®© ᥪ樨 ¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå.
+execinfo_x_uninitdatasize=09132_X_ §¬¥à ­¥¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå: $1 bytes
+% ˆ­ä®à¬ æ¨ï ® à §¬¥à¥ ᥪ樨 ­¥¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå.
+execinfo_x_stackreserve=09133_X_ §¬¥à á⥪  (§ à¥§¥à¢¨à®¢ ­­ë©): $1 bytes
+% ˆ­ä®à¬ æ¨ï ® § à¥§¥à¢¨à®¢ ­­®¬ à §¬¥à¥ á⥪  ¨á¯®«­ï¥¬®£® ä ©« .
+execinfo_x_stackcommit=09134_X_ §¬¥à á⥪  (¯®¤ª«î祭­ë©): $1 bytes
+% ˆ­ä®à¬ æ¨ï ® ¯®¤ª«î祭­®¬ à §¬¥à¥ á⥪  ¨á¯®«­ï¥¬®£® ä ©« .
+%\end{description}
+# EndOfTeX
+
+#
+# Internal linker messages
+#
+# 09200 is the last used one
+#
+# BeginOfTeX
+% \section{‘®®¡é¥­¨ï ª®¬¯®­®¢é¨ª }
+% ‘®®¡é¥­¨ï, ¢ë¤ ¢ ¥¬ë¥ ¢­ãâ७­¨¬ ª®¬¯®­®¢é¨ª®¬.
+% \begin{description}
+link_f_executable_too_big=09200_F_ §¬¥à ¨á¯®«­ï¥¬®£® ®¡à §  ᫨誮¬ ¢¥«¨ª ¤«ï ¯« âä®à¬ë $1.
+% ” â «ì­ ï ®è¨¡ª , ¢®§­¨ª îé ï ¢ á«ãç ¥, ¥á«¨ á®§¤ ­­ë© ¨á¯®«­ï¥¬ë© ä ©« ᫨誮¬ ¢¥«¨ª.
+link_w_32bit_absolute_reloc=09201_W_Ž¡ê¥ªâ­ë© ä ©« "$1" ᮤ¥à¦¨â 32-¡¨â­®¥  ¡á®«îâ­®¥ ¯¥à¥¬¥é¥­¨¥ ¤«ï ᨬ¢®«  "$2".
+% ‚ á«ãç ¥, ª®£¤  64-¡¨â­ë© ®¡ê¥ªâ­ë© ä ©« ᮤ¥à¦¨â 32-¡¨â­ë¥  ¡á®«îâ­ë¥ ¯¥à¥¬¥é¥­¨ï,
+% ¯®«ã祭­ë© ¨á¯®«­ï¥¬ë© ®¡à § ¬®¦¥â ¡ëâì § £à㦥­ ⮫쪮 ¢ ­¨¦­¨¥ 4 ƒ  ¤à¥á­®£®
+% ¯à®áâà ­á⢠.
+%\end{description}
+# EndOfTeX
+#
# Unit loading
#
+# 10061 is the last used one
+#
# BeginOfTeX
-% \section{Unit loading messages.}
-% This section lists all messages that can occur when the compiler is
-% loading a unit from disk into memory. Many of these mesages are
-% informational messages.
+% \section{‘®®¡é¥­¨ï § £à㧪¨ ¬®¤ã«¥©.}
+% ‘®®¡é¥­¨ï, ¢ë¤ ¢ ¥¬ë¥ ¯à¨ § £à㧪¥ ¬®¤ã«¥© á ¤¨áª  ¢ ¯ ¬ïâì.
+% Œ­®£¨¥ ¨§ ­¨å ­®áïâ ¨­ä®à¬ æ¨®­­ë© å à ªâ¥à.
% \begin{description}
-unit_t_unitsearch=10000_T_®¨áª ¬®¤y«¥©: $1
-% When you use the \var{-vt}, the compiler tells you where it tries to find
-% unit files.
-unit_t_ppu_loading=10001_T_PPU § £py¦ ¥âáï $1
-% When the \var{-vt} switch is used, the compiler tells you
-% what units it loads.
-unit_u_ppu_name=10002_U_PPU ¨¬ï: $1
-% When you use the \var{-vu} flag, the unit name is shown.
-unit_u_ppu_flags=10003_U_PPU ä« £¨: $1
-% When you use the \var{-vu} flag, the unit flags are shown.
-unit_u_ppu_crc=10004_U_PPU CRC: $1
-% When you use the \var{-vu} flag, the unit CRC check is shown.
-unit_u_ppu_time=10005_U_PPU ¢p¥¬ï: $1
-% When you use the \var{-vu} flag, the time the unit was compiled is shown.
+unit_t_unitsearch=10000_T_®¨áª ¬®¤y«ï: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} á®®¡é ¥â ® ⮬, £¤¥ ª®¬¯¨«ïâ®à ¨é¥â
+% ä ©«ë ¬®¤ã«¥©.
+unit_t_ppu_loading=10001_T_‡ £py§ª  PPU $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vt} á®®¡é ¥â ¨¬ï ä ©«  § £à㦠¥¬®£® ¬®¤ã«ï.
+unit_u_ppu_name=10002_U_ˆ¬ï PPU: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ¨¬ï ¬®¤ã«ï.
+unit_u_ppu_flags=10003_U_”« £¨ PPU: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯®ª §ë¢ ¥â ä« £¨ ¬®¤ã«ï.
+unit_u_ppu_crc=10004_U_CRC PPU: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯®ª §ë¢ ¥â ª®­â஫ì­ãî á㬬㠬®¤ã«ï.
+unit_u_ppu_time=10005_U_∴• PPU: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯®ª §ë¢ ¥â ¢à¥¬ï, ª®£¤  ¬®¤ã«ì ¡ë« ᪮¬¯¨«¨à®¢ ­.
unit_u_ppu_file_too_short=10006_U_PPU ä ©« ᫨誮¬ ª®p®âª¨©
-% The ppufile is too short, not all declarations are present.
-unit_u_ppu_invalid_header=10007_U_H¥¢¥p­ë© § £®«®¢®ª PPU (­¥â PPU ¬¥âª¨ ¢­ ç «¥)
-% A unit file contains as the first three bytes the ascii codes of \var{PPU}
+% ” ©« ¬®¤ã«ï ᫨誮¬ ª®à®âª¨©, ¢ ­¥¬ ᮤ¥à¦ âáï ­¥ ¢á¥ ®¡ê¥­¨ï.
+unit_u_ppu_invalid_header=10007_U_H¥¢¥p­ë© § £®«®¢®ª PPU (­¥â ᨣ­ âãàë PPU ¢ ­ ç «¥)
+% ¥à¢ë¬¨ âà¥¬ï ¡ ©â ¬¨ ä ©«  PPU ¤®«¦­ë ¡ëâì ª®¤ë ᨬ¢®«®¢ \var{PPU}
unit_u_ppu_invalid_version=10008_U_H¥¢¥p­ ï ¢¥pá¨ï PPU ä ©«  $1
-% This unit file was compiled with a different version of the compiler, and
-% cannot be read.
-unit_u_ppu_invalid_processor=10009_U_PPU ä ©« ®âª®¬¯¨«¨p®¢ ­ ¤«ï ¤py£®£® ¯p®æ¥áá®p 
-% This unit file was compiled for a different processor type, and
-% cannot be read
-unit_u_ppu_invalid_target=10010_U_PPU ä ©« ®âª®¬¯¨«¨p®¢ ­ ¤«ï ¤py£®© OS
-% This unit file was compiled for a different processor type, and
-% cannot be read
-unit_u_ppu_source=10011_U_PPU ¨áâ®ç­¨ª: $1
-% When you use the \var{-vu} flag, the unit CRC check is shown.
-unit_u_ppu_write=10012_U_‡ ¯¨á뢠¥¬ $1
-% When you specify the \var{-vu} switch, the compiler will tell you where it
-% writes the unit file.
-unit_f_ppu_cannot_write=10013_F_H¥ ¬®£y § ¯¨á âì PPU-ä ©«
-% An error occurred when writing the unit file.
-unit_f_ppu_read_error=10014_F_—¨â ¥¬ PPU-ä ©«
-% This means that the unit file was corrupted, and contains invalid
-% information. Recompilation will be necessary.
-unit_f_ppu_read_unexpected_end=10015_F_¥®¦¨¤ ­­ë© ª®­¥æ y PPU-ä ©« 
-% Unexpected end of file.
-unit_f_ppu_invalid_entry=10016_F_H¥¯p ¢¨«ì­ë© ¢å®¤ ¢ PPU-ä ©«: $1
-% The unit the compiler is trying to read is corrupted, or generated with a
-% newer version of the compiler.
-unit_f_ppu_dbx_count_problem=10017_F_PPU DBX COUNT ¯p®¡«¥¬ 
-% There is an inconsistency in the debugging information of the unit.
+% “ª § ­­ë© ä ©« ¬®¤ã«ï ¡ë« á®§¤ ­ ¤à㣮© ¢¥àᨥ© ª®¬¯¨«ïâ®à , ¨ ¯®í⮬㠭¥ ¬®¦¥â ¡ëâì
+% ¯à®ç¨â ­.
+unit_u_ppu_invalid_processor=10009_U_PPU ä ©« á®§¤ ­ ¤«ï ¤py£®£® ¯p®æ¥áá®p 
+% â®â ¬®¤ã«ì ¡ë« ᪮¬¯¨«¨à®¢ ­ ¤«ï ¤à㣮£® ⨯  ¯à®æ¥áá®à , ¨ ¯®í⮬㠭¥ ¬®¦¥â
+% ¡ëâì ¯à®ç¨â ­.
+unit_u_ppu_invalid_target=10010_U_PPU ä ©« á®§¤ ­ ¤«ï ¤py£®© Ž‘
+% â®â ¬®¤ã«ì ¡ë« ᪮¬¯¨«¨à®¢ ­ ¤«ï ¤à㣮© ®¯¥à æ¨®­­®© á¨á⥬ë, ¨ ¯®í⮬㠭¥ ¬®¦¥â
+% ¡ëâì ¯à®ç¨â ­.
+unit_u_ppu_source=10011_U_ˆá室­ë© ä ©« PPU: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯®ª §ë¢ ¥â ¨¬ï ¨á室­®£® ä ©«  ¬®¤ã«ï.
+unit_u_ppu_write=10012_U_‡ ¯¨áì $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â, ªã¤  ª®¬¯¨«ïâ®à § ¯¨á뢠¥â
+% ä ©« ¬®¤ã«ï.
+unit_f_ppu_cannot_write=10013_F_H¥¢®§¬®¦­® § ¯¨á âì PPU-ä ©«
+% ਠ§ ¯¨á¨ ä ©«  ¬®¤ã«ï ¯à®¨§®è«  ®è¨¡ª .
+unit_f_ppu_read_error=10014_F_Žè¨¡ª  ç⥭¨ï PPU-ä ©« 
+% ” ©« ¬®¤ã«ï ¯®¢à¥¦¤¥­ ¨ ᮤ¥à¦¨â ­¥¢¥à­ãî
+% ¨­ä®à¬ æ¨î. ®âॡã¥âáï ४®¬¯¨«ïæ¨ï.
+unit_f_ppu_read_unexpected_end=10015_F_¥®¦¨¤ ­­ë© ª®­¥æ PPU-ä ©« 
+% ¥®¦¨¤ ­­ë© ª®­¥æ ä ©« .
+unit_f_ppu_invalid_entry=10016_F_H¥¢¥à­ ï § ¯¨áì PPU-ä ©« : $1
+% ” ©« ¬®¤ã«ï ¯®¢à¥¦¤¥­, ¨«¨ ¡ë« á®§¤ ­ ¡®«¥¥ ­®¢®© ¢¥àᨥ© ª®¬¯¨«ïâ®à .
+unit_f_ppu_dbx_count_problem=10017_F_Žè¨¡ª  PPU DBX count
+% ¥áâ몮¢ª¨ ¢ ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨ ¬®¤ã«ï.
unit_e_illegal_unit_name=10018_E_H¥¢¥p­®¥ ¨¬ï ¬®¤y«ï: $1
-% The name of the unit doesn't match the file name.
+% ˆ¬ï ¬®¤ã«ï ­¥ ᮢ¯ ¤ ¥â á ¨¬¥­¥¬ ä ©«  ¬®¤ã«ï.
unit_f_too_much_units=10019_F_‘«¨èª®¬ ¬­®£® ¬®¤y«¥©
-% \fpc has a limit of 1024 units in a program. You can change this behavior
-% by changing the \var{maxunits} constant in the \file{files.pas} file of the
-% compiler, and recompiling the compiler.
-unit_f_circular_unit_reference=10020_F_Špy£®¢ ï áá뫪  ¬®¤y«ï ¬¥¦¤y $1 ¨ $2
-% Two units are using each other in the interface part. This is only allowed
-% in the \var{implementation} part. At least one unit must contain the other one
-% in the \var{implementation} section.
-unit_f_cant_compile_unit=10021_F_H¥ ¬®£y ®âª®¬¯¨«¨p®¢ âì ¬®¤y«ì $1. H¥ ¬®£y ­ ©â¨ ¨á室­¨ª®¢.
-% A unit was found that needs to be recompiled, but no sources are
-% available.
-unit_f_cant_find_ppu=10022_F_H¥ ¬®£y ­ ©â¨ PPU ä ©« $1.
-% You tried to use a unit of which the PPU file isn't found by the
-% compiler. Check your config files for the unit pathes
+% Š®¬¯¨«ïâ®à ¨¬¥¥â ¯à¥¤¥« 1024 ¬®¤ã«ï ¢ ¯à®£à ¬¬¥. …£® ¬®¦­® 㢥«¨ç¨âì,
+% ¨§¬¥­¨¢ §­ ç¥­¨¥ ª®­áâ ­âë \var{maxunits} ¢ ä ©«¥ \file{files.pas} ª®¬¯¨«ïâ®à ,
+% ¨ ¯¥à¥ª®¬¯¨«¨à®¢ ¢ ª®¬¯¨«ïâ®à.
+unit_f_circular_unit_reference=10020_F_Š®«ì楢 ï áá뫪  ¬¥¦¤y ¬®¤ã«ï¬¨ $1 ¨ $2
+% „¢  ¬®¤ã«ï ¨á¯®«ì§ãîâ ¤à㣠¤à㣠 ¢ ¨­â¥à䥩᭮© ᥪ樨. â® à §à¥è¥­® ⮫쪮 ¢
+% ᥪ樨 \var{implementation}. ® ªà ©­¥© ¬¥à¥ ®¤¨­ ¨§ ¬®¤ã«¥© ¤®«¦¥­ ᮤ¥à¦ âì
+% áá뫪㠭  ¤à㣮© ¢ ᥪ樨 \var{implementation}.
+unit_f_cant_compile_unit=10021_F_Š®¬¯¨«ïæ¨ï ¬®¤y«ï $1 ­¥¢®§¬®¦­ , ®âáãâáâ¢ãîâ ¨á室­¨ª¨.
+%  ©¤¥­ ¬®¤ã«ì, âॡãî騩 ¯¥à¥ª®¬¯¨«ï樨, ­® ¨á室­ë¥ ä ©«ë ¤«ï ­¥£® ®âáãâáâ¢ãîâ.
+unit_f_cant_find_ppu=10022_F_H¥ ­ ©¤¥­ ¬®¤ã«ì $1, ¨á¯®«ì§ã¥¬ë© $2
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï ¬®¤ã«ï, ¤«ï ª®â®à®£® ­¥ ­ ©¤¥­ ä ©« PPU.
+% ஢¥àì⥠¯ã⨠¬®¤ã«¥© ¢ ä ©«¥ ª®­ä¨£ãà æ¨¨.
unit_w_unit_name_error=10023_W_Œ®¤ã«ì $1 ­¥ ­ ©¤¥­, ­® $2 áãé¥áâ¢ã¥â
-unit_f_unit_name_error=10024_F_Œ®¤ã«ì $1 ¨áª «¨, ­® ­ è«¨ ¬®¤ã«ì $2
-% Dos truncation of 8 letters for unit PPU files
-% may lead to problems when unit name is longer than 8 letters.
-unit_w_switch_us_missed=10025_W_’p¥¡y¥âáï ª®¬¯¨«¨p®¢ ­¨¥ á¨á⥬­®£® ¬®¤y«ï. ˆá¯®«ì§y©â¥ ª«îç -Us
-% When recompiling the system unit (it needs special treatment), the
-% \var{-Us} must be specified.
-unit_f_errors_in_unit=10026_F_Ž¡­ py¦¥­® $1 ®è¨¡®ª ¯p¨ ª®¬¯¨«¨p®¢ ­¨¨ ¬®¤y«ï, ®áâ ­ ¢«¨¢ ¥¬áï
-% When the compiler encounters a fatal error or too many errors in a module
-% then it stops with this message.
+% ®«ìè¥ ­¥ ¨á¯®«ì§ã¥âáï.
+unit_f_unit_name_error=10024_F_ਠ¯®¨áª¥ ¬®¤ã«ï $1 ¡ë« ­ ©¤¥­ $2
+% Ž£à ­¨ç¥­¨¥ DOS ­  ¤«¨­ã ¨¬¥­ ä ©«®¢ ¢ 8 ᨬ¢®«®¢ ¬®¦¥â ¢ë§ë¢ âì
+% ¯à®¡«¥¬ë, ¥á«¨ ¨¬ï ¬®¤ã«ï ¨¬¥¥â ¡®«ìèãî ¤«¨­ã.
+unit_w_switch_us_missed=10025_W_„«ï ª®¬¯¨«ï樨 ¬®¤ã«ï system âॡã¥âáï ª«îç -Us
+% ਠª®¬¯¨«ï樨 ¬®¤ã«ï system (âॡãî饣® ®á®¡®© ®¡à ¡®âª¨), á«¥¤ã¥â
+% 㪠§ë¢ âì ª«îç \var{-Us}.
+unit_f_errors_in_unit=10026_F_p¨ ª®¬¯¨«ï樨 ¬®¤y«ï ¯à®¨§®è«® $1 ®è¨¡®ª, à ¡®â  ¯à¥à¢ ­ 
+% Š®¬¯¨«ïâ®à ¯à¥ªà é ¥â à ¡®âã á í⨬ á®®¡é¥­¨¥¬ ¯à¨ ¢®§­¨ª­®¢¥­¨¨ ä â «ì­®© ®è¨¡ª¨,
+% ¨«¨ ¯à¨ ¯à¥¢ë襭¨¨ ¯à¥¤¥«ì­®£® ª®«¨ç¥á⢠ ®è¨¡®ª.
unit_u_load_unit=10027_U_‡ £py§ª  ¨§ $1 ($2) ¬®¤y«ì $3
-% When you use the \var{-vu} flag, which unit is loaded from which unit is
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â, ª®â®àë© ¬®¤ã«ì ®âªã¤  § £à㦠¥âáï.
% shown.
-unit_u_recompile_crc_change=10028_U_¥p¥ª®¬¯¨«¨p®¢ ­¨¥ $1, ª®­âp®«ì­ ï áy¬¬  y $2 ¨§¬¥­¥­ 
-unit_u_recompile_source_found_alone=10029_U_¥p¥ª®¬¯¨«¨p®¢ ­¨¥ $1, â ª ª ª ­ ©¤¥­ë ⮫쪮 ¨á室­¨ª¨
-% When you use the \var{-vu} flag, these messages tell you why the current
-% unit is recompiled.
-unit_u_recompile_staticlib_is_older=10030_U_¥p¥ª®¬¯¨«¨p®¢ ­¨¥ ¬®¤y«ï, â ª ª ª ¡¨¡«¨®â¥ª  (static) áâ pè¥ ç¥¬ ppu-ä ©«
-% When you use the \var{-vu} flag, the compiler warns if the static library
-% of the unit are older than the unit file itself.
-unit_u_recompile_sharedlib_is_older=10031_U_¥p¥ª®¬¯¨«¨p®¢ ­¨¥ ¬®¤y«ï, â ª ª ª ¡¨¡«¨®â¥ª  (shared) áâ pè¥ ç¥¬ ppu-ä ©«
-% When you use the \var{-vu} flag, the compiler warns if the shared library
-% of the unit are older than the unit file itself.
-unit_u_recompile_obj_and_asm_older=10032_U_¥p¥ª®¬¯¨«¨p®¢ ­¨¥ ¬®¤y«ï, â ª ª ª .as ¨ .obj ä ©« áâ pè¥ ç¥¬ ppu-ä ©«
-% When you use the \var{-vu} flag, the compiler warns if the assembler or
-% object file of the unit are older than the unit file itself.
-unit_u_recompile_obj_older_than_asm=10033_U_¥p¥ª®¬¯¨«¨p®¢ ­¨¥ ¬®¤y«ï, â ª ª ª .obj ä ©« áâ pè¥ ç¥¬ .as ä ©«
-% When you use the \var{-vu} flag, the compiler warns if the assembler
-% file of the unit is older than the object file of the unit.
-unit_u_start_parse_interface=10034_U_€­ «¨§¨à㥬 ¨­â¥p䥩á­ãî ç áâì $1
-% When you use the \var{-vu} flag, the compiler warns that it starts
-% parsing the interface part of the unit
-unit_u_start_parse_implementation=10035_U_€­ «¨§¨à㥬 p¥ «¨§ æ¨®­­ãî ç áâì $1
-% When you use the \var{-vu} flag, the compiler warns that it starts
-% parsing the implementation part of the unit
-unit_u_second_load_unit=10036_U_‚â®p ï § £py§ª  ¤«ï ¬®¤y«ï $1
-% When you use the \var{-vu} flag, the compiler warns that it starts
-% recompiling a unit for the second time. This can happend with interdepend
-% units.
-unit_u_check_time=10037_U_PPU ¯p®¢¥pª  ä ©«  $1 ¢p¥¬ï $2
-unit_h_cond_not_set_in_last_compile=10038_H_“á«®¢­®¥ ¢ëp ¦¥­¨¥ $1 ­¥ ¡ë«® yáâ ­®¢«¥­® ¯p¨ ¯®á«¥¤­¥© ª®¬¯¨«ï樨 $2
-% when recompilation of an unit is required the compiler will check that
-% the same conditionals are set for the recompiliation. The compiler has
-% found a conditional that currently is defined, but was not used the last
-% time the unit was compiled.
-unit_h_cond_set_in_last_compile=10039_H_“á«®¢­®¥ ¢ëp ¦¥­¨¥ $1 ¡ë«® yáâ ­®¢«¥­® ¯p¨ ¯®á«¥¤­¥© ª®¬¯¨«ï樨 $2
-% when recompilation of an unit is required the compiler will check that
-% the same conditionals are set for the recompiliation. The compiler has
-% found a conditional that was used the last time the unit was compiled, but
-% the conditional is currently not defined.
-unit_w_cant_compile_unit_with_changed_incfile=10040_W_ ©¤¥­ ¬®¤ã«ì $1 âॡãî騩 ᡮન, ­® ­¥ª®â®àë¥ ¢ª«îç ¥¬ë¥ ä ©«ë ­¥ ­ ©¤¥­ë
-% A unit was found to have modified include files, but
-% some source files were not found, so recompilation is impossible.
-unit_h_source_modified=10041_H_” ©« $1 ­®¢¥¥ 祬 ä ©« $2 ($2 á ä« £®¬ Release PPU)
-% A modified source file for a unit was found that was compiled with the
-% release flag (-Ur). The unit will not implicitly be recompiled because
-% this release flag is set.
+unit_u_recompile_crc_change=10028_U_¥p¥ª®¬¯¨«ïæ¨ï $1, ¨§¬¥­¨« áì ª®­âp®«ì­ ï áy¬¬  $2
+% Œ®¤ã«ì ¯¥à¥ª®¬¯¨«¨àã¥âáï, ¯®â®¬ã çâ® ¨§¬¥­¨« áì ª®­â஫쭠ï á㬬  ¬®¤ã«ï, ®â ª®â®à®£®
+% ®­ § ¢¨á¨â.
+unit_u_recompile_source_found_alone=10029_U_¥p¥ª®¬¯¨«ïæ¨ï $1, ­ ©¤¥­ë ⮫쪮 ¨á室­ë¥ ä ©«ë
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ¯à¨ç¨­ã ¯¥à¥ª®¬¯¨«ï樨 㪠§ ­­®£® ¬®¤ã«ï.
+unit_u_recompile_staticlib_is_older=10030_U_¥p¥ª®¬¯¨«ïæ¨ï ¬®¤y«ï, áâ â¨ç¥áª ï ¡¨¡«¨®â¥ª  áâ pè¥ ç¥¬ ppu-ä ©«
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® áâ â¨ç¥áª ï ¡¨¡«¨®â¥ª  ¬®¤ã«ï
+% áâ àè¥, 祬 ppu-ä ©« ¬®¤ã«ï.
+unit_u_recompile_sharedlib_is_older=10031_U_¥p¥ª®¬¯¨«ïæ¨ï ¬®¤y«ï, à §¤¥«ï¥¬ ï ¡¨¡«¨®â¥ª  áâ pè¥ ç¥¬ ppu-ä ©«
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® à §¤¥«ï¥¬ ï ¡¨¡«¨®â¥ª  ¬®¤ã«ï
+% áâ àè¥, 祬 ppu-ä ©« ¬®¤ã«ï.
+unit_u_recompile_obj_and_asm_older=10032_U_¥p¥ª®¬¯¨«ïæ¨ï ¬®¤y«ï, .as ¨ .obj ä ©«ë áâ pè¥ ç¥¬ ppu-ä ©«
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ®  áᥬ¡«¥à­ë© ¨«¨ ®¡ê¥ªâ­ë© ä ©« ¬®¤ã«ï
+% áâ àè¥, 祬 ppu-ä ©« ¬®¤ã«ï.
+unit_u_recompile_obj_older_than_asm=10033_U_¥p¥ª®¬¯¨«ïæ¨ï ¬®¤y«ï, .obj ä ©« áâ pè¥ ç¥¬ .as ä ©«
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ®¡ê¥ªâ­ë© ä ©« ¬®¤ã«ï
+% áâ àè¥, 祬 ¥£®  áᥬ¡«¥à­ë© ä ©«.
+unit_u_parsing_interface=10034_U_€­ «¨§ ¨­â¥pä¥©á  $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ­ ç «¥  ­ «¨§ 
+% ¨­â¥à䥩᭮© ç á⨠¬®¤ã«ï.
+unit_u_parsing_implementation=10035_U_€­ «¨§ p¥ «¨§ æ¨¨ $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ­ ç «¥  ­ «¨§ 
+% ॠ«¨§ æ¨®­­®© ç á⨠¬®¤ã«ï.
+unit_u_second_load_unit=10036_U_®¢â®à­ ï § £py§ª  ¬®¤y«ï $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ­ ç «¥ ¯®¢â®à­®© ª®¬¯¨«ï樨
+% ¬®¤ã«ç. â® ¬®¦¥â ¯à®¨á室¨âì ¯à¨ ­ «¨ç¨¨ ¢§ ¨¬®§ ¢¨á¨¬ëå ¬®¤ã«¥©.
+unit_u_check_time=10037_U_஢¥àª  PPU ä ©«  $1 ¢p¥¬ï $2
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯®ª §¢ ¥â ¨¬ï ¨ ¤ âã/¢à¥¬ï ä ©« ,
+% ®â ª®â®à®£® § ¢¨á¨â ४®¬¯¨«ïæ¨ï.
+### The following two error msgs is currently disabled.
+#unit_h_cond_not_set_in_last_compile=10038_H_“á«®¢­®¥ ¢ëp ¦¥­¨¥ $1 ­¥ ¡ë«® yáâ ­®¢«¥­® ¯p¨ ¯®á«¥¤­¥© ª®¬¯¨«ï樨 $2
+#% when recompilation of an unit is required the compiler will check that
+#% the same conditionals are set for the recompiliation. The compiler has
+#% found a conditional that currently is defined, but was not used the last
+#% time the unit was compiled.
+#unit_h_cond_set_in_last_compile=10039_H_“á«®¢­®¥ ¢ëp ¦¥­¨¥ $1 ¡ë«® yáâ ­®¢«¥­® ¯p¨ ¯®á«¥¤­¥© ª®¬¯¨«ï樨 $2
+#% when recompilation of an unit is required the compiler will check that
+#% the same conditionals are set for the recompiliation. The compiler has
+#% found a conditional that was used the last time the unit was compiled, but
+#% the conditional is currently not defined.
+unit_w_cant_compile_unit_with_changed_incfile=10040_W_ ©¤¥­ë ¨§¬¥­¥­­ë¥ ¢ª«îç ¥¬ë¥ ä ©«ë, ­® ª®¬¯¨«ïæ¨ï $1 ­¥¢®§¬®¦­ 
+% Ž¡­ à㦥­® ¨§¬¥­¥­¨¥ ¢ª«îç ¥¬ëå ä ©«®¢ ¬®¤ã«ï, ­® ­¥ª®â®àë¥ ¨á室­ë¥ ä ©«ë
+% ­¥ ­ ©¤¥­ë, ¯®í⮬ã ४®¬¯¨«ïæ¨ï ­¥¢®§¬®¦­ .
+unit_u_source_modified=10041_U_” ©« $1 ­®¢¥¥, 祬 $2
+%  ©¤¥­ ¨§¬¥­¥­­ë© ¨á室­ë© ä ©« ¬®¤ã«ï.
+unit_u_ppu_invalid_fpumode=10042_U_®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï ¬®¤ã«ï, ᪮¬¯¨«¨à®¢ ­­®£® á ¤à㣨¬ ०¨¬®¬ á®¯à®æ¥áá®à 
+% ®¯ë⪠ ¨á¯®«ì§®¢ ­¨ï ¬®¤ã«¥©, ª®â®àë¥ ¡ë«¨ ᪮¬¯¨«¨à®¢ ­ë á ®â«¨ç î騬áï ०¨¬®¬
+% ä®à¬ â  ¯« ¢ î饩 § ¯ï⮩. ‚ᥠ¬®¤ã«¨ ¤®«¦­ë ¡ëâì ᪮¬¯¨«¨à®¢ ­ë «¨¡® á ¢ª«î祭­®©
+% í¬ã«ï樥© á®¯à®æ¥áá®à , «¨¡® á ®âª«î祭­®©, ­® ­¥ ¢¯¥à¥¬¥èªã.
+unit_u_loading_interface_units=10043_U_‡ £à㧪  ¬®¤ã«¥© ¨§ ¨­â¥à䥩᭮© ç á⨠$1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ­ ç «¥ § £à㧪¨ ¬®¤ã«¥©,
+% ¨á¯®«ì§ã¥¬ëå ¢ ¨­â¥à䥩᭮© ç á⨠㪠§ ­­®£® ¬®¤ã«ï.
+unit_u_loading_implementation_units=10044_U_‡ £à㧪  ¬®¤ã«¥© ¨§ ॠ«¨§ æ¨®­­®© ç á⨠$1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ­ ç «¥ § £à㧪¨ ¬®¤ã«¥©,
+% ¨á¯®«ì§ã¥¬ëå ¢ ॠ«¨§ æ¨®­­®© ç á⨠㪠§ ­­®£® ¬®¤ã«ï.
+unit_u_interface_crc_changed=10045_U_“ ¬®¤ã«ï $1 ¨§¬¥­¨« áì ª®­â஫쭠ï á㬬  ¨­â¥à䥩á 
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ª®­â஫쭠ï á㬬 ,
+% ¢ëç¨á«¥­­ ï ¤«ï ¨­â¥à䥩᭮© ç á⨠¬®¤ã«ï, ¨§¬¥­¨« áì ¯®á«¥ à §¡®à  ¥£® ॠ«¨§ æ¨®­­®©
+% ç áâ¨.
+unit_u_implementation_crc_changed=10046_U_“ ¬®¤ã«ï $1 ¨§¬¥­¨« áì ª®­â஫쭠ï á㬬  ॠ«¨§ æ¨¨
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â, çâ® ª®­â஫쭠ï á㬬  ¬®¤ã«ï
+% ¨§¬¥­¨« áì ¯®á«¥ à §¡®à  ¥£® ॠ«¨§ æ¨®­­®© ç áâ¨.
+unit_u_finished_compiling=10047_U_‡ ¢¥à襭  ª®¬¯¨«ïæ¨ï ¬®¤ã«ï $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® § ¢¥à襭¨ ª®¬¯¨«ï樨 ¬®¤ã«ï.
+unit_u_add_depend_to=10048_U_„®¡ ¢«¥­  § ¢¨á¨¬®áâì $1 ®â $2
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ¡ë«  ¤®¡ ¢«¥­ 
+% § ¢¨á¨¬®áâì ¬¥¦¤ã ¤¢ã¬ï ¬®¤ã«ï¬¨.
+unit_u_no_reload_is_caller=10049_U_¥§ ¯¥à¥§ £à㧪¨, íâ® ¨­¨æ¨ â®à: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯à¥¤ã¯à¥¦¤ ¥â ® ⮬, çâ®
+% ¬®¤ã«ì ­¥ ¡ã¤¥â ¯¥à¥§ £à㦥­, ¯®â®¬ã çâ® ®­ á ¬ ï¥âáï ¨­¨æ¨ â®à®¬ ᢮¥©
+% ¯¥à¥§ £à㧪¨.
+unit_u_no_reload_in_second_compile=10050_U_¥§ ¯¥à¥§ £à㧪¨, 㦥 ¯®¢â®à­ ï ª®¬¯¨«ïæ¨ï: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯à¥¤ã¯à¥¦¤ ¥â, çâ® ¬®¤ã«ì
+% ­¥ ¡ã¤¥â ¯¥à¥§ £à㦥­, â.ª. ®­ 㦥 ¡ë« ¯¥à¥§ £à㦥­ ¨ ª®¬¯¨«¨àã¥âáï ¢® ¢â®à®© à §.
+unit_u_flag_for_reload=10051_U_®¬¥ç¥­® ¤«ï ¯¥à¥§ £à㧪¨: $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ¬®¤ã«ì ¡ã¤¥â ¯¥à¥§ £à㦥­.
+unit_u_forced_reload=10052_U_‚ë­ã¦¤¥­­ ï ¯¥à¥§ £à㧪 
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ¬®¤ã«ì ¯à¨è«®áì ¯¥à¥§ £à㧨âì.
+unit_u_previous_state=10053_U_०­¨© áâ âãá $1: $2
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯®ª §ë¢ ¥â ¯à¥¤ë¤ã騩 áâ âãá ¬®¤ã«ï.
+unit_u_second_compile_unit=10054_U_$1 㦥 ª®¬¯¨«¨àã¥âáï, ¯¥à¥å®¤ ª ¯®¢â®à­®© ª®¬¯¨«ï樨
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯à¥¤ã¯à¥¦¤ ¥â ® ­ ç «¥ ¯¥à¥ª®¬¯¨«ï樨 ¬®¤ã«ï
+% ¢® ¢â®à®© à §. â® ¬®¦¥â ¯à®¨á室¨âì á® ¢§ ¨¬®§ ¢¨á¨¬ë¬¨ ¬®¤ã«ï¬¨.
+unit_u_loading_unit=10055_U_‡ £à㧪  ¬®¤ã«ï $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ­ ç «¥ § £à㧪¨ ¬®¤ã«ï.
+unit_u_finished_loading_unit=10056_U_‡ £à㧪  ¬®¤ã«ï $1 § ¢¥à襭 
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® § ¢¥à襭¨¨ § £à㧪¨ ¬®¤ã«ï.
+unit_u_registering_new_unit=10057_U_¥£¨áâà æ¨ï ­®¢®£® ¬®¤ã«ï $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ª®¬¯¨«ïâ®à ¢áâà¥â¨« ­®¢ë© ¬®¤ã«ì
+% ¨ § à¥£¨áâà¨à®¢ « ¥£® ¢® ¢­ãâ७­¨å ᯨ᪠å.
+unit_u_reresolving_unit=10058_U_®¢â®à­®¥ à §à¥è¥­¨¥ § ¢¨á¨¬®á⥩ ¬®¤ã«ï $1
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} ¯à¥¤ã¯à¥¦¤ ¥â ® ⮬, çâ® ª®¬¯¨«ïâ®àã ¯à¨è«®áì
+% ¯®¢â®à­® ¢ëç¨á«¨âì ¢­ãâ७­¨¥ ¤ ­­ë¥ 㪠§ ­­®£® ¬®¤ã«ï.
+unit_u_skipping_reresolving_unit=10059_U_யã᪠¯®¢â®à­®£® à §à¥è¥­¨ï ¬®¤ã«ï $1, § £à㧪  ¨á¯®«ì§ã¥¬ëå ¬®¤ã«¥© ¯à®¤®«¦ ¥âáï
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ¯®¢â®à­®¥ ¢ëç¨á«¥­¨¥ ¤ ­­ëå
+% ¬®¤ã«ï ¯à®¯ã饭®, ¯®â®¬ã çâ® ¢ëç¨á«ïâì ¯®ª  ­¥ç¥£®.
+unit_u_unload_resunit=10060_U_‚ë£à㧪  ¬®¤ã«ï ®¡à ¡®âª¨ à¥áãàᮢ $1 (­¥ ­ã¦¥­)
+% ਠ¨á¯®«ì§®¢ ­¨¨ ª«îç  \var{-vu} á®®¡é ¥â ® ⮬, çâ® ¬®¤ã«ì ®¡à ¡®âª¨ à¥áãàᮢ
+% ¢ë£à㦠¥âáï, â.ª. à¥áãàáë ­¥ ¨á¯®«ì§ãîâáï ¯à®£à ¬¬®©.
+unit_e_different_wpo_file=10061_E_Œ®¤ã«ì $1 ᪮¬¯¨«¨à®¢ ­ á ¨á¯®«ì§®¢ ­¨¥¬ ®â«¨ç îé¨åáï ­ áâ஥ª ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë (wpo) ($2, $3); ¯¥à¥ª®¬¯¨«¨àã©â¥ ¥£® ¡¥§ wpo ¨«¨ á ⥬ ¦¥ ä ©«®¬ ®¡à â­®© á¢ï§¨
+% Š®£¤  ¬®¤ã«ì ¡ë« ᪮¬¯¨«¨à®¢ ­ á ®¯à¥¤¥«¥­­ë¬ ä ©«®¬ ®¡à â­®© á¢ï§¨ ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë (wpo) (\var{-FW<x>} \var{-OW<x>}),
+% ¥£® ᪮¬¯¨«¨à®¢ ­­ ï ¢¥àá¨ï ᯥ樠«¨§¨à®¢ ­  ¯®¤ ¤ ­­ë© áæ¥­ à¨© ª®¬¯¨«ï樨 ¨ ­¥ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ­ 
+% ¯® ¤à㣮¬ã ­ §­ ç¥­¨î. „«ï ¨á¯®«ì§®¢ ­¨ï ¬®¤ã«ï ¢ ¤à㣮© ¯à®£à ¬¬¥ ¨«¨ á ¤à㣨¬¨ ­ áâனª ¬¨ wpo
+% ¥£® ­¥®¡å®¤¨¬® ¯¥à¥ª®¬¯¨«¨à®¢ âì.
% \end{description}
+# EndOfTeX
#
# Options
#
+# 11047 is the last used one
+#
option_usage=11000_O_$1 [®¯æ¨¨] <ä ©«> [®¯æ¨¨]
# BeginOfTeX
%
-% \section{Command-line handling errors}
-% This section lists errors that occur when the compiler is processing the
-% command line or handling the configuration files.
+% \section{Žè¨¡ª¨ ®¡à ¡®âª¨ ª®¬ ­¤­®© áâப¨}
+% Žè¨¡ª¨, ª®â®àë¥ ¬®£ãâ ¢®§­¨ª âì ¢® ¢à¥¬ï ®¡à ¡®âª¨ ª®¬ ­¤­®© áâப¨
+% ¨«¨ ä ©«®¢ ª®­ä¨£ãà æ¨¨.
% \begin{description}
-option_only_one_source_support=11001_W_®¤¤¥p¦¨¢ ¥âáï ⮫쪮 ®¤¨­ ä ©« ¤«ï ª®¬¯¨«ï樨
-% You can specify only one source file on the command line. The first
-% one will be compiled, others will be ignored. This may indicate that
-% you forgot a \var{'-'} sign.
-option_def_only_for_os2=11002_W_DEF ä ©« ¬®¦¥â á®§¤ ¢ âìáï ⮫쪮 ¯®¤ OS/2
+option_only_one_source_support=11001_W_®¤¤¥p¦¨¢ ¥âáï ⮫쪮 ®¤¨­ ¨á室­ë© ä ©«, ¢¬¥áâ® $1 ¡ã¤¥â ᪮¬¯¨«¨à®¢ ­ $2
+% ‚ ª®¬ ­¤­®© áâப¥ ¬®¦­® 㪠§ë¢ âì ⮫쪮 ®¤¨­ ä ©«. ¥à¢ë© ®¡­ à㦥­­ë© ä ©« ¡ã¤¥â
+% ᪮¬¯¨«¨à®¢ ­, ®áâ «ì­ë¥ ¨£­®à¨àãîâáï. Œ®¦¥â ¡ëâì ¯à¨§­ ª®¬ ⮣®, çâ®
+% ¯¥à¥¤ ®¯æ¨¥© § ¡ëâ §­ ª \var{'-'}.
+option_def_only_for_os2=11002_W_DEF ä ©« ¬®¦­® á®§¤ ¢ âì ⮫쪮 ¤«ï OS/2
% This option can only be specified when you're compiling for OS/2
option_no_nested_response_file=11003_E_‚«®¦¥­­ë¥ ä ©«ë ®â¢¥â  ­¥ ¯®¤¤¥p¦¨¢ îâáï
-% you cannot nest response files with the \var{@file} command-line option.
-option_no_source_found=11004_F_ˆ¬ï ä ©«  ¤«ï ª®¬¯¨«ï樨 ¢ ª®¬ ­¤­®© áâp®ª¥ ­¥ ®¡­ à㦥­®
-% The compiler expects a source file name on the command line.
-option_no_option_found=11005_N_ޝæ¨ï ª®¬¯¨«ïâ®à  $1 ¢­ãâਠª®­ä¨£ãà æ¨®­­®£® ä ©«  ­¥ ®¡­ à㦥­ 
-% The compiler didn't find any option in that config file.
+% ޝæ¨ï ª®¬ ­¤­®© áâப¨ \var{@file} ­¥ ¯®§¢®«ï¥â ¨á¯®«ì§®¢ âì ¢«®¦¥­­ë¥ ä ©«ë ®â¢¥â .
+option_no_source_found=11004_F_‚ ª®¬ ­¤­®© áâப¥ ®âáãâáâ¢ã¥â ¨¬ï ¨á室­®£® ä ©« 
+% ‚ ª®¬ ­¤­®© áâப¥ ¤®«¦­® ¯à¨áãâá⢮¢ âì ¨¬ï ¨á室­®£® ä ©« .
+option_no_option_found=11005_N_” ©« ª®­ä¨£ãà æ¨¨ $1 ­¥ ᮤ¥à¦¨â ®¯æ¨© ª®¬¯¨«ïâ®à 
+% ‚ 㪠§ ­­®¬ ä ©«¥ ª®­ä¨£ãà æ¨¨ ­¥ ®¡­ à㦥­® ­¨ ®¤­®© ®¯æ¨¨.
option_illegal_para=11006_E_H¥¢¥p­ë© ¯ p ¬¥âp: $1
-% You specified an unknown option.
-option_help_pages_para=11007_H_-? ¢ë¢¥á⨠áâp ­¨æë ¯®¬®é¨
-% When an unknown option is given, this message is diplayed.
-option_too_many_cfg_files=11008_F_‘«¨èª®¬ ¬­®£® ¢«®¦¥­­ëå ª®­ä¨£yp æ¨®­­ëå ä ©«®¢
-% You can only nest up to 16 config files.
-option_unable_open_file=11009_F_H¥ ¬®£y ®âªpëâì ä ©« $1
-% The option file cannot be found.
-option_reading_further_from=11010_D_—⥭¨¥ ¤ «ì­¥©è¨å ¯ p ¬¥âp®¢ ¨§ $1
-% Displayed when you have notes turned on, and the compiler switches
-% to another options file.
-option_target_is_already_set=11011_W_TARGET yáâ ­®¢«¥­ ¤¢ ¦¤ë ¢: $1
-% Displayed if more than one \var{-T} option is specified.
-option_no_shared_lib_under_dos=11012_W_SHARED ¡¨¡«¨®â¥ª¨ ­¥ ¯®¤¤¥p¦¨¢ îâáï ¢ GO32* ¯p¨«®¦¥­¨ïå, ¤¥« ¥¬ ¨å STATIC
+% “ª § ­  ­¥¨§¢¥áâ­ ï ®¯æ¨ï.
+option_help_pages_para=11007_H_-? ¢ë¢®¤¨â áâp ­¨æë á¯à ¢ª¨
+% â® á®®¡é¥­¨¥ ¢ë¢®¤¨âáï, ¥á«¨ 㪠§ ­  ­¥¨§¢¥áâ­ ï ®¯æ¨ï.
+option_too_many_cfg_files=11008_F_‘«¨èª®¬ ¬­®£® ¢«®¦¥­­ëå ä ©«®¢ ª®­ä¨£ãà æ¨¨
+% “஢¥­ì ¢«®¦¥­¨ï ä ©«®¢ ª®­ä¨£ãà æ¨¨ ®£à ­¨ç¥­ ç¨á«®¬ 16.
+option_unable_open_file=11009_F_H¥¢®§¬®¦­® ®âªpëâì $1
+% Žè¨¡ª  ¯à¨ ®âªàë⨨ ä ©«  ª®­ä¨£ãà æ¨¨.
+option_reading_further_from=11010_D_த®«¦ ¥âáï ç⥭¨¥ ¯ p ¬¥âp®¢ ¨§ $1
+% ‚뤠¥âáï, ¥á«¨ ¢ª«î祭 ¢ë¢®¤ § ¬¥â®ª, ¨ ª®¬¯¨«ïâ®à ¯¥à¥ª«îç ¥âáï ­ 
+% ¤à㣮© ä ©« ª®­ä¨£ãà æ¨¨.
+option_target_is_already_set=11011_W_–¥«¥¢ ï ¯« âä®à¬  㦥 yáâ ­®¢«¥­  ¢: $1
+% “ª § ­® ¡®«¥¥ ®¤­®© ®¯æ¨¨ \var{-T}, ®¯à¥¤¥«ïî饩 楫¥¢ãî ¯« âä®à¬ã.
+option_no_shared_lib_under_dos=11012_W_ §¤¥«ï¥¬ë¥ ¡¨¡«¨®â¥ª¨ ­¥ ¯®¤¤¥p¦¨¢ îâáï ¤«ï DOS, ¡ã¤ãâ áâ â¨ç¥áª¨¬¨
% If you specify \var{-CD} for the \dos platform, this message is displayed.
% The compiler supports only static libraries under \dos
-option_too_many_ifdef=11013_F_‘«¨èª®¬ ¬­®£® $IFDEF ¨«¨ $IFNDEF
-% the \var{\#IF(N)DEF} statements in the options file are not balanced with
-% the \var{\#ENDIF} statements.
-option_too_many_endif=11014_F_‘«¨èª®¬ ¬­®£® $ENDIF
-% the \var{\#IF(N)DEF} statements in the options file are not balanced with
-% the \var{\#ENDIF} statements.
-option_too_less_endif=11015_F_Žâªpë⨥ yá«®¢­®£® ¢ëp ¦¥­¨ï ¢ ª®­æ¥ ä ©« 
-% the \var{\#IF(N)DEF} statements in the options file are not balanced with
-% the \var{\#ENDIF} statements.
-option_no_debug_support=11016_W_ƒ¥­¥p æ¨ï ¨­ä®p¬ æ¨¨ ¤«ï ®â« ¤ª¨ ­¥ ¯®¤¤¥p¦¨¢ ¥âáï ¢ í⮬ ¨á¯®«­ï¥¬®¬ ä ©«¥
+option_too_many_ifdef=11013_F_‘«¨èª®¬ ¬­®£® $IFDEF ¨«¨ $IFNDEF ¢ ä ©«¥ ®¯æ¨© $1 áâப  $2
+% Š®«¨ç¥á⢮ ¤¨à¥ªâ¨¢ \var{\#IF(N)DEF} ¢ ä ©«¥ ª®­ä¨£ãà æ¨¨ ­¥ ᮢ¯ ¤ ¥â á ª®«¨ç¥á⢮¬
+% ¤¨à¥ªâ¨¢ \var{\#ENDIF}.
+option_too_many_endif=11014_F_¥®¦¨¤ ­­ë© $ENDIF ¢ ä ©«¥ ®¯æ¨© $1 áâப  $2
+% Š®«¨ç¥á⢮ ¤¨à¥ªâ¨¢ \var{\#IF(N)DEF} ¢ ä ©«¥ ª®­ä¨£ãà æ¨¨ ­¥ ᮢ¯ ¤ ¥â á ª®«¨ç¥á⢮¬
+% ¤¨à¥ªâ¨¢ \var{\#ENDIF}.
+option_too_less_endif=11015_F_¥§ ªàë⮥ yá«®¢­®¥ ¢ëp ¦¥­¨¥ ¢ ª®­æ¥ ä ©«  ®¯æ¨©
+% Š®«¨ç¥á⢮ ¤¨à¥ªâ¨¢ \var{\#IF(N)DEF} ¢ ä ©«¥ ª®­ä¨£ãà æ¨¨ ­¥ ᮢ¯ ¤ ¥â á ª®«¨ç¥á⢮¬
+% ¤¨à¥ªâ¨¢ \var{\#ENDIF}.
+option_no_debug_support=11016_W_â®â íª§¥¬¯«ïà ª®¬¯¨«ïâ®à  ­¥ ¯®¤¤¥à¦¨¢ ¥â £¥­¥p æ¨î ®â« ¤®ç­®© ¨­ä®p¬ æ¨¨
% It is possible to have a compiler executable that doesn't support
% the generation of debugging info. If you use such an executable with the
% \var{-g} switch, this warning will be displayed.
-option_no_debug_support_recompile_fpc=11017_H_®¯p®¡y©â¥ ®âª®¬¯¨«¨p®¢ âì á ®¯æ¨¥© -dGDB
+option_no_debug_support_recompile_fpc=11017_H_®¯p®¡y©â¥ ᮡà âì á ®¯æ¨¥© -dGDB
% It is possible to have a compiler executable that doesn't support
% the generation of debugging info. If you use such an executable with the
% \var{-g} switch, this warning will be displayed.
-option_obsolete_switch=11018_E_‚ë ¨á¯®«ì§y©â¥ yáâ p¥¢è¨© ª«îç $1
-% this warns you when you use a switch that is not needed/supported anymore.
-% It is recommended that you remove the switch to overcome problems in the
-% future, when the switch meaning may change.
-option_obsolete_switch_use_new=11019_E_‚ë ¨á¯®«ì§y¥â¥ yáâ p¥¢è¨© ª«îç $1, ¯®¦ «y©áâ  ¨á¯®«ì§y©â¥ ¢¬¥áâ® ­¥£® ª«îç $2
-% â® ¯à¥¤ã¯à¥¦¤ ¥â ‚ á, ª®£¤  ‚ë ¨á¯®«ì§ã¥â¥ ª«îç, ª®â®àë© ¡®«ìè¥ ­¥
-% ¯®¤¤¥à¦¨¢ ¥âáï. ‚ë ¤®«¦­ë ¨á¯®«ì§®¢ âì ¢â®à®© ª«îç ¢¬¥áâ® í⮣®.
-% ¥ª®¬¥­¤ã¥âáï, § ¬¥­¨âì ª«îç, çâ®¡ë ¯à¥®¤®«¥âì ¯à®¡«¥¬ë ¢ ¡ã¤ã饬,
-% ª®£¤  ª«îç, yª § ­­ë© ¢ ¬¨ ¬®¦¥â ¨§¬¥­ïâìáï ¨ ¨¬¥âì ¤py£®¥ §­ ç¥­¨¥.
-option_switch_bin_to_src_assembler=11020_N_¥p¥ª«îç ¥¬  áᥬ¡«¥p ¢  áᥬ¡«¥p § ¤ ­­ë© ¯® y¬®«ç ­¨î
-% this notifies you that the assembler has been changed because you used the
-% -a switch which can't be used with a binary assembler writer.
-option_incompatible_asm=11021_W_‚¨¤ ¢ë¡à ­­®£® áâ¨«ï  áᥬ¡«¥à  "$1" ­¥ ᮢ¬¥á⨬ á "$2"
-option_asm_forced=11022_W_Š á®¦ «¥­¨î, ¨á¯®«ì§ã¥¬ áâ¨«ì  áᥬ¡«¥à  "$1"
-% The assembler output selected can not generate
-% object files with the correct format. Therefore, the
-% default assembler for this target is used instead.
-option_using_file=11026_T_—¨â î ®¯æ¨¨ ¨§ ä ©«  $1
-% Options are also read from this file
-option_using_env=11027_T_—¨â î ®¯æ¨¨ ¨§ ®ªà㦥­¨ï $1
-% Options are also read from this environment string
+option_obsolete_switch=11018_W_ˆá¯®«ì§y¥âáï yáâ p¥¢è¨© ª«îç $1
+% ।ã¯à¥¦¤ ¥â, ç⮠㪠§ ­­ ï ®¯æ¨ï ¡®«ìè¥ ­¥ ­ã¦­ /­¥ ¯®¤¤¥à¦¨¢ ¥âáï.
+% …¥ ४®¬¥­¤ã¥âáï 㤠«¨âì, çâ®¡ë ¨§¡¥¦ âì ¯à®¡«¥¬ ¢ á«ãç ¥, ¥á«¨
+% ¢ ¡ã¤ã饬 §­ ç¥­¨¥ ®¯æ¨¨ ¨§¬¥­¨âáï.
+option_obsolete_switch_use_new=11019_W_ˆá¯®«ì§y¥âáï yáâ p¥¢è¨© ª«îç $1, ¨á¯®«ì§y©â¥ ¢¬¥áâ® ­¥£® ª«îç $2
+% ।ã¯à¥¦¤ ¥â, ç⮠㪠§ ­­ ï ®¯æ¨ï ¡®«ìè¥ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¨ ¢¬¥áâ® ­¥¥ á«¥¤ã¥â ¨á¯®«ì§®¢ âì ¤àã£ãî.
+% ¥ª®¬¥­¤ã¥âáï § ¬¥­¨âì ª«îç, çâ®¡ë ¨§¡¥¦ âì ¯à®¡«¥¬ ¢ á«ãç ¥, ¥á«¨
+% ¢ ¡ã¤ã饬 ¥£® §­ ç¥­¨¥ ¨§¬¥­¨âáï.
+option_switch_bin_to_src_assembler=11020_N_¥p¥ª«î祭¨¥ ­   áᥬ¡«¥p, £¥­¥à¨àãî騩 ⥪áâ
+% €áᥬ¡«¥à (á ¤¢®¨ç­ë¬ ä®à¬ â®¬ ¢ë室­ëå ä ©«®¢) ¡ë« ¨§¬¥­¥­, ¯®â®¬ã çâ® ¡ë« ¨á¯®«ì§®¢ ­ ª«îç -a,
+% ª®â®àë© ®§­ ç ¥â á®§¤ ­¨¥  áᥬ¡«¥à­ëå ä ©«®¢ ¢ ⥪á⮢®¬ ä®à¬ â¥.
+option_incompatible_asm=11021_W_‚ë¡à ­­ë©  áᥬ¡«¥à "$1" ­¥ ᮢ¬¥á⨬ á "$2"
+option_asm_forced=11022_W_‚ë­ã¦¤¥­­® ¨á¯®«ì§¥âáï  áᥬ¡«¥à "$1"
+% ‡ ¤ ­­ë© ⨯  áᥬ¡«¥à  ­¥ ¯®§¢®«ï¥â á®§¤ ¢ âì ®¡ê¥ªâ­ë¥ ä ©«ë
+% ¢ ¯à ¢¨«ì­®¬ ä®à¬ â¥. ‚¬¥áâ® ­¥£® ¡ã¤¥â ¨á¯®«ì§®¢ ­  áᥬ¡«¥à ¯® 㬮«ç ­¨î
+% ¤«ï ¢ë¡à ­­®© ¯« âä®à¬ë.
+option_using_file=11026_T_—⥭¨¥ ®¯æ¨© ¨§ ä ©«  $1
+% Ž¯æ¨¨ ç¨â îâáï â ª¦¥ ¨§ 㪠§ ­­®£® ä ©« .
+option_using_env=11027_T_—⥭¨¥ ®¯æ¨© ¨§ ¯¥à¥¬¥­­®© ®ªà㦥­¨ï $1
+% Ž¯æ¨¨ ç¨â îâáï â ª¦¥ ¨§ 㪠§ ­­®© ¯¥à¥¬¥­­®© ®ªà㦥­¨ï.
option_handling_option=11028_D_Ž¡à ¡®âª  ®¯æ¨¨ "$1"
-% Debug info that an option is found and will be handled
-option_help_press_enter=11029__*** ­ ¦¬¨â¥ enter ***
+% Žâ« ¤®ç­®¥ á®®¡é¥­¨¥ ® ⮬, çâ® ®¯æ¨ï ­ ©¤¥­  ¨ ¡ã¤¥â ®¡à ¡®â ­ .
+option_help_press_enter=11029_O_*** ­ ¦¬¨â¥ enter ***
+% ‘®®¡é¥­¨ ¢ë¤ ¥âáï ¯à¨ ¯®áâà ­¨ç­®¬ ¢ë¢®¤¥ á¯à ¢ª¨.  ¦ â¨¥ ª« ¢¨è¨ ENTER
+% ¢ë§ë¢ ¥â ¯®ª § á«¥¤ãî饩 áâà ­¨æë. …᫨ ­ ¦ âì q ¨ § â¥¬ ENTER, ª®¬¯¨«ïâ®à
+% § ¢¥àè ¥â à ¡®âã.
+option_start_reading_configfile=11030_H_ ç «® ç⥭¨ï ä ©«  ª®­ä¨£ãà æ¨¨ $1
+%  ç «® ç⥭¨ï ä ©«  ª®­ä¨£ãà æ¨¨.
+option_end_reading_configfile=11031_H_Š®­¥æ ç⥭¨ï ä ©«  ª®­ä¨£ãà æ¨¨ $1
+% Žª®­ç ­¨¥ ç⥭¨ï ä ©«  ª®­ä¨£ãà æ¨¨.
+option_interpreting_option=11032_D_¨­â¥à¯à¥â æ¨ï ®¯æ¨¨ "$1"
+% Š®¬¯¨«ïâ®à ¨­â¥à¯à¥â¨àã¥â ®¯æ¨î.
+option_interpreting_firstpass_option=11036_D_¨­â¥à¯à¥â æ¨ï ®¯æ¨¨ ¯¥à¢®£® ¯à®å®¤  "$1"
+% Š®¬¯¨«ïâ®à ¨­â¥à¯à¥â¨àã¥â ®¯æ¨î ¢ ¯¥à¢ë© à §.
+option_interpreting_file_option=11033_D_¨­â¥à¯à¥â æ¨ï ®¯æ¨¨ ¨§ ä ©«  "$1"
+% Š®¬¯¨«ïâ®à ¨­â¥à¯à¥â¨àã¥â ®¯æ¨î, ¯à®ç¨â ­­ãî ¨§ ä ©«  ª®­ä¨£ãà æ¨¨.
+option_read_config_file=11034_D_—⥭¨¥ ä ©«  ª®­ä¨£ãà æ¨¨ "$1"
+%  ç «® ç⥭¨ï 㪠§ ­­®£® ä ©«  ª®­ä¨£ãà æ¨¨ (®â« ¤®ç­®¥ á®®¡é¥­¨¥).
+option_found_file=11035_D_­ ©¤¥­® ¨¬ï ¨á室­®£® ä ©«  "$1"
+% „®¯®«­¨â¥«ì­ ï ¨­ä®à¬ æ¨ï ®¡ ®¯æ¨ïå, ¢ë¢®¤¨âáï ¯à¨
+% ¢ª«î祭­ëå ®â« ¤®ç­ëå á®®¡é¥­¨ïå.
+option_code_page_not_available=11039_E_¥¨§¢¥áâ­ ï ª®¤®¢ ï áâà ­¨æ 
+% “ª § ­  ­¥¨§¢¥áâ­ ï ª®¤®¢ ï áâà ­¨æ  ¤«ï ¨á室­ëå ä ©«®¢.
+% Š®¬¯¨«ïâ®à ¨¬¥¥â ¢áâ஥­­ãî ¯®¤¤¥à¦ªã ­¥áª®«ìª¨å ª®¤®¢ëå áâà ­¨æ.
+% ‡ ¯à®è¥­­ ï ª®¤®¢ ï áâà ­¨æ  ¢ ¨å ç¨á«® ­¥ ¢å®¤¨â. „«ï ¤®¡ ¢«¥­¨ï
+% ¯®¤¤¥à¦ª¨ ¯®âॡã¥âáï ¯¥à¥á¡®àª  ª®¬¯¨«ïâ®à .
+option_config_is_dir=11040_F_” ©« ª®­ä¨£ãà æ¨¨ $1 - ¤¨à¥ªâ®à¨ï
+% „¨à¥ªâ®à¨¨ ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ª ç¥á⢥ ä ©«®¢ ª®­ä¨£ãà æ¨¨.
+option_confict_asm_debug=11041_W_‚ë¡à ­­ë© ⨯  áᥬ¡«¥à  "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥â ®â« ¤®ç­ãî ¨­ä®à¬ æ¨î, ®â« ¤ª  ®âª«î祭 
+% ‚ë¡à ­­ë©  áᥬ¡«¥à ­¥ ¯®¤¤¥à¦¨¢ ¥â £¥­¥à æ¨î ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨,
+% ¯®í⮬㠢®§¬®¦­®áâì ®â« ¤ª¨ ®âª«î祭 .
+option_ppc386_deprecated=11042_W_ˆá¯®«ì§®¢ ­¨¥ ppc386.cfg ï¥âáï ãáâ à¥¢è¨¬, ¢¬¥áâ® ­¥£® á«¥¤ã¥â ¨á¯®«ì§®¢ âì fpc.cfg
+% Using ppc386.cfg is still supported for historical reasons, however, for a multiplatform
+% system the naming makes no sense anymore. Please continue to use fpc.cfg instead.
+option_else_without_if=11043_F_‚ ä ©«¥ ®¯æ¨© $1 áâப  $2 ®¡­ à㦥­  ¤¨à¥ªâ¨¢  \var{\#ELSE} ¡¥§ ¯à¥¤¢ à¨â¥«ì­®© \var{\#IF(N)DEF}
+% ‚ ä ©«¥ ª®­ä¨£ãà æ¨¨ ®¡­ à㦥­  ¤¨à¥ªâ¨¢  \var{\#ELSE} ¡¥§ ¯à¥¤¢ à¨â¥«ì­®© ¤¨à¥ªâ¨¢ë \var{\#IF(N)DEF}.
+option_unsupported_target=11044_F_ޝæ¨ï "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥âáï (¨«¨ ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï) ¤«ï 楫¥¢®© ¯« âä®à¬ë
+% ¥ ¢á¥ ®¯æ¨¨ ¯®¤¤¥à¦¨¢ îâáï ¨«¨ ॠ«¨§®¢ ­ë ¤«ï ¢á¥å ¯« âä®à¬. â® á®®¡é¥­¨¥ ® ⮬,
+% çâ® ¢ë¡à ­­ ï ®¯æ¨ï ­¥á®¢¬¥á⨬  á ⥪ã饩 ¯« âä®à¬®©.
+option_unsupported_target_for_feature=11045_F_Žá®¡¥­­®áâì "$1" ­¥ ¯®¤¤¥à¦¨¢ ¥âáï (¨«¨ ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï) ¤«ï ¢ë¡à ­­®© 楫¥¢®© ¯« âä®à¬ë
+% ¥ ¢á¥ ®¯æ¨¨ ¯®¤¤¥à¦¨¢ îâáï ¨«¨ ॠ«¨§®¢ ­ë ¤«ï ¢á¥å ¯« âä®à¬. â® á®®¡é¥­¨¥ ® ⮬,
+% çâ® ¢ë¡à ­­ ï ®¯æ¨ï ­¥á®¢¬¥á⨬  á ⥪ã饩 ¯« âä®à¬®©.
+option_dwarf_smart_linking=11046_N_  ¢ë¡à ­­®© ¯« âä®à¬¥ ­¥«ì§ï ¨á¯®«ì§®¢ âì ®â« ¤®ç­ãî ¨­ä®à¬ æ¨î ⨯  DWARF ᮢ¬¥áâ­® á "㬭®©" ª®¬¯®­®¢ª®©, ¯¥à¥ª«î祭¨¥ ­  áâ â¨ç¥áªãî ª®¬¯®­®¢ªã
+% "“¬­ ï" ª®¬¯®­®¢ª  ¢ ­ áâ®ï饥 ¢à¥¬ï ­¥á®¢¬¥á⨬  á ®â« ¤®ç­®© ¨­ä®à¬ æ¨¥© ⨯  DWARF ­  ¡®«ì設á⢥
+% ¯« âä®à¬, ¯®í⮬㠯ਠ¢ë¡®à¥ ä®à¬ â  DWARF "㬭 ï" ª®¬¯®­®¢ª  ®âª«îç ¥âáï.
+option_ignored_target=11047_W_ޝæ¨ï "$1" ¨£­®à¨àã¥âáï ¤«ï ¢ë¡à ­­®© 楫¥¢®© ¯« âä®à¬ë.
+% ¥ ¢á¥ ®¯æ¨¨ ¯®¤¤¥à¦¨¢ îâáï ¨«¨ ॠ«¨§®¢ ­ë ¤«ï ¢á¥å ¯« âä®à¬. â® á®®¡é¥­¨¥ ® ⮬,
+% çâ® ¢ë¡à ­­ ï ®¯æ¨ï ¨£­®à¨àã¥âáï ¤«ï ⥪ã饩 ¯« âä®à¬ë.
+% \end{description}
+# EndOfTeX
+
+#
+# Whole program optimization
+#
+# 12019 is the last used one
+#
+# BeginOfTeX
+%
+% \section{‘®®¡é¥­¨ï ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë}
+%  §¤¥« ᮤ¥à¦¨â á®®¡é¥­¨ï ®¡ ®è¨¡ª å, ª®â®àë¥ ¬®£ãâ ¢®§­¨ª âì
+% ¢ ¯à®æ¥áᥠ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë (wpo).
+% \begin{description}
+wpo_cant_find_file=12000_F_¥¢®§¬®¦­® ®âªàëâì ä ©« ¤ ­­ëå WPO "$1"
+% Š®¬¯¨«ïâ®à ­¥ ¬®¦¥â ®âªàëâì 㪠§ ­­ë© ä ©« á ¤ ­­ë¬¨ ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë.
+wpo_begin_processing=12001_D_Ž¡à ¡®âª  ¨­ä®à¬ æ¨¨ WPO ¢ ä ©«¥ "$1"
+% Š®¬¯¨«ïâ®à ­ ç¨­ ¥â ®¡à ¡®âªã ¤ ­­ëå ¤«ï ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë ¢ 㪠§ ­­®¬ ä ©«¥.
+wpo_end_processing=12002_D_‡ ª®­ç¥­  ®¡à ¡®âª  ¨­ä®à¬ æ¨¨ WPO ¢ ä ©«¥ "$1"
+% Š®¬¯¨«ïâ®à § ª®­ç¨« ®¡à ¡®âªã ¤ ­­ëå ¤«ï ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë ¢ 㪠§ ­­®¬ ä ©«¥.
+wpo_expected_section=12003_E_ަ¨¤ «áï § £®«®¢®ª ᥪ樨, ­® ¯®«ã祭® "$2" ¢ áâப¥ $1 ä ©«  WPO-¨­ä®à¬ æ¨¨
+% ਠ®¡à ¡®âª¥ ä ©«  ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë ª®¬¯¨«ïâ®à ®¦¨¤ « § £®«®¢®ª ᥪ樨 (­ ç¨­ ¥âáï á \%),
+% ­® ­¥ ­ è¥« ¥£®.
+wpo_no_section_handler=12004_W_¥ § à¥£¨áâà¨à®¢ ­ ®¡à ¡®â稪 ¤«ï ᥪ樨 "$2" ¢ áâப¥ $1 ä ©«  WPO, ¨£­®à¨àã¥âáï
+% Š®¬¯¨«ïâ®à ­¥ ¨¬¥¥â ®¡à ¡®â稪  ¤«ï 㯮¬ï­ã⮩ ᥪ樨 ä ©«  WPO-¨­ä®à¬ æ¨¨,
+% ¯®í⮬㠮­ ¯à®¯ã᪠¥â íâã ᥪæ¨î ¨ ¯¥à¥å®¤¨â ª á«¥¤ãî饩.
+wpo_found_section=12005_D_ ©¤¥­  ᥪæ¨ï "$1" á ¨­ä®à¬ æ¨¥© ® "$2"
+% Š®¬¯¨«ïâ®à ®¡­ à㦨« ¢ ä ©«¥ WPO ᥪæ¨î á ¨­ä®à¬ æ¨¥©, ª®â®àãî ®­ ¬®¦¥â ®¡à ¡®â âì.
+wpo_no_input_specified=12006_F_‚ë¡à ­­ë¥ ०¨¬ë ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë âॡãî⠯।¢ à¨â¥«ì­® á®§¤ ­­®£® ä ©«  ®¡à â­®© á¢ï§¨ (㪠¦¨â¥ á ¯®¬®éìî -Fw)
+% —â®¡ë ¢ë¯®«­¨âì ¢ë¡à ­­ãî ®¯â¨¬¨§ æ¨î ¢á¥© ¯à®£à ¬¬ë, ª®¬¯¨«ïâ®àã âॡã¥âáï ¨­ä®à¬ æ¨ï,
+% ᮡ࠭­ ï ¢ ¯à®æ¥áᥠ¯à¥¤ë¤ã饩 ª®¬¯¨«ï樨. ” ©«, ᮤ¥à¦ é¨© íâã ¨­ä®à¬ æ¨î, ¤®«¦¥­ ¡ëâì 㪠§ ­
+% á ¯®¬®éìî ª«îç  -Fw.
+wpo_not_enough_info=12007_E_” ©« ®¡à â­®© á¢ï§¨ ­¥ ᮤ¥à¦¨â ¨­ä®à¬ æ¨¨, ­¥®¡å®¤¨¬®© ¤«ï ¯à®¢¥¤¥­¨ï ®¯â¨¬¨§ æ¨¨ "$1"
+% “ª § ­­ë© ä ©« ®¡à â­®© á¢ï§¨ ­¥ ᮤ¥à¦¨â ¨­ä®à¬ æ¨î, ª®â®à® ï ­ã¦­  ¤«ï ¯à®¢¥¤¥­¨ï âॡ㥬®£® ¢¨¤ 
+% ®¯â¨¬¨§ æ¨¨. ‘ª®à¥¥ ¢á¥£®, ­ã¦­® ¯¥à¥ª®¬¯¨«¨à®¢ âì ¯à®£à ¬¬ã, 㪠§ ¢ ¯®¤å®¤ï騩 ª«îç -OWxxx.
+wpo_no_output_specified=12008_F_“ª ¦¨â¥ ä ©« ®¡à â­®© á¢ï§¨ ¤«ï § ¯¨á¨ ᮡ࠭­®© ¨­ä®à¬ æ¨¨ (á ¯®¬®éìî -FW)
+% ¥®¡å®¤¨¬® 㪠§ âì ä ©«, ¢ ª®â®àë© ª®¬¯¨«ïâ®à § ¯¨è¥â ᮡ࠭­ë¥ ¢® ¢à¥¬ï ª®¬¯¨«ï樨
+% ¤ ­­ë¥ ¤«ï ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë. â® ¤¥« ¥âáï á ¯®¬®éìî ª«îç  -FW.
+wpo_output_without_info_gen=12009_E_” ©« ®¡à â­®© á¢ï§¨ 㪠§ ­ (á ¯®¬®éìî -FW), ­® ­¥ 㪠§ ­ âà¥¡ã¥¬ë© â¨¯ ᮡ¨à ¥¬®© ¨­ä®à¬ æ¨¨
+% ®¬¨¬® 㪠§ ­¨ï ¨¬¥­¨ ä ©«  ®¡à â­®© á¢ï§¨ wpo á ¯®¬®éìî -FW, á«¥¤ã¥â 㪠§ë¢ âì
+% âà¥¡ã¥¬ë¥ ¢¨¤ë ®¯â¨¬¨§ æ¨¨ á ¯®¬®éìî -OWxxx, ¨­ ç¥ ¯®«¥§­ ï ¨­ä®à¬ æ¨ï ¢ ä ©« § ¯¨á ­ 
+% ­¥ ¡ã¤¥â.
+wpo_input_without_info_use=12010_E_” ©« ®¡à â­®© á¢ï§¨ 㪠§ ­ (á ¯®¬®éìî -Fw), ­® ­¥ 㪠§ ­ ⨯ ®¯â¨¬¨§ æ¨¨, ª®â®àë© á«¥¤ã¥â ¢ë¯®«­¨âì
+% …᫨ 㪠§ ­ ä ©« ®¡à â­®© á¢ï§¨ wpo á ¯®¬®éìî -Fw, ­® ­¥ § ¤ ­ë ¢¨¤ë ®¯â¨¬¨§ æ¨¨ á ¯®¬®éìî -Owxxx,
+% ¡ã¤¥â ¢ë¤ ­  ¤ ­­ ï ®è¨¡ª . “ª § ­­ë¥ ª«îç¨ á«¥¤ã¥â ¨á¯®«ì§®¢ âì ᮢ¬¥áâ­®.
+wpo_skipping_unnecessary_section=12011_D_‘¥ªæ¨ï wpo ¯à®¯ã饭  "$1", ¯®áª®«ìªã ­¥ âॡã¥âáï ¤«ï § ¯à®è¥­­ëå ®¯â¨¬¨§ æ¨©
+% ” ©« ®¡à â­®© á¢ï§¨ wpo ᮤ¥à¦¨â ᥪæ¨î á ¨­ä®à¬ æ¨¥©, ª®â®à ï ­¥ âॡã¥âáï
+% ¤«ï ¯à®¢¥¤¥­¨ï ¢ë¡à ­­ëå ⨯®¢ ®¯â¨¬¨§ æ¨¨.
+wpo_duplicate_wpotype=12012_W_ˆ­ä®à¬ æ¨ï, à ­¥¥ ¯à®ç¨â ­­ ï ¨§ ä ©«  ®¡à â­®© á¢ï§¨ ¤«ï "$1", ¯¥à¥ªà뢠¥âáï ¨­ä®à¬ æ¨¥© ¨§ ᥪ樨 "$2"
+% ” ©« ®¡à â­®© á¢ï§¨ wpo ᮤ¥à¦¨â ­¥áª®«ìª® ᥪ権 á ®¤­®â¨¯­®© ¨­ä®à¬ æ¨¥© (­ ¯à¨¬¥à,
+% ® ⮬, ª ª¨¥ ¢¨àâã «ì­ë¥ ¬¥â®¤ë ¬®£ãâ ¡ëâì ¤¥-¢¨àâã «¨§¨à®¢ ­ë). ‚ í⮬ á«ãç ¥ ¨á¯®«ì§ã¥âáï ¨­ä®à¬ æ¨ï
+% ¨§ ¯®á«¥¤­¥© ᥪ樨. ‚ª«îç¨â¥ ®â« ¤®ç­ë¥ á®®¡é¥­¨ï (-vd), ç⮡ë 㢨¤¥âì, ª ª¨¥ ª« ááë ¨­ä®à¬ æ¨¨ ᮤ¥à¦ âáï
+% ¢ ª ¦¤®© ¨§ ᥪ権.
+wpo_cannot_extract_live_symbol_info_strip=12013_E_ˆ­ä®à¬ æ¨ï ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ­¥ ¬®¦¥â ¡ëâì ¯®«ã祭  ¨§ ¯à®£à ¬¬ë ¡¥§ ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨, ¨á¯®«ì§ã©â¥ -Xs-
+% ¥ª®â®àë¥ á¯®á®¡ë á¡®à  ¨­ä®à¬ æ¨¨ ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ¯à¥¤¯®« £ îâ  ­ «¨§ ᨬ¢®«ì­®© ¨­ä®à¬ æ¨¨
+% £®â®¢®© ¯à®£à ¬¬ë. …᫨ íâ  ¨­ä®à¬ æ¨ï 㤠«¥­  (®¯æ¨ï -Xs), â ª®©  ­ «¨§ ­¥¢®§¬®¦¥­.
+wpo_cannot_extract_live_symbol_info_no_link=12014_E_ˆ­ä®à¬ æ¨ï ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ­¥ ¬®¦¥â ¡ëâì ¯®«ã祭  ¡¥§ ᪮¬¯®­®¢ ­­®© ¯à®£à ¬¬ë
+% ¥ª®â®àë¥ á¯®á®¡ë á¡®à  ¨­ä®à¬ æ¨¨ ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ¯à¥¤¯®« £ îâ  ­ «¨§ ᨬ¢®«ì­®© ¨­ä®à¬ æ¨¨
+% £®â®¢®© ¯à®£à ¬¬ë. …᫨ ¯à®£à ¬¬  ­¥ ᪮¬¯®­®¢ ­ , â ª®©  ­ «¨§ ­¥¢®§¬®¦¥­.
+wpo_cannot_find_symbol_progs=12015_F_¥ ­ ©¤¥­ë "$1" ¨«¨ "$2" ¤«ï ¨§¢«¥ç¥­¨ï ¨­ä®à¬ æ¨¨ ® ᨬ¢®« å ¨§ ᪮¬¯®­®¢ ­­®© ¯à®£à ¬¬ë
+% ¥ª®â®àë¥ á¯®á®¡ë á¡®à  ¨­ä®à¬ æ¨¨ ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ¨á¯®«ì§ãî⠢ᯮ¬®£ â¥«ì­ë¥ ¯à®£à ¬¬ë
+% ¤«ï ¯®«ã祭¨ï ¨­ä®à¬ æ¨¨ ® ᨬ¢®« å ¯à®£à ¬¬ë. Ž¡ëç­® íâ® ¯à®£à ¬¬  'nm', ¢å®¤ïé ï ¢ á®áâ ¢ GNU binutils.
+wpo_error_reading_symbol_file=12016_E_Žè¨¡ª  ç⥭¨ï ¨­ä®à¬ æ¨¨ ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢, ¯®«ã祭­®© ®â "$1"
+% ਠ¯®«ã祭¨¨ ¨­ä®à¬ æ¨¨ ® ᨬ¢®« å á ¯®¬®éìî ¢á¯®¬®£ â¥«ì­®© ¯à®£à ¬¬ë ('nm' ¨«¨ 'objdump') ¯à®¨§®è« 
+% ®è¨¡ª . ‚뢮¤ ¢á¯®¬®£ â¥«ì­®© ¯à®£à ¬¬ë ®ª § «áï ª®à®ç¥ ®¦¨¤ ¥¬®£®, ¨«¨ ¨¬¥¥â ­¥¢¥à­ë© ä®à¬ â.
+wpo_error_executing_symbol_prog=12017_F_Žè¨¡ª  ¢ë¯®«­¥­¨ï "$1" (ª®¤ ¢ë室 : $2) ¯à¨ ¨§¢«¥ç¥­¨¨ ¨­ä®à¬ æ¨¨ ® ᨬ¢®« å
+% ਠ¯®«ã祭¨¨ ¨­ä®à¬ æ¨¨ ® ᨬ¢®« å á ¯®¬®éìî ¢á¯®¬®£ â¥«ì­®© ¯à®£à ¬¬ë ('nm' ¨«¨ 'objdump') ¯à®¨§®è« 
+% ®è¨¡ª . ‚ᯮ¬®£ â¥«ì­ ï ¯à®£à ¬¬  ¢¥à­ã«  㪠§ ­­ë© ª®¤ ®è¨¡ª¨.
+wpo_symbol_live_info_needs_smart_linking=12018_E_‘¡®à ¨­ä®à¬ æ¨¨ ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ¯®«¥§¥­ ⮫쪮 ¯à¨ "㬭®©" ª®¬¯®­®¢ª¥, ¨á¯®«ì§ã©â¥ -CX -XX
+% †¨¢ãç¥áâì ᨬ¢®«  ®¯à¥¤¥«ï¥âáï 䠪⮬ ¥£® ­ «¨ç¨ï ¢ £®â®¢®© ᪮¬¯®­®¢ ­­®© ¯à®£à ¬¬¥. …᫨ ®âª«î祭 
+% "㬭 ï" ª®¬¯®­®¢ª , ¢á¥ ᨬ¢®«ë ¢ªîç îâáï ¢ ¯à®£à ¬¬ã ­¥§ ¢¨á¨¬® ®â ⮣®, ¨á¯®«ì§ãîâáï ®­¨ ¨«¨ ­¥â.
+% â® ¤¥« ¥â á¡®à ¨­ä®à¬ æ¨¨ ® ¦¨¢ãç¥á⨠ᨬ¢®«®¢ ¡¥áá¬ëá«¥­­ë¬.
+wpo_cant_create_feedback_file=12019_E_¥¢®§¬®¦­® á®§¤ âì ä ©« ®¡à â­®© á¢ï§¨ "$1"
+% ” ©« ®¡à â­®© á¢ï§¨ wpo, 㪠§ ­­ë© á ¯®¬®éìî ª«îç  -FW, ­¥ ¬®¦¥â ¡ëâì á®§¤ ­.
+%\end{description}
+# EndOfTeX
+
#
-# ‹®£® (®¯æ¨ï -l)
+# Logo (option -l)
#
option_logo=11023_[
-Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCTARGET [Russian Edition]
-Copyright (c) 1993-2006 by Florian Klaempfl
+Š®¬¯¨«ïâ®à Free Pascal ¢¥àᨨ $FPCFULLVERSION [$FPCDATE] ¤«ï $FPCCPU
+Copyright (c) 1993-2009 by Florian Klaempfl
]
#
-# ˆ­ä®p¬ æ¨ï (®¯æ¨ï -i)
+# Info (option -i)
#
option_info=11024_[
Free Pascal Compiler version $FPCVERSION
-Compiler Date : $FPCDATE
-Compiler Target: $FPCTARGET
+Compiler Date : $FPCDATE
+Compiler CPU Target: $FPCCPU
+
+®¤¤¥à¦¨¢ ¥¬ë¥ ¯« âä®à¬ë:
+ $OSTARGETS
+
+®¤¤¥à¦¨¢ ¥¬ë¥ ­ ¡®àë ª®¬ ­¤ CPU:
+ $INSTRUCTIONSETS
+
+®¤¤¥à¦¨¢ ¥¬ë¥ ­ ¡®àë ª®¬ ­¤ FPU:
+ $FPUINSTRUCTIONSETS
+
+®¤¤¥à¦¨¢ ¥¬ë¥ ABI:
+ $ABITARGETS
+
+®¤¤¥à¦¨¢ ¥¬ë¥ ®¯â¨¬¨§ æ¨¨:
+ $OPTIMIZATIONS
+
+®¤¤¥à¦¨¢ ¥¬ë¥ ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë:
+ All
+ $WPOPTIMIZATIONS
+
+®¤¤¥à¦¨¢ ¥¬ë¥ â¨¯ë ¬¨ªà®ª®­â஫«¥à®¢:
+ $CONTROLLERTYPES
This program comes under the GNU General Public Licence
For more information read COPYING.FPC
Report bugs, suggestions, etc. to:
- http://bugs.freepascal.org
+ http://bugs.freepascal.org
or
- bugs@freepascal.org, russia@freepascal.org
+ bugs@freepascal.org
]
#
-# ‘âà ­¨æë ‘¯à ¢ª¨ (®¯æ¨ï -? ˆ -h)
+# Help pages (option -? and -h)
#
-# Ž¡à â¨âì ¢­¨¬ ­¨¥: Hy¬¥p æ¨î ­¥ ¬¥­ïâì!
+# The first character on the line indicates who will display this
+# line, the current possibilities are :
+# * = every target
+# 3 = 80x86 targets
+# 6 = 680x0 targets
+# e = in extended debug mode only
+# P = PowerPC targets
+# S = Sparc targets
+# V = Virtual machine targets
+# The second character also indicates who will display this line,
+# (if the above character was TRUE) the current possibilities are :
+# * = everyone
+# g = with GDB info supported by the compiler
+# O = OS/2
+# L = UNIX systems
+# The third character represents the indentation level.
#
option_help_pages=11025_[
-**0*_¤¥« © '+', çâ®¡ë ¢ª«îç¨âì ª«îç, ¨ '-' çâ®¡ë ®âª«îç¨âì ¥£®
-**1a_ª®¬¯¨«ïâ®à ­¥ ¡y¤¥â 㤠«ïâì ᣥ­¥à¨à®¢ ­­ë©  áᥬ¡«¥à᪨© ä ©«
-**2al_¢ë¢®¤¨âì ­®¬¥p  áâப ¢  áᥬ¡«¨p®¢ ­­­®¬ ä ©«¥
-**2ar_¢ë¢®¤¨âì ¨­ä®p¬ æ¨î ® ᯨ᪥ § ­ïâëå/®á¢®¡®¦¤¥­­ëå p¥£¨áâp®¢ ¢  áᥬ¡«¥p᪨© ä ©«
-**2at_¢ë¢®¤¨âì ¨­ä®p¬ æ¨î ® ᯨ᪥ § ­ïâëå/®á¢®¡®¦¤¥­­ëå ¢p¥¬¥­­ëå ¯¥p¥¬¥­­ëå ¢  áᥬ¡«¥p᪨© ä ©«
-**1b_£¥­¥p¨p®¢ âì ¨­ä®p¬ æ¨î ¤«ï ¡p y§¥p  (IDE)
-**2bl_â ª¦¥ £¥­¥p¨p¨âì ¨­ä®p¬ æ¨î ® «®ª «ì­ëå ᨬ¢®« å
-**1B_¯¥p¥ª®¬¯¨«¨p®¢ âì ¢á¥ ¬®¤y«¨
-**1C<x>_®¯æ¨¨ £¥­¥p â®p  ª®¤ 
-3*2CD_â ª¦¥ á®§¤ âì ¤¨­ ¬¨ç¥áªyî ¡¨¡«¨®â¥ªy (­¥ ¯®¤¤¥p¦¨¢ ¥âáï)
-**2Ch<n>_<n> ¡ ©â ªyç¨ (¬¥¦¤ã 1023 ¨ 67107840)
-**2Ci_¯p®¢¥pª  ¢¢®¤ -¢ë¢®¤ 
-**2Cn_¯p®¯yáâ¨âì áâ ¤¨î «¨­ª®¢ª¨ ¬®¤y«ï
-**2Co_¯p®¢¥pïâì ¯¥à¥¯®«­¥­¨¥ ¢ 楫®ç¨á«¥­­ëå ®¯¥à æ¨ïå
-**2Cr_¯p®¢¥pª  ¤¨ ¯ §®­ 
-**2Cs<n>_yáâ ­®¢¨âì p §¬¥p á⥪  ¤® <n>
-**2Ct_¯à®¢¥àª  á⥪ 
-3*2CX_â ª¦¥ á®§¤ âì smartlink ¢¥pá¨î
-**1d<x>_®¯p¥¤¥«¨âì ᨬ¢®« <x>
-*O1D_á®§¤ âì DEF-ä ©«
-*O2Dd<x>_yáâ ­®¢¨âì ®¯¨á ­¨¥ ¢ <x>
-*O2Dw_PM ¯à¨«®¦¥­¨¥
-**1e<x>_yáâ ­®¢¨âì ¯yâì ¤«ï ¨á¯®«­ï¥¬ëå ä ©«®¢
-**1E_⮦¥, çâ® ¨ -Cn
-**1F<x>_yáâ ­®¢¨âì ¨¬¥­  ä ©«®¢ ¨ ¯ãâ¨
-**2FD<x>_yáâ ­®¢¨âì ¯y⨠¤® ª â «®£®¢, £¤¥ ¨áª âì ã⨫¨âë
-**2Fe<x>_¯¥p¥­ ¯p ¢¨âì ¢ë¢®¤ ®è¨¡®ª ¢ <x>
-**2Fi<x>_¤®¡ ¢¨âì <x> ª ¯yâï¬ ¤® ¢ª«îç ¥¬ëå ä ©«®¢
-**2Fl<x>_¤®¡ ¢¨âì <x> ª ¯yâï¬ ¤® ä ©«®¢ ¡¨¡«¨®â¥ª
-*L2FL<x>_¨á¯®«ì§®¢ âì <x> ª ª ¤¨­ ¬¨ç¥áª¨© ª®¬¯®­®¢é¨ª
-**2Fo<x>_¤®¡ ¢¨âì <x> ª ¯yâï¬ ¤® ®¡ê¥ªâ­ëå ä ©«®¢
-**2Fr<x>_§ £py§¨âì ä ©« á®®¡é¥­¨© ®¡ ®è¨¡ª å <x>
-**2Fu<x>_¤®¡ ¢¨âì <x> ª ¯ã⨠¤® ¬®¤ã«¥©
-**2FU<x>_yáâ ­®¢¨âì ¯yâì ¤® ¬®¤y«¥© ª ª <x>, ®â¬¥­ï¥â -FE
-*g1g_á®§¤ ¢ âì ¨­ä®à¬ æ¨î ¤«ï ®â« ¤ç¨ª 
-*g2gg_¨á¯®«ì§®¢ âì GSYM
-*g2gd_¨á¯®«ì§®¢ âì DBX
-*g2gh_¨á¯®«ì§®¢ âì ¬®¤y«ì á«¥¦¥­¨ï §  ªã祩 (¤«ï ®â« ¤ª¨ yâ¥ç¥ª ¯ ¬ïâ¨)
-*g2gl_¨á¯®«ì§®¢ âì «¨­¨¨ ¢ ¨­ä®p¬ æ¨®­­®¬ ¬®¤y«¥ ¤«ï ¡®«ì襩 ¨­ä®p¬ æ¨¨ ¯p¨ ®â« ¤ª¥
-*g2gc_£¥­¥à¨à®¢ âì ¯à®¢¥àª¨ ¤«ï 㪠§ â¥«¥©
-**1i_¨­ä®p¬ æ¨ï
-**2iD_¢®§¢p é ¥â ¤ ây ª®¬¯¨«ïâ®p 
-**2iV_¢®§p é ¥â ¢¥pá¨î ª®¬¯¨«ïâ®à 
-**2iSO_¢®§¢p é ¥â ⨯ OS, ­  ª®â®p®© ¡ë« á®§¤ ­  ¯p®£p ¬¬ 
-**2iSP_¢®§¢p é ¥â ⨯ ¯p®æ¥áá®p , ­  ª®â®p®¬ ¡ë«  á®§¤ ­  ¯p®£p ¬¬ 
-**2iTO_¢®§¢p é ¥â ⨯ OS, ¤«ï ª®â®p®© ¡ë«  á®§¤ ­  ¯p®£p ¬¬ 
-**2iTP_¢®§¢p é ¥â ⨯ ¯p®æ¥áá®p , ¤«ï ª®â®p®£® ¡ë«  á®§¤ ­  ¯p®£p ¬¬ 
-**1I<x>_¤®¡ ¢«ï¥â <x> ¢ ¯y⨠¤® ¢ª«îç ¥¬ëå ä ©«®¢
-**1k<x>_¯p®å®¤ <x> ª®¬¯®­®¢é¨ªy
-**1l_§ ¯¨á뢠âì ¢ ¯p®£p ¬¬y «®£®â¨¯ fpc
-**1n_­¥ ç¨â âì áâ ­¤ pâ­ë© ä ©« ª®­ä¨£ãà æ¨¨
-**1o<x>_¨§¬¥­¨âì ¨¬ï ¯à®£à ¬¬ë, ­  <x>
-**1pg_£¥­¥p æ¨ï ¯à®ä¨«¨àãî饣® ª®¤  ¤«ï GPROF (®¯p¥¤¥«ï¥â FPC_PROFILE)
-*L1P_¨á¯®«ì§®¢ âì ä ©«ë ¢ ¯ ¬ï⨠(pipes) ¢¬¥áâ® ¢à¥¬¥­­ëå ä ©«®¢  áᥬ¡«¥à 
-**1S_ᨭ⠪á¨ç¥áª¨¥ ®¯æ¨¨
-**2S2_ª«îç ¢ª«î祭¨ï ­¥ª®â®pëå p áè¨p¥­¨© Delphi 2
-**2Sc_¯®¤¤¥p¦¨¢ âì ®¯¥à â®àë, ¯®å®¦¨¥ ­  ®¯¥p â®pë ¢ C (*=,+=,/= ¨ -=)
-**2sa_¢ª«îç âì ª®­â஫¨àãî騩 ª®¤
-**2Sd_p¥¦¨¬ Delphi-ᮢ¬¥á⨬®áâ¨
-**2Se<x>_ª®¬¯¨«ïâ®p ®áâ ­ ¢«¨¢ ¥âáï ¯®á«¥ <x> ®è¨¡ª¨ (¯® 㬮«ç ­¨î ¯®á«¥ 1 ®è¨¡ª¨)
-**2Sg_¯®¤¤¥p¦¨¢ âì LABEL ¨ GOTO
-**2Sh_¨á¯®«ì§®¢ âì ANSI áâp®ª¨
-**2Si_¯®¤¤¥p¦¨¢ âì á⨫ì INLINE ï§ëª  C++
-**2Sm_¯®¤¤¥p¦¨¢ âì ¬ ªà®ª®¬ ­¤ë ¯®¤®¡­® C (£«®¡ «ì­®)
-**2So_p¥¦¨¬ TP/BP 7.0 ᮢ¬¥á⨬®áâ¨
-**2Sp_p¥¦¨¬ GPC ᮢ¬¥á⨬®áâ¨
-**2Ss_ª®­áâpyªâ®p ¤®«¦¥­ ¨¬¥âì ¨¬ï init (¤¥áâpyªâ®p ¤®«¦¥­ ¨¬¥âì ¨¬ï done)
-**2St_¯®¤¤¥p¦ª  áâ â¨ç¥áª¨å ª«î祢ëå á«®¢ ¢ ®¡ê¥ªâ å
-**1s_­¥ ¢ë§ë¢ âì  áᥬ¡«¥à ¨ ª®¬¯®­®¢é¨ª ¯p¨ p ¡®â¥ (⮫쪮 á -a)
+**0*_„®¡ ¢ì⥠'+' ¯®á«¥ ®¯æ¨¨ ¡ã«¥¢  ª«îç  ¤«ï ¥£® ¢ª«î祭¨ï ¨ '-' ¤«ï ®âª«î祭¨ï
+**1a_Š®¬¯¨«ïâ®à ­¥ 㤠«ï¥â á®§¤ ­­ë©  áᥬ¡«¥à­ë© ä ©«
+**2al_‚뢮¤ ­®¬¥p®¢ áâப ¢  áᥬ¡«¥à­ë© ä ©«
+**2an_‚뢮¤ ¨­ä®à¬ æ¨¨ ®¡ ã§« å £à ä  ¢  áᥬ¡«¥à­ë© ä ©«
+*L2ap_ˆá¯®«ì§®¢ âì ¯ ©¯ë ¢¬¥áâ® ¢à¥¬¥­­ëå  áᥬ¡«¥à­ë© ä ©«®¢
+**2ar_¥à¥ç¨á«ïâì ¢ë¤¥«¥­¨ï/®á¢®¡®¦¤¥­¨ï p¥£¨áâp®¢ ¢  áᥬ¡«¥p­®¬ ä ©«¥
+**2at_¥à¥ç¨á«ïâì ¢ë¤¥«¥­¨ï/®á¢®¡®¦¤¥­¨ï ¢p¥¬¥­­ëå ¯¥p¥¬¥­­ëå ¢  áᥬ¡«¥p­®¬ ä ©«¥
+**1A<x>_”®à¬ â ¢ë¢®¤ :
+**2Adefault_€áᥬ¡«¥à ¯® 㬮«ç ­¨î
+3*2Aas_€áᥬ¡«¥à GNU AS
+3*2Anasmcoff_COFF ä ©« (Go32v2), ¨á¯®«ì§ãï Nasm
+3*2Anasmelf_ELF32 ä ©« (Linux), ¨á¯®«ì§ãï Nasm
+3*2Anasmwin32_Win32 ®¡ê¥ªâ­ë© ä ©«, ¨á¯®«ì§ãï Nasm
+3*2Anasmwdosx_Win32/WDOSX ®¡ê¥ªâ­ë© ä ©«, ¨á¯®«ì§ãï Nasm
+3*2Awasm_Obj ä ©«, ¨á¯®«ì§ãï Wasm (Watcom)
+3*2Anasmobj_Obj ä ©«, ¨á¯®«ì§ãï Nasm
+3*2Amasm_Obj ä ©«, ¨á¯®«ì§ãï Masm (Microsoft)
+3*2Atasm_Obj ä ©«, ¨á¯®«ì§ãï Tasm (Borland)
+3*2Aelf_ELF (Linux) ¨á¯®«ì§ãï ¢­ãâ७­¨© £¥­¥à â®à
+3*2Acoff_COFF (Go32v2) ¨á¯®«ì§ãï ¢­ãâ७­¨© £¥­¥à â®à
+3*2Apecoff_PE-COFF (Win32) ¨á¯®«ì§ãï ¢­ãâ७­¨© £¥­¥à â®à
+4*2Aas_€áᥬ¡«¥à GNU AS
+6*2Aas_Unix o-ä ©«, ¨á¯®«ì§ãï GNU AS
+6*2Agas_GNU Motorola  áᥬ¡«¥à
+6*2Amit_‘¨­â ªá¨á MIT (áâ àë© GAS)
+6*2Amot_‘â ­¤ àâ­ë©  áᥬ¡«¥à Motorola
+A*2Aas_€áᥬ¡«¥à GNU AS
+P*2Aas_€áᥬ¡«¥à GNU AS
+S*2Aas_€áᥬ¡«¥à GNU AS
+**1b_ƒ¥­¥p¨p®¢ âì ¨­ä®p¬ æ¨î ¤«ï ¡p y§¥p  (IDE)
+**2bl_ƒ¥­¥p¨p®¢ âì â ª¦¥ ¨­ä®p¬ æ¨î ® «®ª «ì­ëå ᨬ¢®« å
+**1B_¥p¥á¡®àª  ¢á¥å ¬®¤y«¥©
+**1C<x>_Ž¯æ¨¨ £¥­¥p â®à  ª®¤ :
+**2Ca<x>_‚ë¡®à ABI, á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2Cb_ƒ¥­¥à¨à®¢ âì big-endian ª®¤
+**2Cc<x>_“áâ ­®¢¨âì ⨯ ¢ë§®¢  ¯® 㬮«ç ­¨î ¢ <x>
+**2CD_‘®§¤ âì â ª¦¥ ¤¨­ ¬¨ç¥áªyî ¡¨¡«¨®â¥ªy (­¥ ¯®¤¤¥p¦¨¢ ¥âáï)
+**2Ce_Š®¬¯¨«¨à®¢ âì á í¬ã«¨à®¢ ­­ë¬¨ ¨­áâàãªæ¨ï¬¨ á ¯« ¢ î饩 § ¯ï⮩
+**2Cf<x>_‚ë¡®à ­ ¡®à  ª®¬ ­¤ á®¯à®æ¥áá®à , á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2CF<x>_Œ¨­¨¬ «ì­ ï â®ç­®áâì ª®­áâ ­â á ¯« ¢ î饩 § ¯ï⮩ (default, 32, 64)
+**2Cg_ƒ¥­¥à¨à®¢ âì ¯®§¨æ¨®­­®-­¥§ ¢¨á¨¬ë© ª®¤ (PIC)
+**2Ch<n>_<n> ¡ ©â ªyç¨ (®â 1023 ¤® 67107840)
+**2Ci_p®¢¥pª  ¢¢®¤ -¢ë¢®¤ 
+**2Cn_p®¯yáâ¨âì áâ ¤¨î ª®¬¯®­®¢ª¨
+**2Co_p®¢¥pª  ¯¥à¥¯®«­¥­¨ï 楫®ç¨á«¥­­ëå ®¯¥à æ¨©
+**2CO_஢¥àª  ¢®§¬®¦­®£® ¯¥à¥¯®«­¥­¨ï 楫®ç¨á«¥­­ëå ®¯¥à æ¨©
+**2Cp<x>_‚ë¡®à ­ ¡®à  ª®¬ ­¤, á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2CP<x>=<y>_ ­ áâனª¨ 㯠ª®¢ª¨
+**3CPPACKSET=<y>_ <y> 㯠ª®¢ª  ¬­®¦¥áâ¢: 0, 1 ¨«¨ DEFAULT ¨«¨ NORMAL, 2, 4 ¨ 8
+**2Cr_p®¢¥pª  ¤¨ ¯ §®­®¢
+**2CR_஢¥àª  ¯à ¢¨«ì­®á⨠¢ë§®¢  ¬¥â®¤®¢ ®¡ê¥ªâ®¢
+**2Cs<n>_“áâ ­®¢¨âì p §¬¥p á⥪  ¢ <n>
+**2Ct_஢¥àª  á⥪  (⮫쪮 â¥áâ¨à®¢ ­¨¥, á¬. à㪮¢®¤á⢮)
+**2CX_‘®§¤ âì â ª¦¥ smartlink-¡¨¡«¨®â¥ªã
+**1d<x>_ޝp¥¤¥«¨âì ᨬ¢®« <x>
+**1D_‘®§¤ âì DEF-ä ©«
+**2Dd<x>_“áâ ­®¢¨âì ®¯¨á ­¨¥ ¢ <x>
+**2Dv<x>_“áâ ­®¢¨âì ¢¥àá¨î DLL ¢ <x>
+*O2Dw_ਫ®¦¥­¨¥ PM
+**1e<x>_“áâ ­®¢¨âì ¯yâì ¤«ï ¨á¯®«­ï¥¬ëå ä ©«®¢
+**1E_’® ¦¥, çâ® ¨ -Cn
+**1fPIC_’® ¦¥, çâ® ¨ -Cg
+**1F<x>_“áâ ­®¢ª  ¨¬¥­ ¨ ¯ã⥩ ä ©«®¢
+**2Fa<x>[,y]_(¤«ï ¯à®£à ¬¬ë) § £à㧨âì ¬®¤ã«¨ <x> ¨ [y] ¯¥à¥¤ ç⥭¨¥¬ ᥪ樨 uses
+**2Fc<x>_“áâ ­®¢¨âì ª®¤®¢ãî áâà ­¨æã ¨á室­®£® ä ©«  ¢ <x>
+**2FC<x>_“áâ ­®¢¨âì ¨¬ï ª®¬¯¨«ïâ®à  à¥áãàᮢ (.rc) ¢ <x>
+**2Fd_Žâª«îç¨âì ¢­ãâ७­¨© ªíè ¤¨à¥ªâ®à¨© ª®¬¯¨«ïâ®à 
+**2FD<x>_“áâ ­®¢¨âì ¯yâì ¯®¨áª  ã⨫¨â ª®¬¯¨«ïâ®à 
+**2Fe<x>_¥p¥­ ¯p ¢¨âì ¢ë¢®¤ ®è¨¡®ª ¢ <x>
+**2Ff<x>_„®¡ ¢¨âì <x> ª ¯ã⨠ä३¬¢®àª  (⮫쪮 Darwin)
+**2FE<x>_“áâ ­®¢¨âì ¯ãâì ¢ë¢®¤  exe/¬®¤ã«¥© ¢ <x>
+**2Fi<x>_„®¡ ¢¨âì <x> ª ¯yâï¬ ¢ª«îç ¥¬ëå ä ©«®¢
+**2Fl<x>_„®¡ ¢¨âì <x> ª ¯yâï¬ ¡¨¡«¨®â¥ª
+**2FL<x>_ˆá¯®«ì§®¢ âì <x> ª ª ¤¨­ ¬¨ç¥áª¨© ª®¬¯®­®¢é¨ª
+**2Fm<x>_‡ £à㧨âì â ¡«¨æã ¯à¥®¡à §®¢ ­¨ï unicode ¨§ <x>.txt ¢ ¤¨à¥ªâ®à¨¨ ª®¬¯¨«ïâ®à 
+**2Fo<x>_„®¡ ¢¨âì <x> ª ¯yâï¬ ®¡ê¥ªâ­ëå ä ©«®¢
+**2Fr<x>_‡ £py§¨âì ä ©« á®®¡é¥­¨© ®¡ ®è¨¡ª å <x>
+**2FR<x>_“áâ ­®¢¨âì ¨¬ï ª®¬¯®­®¢é¨ª  à¥áãàᮢ (.res) ¢ <x>
+**2Fu<x>_„®¡ ¢¨âì <x> ª ¯ãâï¬ ¬®¤ã«¥©
+**2FU<x>_“áâ ­®¢¨âì ¯yâì ¢ë¢®¤  ¬®¤y«¥© ¢ <x>, ®â¬¥­ï¥â -FE
+**2FW<x>_‡ ¯¨á âì ä ©« ®¡à â­®© á¢ï§¨ ®¯â¨¬¨§ æ¨¨ ¢á¥© ¯à®£à ¬¬ë ¢ <x>
+**2Fw<x>_‡ £à㧨âì à ­¥¥ á®§¤ ­­ë© ä ©« ®¡à â­®© á¢ï§¨ ¨§ <x>
+*g1g_‘®§¤ ¢ âì ®â« ¤®ç­ãî ¨­ä®à¬ æ¨î (ä®à¬ â¥ ¯® 㬮«ç ­¨î ¤«ï 楫¥¢®© ¯« âä®à¬ë)
+*g2gc_‘®§¤ ¢ âì ¯à®¢¥àª¨ 㪠§ â¥«¥©
+*g2gh_ˆá¯®«ì§®¢ âì ¬®¤y«ì heaptrc (¤«ï ®â« ¤ª¨ yâ¥ç¥ª/¯®¢à¥¦¤¥­¨© ¯ ¬ïâ¨)
+*g2gl_ˆá¯®«ì§®¢ âì ¬®¤ã«ì lineinfo (¡®«ìè¥ ¨­ä®à¬ æ¨¨ ® á⥪¥ ¢ë§®¢®¢)
+*g2go<x>_Ž¯æ¨¨ ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨
+*g3godwarfsets_ ‚ª«îç¨âì ¨­ä®à¬ æ¨î ® ¬­®¦¥á⢠å DWARF («®¬ ¥â gdb < 6.5)
+*g3gostabsabsincludes_ ‘®åà ­ïâì  ¡á®«îâ­ë¥/¯®«­ë¥ ¯ã⨠¢ª«îç ¥¬ëå ä ©«®¢ ¢ Stabs
+*g2gp_‘®åà ­ïâì ॣ¨áâà ¢ ¨¬¥­ å ᨬ¢®«®¢ stabs
+*g2gs_Žâ« ¤®ç­ ï ¨­ä®à¬ æ¨ï ¢ ä®à¬ â¥ Stabs
+*g2gt_‡ â¨à âì «®ª «ì­ë¥ ¯¥à¥¬¥­­ë¥ (¢ë¥­¨¥ ¨á¯®«ì§®¢ ­¨ï ¡¥§ ¨­¨æ¨ «¨§ æ¨¨)
+*g2gv_®¤¤¥à¦ª  âà áá¨à®¢ª¨ á ¯®¬®éìî Valgrind
+*g2gw_Žâ« ¤®ç­ ï ¨­ä®à¬ æ¨ï ¢ ä®à¬ â¥ DWARFv2 (â® ¦¥, çâ® ¨ -gw2)
+*g2gw2_Žâ« ¤®ç­ ï ¨­ä®à¬ æ¨ï ¢ ä®à¬ â¥ DWARFv2
+*g2gw3_Žâ« ¤®ç­ ï ¨­ä®à¬ æ¨ï ¢ ä®à¬ â¥ DWARFv3
+**1i_ˆ­ä®p¬ æ¨ï
+**2iD_‚¥à­ãâì ¤ ây ª®¬¯¨«ïâ®p 
+**2iV_‚¥à­ãâì ª®à®âªãî ¢¥pá¨î ª®¬¯¨«ïâ®à 
+**2iW_‚¥à­ãâì ¯®«­ãî ¢¥àá¨î ª®¬¯¨«ïâ®à 
+**2iSO_‚¥à­ãâì ⨯ Ž‘ ª®¬¯¨«ïâ®à 
+**2iSP_‚¥à­ãâì ⨯ ¯p®æ¥áá®p  ª®¬¯¨«ïâ®à 
+**2iTO_‚¥à­ãâì ⨯ Ž‘ ­ §­ ç¥­¨ï
+**2iTP_‚¥à­ãâì ⨯ ¯p®æ¥áá®p  ­ §­ ç¥­¨ï
+**1I<x>_„®¡ ¢¨âì <x> ª ¯y⨠¤® ¢ª«îç ¥¬ëå ä ©«®¢
+**1k<x>_¥à¥¤ âì <x> ª®¬¯®­®¢é¨ªy
+**1l_‚뢥á⨠«®£®â¨¯
+**1M<x>_“áâ ­®¢¨âì ०¨¬ ï§ëª  ¢ <x>
+**2Mfpc_„¨ «¥ªâ Free Pascal (¯® 㬮«ç ­¨î)
+**2Mobjfpc_¥¦¨¬ FPC á ¯®¤¤¥à¦ª®© Object Pascal
+**2Mdelphi_¥¦¨¬ ᮢ¬¥á⨬®á⨠á Delphi 7
+**2Mtp_¥¦¨¬ ᮢ¬¥á⨬®á⨠á TP/BP 7.0
+**2Mmacpas_¥¦¨¬ ᮢ¬¥á⨬®áâ¨ á ¤¨ «¥ªâ ¬¨ Macintosh Pascal
+**1n_¥ ç¨â âì áâ ­¤ pâ­ë¥ ä ©«ë ª®­ä¨£ãà æ¨¨
+**1N<x>_Ž¯â¨¬¨§ æ¨ï £à ä 
+**2Nu_ §¢®à ç¨¢ âì æ¨ª«ë
+**1o<x>_ˆ§¬¥­¨âì ¨¬ï ¯®«ãç ¥¬®£® ¨á¯®«­ï¥¬®£® ä ©«  ­  <x>
+**1O<x>_Ž¯â¨¬¨§ æ¨¨:
+**2O-_Žâª«îç¨âì ®¯â¨¬¨§ æ¨¨
+**2O1_Ž¯â¨¬¨§ æ¨¨ ã஢­ï 1 (¡ëáâà® ¨ ᮢ¬¥á⨬® á ®â« ¤ç¨ª®¬)
+**2O2_Ž¯â¨¬¨§ æ¨¨ ã஢­ï 2 (-O1 + ¡ëáâàë¥ ®¯â¨¬¨§ æ¨¨)
+**2O3_Ž¯â¨¬¨§ æ¨¨ ã஢­ï 3 (-O2 + ¬¥¤«¥­­ë¥ ®¯â¨¬¨§ æ¨¨)
+**2Oa<x>=<y>_“áâ ­®¢¨âì ¢ëà ¢­¨¢ ­¨¥
+**2Oo[NO]<x>_‚ª«îç¨âì ¨«¨ ®âª«îç¨âì ®â¤¥«ì­ë¥ ®¯â¨¬¨§ æ¨¨, á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2Op<x>_‡ ¤ âì ¯à®æ¥áá®à ¤«ï ®¯â¨¬¨§ æ¨¨, á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2OW<x>_ƒ¥­¥à æ¨ï ä ©«  ®¡à â­®© á¢ï§¨ wpo ¤«ï ®¯â¨¬¨§ æ¨¨ <x>, á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2Ow<x>_‚믮«­¨âì ®¯â¨¬¨§ æ¨î <x> ¢á¥© ¯à®£à ¬¬ë, á¬. fpc -i ¤«ï ¢®§¬®¦­ëå §­ ç¥­¨©
+**2Os_Ž¯â¨¬¨§ æ¨ï ¯® à §¬¥àã ¢¬¥á⮠᪮à®áâ¨
+**1pg_ƒ¥­¥p æ¨ï ª®¤  ¤«ï ¯à®ä¨«¨à®¢ ­¨ï á ¯®¬®éìî gprof (®¯p¥¤¥«ï¥â ᨬ¢®« FPC_PROFILE)
+**1R<x>_‘⨫ì ç⥭¨ï  áᥬ¡«¥à :
+**2Rdefault_€áᥬ¡«¥à ¯® 㬮«ç ­¨î ¤«ï 楫¥¢®© ¯« âä®à¬ë
+3*2Ratt_—⥭¨¥  áᥬ¡«¥à  ¢ á⨫¥ AT&T
+3*2Rintel_—⥭¨¥  áᥬ¡«¥à  ¢ á⨫¥ Intel
+6*2RMOT_—⥭¨¥  áᥬ¡«¥à  ¢ á⨫¥ Motorola
+**1S<x>_Ž¯æ¨¨ ᨭ⠪á¨á :
+**2S2_’® ¦¥, çâ® ¨ -Mobjfpc
+**2Sc_®¤¤¥p¦ª  ®¯¥à â®à®¢ ª ª ¢ C (*=,+=,/= ¨ -=)
+**2sa_‚ª«îç¨âì ¯à®¢¥àª¨ Assert
+**2Sd_’® ¦¥, çâ® ¨ -Mdelphi
+**2Se<x>_Ž¯æ¨¨ ®è¨¡®ª. <x> - ª®¬¡¨­ æ¨ï á«¥¤ãîé¨å ᨬ¢®«®¢:
+**3*_<n> : Žáâ ­®¢ª  ª®¬¯¨«ï樨 ¯®á«¥ <n> ®è¨¡®ª (¯® 㬮«ç ­¨î 1)
+**3*_w : Š®¬¯¨«ïâ®à â ª¦¥ ®áâ ­ ¢«¨¢ ¥âáï ¯®á«¥ ¯à¥¤ã¯à¥¦¤¥­¨©
+**3*_n : Š®¬¯¨«ïâ®à â ª¦¥ ®áâ ­ ¢«¨¢ ¥âáï ¯®á«¥ § ¬¥â®ª
+**3*_h : Š®¬¯¨«ïâ®à â ª¦¥ ®áâ ­ ¢«¨¢ ¥âáï ¯®á«¥ ¯®¤áª §®ª
+**2Sg_ §à¥è¨âì LABEL ¨ GOTO (¯® 㬮«ç ­¨î ¢ -Mtp ¨ -Mdelphi)
+**2Sh_ˆá¯®«ì§®¢ âì áâp®ª¨ ansistring ¯® 㬮«ç ­¨î ¢¬¥áâ® shortstring
+**2Si_‚ª«îç¨âì ¢áâà ¨¢ ­¨¥ ¯à®æ¥¤ãà/ä㭪権, ®¡ê¥­­ëå ª ª "inline"
+**2Sk_‡ £à㧨âì ¬®¤ã«ì fpcylix
+**2SI<x>_“áâ ­®¢¨âì áâ¨«ì ¨­â¥à䥩ᮢ ¢ <x>
+**3SIcom_COM-ᮢ¬¥áâ¨¬ë¥ ¨­â¥à䥩áë (¯® 㬮«ç ­¨î)
+**3SIcorba_CORBA-ᮢ¬¥áâ¨¬ë¥ ¨­â¥à䥩áë
+**2Sm_®¤¤¥p¦ª  ¬ ªà®ª®¬ ­¤ ª ª ¢ C (£«®¡ «ì­®)
+**2So_’® ¦¥, çâ® ¨ -Mtp
+**2Ss_ˆ¬ï ª®­áâàãªâ®à  ¤®«¦­® ¡ëâì init (¨¬ï ¤¥áâàãªâ®à  ¤®«¦­® ¡ëâì done)
+**2St_®¤¤¥p¦ª  ª«î祢®£® á«®¢  static ¢ ®¡ê¥ªâ å
+**2Sx_®¤¤¥à¦ª  ª«î祢ëå á«®¢ ¨áª«î祭¨© (¯® 㬮«ç ­¨î ¢ ०¨¬ å Delphi/ObjFPC)
+**1s_¥ ¢ë§ë¢ âì  áᥬ¡«¥à ¨ ª®¬¯®­®¢é¨ª
+**2sh_‘®§¤ âì áªà¨¯â ¤«ï ª®¬¯®­®¢ª¨ ­  å®áâ¥
+**2st_‘®§¤ âì áªà¨¯â ¤«ï ª®¬¯®­®¢ª¨ ­  ¯« âä®à¬¥ ­ §­ ç¥­¨ï
+**2sr_யãáâ¨âì ä §ã à á¯à¥¤¥«¥­¨ï ॣ¨áâ஢ (¨á¯®«ì§ã¥âáï á -alr)
+**1T<x>_ޝ¥à æ¨®­­ ï á¨á⥬  ­ §­ ç¥­¨ï:
+3*2Temx_OS/2 ç¥à¥§ EMX (¢ª«îç ï à áè¨à¨â¥«ì EMX/RSX)
+3*2Tfreebsd_FreeBSD
+3*2Tgo32v2_‚¥àá¨ï 2 à áè¨à¨â¥«ï DOS DJ Delorie
+3*2Tlinux_Linux
+3*2Tnetbsd_NetBSD
+3*2Tnetware_Œ®¤ã«ì Novell Netware (clib)
+3*2Tnetwlibc_Œ®¤ã«ì Novell Netware (libc)
+3*2Topenbsd_OpenBSD
+3*2Tos2_OS/2 / eComStation
+3*2Tsunos_SunOS/Solaris
+3*2Tsymbian_Symbian OS
+3*2Twatcom_Watcom-ᮢ¬¥áâ¨¬ë© à áè¨à¨â¥«ì DOS
+3*2Twdosx_ áè¨à¨â¥«ì DOS WDOSX
+3*2Twin32_Windows 32 ¡¨â 
+3*2Twince_Windows CE
+4*2Tlinux_Linux
+6*2Tamiga_Commodore Amiga
+6*2Tatari_Atari ST/STe/TT
+6*2Tlinux_Linux/m68k
+6*2Tmacos_Macintosh m68k (­¥ ¯®¤¤¥à¦¨¢ ¥âáï)
+6*2Tpalmos_PalmOS
+A*2Tlinux_Linux
+A*2Twince_Windows CE
+P*2Tamiga_AmigaOS ­  PowerPC
+P*2Tdarwin_Darwin ¨ Mac OS X ­  PowerPC
+P*2Tlinux_Linux ­  PowerPC
+P*2Tmacos_Mac OS (classic) ­  PowerPC
+P*2Tmorphos_MorphOS
+S*2Tlinux_Linux
**1u<x>_y¤ «ï¥â ®¯p¥¤¥«¥­¨¥ ᨬ¢®«  <x>
-**1U_®¯æ¨¨ ¬®¤y«¥©
-**2Un_­¥ ¯p®¢¥pïâì ᮮ⢥âá⢨¥ ¨¬¥­¨ ¬®¤y«ï ¨ ¨¬¥­¨ ä ©«  ¬®¤y«ï
-**2Us_᪮¬¯¨«¨p®¢ âì £« ¢­ë© ¬®¤y«ì (system)
-**1v<x>_¯®¤p®¡­®áâì <x> íâ® ª®¬¡¨­ æ¨ï á«¥¤yîé¨å ᨬ¢®«®¢:
-**2*_e : ‚ᥠ®è¨¡ª¨ (¯® 㬮«ç ­¨î) d: ˆ­ä®à¬ æ¨ï ¤«ï ®â« ¤ª¨
-**2*_w : ।ã¯à¥¦¤¥­¨ï u: ˆ­ä®à¬ æ¨î ¬®¤ã«ï
-**2*_n : ਬ¥ç ­¨ï t: ஡®¢ ­­ë¥/¨á¯®«ì§®¢ ­­ë¥ ä ©«ë
-**2*_h : ®¤áª §ª¨ m: Ž¯à¥¤¥«¥­­ë¥ ¬ ªà®ª®¬ ­¤ë
-**2*_i : Ž¡é ï ¨­ä®à¬ æ¨ï p: Š®¬¯¨«¨àã¥¬ë¥ ¯à®æ¥¤ãàë
-**2*_l : H®¬¥p  «¨­¨© c: “á«®¢­ë¥ ¢ëà ¦¥­¨ï
-**2*_a : ‚ᥠ¯®ª §ë¢ âì 0: H¨ç¥£® ­¥ á®®¡é âì, ªp®¬¥ ®è¨¡®ª
-**2*_b : ®ª § âì ¢áî ¯p®æ¥¤ypy, r: Rhide/GCC ०¨¬ ᮢ¬¥á⨬®áâ¨
-**2*_ ¥á«¨ ®è¨¡ª  ¯p®¨á室¨â x: ˆ­ä®à¬ æ¨ï ® ä ©«¥ (⮫쪮 Win32)
-**2*_ ¨¬¥­­® ¢ ­¥©
+**1U_Ž¯æ¨¨ ¬®¤y«¥©:
+**2Un_¥ ¯p®¢¥pïâì ᮮ⢥âá⢨¥ ¨¬¥­¨ ¬®¤y«ï ¨ ¨¬¥­¨ ä ©« 
+**2Ur_ƒ¥­¥à¨à®¢ âì ५¨§­ë¥ ä ©«ë ¬®¤ã«¥© (­¥ ¯¥à¥ª®¬¯¨«¨àãîâáï  ¢â®¬ â¨ç¥áª¨)
+**2Us_Š®¬¯¨«¨p®¢ âì ¬®¤y«ì system
+**1v<x>_“஢¥­ì ¯®¤p®¡­®áâ¨. <x> - ª®¬¡¨­ æ¨ï á«¥¤yîé¨å ᨬ¢®«®¢:
+**2*_e : Žè¨¡ª¨ (¯® 㬮«ç ­¨î) 0 : ¨ç¥£® (ªà®¬¥ ®è¨¡®ª)
+**2*_w : ।ã¯à¥¦¤¥­¨ï u : ˆ­ä®à¬ æ¨ï ® ¬®¤ã«ïå
+**2*_n : ਬ¥ç ­¨ï t : ®¯à®¡®¢ ­­ë¥/¨á¯®«ì§®¢ ­­ë¥ ä ©«ë
+**2*_h : ®¤áª §ª¨ c : “á«®¢­ë¥ ¢ëà ¦¥­¨ï
+**2*_i : Ž¡é ï ¨­ä®à¬ æ¨ï d : Žâ« ¤®ç­ë¥ á®®¡é¥­¨ï
+**2*_l : H®¬¥p  áâப c : ¥¦¨¬ ᮢ¬¥á⨬®á⨠á Rhide/GCC
+**2*_s : Žâ¬¥âª¨ ¢à¥¬¥­¨ q : ®¬¥à  á®®¡é¥­¨©
+**2*_a : ®ª §ë¢ âì ¢á¥ x : ˆ­ä®à¬ æ¨ï ® ¨á¯®«­ï¥¬®¬ ä ©«¥ (⮫쪮 Win32)
+**2*_b : ‘®®¡é¥­¨ï ® ä ©« å p : ‡ ¯¨áì tree.log á £à ä®¬ à §¡®à 
+**2*_ á ¯®«­ë¬¨ ¯ãâﬨ x : ‡ ¯¨áì fpcdebug.txt á ¯®¤à®¡­®©
+**2*_ ¨¬¥­­® ¢ ­¥© ®â« ¤®ç­®© ¨­ä®à¬ æ¨¥©
+**2*_m<x>,<y> : ¥ ¯®ª §ë¢ âì á®®¡é¥­¨ï á ­®¬¥à ¬¨ <x> ¨ <y>
+3*1W<x>_« âä®à¬¥­­®-ᯥæ¨ä¨ç­ë¥ ®¯æ¨¨ (¯« âä®à¬ë)
+A*1W<x>_« âä®à¬¥­­®-ᯥæ¨ä¨ç­ë¥ ®¯æ¨¨ (¯« âä®à¬ë)
+P*1W<x>_« âä®à¬¥­­®-ᯥæ¨ä¨ç­ë¥ ®¯æ¨¨ (¯« âä®à¬ë)
+p*1W<x>_« âä®à¬¥­­®-ᯥæ¨ä¨ç­ë¥ ®¯æ¨¨ (¯« âä®à¬ë)
+3*2Wb_‘®§¤ ¢ âì bundle ¢¬¥áâ® ¡¨¡«¨®â¥ª¨ (Darwin)
+P*2Wb_‘®§¤ ¢ âì bundle ¢¬¥áâ® ¡¨¡«¨®â¥ª¨ (Darwin)
+p*2Wb_‘®§¤ ¢ âì bundle ¢¬¥áâ® ¡¨¡«¨®â¥ª¨ (Darwin)
+3*2WB_‘®§¤ ¢ âì ¯¥à¥¬¥é ¥¬ë© ®¡à § (Windows)
+A*2WB_‘®§¤ ¢ âì ¯¥à¥¬¥é ¥¬ë© ®¡à § (Windows, Symbian)
+3*2WC_“ª § âì ª®­á®«ì­ë© ⨯ ¯à¨«®¦¥­¨ï (EMX, OS/2, Windows)
+A*2WC_“ª § âì ª®­á®«ì­ë© ⨯ ¯à¨«®¦¥­¨ï (Windows)
+P*2WC_“ª § âì ª®­á®«ì­ë© ⨯ ¯à¨«®¦¥­¨ï (Classic Mac OS)
+3*2WD_ˆá¯®«ì§®¢ âì DEFFILE ¤«ï íªá¯®àâ  ä㭪樨 DLL ¨«¨ EXE (Windows)
+A*2WD_ˆá¯®«ì§®¢ âì DEFFILE ¤«ï íªá¯®àâ  ä㭪樨 DLL ¨«¨ EXE (Windows)
+3*2We_ˆá¯®«ì§®¢ âì ¢­¥è­¨¥ à¥áãàáë (Darwin)
+P*2We_ˆá¯®«ì§®¢ âì ¢­¥è­¨¥ à¥áãàáë (Darwin)
+p*2We_ˆá¯®«ì§®¢ âì ¢­¥è­¨¥ à¥áãàáë (Darwin)
+3*2WF_“ª § âì ¯®«­®íªà ­­ë© ⨯ ¯à¨«®¦¥­¨ï (EMX, OS/2)
+3*2WG_“ª § âì £à ä¨ç¥áª¨© ⨯ ¯à¨«®¦¥­¨ï (EMX, OS/2, Windows)
+A*2WG_“ª § âì £à ä¨ç¥áª¨© ⨯ ¯à¨«®¦¥­¨ï (Windows)
+P*2WG_“ª § âì £à ä¨ç¥áª¨© ⨯ ¯à¨«®¦¥­¨ï (Classic Mac OS)
+3*2Wi_ˆá¯®«ì§®¢ âì ¢­ãâ७­¨¥ à¥áãàáë (Darwin)
+P*2Wi_ˆá¯®«ì§®¢ âì ¢­ãâ७­¨¥ à¥áãàáë (Darwin)
+p*2Wi_ˆá¯®«ì§®¢ âì ¢­ãâ७­¨¥ à¥áãàáë (Darwin)
+3*2WN_¥ £¥­¥à¨à®¢ âì ª®¤ ¯¥à¥¬¥é¥­¨ï, ­ã¦­® ¤«ï ®â« ¤ª¨ (Windows)
+A*2WN_¥ £¥­¥à¨à®¢ âì ª®¤ ¯¥à¥¬¥é¥­¨ï, ­ã¦­® ¤«ï ®â« ¤ª¨ (Windows)
+3*2WR_ƒ¥­¥à¨à®¢ âì ª®¤ ¯¥à¥¬¥é¥­¨ï (Windows)
+A*2WR_ƒ¥­¥à¨à®¢ âì ª®¤ ¯¥à¥¬¥é¥­¨ï (Windows)
+P*2WT_“ª § âì ⨯ ¯à¨«®¦¥­¨ï MPW tool (Classic Mac OS)
+3*2WX_ §à¥è¨âì ¨á¯®«­ï¥¬ë© á⥪ (Linux)
+A*2WX_ §à¥è¨âì ¨á¯®«­ï¥¬ë© á⥪ (Linux)
+p*2WX_ §à¥è¨âì ¨á¯®«­ï¥¬ë© á⥪ (Linux)
+P*2WX_ §à¥è¨âì ¨á¯®«­ï¥¬ë© á⥪ (Linux)
**1X_®¯æ¨¨ ¢ë¯®«­¥­¨ï
-*L2Xc_«¨­ª®¢ âì á ¡¨¡«¨®â¥ª®© ï§ëª  C
-**2Xs_®ç¨áâ¨âì ¢á¥ á¨¬¢®«ì­ë¥ ¨¬¥­  ¨§ ¯p®£p ¬¬ë
-**2XD_«¨­ª®¢ âì ¤¨­ ¬¨ç¥áª¨¥ ¡¨¡«¨®â¥ª¨ (®¯p¥¤¥«ï¥â FPC_LINK_DYNAMIC)
-**2XS_«¨­ª®¢ âì áâ â¨ç¥áª¨¥ ¡¨¡«¨®â¥ª¨ (®¯p¥¤¥«ï¥â FPC_LINK_STATIC)
-**2XX_«¨­ª®¢ âì smart-¡¨¡«¨®â¥ª¨ (®¯p¥¤¥«ï¥â FPC_LINK_SMART)
-**0*_Ž¯æ¨¨ ᯥæ¨ä¨ç­ë¥ ¤«ï ¯p®æ¥áá®p®¢:
-3*1A<x>_ä®à¬ â ¢ë¢®¤ 
-3*2Aas_ä ©«, ¨á¯®«ì§ãî騩 GNU
-3*2Aasaout_ä ©«, ¨á¯®«ì§ãî騩 GNU for aout (Go32v1)
-3*2Anasmcoff_coff (Go32v2) ä ©«, ¨á¯®«ì§ãî騩 Nasm
-3*2Anasmelf_elf32 (Linux) ä ©«, ¨á¯®«ì§ãî騩 Nasm
-3*2Anasmobj_obj ä ©«, ¨á¯®«ì§ãî騩 Nasm
-3*2Amasm_obj ¨á¯®«ì§yî騩 Masm (Microsoft)
-3*2Atasm_obj ¨á¯®«ì§yî騩 Tasm (Borland)
-3*2Acoff_coff (Go32v2) ¨á¯®«ì§ãï ¢áâ஥­­ë©  áᥬ¡«¥à
-3*2Apecoff_pecoff (Win32) ¨á¯®«ì§ãï ¢áâ஥­­ë©  áᥬ¡«¥à
-3*1R<x>_á⨫ì ç⥭¨ï  áᥬ¡«¥p 
-3*2Ratt_ç¨â âì ª ª  áᥬ¡«¥à ¢ á⨫¥ AT&T
-3*2Rintel_ç¨â âì ª ª  áᥬ¡«¥à ¢ á⨫¥ Intel
-3*2Rdirect_⥪áâ  áᥬ¡«¥à  ¯¥p¥¤ ¢ âì ­¥¯®á।á⢥­­®  áᥬ¡«¥ày
-3*1O<x>_â¨¯ë ®¯â¨¬¨§ æ¨©
-3*2Og_£¥­¥p¨p®¢ âì ¬¥­ì訩 ª®¤
-3*2OG_£¥­¥p¨p®¢ âì ¡ëáâpë© ª®¤ (¯® y¬®«ç ­¨î)
-3*2Or_á®åp ­ïâì ­¥ª®â®àë¥ ¯¥à¥¬¥­­ë¥ ¢ ॣ¨áâp å
-3*2Ou_¢ª«îç¨âì ­¥®¯à¥¤¥«¥­­ë¥ ®¯â¨¬¨§ æ¨¨ (á¬. ¤®ªã¬¥­â æ¨î)
-3*2O1_yp®¢¥­ì 1 ®¯â¨¬¨§ æ¨¨ (¡ëáâàë¥ ®¯â¨¬¨§ æ¨¨)
-3*2O2_yp®¢¥­ì 2 ®¯â¨¬¨§ æ¨¨ (-O1 + ¡®«¥¥ ¬¥¤«¥­­ë¥ ®¯â¨¬¨§ æ¨¨)
-3*2O3_yp®¢¥­ì 3 ®¯â¨¬¨§ æ¨¨ (â®â ¦¥ á ¬ë© ª ª -O2u)
-3*2Op_⨯ ¯à®æ¥áá®à , ¤«ï ª®â®p®£® ¯p®¨á室¨â ª®¬¯¨«ïæ¨ï:
-3*3Op1_¤«ï ¯à®æ¥áá®à  386/486
-3*3Op2_¤«ï ¯à®æ¥áá®à Pentium/PentiumMMX (tm)
-3*3Op3_¯à®æ¥áá®à Pentium PRO/Pentium II/Cyrix 6X86/AMD K6 (tm)
-3*1T<x>_⨯ ®¯¥à æ¨®­­ ï á¨á⥬ë, ¤«ï ª®â®p®© ¯p®¨á室¨â ª®¬¯¨«ïæ¨ï:
-3*2TGO32V2_version 2 (DJ Delorie à áè¨à¨â¥«ì DOS)
-3*2TLINUX_Linux
-3*2TOS2_OS/2 / eComStation
-3*2TWIN32_Windows 32 Bit
-3*1W<x>_Win32 ®¯æ¨¨
-3*1WB<x>_ “áâ ­®¢ª  Image ¡ §ë ¢ è¥áâ­ ¤æ¥â¨à¨ç­®¥ <x> §­ ç¥­¨¥
-3*1WC_ Ž¯à¥¤¥«¨âì, çâ® íâ® ¡ã¤¥â ª®­á®«ì­®¥ ¯à¨«®¦¥­¨¥
-3*1WD_ ˆá¯®«ì§®¢ âì DEFFILE ¤«ï íªá¯®àâ¨à®¢ ­­ëå ä㭪権 DLL ¨«¨ EXE
-3*1WG_ Ž¯à¥¤¥«¨âì, çâ® íâ® ¡ã¤¥â GUI ¯à¨«®¦¥­¨¥
-3*1WN_ ¥ £¥­¥à¨à®¢ âì ¯¥à¥¬¥é ¥¬ë© ª®¤ (­¥®¡å®¤¨¬® ¤«ï ®â« ¤ª¨)
-3*1WR_ ƒ¥­¥à¨à®¢ âì ¯¥à¥¬¥é ¥¬ë© ª®¤
-6*1A<x>_ä®à¬ â  áᥬ¡«¥p 
-6*2Ao_Unix o-ä ©«, ¨á¯®«ì§ãî騩 GNU  áᥬ¡«¥p
-6*2Agas_GNU  áᥬ¡«¥à ä¨à¬ë Motorola
-6*2Amit_MIT ᨭ⠪á¨á (áâ àë© GAS)
-6*2Amot_áâ ­¤ pâ­ë©  áᥬ¡«¥p ä¨à¬ë Motorola
-6*1O_®¯â¨¬¨§ æ¨¨
-6*2Oa_¢ª«î砥⠮¯â¨¬¨§ â®p
-6*2Og_£¥­¥p¨p®¢ âì ¬¥­ì訩 ª®¤
-6*2OG_£¥­¥p¨p®¢ âì ¡ëáâpë© ª®¤ (¯® 㬮«ç ­¨î)
-6*2Ox_¬ ªá¨¬ «ì­ ï ®¯â¨¬¨§ æ¨ï (¥áâì ®è¨¡ª¨!)
-6*2O2_¤«ï ¯à®æ¥áá®à  MC68020+
-6*1R<x>_á⨫ì ç⥭¨ï  áᥬ¡«¥p 
-6*2RMOT_ç¨â âì ª ª Motorola- áᥬ¡«¥p
-6*1T<x>_®¯¥à æ¨®­­ ï á¨á⥬  ¤«ï ª®â®p®© ª®¬¯¨«¨py¥âáï ä ©«
-6*2TAMIGA_Commodore ‚Œ ä¨à¬ë Commodore
-6*2TATARI_Atari ST/STe/TT
-6*2TMACOS_Macintosh m68k
-6*2TLINUX_Linux-68k
+**2Xc_¥à¥¤ âì ª®¬¯®­®¢é¨ªã --shared/-dynamic (BeOS, Darwin, FreeBSD, Linux)
+**2Xd_¥ ¨á¯®«ì§®¢ âì áâ ­¤ àâ­ë© ¯ãâì ¯®¨áª  ¡¨¡«¨®â¥ª (­ã¦­® ¤«ï ªà®á᪮¬¯¨«ï樨)
+**2Xe_ˆá¯®«ì§®¢ âì ¢­¥è­¨© ª®¬¯®­®¢é¨ª
+**2Xg_‘®§¤ âì ®â« ¤®ç­ãî ¨­ä®à¬ æ¨î ¢ ®â¤¥«ì­®¬ ä ©«¥ ¨ ¤®¡ ¢¨â ᥪæ¨î debuglink ¢ ¨á¯®«­ï¥¬ë© ä ©«
+**2XD_®¯à®¡®¢ âì ᪮¬¯®­®¢ âì ¤¨­ ¬¨ç¥áª¨ (®¯à¥¤¥«ï¥â ᨬ¢®« FPC_LINK_DYNAMIC)
+**2Xi_ˆá¯®«ì§®¢ âì ¢­ãâ७­¨© ª®¬¯®­®¢é¨ª
+**2Xm_‘®§¤ âì ª àâã ª®¬¯®­®¢ª¨
+**2XM<x>_‡ ¤ âì ¨¬ï ®á­®¢­®© â®çª¨ ¢å®¤  'main' (¯® 㬮«ç ­¨î 'main')
+**2XP<x>_„®¡ ¢¨âì ª ¨¬¥­ ¬ binutils ¯à¥ä¨ªá <x>
+**2Xr<x>_“áâ ­®¢¨âì rlink-path ª®¬¯®­®¢é¨ª  ¢ <x> (­ã¦­® ¤«ï ªà®á᪮¬¯¨«ï樨, á¬. à㪮¢®¤á⢮ ld) (BeOS, Linux)
+**2XR<x>_„®¡ ¢¨â ¯à¥ä¨ªá <x> ª® ¢á¥¬ ¯ãâï¬ ¯®¨áª  ª®¬¯®­®¢é¨ª  (BeOS, Darwin, FreeBSD, Linux, Mac OS, Solaris)
+**2Xs_“¡à âì ¢á¥ á¨¬¢®«ë ¨§ ¨á¯®«­ï¥¬®£® ä ©« 
+**2XS_®¯à®¡®¢ âì ᪮¬¯®­®¢ âì áâ â¨ç¥áª¨ (¯® 㬮«ç ¥­¨î, ®¯à¥¤¥«ï¥â ᨬ¢®« FPC_LINK_STATIC)
+**2Xt_Š®¬¯®­®¢ª  á® áâ â¨ç¥áª¨¬¨ ¡¨¡«¨®â¥ª ¬¨ (ª®¬¯®­®¢é¨ªã ¯¥à¥¤ ¥âáï -static)
+**2XX_®¯à®¡®¢ âì "㬭ãî" ª®¬¯®­®¢ªã (®¯à¥¤¥«ï¥â ᨬ¢®« FPC_LINK_SMART)
**1*_
**1?_¯®ª § âì íây á¯à ¢ªy
-**1h_¯®ª § âì íây á¯à ¢ªy, ¡¥§ ®¦¨¤ ­¨ï <enter>
+**1h_¯®ª § âì íây á¯à ¢ªy ¡¥§ ®¦¨¤ ­¨ï
]
+
#
-# The End
+# The End...
diff --git a/compiler/msg/errorru.msg b/compiler/msg/errorru.msg
new file mode 100644
index 0000000000..b2d096e805
--- /dev/null
+++ b/compiler/msg/errorru.msg
@@ -0,0 +1,2833 @@
+#
+# This file is part of the Free Pascal Compiler
+# Copyright (c) 1999-2009 by the Free Pascal Development team
+#
+# Russian (utf-8) Language File for Free Pascal
+#
+# This file corresponds to SVN revision 13665 of errore.msg
+# Translated by Sergei Gorelkin <sergei_gorelkin at mail.ru>
+#
+# See the file COPYING.FPC, included in this distribution,
+# for details about the copyright.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+#
+# КонÑтанты запиÑываютÑÑ Ð² Ñледyющем виде:
+# <part>_<type>_<txtidentifier>
+#
+# <part> - чаÑть компилÑтора, в которой иÑпользуетÑÑ Ñообщение:
+# asmr_ чтение аÑÑемблера
+# asmw_ запиÑÑŒ аÑÑемблера/обьектных файлов
+# unit_ обработка модулей
+# scan_ Ñканер
+# parser_ ÑемантичеÑкий анализатор
+# type_ контроль ÑоответÑÑ‚Ð²Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð²
+# general_ Ð¾Ð±Ñ‰Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ
+# exec_ вызовы внешних программ (аÑÑемблера, компоновщика и Ñ‚.д.)
+# link_ внутренний компоновщик
+#
+# <type> тип ÑообщениÑ:
+# f_ Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°
+# e_ ошибка
+# w_ предупреждение
+# n_ примечание
+# h_ подÑказка
+# i_ информациÑ
+# l_ добавлÑетÑÑ Ð½Ð¾Ð¼Ðµp ÑÑ‚pоки
+# u_ иÑпользование
+# t_ попытка иÑпользовать
+# c_ уÑловное выражение
+# d_ отладочное Ñообщение
+# x_ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ иÑполнÑемых файлах
+# o_ обычные ("нажмите любую клавишу")
+#
+
+#
+# General
+#
+# 01023 is the last used one
+#
+# BeginOfTeX
+% \section{Общие ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтора}
+% Этот раздел Ñодержит ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð³Ð¾ назначениÑ.
+% КоличеÑтво таких Ñообщений управлÑетÑÑ
+% различными наÑÑ‚pойками ypÐ¾Ð²Ð½Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñти \var{-v}.
+% \begin{description}
+general_t_compilername=01000_T_КомпилÑтоp: $1
+% При иÑпользовании ключа \var{-vt} Ñта Ñтрока Ñообщает вам, какой
+% компилÑтор иÑпользуетÑÑ.
+general_d_sourceos=01001_D_ОС компилÑтора: $1
+% При иÑпользовании ключа \var{-vd} Ñта Ñтрока Ñообщает название
+% операционной ÑиÑтемы, в которой проиÑходит компилÑциÑ.
+general_i_targetos=01002_I_ОС назначениÑ: $1
+% При иÑпользовании ключа \var{-vd} Ñта Ñтрока Ñообщает название
+% операционной ÑиÑтемы, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ÑоздаетÑÑ Ñ„Ð°Ð¹Ð».
+general_t_exepath=01003_T_Пyть иÑполнÑемых файлов: $1
+% При иÑпользовании ключа \var{-vt} Ñта Ñтрока Ñообщает путь,
+% по которому компилÑтор ищет иÑполнÑемые файлы.
+general_t_unitpath=01004_T_Путь модулей: $1
+% При иÑпользовании ключа \var{-vt} Ñта Ñтрока Ñообщает путь,
+% по которому компилÑтор ищет компилируемые модули. Этот путь
+% может быть изменен Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа \var{-Fu}.
+general_t_includepath=01005_T_Пyть включаемых файлов: $1
+% При иÑпользовании ключа \var{-vt} Ñта Ñтрока Ñообщает путь,
+% по которому компилÑтор ищет включаемые файлы (файлы, иÑпользуемые в директивах
+% \var{\{\$I xxx\}}). Этот путь может быть изменен Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа \var{-I}.
+general_t_librarypath=01006_T_Пyть библиотек: $1
+% При иÑпользовании ключа \var{-vt} Ñта Ñтрока Ñообщает путь,
+% по которому компилÑтор ищет библиотеки. Этот путь может быть изменен
+% Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа \var{-Fl}.
+general_t_objectpath=01007_T_Пyть объектных файлов: $1
+% При иÑпользовании ключа \var{-vt} Ñта Ñтрока Ñообщает путь, по которому
+% компилÑтор ищет объектные файлы (файлы, иÑпользуемые в директивах
+% \var{\{\$L xxx \}}). Этот путь может быть изменен Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа \var{-Fo}.
+general_i_abslines_compiled=01008_I_$1 Ñтрок Ñкомпилиpовано, $2 Ñек.$3
+% При иÑпользовании ключа \var{-vi} компилÑтор Ñообщает чиÑло
+% Ñкомпилиpованных Ñтрок, и времÑ, которое потpебовалоÑÑŒ Ð´Ð»Ñ Ñтого.
+% (реальное, не программное времÑ).
+general_f_no_memory_left=01009_F_HедоÑтаточно памÑти
+% КомпилÑтору не хватило памÑти Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции вашей программы.
+% ИмеетÑÑ Ð½ÐµÑколько pекомендаций Ð´Ð»Ñ pÐµÑˆÐµÐ½Ð¸Ñ Ñтого вопpоÑа:
+% \begin{itemize}
+% \item ВмеÑто полной Ñборки проекта, попробуйте компилировать
+% отдельные модули вручную.
+% \item ЕÑли размер программы большой, разбейте ее на модули, и
+% компилируйте их отдельно.
+% \item ЕÑли предыдущие рекомендации не работают, переÑоберите компилÑтор
+% Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ pазмеpом кyчи (Ð´Ð»Ñ Ñтого иÑпользуетÑÑ ÐºÐ»ÑŽÑ‡ \var{-Ch}, \seeo{Ch})
+% \end{itemize}
+general_i_writingresourcefile=01010_I_ЗапиÑÑŒ файла таблицы ÑÑ‚pоковых pеÑypÑов: $1
+% Сообщение означает, что компилÑтор Ñоздает файл, Ñодержащий вÑе реÑурÑные Ñтроки программы
+% (таблицу Ñтроковых реÑурÑов).
+general_e_errorwritingresourcefile=01011_E_Ошибка запиÑи файла таблицы ÑÑ‚pоковых pеÑypÑов: $1
+% Сообщение означает, что в процеÑÑе запиÑи файла Ñтроковых реÑурÑов
+% произошла ошибка.
+general_i_fatal=01012_I_Фатально:
+% ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ñ‹Ñ… ошибок
+general_i_error=01013_I_Ошибка:
+% ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº
+general_i_warning=01014_I_Внимание:
+% ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ð¹ (!! "Предупреждение:" обрезаетÑÑ, по крайней мере в utf-8 !!)
+general_i_note=01015_I_Заметка:
+% ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÑ‚Ð¾Ðº
+general_i_hint=01016_I_ПодÑказка:
+% ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ñказок
+general_e_path_does_not_exist=01017_E_Путь "$1" не ÑущеÑтвует
+% Указанный путь не ÑущеÑтвует.
+general_f_compilation_aborted=01018_F_КомпилÑÑ†Ð¸Ñ Ð¿Ñ€ÐµÑ€Ð²Ð°Ð½Ð°
+% КомпилÑÑ†Ð¸Ñ Ð±Ñ‹Ð»Ð° прервана.
+general_text_bytes_code=01019_байт кода
+% Размер Ñгенерированного кода, в байтах.
+general_text_bytes_data=01020_байт данных
+% Размер Ñгенерированных данных программы, в байтах
+general_i_number_of_warnings=01021_I_$1 предупреждений
+% Общее чиÑло предупреждений, выданных в процеÑÑе компилÑции.
+general_i_number_of_hints=01022_I_$1 подÑказок
+% Общее чиÑло подÑказок, выданных в процеÑÑе компилÑции.
+general_i_number_of_notes=01023_I_$1 заметок
+% Общее чиÑло заметок, выданных в процеÑÑе компилÑции.
+% \end{description}
+#
+# Scanner
+#
+# 02086 is the last used one
+#
+% \section {Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñканера.}
+% Этот раздел перечиÑлÑет ÑообщениÑ, котоpые выдает Ñканер. Сканер оÑущеÑтвлÑет
+% лекÑичеÑкий анализ Ñтруктуры иÑходного файла, Ñ‚.е. находит
+% зарезервированные Ñлова, Ñтроки, и Ñ‚.д. Сканер также обрабатывает директивы и
+% Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+% \begin{description}
+scan_f_end_of_file=02000_F_Hеожиданный конец файла
+% Это обычно проиÑходит в Ñледующих ÑлучаÑÑ…:
+% \begin{itemize}
+% \item ИÑходный файл заканчиваетÑÑ Ð´Ð¾ поÑледнего Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ \var{end}.
+% Чаще вÑего проиÑходит, еÑли Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ \var{begin} и \var{end} не
+% ÑбаланÑированы (их количеÑтво не Ñовпадает);
+% \item Включаемый файл заканчиваетÑÑ Ð² Ñередине выpажениÑ.
+% \item Ðе был закрыт комментарий.
+% \end{itemize}
+scan_f_string_exceeds_line=02001_F_Ðе закрыта ÑÑ‚Ñ€Ð¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта
+% ОтÑутÑтвует закрывающий Ñимвол ' Ñтрокового конÑтанты, так что конÑтанта занимает
+% неÑколько Ñтрок файла.
+scan_f_illegal_char=02002_F_Запpещенный Ñимвол "$1" ($2)
+% Ð’ иÑходном файле обнаружен запрещенный Ñимвол.
+scan_f_syn_expected=02003_F_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°, ожидаетÑÑ "$1", но обнаружено "$2"
+% КомпилÑтор ожидал не тот токен, который ему вÑтретилÑÑ. Это может
+% проиÑходить везде, где только возможно нарушить правила
+% Ñзыка ПаÑкаль.
+scan_t_start_include_file=02004_TL_Hачало Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ð¾Ð³Ð¾ файла $1
+% При иÑпользовании ключа \var{-vt} компилÑтор Ñообщает,
+% когда он начинает читать включаемый файл.
+scan_w_comment_level=02005_W_Hайден комментарий $1 ypовнÑ
+% При иÑпользовании ключа \var{-vw} компилÑтор предупреждает о том,
+% что он обнаружил вложенный комментарий. Вложенные комментарии не разрешены в
+% Turbo Pascal и могут быть возможным иÑточником ошибок.
+scan_n_ignored_switch=02008_N_Директива компилÑтора $1 игнорирована
+% При иÑпользовании ключа \var{-vn} компилÑтор предупреждает о том, что он игнорирует директиву.
+scan_w_illegal_switch=02009_W_HеизвеÑÑ‚Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° компилÑтоpа $1
+% Была иÑпользована директива компилÑтора (то еÑть \var{\{\$... \}}), котораÑ
+% компилÑтору не извеÑтна.
+scan_w_switch_is_global=02010_W_Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° не на Ñвоем меÑте
+% Глобальные директивы должны находитьÑÑ Ð² начале программы или модулÑ.
+scan_e_illegal_char_const=02011_E_Hеверно задан Ñимвол
+% Это ÑлучаетÑÑ Ð¿Ñ€Ð¸ определении Ñимвола Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ASCII-кода, например,
+% \var{\#96}, но чиÑло либо ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼, либо вне допуÑтимого диапазона.
+scan_f_cannot_open_input=02012_F_Hевозможно откpыть файл "$1"
+% \fpc не может найти иÑходный файл программы или модулÑ, указанный
+% в командной Ñтроке.
+scan_f_cannot_open_includefile=02013_F_Hевозможно откpыть включаемый файл "$1"
+% \fpc не может найти иÑходный файл, указанный в директиве \var{\{\$include \}}.
+scan_e_illegal_pack_records=02015_E_Ðеверное указание Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи "$1"
+% Ð’ директиве \var{\{\$PACKRECORDS n\} } или \var{\{\$ALIGN n\} } иÑпользуетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ значение
+% \var{n}. Ð”Ð»Ñ \$PACKRECORDS допуÑтимы только 1, 2, 4, 8, 16, 32, C,
+% NORMAL, DEFAULT, а Ð´Ð»Ñ \$ALIGN допуÑтимы Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ 1, 2, 4, 8, 16, 32, ON,
+% OFF. В режиме MacPas \$ALIGN также поддерживает MAC68K, POWER и RESET.
+scan_e_illegal_pack_enum=02016_E_Ðеверное указание минимального размера перечиÑÐ»ÐµÐ½Ð¸Ñ "$1"
+% Ð’ директиве \var{\{\$PACKENUM n \}} иÑпользуетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ðµ значение
+% \var {n}. ДопуÑтимыми ÑвлÑÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ 1,2,4, NORMAL и DEFAULT.
+scan_e_endif_expected=02017_E_ОжидаетÑÑ $ENDIF Ð´Ð»Ñ $1 $2, определенного в $3 Ñтрока $4
+% Директивы уÑловной компилÑции не ÑбаланÑированы.
+scan_e_preproc_syntax_error=02018_E_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в выражении уÑловной компилÑции
+% Ð’ выражении, Ñледующем поÑле директивы \var{\{\$if \}}, $ifc или $setc, допущена ошибка.
+scan_e_error_in_preproc_expr=02019_E_Ошибка при вычиÑлении Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции
+% Ð’ выражении, Ñледующем поÑле директивы \var{\{\$if \}}, $ifc или $setc, допущена ошибка.
+scan_w_macro_cut_after_255_chars=02020_W_Длина макpоÑа ограничена 255 Ñимволами
+% Длина макрокоманды не может превышать 255 Ñимволов.
+scan_e_endif_without_if=02021_E_ENDIF без IF(N)DEF
+% Директивы \var{\{\$IFDEF.. \}} и {\ {\$ENDIF \}} не ÑбаланÑированы.
+scan_f_user_defined=02022_F_Задано пользователем: $1
+% Пpоизошла Ñ„Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. См. также \progref
+scan_e_user_defined=02023_E_Задано пользователем: $1
+% Пpоизошла ошибка, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. См. также \progref
+scan_w_user_defined=02024_W_Задано пользователем: $1
+% Пpедупреждение, заданное пользователем. См. также \progref
+scan_n_user_defined=02025_N_Задано пользователем: $1
+% Заметка, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. См. также \progref
+scan_h_user_defined=02026_H_Задано пользователем: $1
+% ПодÑказка, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. См. также \progref
+scan_i_user_defined=02027_I_Задано пользователем: $1
+% ИнформациÑ, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. См. также \progref
+scan_e_keyword_cant_be_a_macro=02028_E_Ключевое Ñлово, переопределенное как макроÑ, не имеет Ñффекта
+% Ключевые Ñлова не могут быть переопределены Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ макрокоманд.
+scan_f_macro_buffer_overflow=02029_F_Переполнение бyфеpа макpоÑов при чтении или раÑширении макрокоманды
+% Длина макpокоманды или ее результата Ñлишком велика.
+scan_w_macro_too_deep=02030_W_ЧиÑло уровней раÑшиpÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑ€Ð¾ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ превышает 16.
+% При раÑширении макрокоманды было иÑпользовано более 16 ypовней вложенноÑти.
+% КомпилÑтор не будет pаÑшиpÑть дальше, так как Ñто может быть признаком иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐºÑƒÑ€Ñии.
+scan_w_wrong_styled_switch=02031_W_Директивы компилÑтоpа в комментариÑÑ… ÑÑ‚Ð¸Ð»Ñ // не поддерживаютÑÑ.
+% Директивы компилÑтора должны быть в комментариÑÑ… ÑÑ‚Ð¸Ð»Ñ ÐŸÐ°Ñкаль.
+scan_d_handling_switch=02032_DL_Обработка директивы "$1"
+% При включении отладочной информации (\var{-vd}), компилÑтор Ñообщает
+% о том, что он вычиÑлÑет выражение уÑловной компилÑции.
+scan_c_endif_found=02033_CL_ENDIF $1 найдено
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, где он обрабатывает Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+scan_c_ifdef_found=02034_CL_IFDEF $1 найдено, $2
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, где он обрабатывает Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+scan_c_ifopt_found=02035_CL_IFOPT $1 найдено, $2
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, где он обрабатывает Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+scan_c_if_found=02036_CL_IF $1 найдено, $2
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, где он обрабатывает Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+scan_c_ifndef_found=02037_CL_IFNDEF $1 найдено, $2
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, где он обрабатывает Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+scan_c_else_found=02038_CL_ELSE $1 найдено, $2
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, где он обрабатывает Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÑловной компилÑции.
+scan_c_skipping_until=02039_CL_ПpопyÑкаем до ...
+% При включении Ñообщений об уÑловных выражениÑÑ… (\var{-vc}), компилÑтор Ñообщает
+% о том, что он пропуÑкает чаÑть уÑловного выражениÑ, не удовлетворÑющую уÑловию.
+scan_i_press_enter=02040_I_Hажмите <ENTER> Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ
+% При иÑпользовании ключа \var{-vi} компилÑтор оÑтанавливаетÑÑ
+% и ждет Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° клавишу \var{enter}, еÑли в иÑходном файле
+% вÑтречаетÑÑ Ð´Ð¸pектива \var {\{\$STOP\}}.
+scan_w_unsupported_switch=02041_W_Директива "$1" не поддерживаетÑÑ
+% При включенных предупреждениÑÑ… (\var{-vw}), компилÑтор предупреждает
+% о неподдерживаемых директивах. Это означает, что директива иÑпользуетÑÑ
+% в Delphi или Turbo Pascal, но не в \fpc
+scan_w_illegal_directive=02042_W_HÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° компилÑтора "$1"
+% При включенных пpедyпpеждениÑÑ… (\var{-vw}), компилÑтор предупреждает
+% о неверных диpективах. СпиÑок раÑпознаваемых диpектив Ñм. в \progref
+scan_t_back_in=02043_TL_Возвpат в $1
+% При иÑпользовании ключа (\var{-vt}) компилÑтор Ñообщает об окончании
+% Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ð¾Ð³Ð¾ файла.
+scan_w_unsupported_app_type=02044_W_Тип пpÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "$1" не поддерживаетÑÑ
+% Это предупреждение выдаетÑÑ Ð¿Ñ€Ð¸ иÑпользовании неизвеÑтного типа
+% Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² директиве \var{\{\$APPTYPE\}}
+scan_w_app_type_not_support=02045_W_APPTYPE не поддерживаетÑÑ ÐžÐ¡ назначениÑ
+% Директива \var{\{\$APPTYPE\}} поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ некоторыми операционными ÑиÑтемами.
+scan_w_description_not_support=02046_W_DESCRIPTION не поддерживаетÑÑ ÐžÐ¡ назначениÑ
+% Директива \var{\{\$DESCRIPTION\}} не поддерживаетÑÑ Ð½Ð° данной ОС назначениÑ.
+scan_n_version_not_support=02047_N_VERSION не поддерживаетÑÑ ÐžÐ¡ назначениÑ
+% Директива \var{\{\$VERSION\}} не поддерживаетÑÑ Ð½Ð° данной ОС назначениÑ.
+scan_n_only_exe_version=02048_N_VERSION иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ .EXE и .DLL иÑходников
+% Директива \var{\{\$VERSION\}} иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ .EXE и .DLL иÑходников.
+scan_w_wrong_version_ignored=02049_W_Ðеверный формат VERSION Ð´Ð»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ñ‹ "$1"
+% Формат директивы \var{\{\$VERSION\}} - major_version.minor_version
+% где major_version и minor_version ÑвлÑÑŽÑ‚ÑÑ Ñловами.
+scan_e_illegal_asmmode_specifier=02050_E_Hеверный Ñтиль аÑÑемблеpа: "$1"
+% При определении режима аÑÑемблера директивой \var{\{\$ASMMODE xxx\}}
+% указан неверный режим.
+scan_w_no_asm_reader_switch_inside_asm=02051_W_Смена типа аÑÑемблеpа невозможна внутри блока, "$1" бyдет дейÑтвовать только Ð´Ð»Ñ Ñледyющего блока
+% Внутри аÑÑемблерного блока невозможно переключение аÑÑемблера Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ типа на другой.
+% Указанный режим начнет дейÑтвовать только Ð´Ð»Ñ Ñледующего аÑÑемблерного блока.
+scan_e_wrong_switch_toggle=02052_E_Hевеpное переключение режима, иÑпользуйте ON/OFF или +/-
+% Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² Ñледует иÑпользовать ON или OFF, либо + или -
+scan_e_resourcefiles_not_supported=02053_E_Файлы pеÑypÑов не поддерживаютÑÑ ÐžÐ¡ назначениÑ
+% ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ проиÑходит компилÑциÑ, не поддерживает файлы реÑурÑов.
+scan_w_include_env_not_found=02054_W_Ð’ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ð°Ñ Ð¿ÐµpÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºpyÐ¶ÐµÐ½Ð¸Ñ "$1" не найдена
+% Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½Ðµ найдена, вмеÑто нее будет подÑтавлена пуÑÑ‚Ð°Ñ Ñтрока.
+scan_e_invalid_maxfpureg_value=02055_E_Ðеверное значение Ð´Ð»Ñ Ð¼Ð°ÐºÑимального чиÑла региÑтров ÑопроцеÑÑора
+% ДопуÑтимыми значениÑми Ð´Ð»Ñ Ñтой директивы ÑвлÑÑŽÑ‚ÑÑ 0..8 и NORMAL/DEFAULT
+scan_w_only_one_resourcefile_supported=02056_W_Ð”Ð»Ñ Ñтой ÑиÑтемы поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один файл реÑурÑов
+% Ð”Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемы Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один файл реÑурÑов.
+% Будет иÑпользован первый найденный файл, оÑтальные будут игнорированы.
+scan_w_macro_support_turned_off=02057_W_Поддеpжка макpоÑов отключена
+% Обнаружено объÑвление макроÑа, но режим поддержки макроÑов отключен,
+% поÑтому объÑвление будет игнорировано. Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ макроÑов иÑпользуйте
+% -Sm в командной Ñтроке или добавьте {$MACRO ON} в иÑходный файл.
+scan_e_invalid_interface_type=02058_E_Ðеверный тип interface. ДопуÑтимы только COM, COBRA или DEFAULT
+% Указанный тип интерфейÑа не поддерживаетÑÑ.
+scan_w_appid_not_support=02059_W_APPID поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ PalmOS
+% Директива \var{\{\$APPID\}} поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ при компилÑции Ð´Ð»Ñ PalmOS.
+scan_w_appname_not_support=02060_W_APPNAME поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ PalmOS
+% Директива \var{\{\$APPNAME\}} поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ при компилÑции Ð´Ð»Ñ PalmOS.
+scan_e_string_exceeds_255_chars=02061_E_Ð¡Ñ‚Ñ€Ð¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта не может быть длиннее 255 Ñимволов
+% Одна ÑÑ‚Ñ€Ð¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта может Ñодержать 255 Ñимволов макÑимум. Более длинную
+% Ñтроку Ñледует разбить на чаÑти и Ñоединить их оператором +.
+scan_f_include_deep_ten=02062_F_Уровень Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ñ‹Ñ… файлов превоÑходит 16.
+% При чтении включаемых файлов доÑтигнут уровень вложенноÑти 16.
+% КомпилÑтор прекращает работу, Ñ‚.к. Ñто может ÑвлÑтьÑÑ Ð¿Ñ€Ð¸Ð·Ð½Ð°ÐºÐ¾Ð¼ рекурÑии.
+scan_e_too_many_push=02063_F_Слишком много уровней PUSH
+% ДопуÑтимый макÑимум ÑоÑтавлÑет 20. Эта ошибка возникает только в режиме MacPas.
+scan_e_too_many_pop=02064_E_Директива POP без предшеÑтвующей PUSH
+% Эта ошибка возникает только в режиме MacPas.
+scan_e_error_macro_lacks_value=02065_E_ÐœÐ°ÐºÑ€Ð¾Ñ Ð¸Ð»Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ компилÑции "$1" не имеет приÑвоенного значениÑ
+% Из-за Ñтого выражение времени компилÑции не может быть вычиÑлено.
+scan_e_wrong_switch_toggle_default=02066_E_Ðеверное переключение режима, иÑпользуйте ON/OFF/DEFAULT или +/-/*
+% Следует переключать режим, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ON или OFF или DEFAULT, либо + или - или *
+scan_e_mode_switch_not_allowed=02067_E_Директива режима "$1" здеÑÑŒ не допуÑтима
+% Директива режима компилÑции уже была обработана, или, в Ñлучае режима -Mmacpas,
+% переключение режима проиÑходит поÑле UNIT.
+scan_e_error_macro_undefined=02068_E_ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ компилÑции или Ð¼Ð°ÐºÑ€Ð¾Ñ "$1" не определен.
+% Из-за Ñтого выражение времени компилÑции не может быть вычиÑлено. Только Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° MacPas.
+scan_e_utf8_bigger_than_65535=02069_E_Обнаружен код UTF-8, превышающий 65535
+% \fpc обрабатывает Ñтроки utf-8 как widestring, Ñ‚.е. коды Ñимволов ограничены 65535
+scan_e_utf8_malformed=02070_E_ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ UTF-8 Ñтрока
+% Ð”Ð°Ð½Ð½Ð°Ñ Ñтрока не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимой в кодировке UTF-8
+scan_c_switching_to_utf8=02071_C_Ðайдена Ñигнатура UTF-8, иÑпользую кодировку UTF-8
+% КомпилÑтор обнаружил Ñигнатуру UTF-8 (\$ef, \$bb, \$bf) в начале файла,
+% поÑтому он будет обрабатывать файл как UTF-8
+scan_e_compile_time_typeerror=02072_E_Выражение времени компилÑции: ОжидалоÑÑŒ $1, но получено $2 в $3
+% Ошибка типов в выражении времени компилÑции.
+scan_n_app_type_not_support=02073_N_APPTYPE не поддерживаетÑÑ ÐžÐ¡ назначениÑ
+% Директива \var{\{\$APPTYPE\}} поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… операционных ÑиÑтем.
+scan_e_illegal_optimization_specifier=02074_E_Ðеверный тип оптимизации "$1"
+% В директиве \var{\{\$OPTIMIZATION xxx\}} указано неверное значение.
+scan_w_setpeflags_not_support=02075_W_SETPEFLAGS не поддерживаетÑÑ ÐžÐ¡ назначениÑ
+% Директива \var{\{\$SETPEFLAGS\}} не поддерживаетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемой назначениÑ.
+scan_w_imagebase_not_support=02076_W_IMAGEBASE не поддерживаетÑÑ ÐžÐ¡ назаначениÑ
+% Директива \var{\{\$IMAGEBASE\}} не поддерживаетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемой назначениÑ.
+scan_w_minstacksize_not_support=02077_W_MINSTACKSIZE не поддерживаетÑÑ ÐžÐ¡ назаначениÑ
+% Директива \var{\{\$MINSTACKSIZE\}} не поддерживаетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемой назначениÑ.
+scan_w_maxstacksize_not_support=02078_W_MAXSTACKSIZE не поддерживаетÑÑ ÐžÐ¡ назаначениÑ
+% Директива \var{\{\$MAXSTACKSIZE\}} не поддерживаетÑÑ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемой назначениÑ.
+scanner_e_illegal_warn_state=02079_E_Ðеверный режим директивы $WARN
+% Директива \$warn допуÑкает только ON и OFF Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð°
+scan_e_only_packset=02080_E_Ðеверное значение упаковки множеÑтв
+% ДопуÑтимыми значениÑми ÑвлÑÑŽÑ‚ÑÑ 0, 1, 2, 4, 8, DEFAULT и NORMAL
+scan_w_pic_ignored=02081_W_Директива или ключ PIC игнорированы
+% Ðекоторые платформы, например, Windows, не поддерживают и не требуют позиционно-незавиÑимый код (PIC),
+% поÑтому ÑоответÑтвующие диркективы и ключи командной Ñтроки Ð´Ð»Ñ Ð½Ð¸Ñ… игнорируютÑÑ.
+scan_w_unsupported_switch_by_target=02082_W_Директива "$1" не поддерживаетÑÑ Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ платформы назначениÑ
+% Ðекоторые директивы, например, \$E, поддерживаютÑÑ Ð½Ðµ Ð´Ð»Ñ Ð²Ñех платформ.
+scan_w_frameworks_darwin_only=02084_W_Директивы Ð´Ð»Ñ Framework поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Darwin/Mac OS X
+% ÐšÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸Ñ Ñ„Ñ€ÐµÐ¹Ð¼Ð²Ð¾Ñ€ÐºÐ¾Ð² не поддерживаетÑÑ FPC Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ñ… ÑиÑтем, отличных от Darwin/Mac OS X.
+scan_e_illegal_minfpconstprec=02085_E_Ðеверное указание минимальной точноÑти конÑтант Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой "$1"
+% ДопуÑтимыми значениÑми ÑвлÑÑŽÑ‚ÑÑ default, 32 и 64, которые означают ÑоответÑтвенно минимальную (обычно 32 бита), 32 бит и 64 бит точноÑть.
+scan_w_multiple_main_name_overrides=02086_W_Многократное указание имени процедуры "main", первоначально было "$1"
+% Ð˜Ð¼Ñ Ð¾Ñновной точки входа указано более одного раза. Будет иÑпользовано только поÑледнее имÑ.
+% \end{description}
+#
+# Parser
+#
+# 03252 is the last used one
+#
+% \section {ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑинтакÑичеÑкого анализатора}
+% Этот раздел перечиÑлÑет вÑе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑинтакÑичеÑкого анализатора.
+% СинтакÑичеÑкий анализатор оÑущеÑтвлÑет ÑемантичеÑкий анализ, Ñ‚.е.
+% определÑет правильноÑть выражений ПаÑкалÑ.
+% \begin{description}
+parser_e_syntax_error=03000_E_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в анализаторе
+% Обнаружена ошибка ÑинтакÑиÑа Ñзыка. Обычно проиÑходит, когда в иÑходном файле
+% вÑтречаетÑÑ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимый Ñимвол.
+parser_e_dont_nest_interrupt=03004_E_INTERRUPT процедура не может быть вложенной
+% Процедура типа \VAR{INTERRUPT} должна быть глобальной.
+parser_w_proc_directive_ignored=03005_W_Директива процедуры "$1" игнорирована
+% Указанный модификтор типа процедуры игнорирован компилÑтором.
+parser_e_no_overload_for_all_procs=03006_E_Ðе вÑе объÑÐ²Ð»ÐµÐ½Ð¸Ñ "$1" перегружены (определены как OVERLOAD)
+% При перегрузке процедур Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ директивы \var{OVERLOAD}, ее Ñледует
+% указывать Ð´Ð»Ñ Ð²Ñех объÑвлений перегруженной процедуры.
+parser_e_export_name_double=03008_E_Ð˜Ð¼Ñ Ñ„yнкции "$1" ÑкÑпортируетÑÑ Ð´Ð²Ð°Ð¶Ð´Ñ‹
+% Ð’Ñе функции, ÑкÑпортируемые из одной DLL, должны иметь различные имена.
+parser_e_export_ordinal_double=03009_E_Ð˜Ð½Ð´ÐµÐºÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ $1 ÑкÑпортируетÑÑ Ð´Ð²Ð°Ð¶Ð´Ñ‹
+% Ð’Ñе функции, ÑкÑпортируемые из одной DLL, должны иметь различные индекÑÑ‹.
+parser_e_export_invalid_index=03010_E_Hевеpный Ð¸Ð½Ð´ÐµÐºÑ ÑкÑпоpтиpyемой Ñ„yнкции
+% Ð˜Ð½Ð´ÐµÐºÑ ÑкÑпортируемой функции должен быть в диапазоне \var{1..\$FFFF}
+parser_w_parser_reloc_no_debug=03011_W_ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² перемещаемом DLL/EXE файле $1 не работоÑпоÑобна, отключена.
+% Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ отладочной информации в перемещаемую DLL невозможно.
+parser_w_parser_win32_debug_needs_WN=03012_W_Ð”Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ win32-кода, Ñледует отключить перемещение ключом -WN
+% ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Stabs не работает в перемещаемых DLL или EXE файлах, иÑпользуйте -WN
+% еÑли требуетÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ°.
+parser_e_constructorname_must_be_init=03013_E_КонÑÑ‚pyктоp должен иметь Ð¸Ð¼Ñ INIT
+% КонÑтруктор объÑвлен Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, отличным от \var{init}, и дейÑтвует ключ
+% \var{-Ss}. См. опиÑание дейÑÑ‚Ð²Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° \var{-Ss} (\seeo{Ss}).
+parser_e_destructorname_must_be_done=03014_E_ДеÑÑ‚pyктоp должен иметь Ð¸Ð¼Ñ DONE
+% ДеÑтруктор объÑвлен Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, отличным от \var{done}, и дейÑтвует ключ
+% \var{-Ss}. См. опиÑание дейÑÑ‚Ð²Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° \var{-Ss} (\seeo{Ss}).
+parser_e_proc_inline_not_supported=03016_E_Директива INLINE не поддеpживаетÑÑ
+% При компилÑции программы Ñ inlining в Ñтиле C++ не был иÑпользован ключ
+% \var{-Si} (\seeo{Si}). По умолчанию компилÑтор не поддерживает inlining в Ñтиле C++.
+parser_w_constructor_should_be_public=03018_W_КонÑÑ‚pyктоp должен быть public
+% КонÑтрукторы должны быть в 'public' Ñекции объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° (клаÑÑа).
+parser_w_destructor_should_be_public=03019_W_ДеÑÑ‚pyктоp должен быть public
+% ДеÑтрукторы должны быть в 'public' Ñекции объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° (клаÑÑа).
+parser_n_only_one_destructor=03020_N_КлаÑÑ Ð¼Ð¾Ð¶ÐµÑ‚ иметь только один деÑÑ‚pyктоp
+% Ð”Ð»Ñ ÐºÐ»Ð°ÑÑа можно определить только один деÑтруктор.
+parser_e_no_local_objects=03021_E_Локальные объÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑов не поддеpживаютÑÑ
+% КлаÑÑÑ‹ должны быть объÑвлены глобально. Они не могут быть объÑвлены внутри
+% процедуры или функции.
+parser_f_no_anonym_objects=03022_F_Ðнонимные объÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑов не поддеpживаетÑÑ
+% Ð’Ñтречено недопуÑтимое объÑвление объекта (клаÑÑа), Ñ‚.е. объект или клаÑÑ,
+% не имеющий методов и не унаÑледованный от другого объекта (клаÑÑа).
+% Ðапример, объÑвление:
+% \begin{verbatim}
+% Type o = object
+% a : longint;
+% end;
+% \end{verbatim}
+% вызовет Ñту ошибку.
+parser_n_object_has_no_vmt=03023_N_Объект "$1" не имеет таблицы VMT
+% Это заметка о том, что объÑвленный объект не имеет таблицы виртуальных методов (VMT).
+parser_e_illegal_parameter_list=03024_E_Hевеpный ÑпиÑок паpаметpов
+% Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸, тип которых отличаетÑÑ Ð¾Ñ‚ типов параметров, иÑпользованных
+% при объÑвлении функции.
+parser_e_wrong_parameter_size=03026_E_Ðеверное количеÑтво паpаметpов при вызове "$1"
+% Ошибка в ÑпиÑке параметров вызываемой процедуры или функции, количеÑтво параметров неверно.
+parser_e_overloaded_no_procedure=03027_E_Перегруженный идентификатоp "$1" не ÑвлÑетÑÑ Ñ„yнкцией
+% КомпилÑтор обнаружил Ñимвол Ñ Ñ‚ÐµÐ¼ же именем, что и Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ, но не ÑвлÑющийÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹.
+parser_e_overloaded_have_same_parameters=03028_E_Перегруженные Ñ„yнкции имеют одинаковый ÑпиÑок паpаметpов
+% Попытка объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ñ… функций Ñ Ð¾Ð´Ð½Ð¸Ð¼ и тем же ÑпиÑком параметров.
+% Чтобы перегрузка была возможна, по крайней мере один из параметров должен отличатьÑÑ.
+parser_e_header_dont_match_forward=03029_E_Заголовок Ñ„yнкции не ÑоответÑтвyет пpедыдyщемy объÑвлению "$1"
+% ОбъÑвлена Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ Ñ‚ÐµÐ¼ же ÑпиÑком параметром, но отличающимÑÑ Ñ‚Ð¸Ð¿Ð¾Ð¼ результата либо модификатором.
+parser_e_header_different_var_names=03030_E_Заголовок Ñ„yнкции "$1" не ÑоответÑтвyет пpедыдyщемy опpеделению в forward : изменÑетÑÑ Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ $2 => $3
+% Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð±ÑŠÑвлена в Ñекции \var{interface} либо Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¾Ð¹
+% \var{forward}, а затем определена Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼ÑÑ ÑпиÑком параметров.
+parser_n_duplicate_enum=03031_N_Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² перечиÑлÑемых типах должны быть возраÑтающими
+% \fpc допуÑкает объÑвление перечиÑлений как в C. Из Ñледующих двух объÑвлений:
+% \begin{verbatim}
+% type a = (A_A,A_B,A_E:=6,A_UAS:=200);
+% type a = (A_A,A_B,A_E:=6,A_UAS:=4);
+% \end{verbatim}
+% Второе объÑвление вызовет Ñто Ñообщение. Значение \var{A\_UAS} должно быть больше,
+% чем значение \var{A\_E}, т.е. по крайней мере 7.
+parser_e_no_with_for_variable_in_other_segments=03033_E_With не может быть иÑпользован Ð´Ð»Ñ Ð¿Ðµpеменных из другого Ñегмента
+% With ÑохранÑет переменную локально на Ñтеке,
+% но Ñто невозможно, еÑли Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð² другом Ñегменте.
+parser_e_too_much_lexlevel=03034_E_Уровень Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ„yнкций превышает 31
+% КоличеÑтво уровней Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ ограничено 31.
+parser_e_range_check_error=03035_E_Ошибка проверки диапазона пpи вычиÑлении конÑтант
+% Значение конÑтант находитÑÑ Ð²Ð½Ðµ допуÑтимого Ð´Ð»Ñ Ð½Ð¸Ñ… диапазона.
+parser_w_range_check_error=03036_W_Ошибка проверки диапазона пpи вычиÑлении конÑтант
+% Значение конÑтант находитÑÑ Ð²Ð½Ðµ допуÑтимого Ð´Ð»Ñ Ð½Ð¸Ñ… диапазона.
+parser_e_double_caselabel=03037_E_ПовтоpÑющаÑÑÑ Ð¼ÐµÑ‚ÐºÐ° CASE
+% Одна и та же метка указана 2 раза в одном выражении \var{case}.
+parser_e_case_lower_less_than_upper_bound=03038_E_ВеpхнÑÑ Ð³pаница диапазона case меньше, чем нижнÑÑ
+% ВерхнÑÑ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° метки \var{case} меньше нижней границы, поÑтому метка не имеет ÑмыÑла.
+parser_e_type_const_not_possible=03039_E_Типизиpованные конÑтанты клаÑÑов и интерфейÑов не поддеpживаютÑÑ
+% ОбъÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñтант, имеющих тип клаÑÑа либо интерфейÑа, не допуÑкаетÑÑ.
+parser_e_no_overloaded_procvars=03040_E_Переменные перегруженных функций не поддеpживаютÑÑ
+% ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° приÑÐ²Ð¾ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð¾Ð¹ функции процедурной переменной.
+parser_e_invalid_string_size=03041_E_Длина ÑÑ‚pоки должна быть в диапазоне 1 .. 255
+% Длина Ñтроки типа shortstring ограничена 255 Ñимволами. Попытка объÑвить Ñтроку
+% Ñ Ð´Ð»Ð¸Ð½Ð¾Ð¹ менее 1 или более 255.
+parser_w_use_extended_syntax_for_objects=03042_W_ИÑпользуйте pаÑшиpенный ÑинтакÑÐ¸Ñ NEW и DISPOSE Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑров объектов
+% При наличии ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ \var{a} на тип клаÑÑа, вызов
+% \var{new(a)} не проинициализирует клаÑÑ (Ñ‚.е. конÑтруктор не будет
+% вызван), Ñ…Ð¾Ñ‚Ñ Ð¿Ð°Ð¼Ñть будет выделена. Следует иÑпользовать вызов
+% \var{new(a,init)}, который выделит памÑть и вызовет конÑтруктор клаÑÑа.
+parser_w_no_new_dispose_on_void_pointers=03043_W_ИÑпользование NEW и DISPOSE Ð´Ð»Ñ Ð½ÐµÑ‚Ð¸Ð¿Ð¸Ð·Ð¸pованных yказателей беÑÑмыÑленно
+parser_e_no_new_dispose_on_void_pointers=03044_E_ИÑпользование NEW и DISPOSE Ð´Ð»Ñ Ð½ÐµÑ‚Ð¸Ð¿Ð¸Ð·Ð¸pованных yказателей невозможно
+% Вызовы \var{new(p)} или \var{dispose(p)} невозможны, еÑли \var{p} ÑвлÑетÑÑ Ð½ÐµÑ‚Ð¸Ð¿Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ указателем,
+% Ñ‚.к. при Ñтом отÑутÑтвует Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ размере выделÑемой памÑти.
+% ПринимаетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти в режимах \var{tp} и \var{delphi}.
+parser_e_class_id_expected=03045_E_ОжидаетÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾p клаÑÑа
+% ПроиÑходит при Ñканировании имени процедуры, Ñодержащего точку, Ñ‚.е. метода
+% клаÑÑа или объекта, но тип перед точкой неизвеÑтен.
+parser_e_no_type_not_allowed_here=03046_E_Идентификатоp типа здеÑÑŒ недопуÑтим
+% Идентификатор типа не может быть иÑпользован в выражении.
+parser_e_methode_id_expected=03047_E_ОжидаетÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾p метода
+% Идентификатор не ÑвлÑетÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð¼.
+% ПроиÑходит при Ñканировании имени процедуры, Ñодержащего точку, Ñ‚.е. метода
+% клаÑÑа или объекта, но Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ отÑутÑтвует в объÑвлении клаÑÑа.
+parser_e_header_dont_match_any_member=03048_E_Заголовок Ñ„yнкции не ÑоответÑтвует ни одному из методов Ñтого клаÑÑа "$1"
+% Идентификатор не ÑвлÑетÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð¼.
+% ПроиÑходит при Ñканировании имени процедуры, Ñодержащего точку, Ñ‚.е. метода
+% клаÑÑа или объекта, но Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ отÑутÑтвует в объÑвлении клаÑÑа.
+parser_d_procedure_start=03049_DL_Пpоцедypа/ФyÐ½ÐºÑ†Ð¸Ñ $1
+% При иÑпользовании ключа \var{-vd} компилÑтор Ñообщает о начале обработки
+% тела процедуры или функции.
+parser_e_error_in_real=03050_E_HевеpÐ½Ð°Ñ ÐºÐ¾Ð½Ñтанта Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой
+% КомпилÑтор ожидает выражение вещеÑтвенного типа, но получает что-то другое.
+parser_e_fail_only_in_constructor=03051_E_FAIL допуÑтим только в конÑÑ‚pyктоpах
+% ИнÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ \var{FAIL} иÑпользована вне метода конÑтруктора.
+parser_e_no_paras_for_destructor=03052_E_ДеÑÑ‚pyктоpÑ‹ не могyÑ‚ иметь паpаметpов
+% ДеÑтруктор объÑвлен Ñо ÑпиÑком параметров. Методы деÑтрукторов не могут иметь параметров.
+% cannot have parameters.
+parser_e_only_class_methods_via_class_ref=03053_E_По ÑÑылке на клаÑÑ Ð¼Ð¾Ð³ÑƒÑ‚ быть вызваны только клаÑÑ-методы
+% Ошибка возникает в Ñледующей Ñитуации:
+% \begin{verbatim}
+% Type :
+% Tclass = Class of Tobject;
+%
+% Var C : TClass;
+%
+% begin
+% ...
+% C.free
+% \end{verbatim}
+% \var{Free} не ÑвлÑетÑÑ ÐºÐ»Ð°ÑÑ-методом и поÑтому не может быть вызван по ÑÑылке на клаÑÑ.
+parser_e_only_class_methods=03054_E_Ð’ клаÑÑ-методах доÑтупны только другие клаÑÑ-методы
+% Имеет отношение к предыдущей ошибке. Из клаÑÑ-метода Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð·Ð²Ð°Ñ‚ÑŒ обычный метод объекта.
+% Следующий код приведет к Ñтой ошибке:
+% \begin{verbatim}
+% class procedure tobject.x;
+%
+% begin
+% free
+% \end{verbatim}
+% ПоÑкольку free ÑвлÑетÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ методом, его Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð·Ð²Ð°Ñ‚ÑŒ из клаÑÑ-метода.
+parser_e_case_mismatch=03055_E_Тип конÑтанты не Ñовпадает Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ выpÐ°Ð¶ÐµÐ½Ð¸Ñ CASE
+% Одна из меток имеет тип, отличный от типа Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ case.
+parser_e_illegal_symbol_exported=03056_E_Символ не может быть ÑкÑпортирован из библиотеки
+% При напиÑании библиотеки можно ÑкÑпортировать только процедуры и функции. Такие типы,
+% как переменные и конÑтанты, ÑкÑпортировать нельзÑ.
+parser_w_should_use_override=03057_W_УнаÑледованный метод "$1" Ñкрыт, иÑпользуйте override
+% Метод, объÑвленный в родительÑком клаÑÑе как \var{virtual}, должен быть
+% перекрыт в клаÑÑе-наÑледнике директивой \var{override}. ЕÑли директива
+% \var{override} не указана, унаÑледованный метод будет Ñкрыт, а не перекрыт.
+parser_e_nothing_to_be_overridden=03058_E_Ð’ родительÑком клаÑÑе нет метода Ð´Ð»Ñ Ð¿ÐµpекрытиÑ: "$1"
+% Попытка перекрыть \var{override} виртуальный метод, отÑутÑтвующий в родительÑком клаÑÑею.
+parser_e_no_procedure_to_access_property=03059_E_Ðе указан ÑпоÑоб доÑтупа к ÑвойÑтву
+% Ð”Ð»Ñ ÑвойÑтва не указана директива \var{read}.
+parser_w_stored_not_implemented=03060_W_Директива stored Ð´Ð»Ñ ÑвойÑтв еще не pеализована
+% Директива \var{stored} еще не реализована
+parser_e_ill_property_access_sym=03061_E_Hевеpный Ñимвол Ð´Ð»Ñ Ð´Ð¾Ñтупа к ÑвойÑтвy
+% Ошибка в директиве \var{read} или \var{write} Ð´Ð»Ñ ÑвойÑтва типа маÑÑив.
+% ДоÑтуп к ÑвойÑтву типа маÑÑив возможен только Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ процедур и функций.
+% Следующий код вызовет ошибку:
+% \begin{verbatim}
+% tmyobject = class
+% i : integer;
+% property x [i : integer]: integer read I write i;
+% \end{verbatim}
+%
+parser_e_cant_access_protected_member=03062_E_ДоÑтуп к protected полю объекта здеÑÑŒ невозможен
+% ПолÑ, определенные в Ñекции \var{protected} объÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа,
+% недоÑтупны вне модулÑ, в котором объÑвлен клаÑÑ, и вне методов объектов-наÑледников.
+parser_e_cant_access_private_member=03063_E_ДоÑтуп к private полю объекта здеÑÑŒ невозможен
+% ПолÑ, определенные в Ñекции \var{private} объÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа,
+% недоÑтупны вне модулÑ, в котором объÑвлен клаÑÑ.
+parser_e_overridden_methods_not_same_ret=03066_E_Перекрытые методы должны иметь одинаковый тип результата: "$2" перекрыт "$1", который возвращает другой тип
+% Перекрытые методы должны возвращать результат одинакового типа.
+parser_e_dont_nest_export=03067_E_ЭкÑпортируемые Ñ„yнкции не могyÑ‚ быть вложенными
+% ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð±ÑŠÑвить процедуру или функцию, вложенную в процедуру или функцию, объÑвленную как ÑкÑпортируемаÑ.
+parser_e_methods_dont_be_export=03068_E_Методы не могyÑ‚ ÑкÑпоpтиpоватьÑÑ
+% Метод клаÑÑа или объекта не может быть объÑвлен как
+% \var{export}.
+parser_e_call_by_ref_without_typeconv=03069_E_Тип параметра no. $1 при передаче по ÑÑылке должен Ñовпадать: получено "$2", ожидалоÑÑŒ "$3"
+% При вызове функции, имеющей параметры по ÑÑылке (\var{var}), тип параметра
+% должен Ñтрого Ñовпадать Ñ Ð¾Ð±ÑŠÑвленным. ÐвтоматичеÑкое преобразование типов
+% в Ñтом Ñлучае отÑутÑтвует.
+parser_e_no_super_class=03070_E_КлаÑÑ Ð½Ðµ ÑвлÑетÑÑ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÑким Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ клаÑÑа
+% При вызове унаÑледованного метода указан клаÑÑ, отличный от родительÑкого.
+% УнаÑледованный метод можно вызывать только у родительÑкого клаÑÑа.
+parser_e_self_not_in_method=03071_E_SELF допуÑтим только в методах
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° \var{self} вне метода объекта.
+% Параметр \var{self} передаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в методы.
+parser_e_generic_methods_only_in_methods=03072_E_Вызов методов Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ типа клаÑÑа возможен только из других методов
+% КонÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð²Ð¸Ð´Ð° \var{sometype.somemethod} допуÑтима только внутри методов.
+parser_e_illegal_colon_qualifier=03073_E_Hеверное иÑпользование ':'
+% Формат \var{:} (двоеточие) 2 раза иÑпользуетÑÑ Ð½Ð° выражении, которое не ÑвлÑетÑÑ Ð²ÐµÑ‰ÐµÑтвенным.
+parser_e_illegal_set_expr=03074_E_Ошибка проверки диапазона в конÑтрукторе множеÑтва или повторÑющийÑÑ Ñлемент множеÑтва
+% Ошибка в объÑвлении множеÑтва. Либо один из Ñлементов выходит за допуÑтимый диапазон,
+% либо какие-либо два Ñлемента имеют одно и то же значение.
+parser_e_pointer_to_class_expected=03075_E_ОжидаетÑÑ yказатель на объект
+% ИÑпользован неверный тип в выражении \var{New}.
+% РаÑширенный ÑинтакÑÐ¸Ñ \var{New} требует параметра типа объект.
+parser_e_expr_have_to_be_constructor_call=03076_E_Ð’Ñ‹pажение должно вызывать конÑÑ‚pyктоp
+% При иÑпользовании раÑширенного ÑинтакÑиÑа \var{new} нужно указывать конÑтруктор объекта.
+% Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° не ÑвлÑетÑÑ ÐºÐ¾Ð½Ñтруктором.
+parser_e_expr_have_to_be_destructor_call=03077_E_Ð’Ñ‹pажение должно вызывать деÑÑ‚pyктоp
+% При иÑпользовании раÑширенного ÑинтакÑиÑа \var{dispose} нужно указывать деÑтруктор объекта.
+% Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° не ÑвлÑетÑÑ Ð´ÐµÑтруктором.
+parser_e_invalid_record_const=03078_E_Hевеpный поpÑдок Ñлементов запиÑи
+% При объÑвлении конÑтанты типа запиÑÑŒ, Ð¿Ð¾Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ñ‹ в неверном порÑдке.
+parser_e_false_with_expr=03079_E_Тип выpÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть CLASS или RECORD
+% Ðргумент Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ \var{with} должен быть типа \var{record} или
+% \var{class}. ИÑпользован аргумент Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼, отличным от указанных.
+parser_e_void_function=03080_E_Пpоцедypа не может возвpащать значение
+% \fpc позволÑет указать возвращаемое значение Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ при иÑпользовании
+% Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ \var{exit}. Ошибка возникает при попытке Ñделать Ñто в процедуре.
+% Процедура не может возвращать значение.
+parser_e_constructors_always_objects=03081_E_КонÑÑ‚pyктоpÑ‹ и деÑÑ‚pyктоpÑ‹ должны быть методами
+% Попытка определить процедуру, не ÑвлÑющуюÑÑ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð¼ клаÑÑа, как конÑтруктор или деÑтруктор.
+parser_e_operator_not_overloaded=03082_E_Опеpатоp не пеpегpyжен
+% Попытка иÑпользовать перегруженный оператор, когда он не перегружен Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ типа.
+parser_e_no_such_assignment=03083_E_Ðевозможно перегрузить приÑвоение Ð´Ð»Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ñ… типов
+% Перегруженное приÑвоение невозможно Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð², которые компилÑтор Ñчитает одинаковыми.
+parser_e_overload_impossible=03084_E_Перегрузка оператора невозможна
+% Сочетание оператора, аргументов и возвращаемого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвлÑетÑÑ Ð½ÐµÑовмеÑтимым.
+parser_e_no_reraise_possible=03085_E_Повторное броÑание иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð·Ð´ÐµÑÑŒ невозможно
+% Попытка повторного броÑÐ°Ð½Ð¸Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² недопуÑтимом меÑте. Это разрешено делать только
+% в блоке \var{except}.
+parser_e_no_new_or_dispose_for_classes=03086_E_РаÑшиpенный ÑинтакÑÐ¸Ñ NEW и DISPOSE не разрешен Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов
+% ЭкземплÑÑ€ клаÑÑа не может быть Ñоздан Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ раÑширенного ÑинтакÑиÑа
+% \var{new}, Ð´Ð»Ñ Ñтого Ñледует иÑпользовать конÑтруктор. Ðналогично, длÑ
+% ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑкземплÑра клаÑÑа Ñледует иÑпользовать не \var{Dispose}, а деÑтруктор.
+parser_e_procedure_overloading_is_off=03088_E_Перегрузка пpоцедyp отключена
+% При иÑпользовании ключа \var{-So} перегрузка процедур отключена.
+% Turbo Pascal не поддерживает перегрузку.
+parser_e_overload_operator_failed=03089_E_Перегрузка Ñтого оператора невозможна. Перегружаемые операторы (еÑли еÑть): $1
+% Попытка перегрузить оператор, который не может быть перегружен.
+% Следующие операторы могут быть перегружены:
+% \begin{verbatim}
+% +, -, *, /, =, >, <, <=, >=, is, as, in, **, :=
+% \end{verbatim}
+parser_e_comparative_operator_return_boolean=03090_E_Оператор ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ возвращать значение типа boolean
+% При перегрузке оператора ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ \var{=}, Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° возвращать значение типа boolean.
+parser_e_only_virtual_methods_abstract=03091_E_Только виртуальные методы могут быть абÑтрактными
+% Попытка определить абÑтрактный метод, не ÑвлÑющийÑÑ Ð¿Ñ€Ð¸ Ñтом виртуальным.
+parser_f_unsupported_feature=03092_F_ИÑпользование пока неподдерживаемой оÑобенноÑти компилÑтора!
+% Попытка заÑтавить компилÑтор Ñделать нечто, чего он пока еще не умеет.
+parser_e_mix_of_classes_and_objects=03093_E_Смешивание различных типов объектов (class, object, interface) не допуÑкаетÑÑ
+% Изменение базового типа при наÑледовании не допуÑкаетÑÑ. Это, в чаÑтноÑти, означает, что
+% class не может быть порожден от object, и наоборот.
+parser_w_unknown_proc_directive_ignored=03094_W_ÐеизвеÑÑ‚Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° процедуры: "$1", игнорировано
+% Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° процедуры неизвеÑтна компилÑтору.
+parser_e_absolute_only_one_var=03095_E_ABSOLUTE может быть указано только Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ пеpеменной
+% ÐÐµÐ»ÑŒÐ·Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ более одной переменной перед директивой \var{absolute}.
+% Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÑ‚ к ошибке:
+% \begin{verbatim}
+% Var Z : Longint;
+% X,Y : Longint absolute Z;
+% \end{verbatim}
+parser_e_absolute_only_to_var_or_const=03096_E_ABSOLUTE может быть ÑвÑзана только Ñ Ð¿Ðµpеменной или конÑтантой
+% ÐÐ´Ñ€ÐµÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ñ‹ \var{absolute} может указывать только на переменную или
+% конÑтанту. Следующий код приведет к ошибке:
+% \begin{verbatim}
+% Procedure X;
+%
+% var p : longint absolute x;
+% \end{verbatim}
+%
+parser_e_initialized_only_one_var=03097_E_Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑтима только Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ переменной
+% ÐедопуÑтимо указание начального Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ чем Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ переменной в
+% ÑинтакÑиÑе Delphi.
+parser_e_abstract_no_definition=03098_E_ÐбÑтрактные методы не могут иметь реализацию (тело)
+% ÐбÑтрактные методы могут иметь только объÑвление, Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð½Ð¸Ñ… недопуÑтима. Они
+% должны быть перекрыты в унаÑледованных клаÑÑах.
+parser_e_overloaded_must_be_all_global=03099_E_Эта Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ может быть локальной (должна ÑкÑпортироватьÑÑ)
+% Попытка определить перегруженную функцию в Ñекции implementation модулÑ,
+% Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ отÑутÑтвует объÑвление в Ñекции interface.
+parser_w_virtual_without_constructor=03100_W_Виртуальные методы иÑпользуютÑÑ Ð±ÐµÐ· конÑтруктора в "$1"
+% При объÑвлении объекта или клаÑÑа, Ñодержащего виртуальные методы, длÑ
+% их корректной инициализации требуетÑÑ ÐºÐ¾Ð½Ñтруктор. КомпилÑтор вÑтретил объÑвление
+% клаÑÑа или объекта Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ методами, но без пары конÑтруктор/деÑтруктор.
+parser_c_macro_defined=03101_CL_Опpеделен макpоÑ: $1
+% При иÑпользовании \var{-vc} компилÑтор Ñообщает об определении макроÑов.
+parser_c_macro_undefined=03102_CL_Удалено определение макроÑа: $1
+% При иÑпользовании \var{-vc} компилÑтор Ñообщает о том, что Ð¼Ð°ÐºÑ€Ð¾Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не определен.
+parser_c_macro_set_to=03103_CL_МакpÐ¾Ñ $1 yÑтановлен в $2
+% При иÑпользовании \var{-vc} компилÑтор Ñообщает об изменении Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑ€Ð¾Ñа.
+parser_i_compiling=03104_I_КомпилÑÑ†Ð¸Ñ $1
+% При включении информационных Ñообщений (\var{-vi}), компилÑтор Ñообщает о том,
+% какие модули он компилирует.
+parser_u_parsing_interface=03105_UL_Ðнализ интерфейÑа модyÐ»Ñ $1
+% Сообщает о начале разбора интерфейÑной чаÑти текущего модулÑ.
+parser_u_parsing_implementation=03106_UL_Ðнализ реализации модyÐ»Ñ $1
+% Сообщает о начале разбора реализации текущего модулÑ, программы или библиотеки.
+parser_d_compiling_second_time=03107_DL_ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑ†Ð¸Ñ $1
+% При включении отладочных Ñообщений (\var{-vd}) компилÑтор Ñообщает о том,
+% какие модули он компилирует повторно.
+parser_e_no_property_found_to_override=03109_E_ОтÑутÑтвует ÑвойÑтво Ð´Ð»Ñ Ð¿ÐµpеопpеделениÑ
+% Попытка переопределить ÑвойÑтво родительÑкого клаÑÑа, при отÑутÑтвии такового в родительÑком клаÑÑе.
+parser_e_only_one_default_property=03110_E_ДопуÑтимо только одно ÑвойÑтво по умолчанию
+% СвойÑтво определено как \var{Default}, но родительÑкий клаÑÑ ÑƒÐ¶Ðµ имеет определенное таким же образом
+% ÑвойÑтво.
+parser_e_property_need_paras=03111_E_СвойÑтво по умолчанию должно иметь тип маÑÑива
+% Только ÑвойÑтва типа маÑÑив могут быть объÑвлены как \var{default}.
+parser_e_constructor_cannot_be_not_virtual=03112_E_ВиpÑ‚yальные конÑÑ‚pyктоpÑ‹ допуÑтимы только в клаÑÑах
+% Виртуальные конÑтрукторы допуÑтимы только в клаÑÑах, их нельзÑ
+% объÑвлÑть в объектах.
+parser_e_no_default_property_available=03113_E_ОтÑутÑтвует ÑвойÑтво по умолчанию
+% Попытка доÑтупа к ÑвойÑтву по умолчанию клаÑÑа, который не имеет такого ÑвойÑтва.
+parser_e_cant_have_published=03114_E_КлаÑÑ Ð½Ðµ может иметь PUBLISHED раздел, иÑпользyйте ключ {$M+}
+% ЕÑли требуетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» \var{published} в объÑвлении клаÑÑа, Ñледует
+% иÑпользовать ключ \var{\{\$M+\}}, который включает генерацию информации о типах.
+parser_e_forward_declaration_must_be_resolved=03115_E_Раннее опpеделение клаÑÑа "$1" должно быть разрешено здеÑÑŒ, чтобы иÑпользовать его как предок
+% Чтобы клаÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ было иÑпользовать как предок, он должен быть Ñначала определен.
+% Ошибка возникает в Ñледующей Ñитуации:
+% \begin{verbatim}
+% Type ParentClas = Class;
+% ChildClass = Class(ParentClass)
+% ...
+% end;
+% \end{verbatim}
+% Где \var{ParentClass} объÑвлен, но не определен.
+parser_e_no_local_operator=03116_E_Локальные опеpатоpÑ‹ не поддеpживаютÑÑ
+% Оператор Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ локально, Ñ‚.е. внутри Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ или
+% функции.
+parser_e_proc_dir_not_allowed_in_interface=03117_E_Диpектива процедуры "$1" недопуÑтима в интерфейÑной чаÑти модулÑ
+% Ð”Ð°Ð½Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° не допуÑтима в Ñекции \var{interface} модулÑ.
+% Ее можно иÑпользовать только в Ñекции \var{implementation}.
+parser_e_proc_dir_not_allowed_in_implementation=03118_E_Диpектива процедуры "$1" недопуÑтима в реализационной чаÑти модулÑ
+% Ð”Ð°Ð½Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° не допуÑтима в Ñекции \var{implementation} модулÑ.
+% Ее можно иÑпользовать только в Ñекции \var{interface}.
+parser_e_proc_dir_not_allowed_in_procvar=03119_E_Диpектива процедуры "$1" недопуÑтима в объÑвлении процедурной переменной
+% Ð”Ð°Ð½Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° не может быть чаÑтью объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° процедуры или функции.
+parser_e_function_already_declared_public_forward=03120_E_Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ "$1" уже объÑвлена как PUBLIC или FORWARD
+% Ошибка возникает при двукратном объÑвлении функции как \var{forward}.
+% Или при объÑвлении ее в Ñекции \var{interface} и поÑледующем однократном объÑвлении как \var{forward}
+% в Ñекции \var{implmentation}.
+parser_e_not_external_and_export=03121_E_HÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать EXPORT ÑовмеÑтно Ñ EXTERNAL
+% Эти две директивы ÑвлÑÑŽÑ‚ÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð¸Ñключающими
+parser_w_not_supported_for_inline=03123_W_"$1" не поддеpживаетÑÑ Ð²Ð½yÑ‚pи INLINE пpоцедypÑ‹/Ñ„yнкции
+% Ð’Ñтраиваемые процедуры не поддерживают Ñтот тип объÑвлениÑ.
+parser_w_inlining_disabled=03124_W_Ð’Ñтраивание (INLINE) отключено
+% Ð’Ñтраивание процедур отключено.
+parser_i_writing_browser_log=03125_I_ЗапиÑываем лог бpаyзеpа $1
+% Когда включены информационные ÑообщениÑ, компилÑтор Ñообщает
+% о запиÑи данных Ð´Ð»Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° (включаемого директивой \var{\{\$Y+ \}}).
+parser_h_maybe_deref_caret_missing=03126_H_Возможно, пропущено pазыменование yказателÑ
+% КомпилÑтор Ñчитает, что указатель может требовать разыменованиÑ.
+parser_f_assembler_reader_not_supported=03127_F_Выбpанный тип аÑÑемблеpа не поддеpживаетÑÑ
+% Выбранный тип аÑÑемблера (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ \var{\{\$ASMMODE xxx\}}) не поддерживаетÑÑ.
+% Поддержка того или иного аÑÑемблера может быть подключена при Ñборке компилÑтора.
+parser_e_proc_dir_conflict=03128_E_Диpектива процедуры "$1" неÑовмеÑтима Ñ Ð´pyгими диpективами
+% Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° неÑовмеÑтима Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ директивами.
+% Ðапример, \var{cdecl} и \var{pascal} иÑключают друг друга.
+parser_e_call_convention_dont_match_forward=03129_E_Тип вызова пpоцедypÑ‹/Ñ„yнкции не ÑоответÑтвует yказанномy ранее
+% Ошибка проиÑходит при объÑвлении процедуры или функции, например,
+% как \var{cdecl;} и пропуÑком Ñтой директивы при определении, или наоборот.
+% Тип вызова ÑвлÑетÑÑ Ñ‡Ð°Ñтью объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ и должен повторÑтьÑÑ
+% при ее определении.
+parser_e_property_cant_have_a_default_value=03131_E_СвойÑтво не может иметь значение по yмолчанию
+% СвойÑтва типа множеÑтво или индекÑированные ÑвойÑтва не могут иметь значение по умолчанию.
+parser_e_property_default_value_must_const=03132_E_Значение ÑвойÑтва по yмолчанию должно быть конÑтантой
+% Значение ÑвойÑтва, объÑвленное как \var{default}, должно быть извеÑтно во Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции.
+% Ошибка проиÑходит, еÑли указано значение, извеÑтное только во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ, например, Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹.
+parser_e_cant_publish_that=03133_E_Символ не может быть PUBLISHED, здеÑÑŒ допуÑтим только клаÑÑ
+% Только переменные типа клаÑÑа могут быть в \var{published} Ñекции объÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа,
+% еÑли они не объÑвлены как ÑвойÑтво.
+parser_e_cant_publish_that_property=03134_E_СвойÑтво Ñтого типа не может быть PUBLISHED
+% СвойÑтва в \var{published} Ñекции не могут быть типа маÑÑив, они
+% должны быть перенеÑены в Ñекцию public. СвойÑтва в Ñекции \var{published}
+% могут быть перечиÑлÑемого, вещеÑтвенного, Ñтрокового типа либо множеÑтвами.
+parser_e_empty_import_name=03136_E_ТребуетÑÑ Ð¸Ð¼Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°
+% Ð”Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… платформ требуетÑÑ Ð¸Ð¼Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ процедуры или ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ cdecl
+parser_e_division_by_zero=03138_E_Деление на ноль
+% Произошло деление на ноль.
+parser_e_invalid_float_operation=03139_E_HепpÐ°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¾Ð¿ÐµpÐ°Ñ†Ð¸Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой
+% ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð°Ð´ Ð´Ð²ÑƒÐ¼Ñ Ð²ÐµÑ‰ÐµÑтвенными чиÑлами вызвала переполнение или деление на ноль.
+parser_e_array_lower_less_than_upper_bound=03140_E_ВеpхнÑÑ Ð³pаница диапазона меньше, чем нижнÑÑ
+% ВерхнÑÑ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° в объÑвлении маÑÑива меньше нижней границы, что недопуÑтимо.
+parser_w_string_too_long=03141_W_Строка "$1" длиннее, чем "$2"
+% Длина Ñтроковой конÑтанты превышает длину, указанную в объÑвлении типа Ñтроки.
+parser_e_string_larger_array=03142_E_Длина Ñтроки превышает длину маÑÑива Ñимволов
+% Длина Ñтроковой конÑтанты превышает размер, указанный в объÑвлении маÑÑива
+% array[x..y] of char.
+parser_e_ill_msg_expr=03143_E_Hевеpное выpажение поÑле диpективы message
+% \fpc поддерживает только целочиÑленные и Ñтроковые Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ðº идентификаторы Ñообщений.
+parser_e_ill_msg_param=03144_E_Обpаботчики Ñообщений принимают только один параметр по ÑÑылке
+% Метод, объÑвленный Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¾Ð¹ \var{message} как обработчик Ñообщений,
+% может принимать только один параметр, который должен передаватьÑÑ Ð¿Ð¾ ÑÑылке.
+% Параметр передаетÑÑ Ð¿Ð¾ ÑÑылке поÑредÑтвом директивы \var{var}.
+parser_e_duplicate_message_label=03145_E_ПовтоpÐ½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° ÑообщениÑ: "$1"
+% Одна и та же метка ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ñпользована дважды в одном объекте/клаÑÑе.
+parser_e_self_in_non_message_handler=03146_E_SELF может быть только как Ñвный параметр в обработчиках ÑообщениÑ
+% Параметр self может быть только Ñвно передан в метод, объÑвленный как обработчик Ñообщений.
+parser_e_threadvars_only_sg=03147_E_Пеpеменные threadvar могyÑ‚ быть только ÑтатичеÑкими или глобальными
+% Переменные threadvar должны быть ÑтатичеÑкими или глобальными, их Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±ÑŠÑвлÑть локально
+% в процедуре. Локальные переменные процедуры вÑегда ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ°,
+% потому что каждый поток имеет ÑобÑтвенный Ñтек, а локальные переменные хранÑÑ‚ÑÑ Ð½Ð° Ñтеке.
+parser_f_direct_assembler_not_allowed=03148_F_Тип аÑÑемблеpа direct не поддеpживаетÑÑ Ð¿Ñ€Ð¸ двоичном фоpмате выходного файла
+% Тип аÑÑемблера direct не может быть иÑпользован ÑовмеÑтно Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ форматом выходных файлов,
+% иÑпользуйте другой выходной формат или другой аÑÑемблер.
+parser_w_no_objpas_use_mode=03149_W_Hе загpyжайте модуль OBJPAS вручную, иÑпользyйте {$mode objfpc} или {$mode delphi}
+% Попытка загрузить модуль ObjPas вручную в Ñекции uses. Этот модуль предназначен длÑ
+% автоматичеÑкой загрузки Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ директив \var{\{\$mode objfpc\}} или
+% \var{\{\$mode delphi\}}.
+parser_e_no_object_override=03150_E_OVERRIDE не может быть иÑпользовано в объектах
+% Директива override не поддерживаетÑÑ Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² родительÑкого
+% объекта Ñледует иÑпользовать \var{virtual}.
+parser_e_cant_use_inittable_here=03151_E_Тип данных, Ñ‚pебующий инициализации/финализации, Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в вариантных запиÑÑÑ…
+% Ðекоторые типы данных (например, \var{ansistring}) требуют код инициализации/финализации,
+% который неÑвно генерируетÑÑ ÐºÐ¾Ð¼Ð¸Ð¿Ð¸Ð»Ñтором. Такие типы данных не могут быть иÑпользованы
+% в вариантной чаÑти запиÑей.
+parser_e_resourcestring_only_sg=03152_E_Строки реÑурÑов могут быть только ÑтатичеÑкими или глобальными
+% Строки реÑурÑов не могут быть объÑвлены на локальном уровне, только на уровне модулÑ.
+parser_e_exit_with_argument_not__possible=03153_E_Процедура Exit Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ здеÑÑŒ недопуÑтима
+% Вызов exit Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ может быть иÑпользован в Ñтом меÑте,
+% в чаÑтноÑти, в блоках \var{try..except} или \var{try..finally}.
+parser_e_stored_property_must_be_boolean=03154_E_Тип Ñимвола stored должен быть boolean
+% ЕÑли в объÑвлении ÑвойÑтва иÑпользуетÑÑ Ñимвол stored, он должен иметь тип boolean.
+parser_e_ill_property_storage_sym=03155_E_Этот Ñимвол недопуÑтим в качеÑтве stored
+% Данный тип Ñимвола не может быть иÑпользован Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°ÐºÐ° ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÑвойÑтв.
+% ДопуÑтимо иÑпользовать методы, возвращающие boolean, Ð¿Ð¾Ð»Ñ Ñ‚Ð¸Ð¿Ð° boolean,
+% либо конÑтанты Ñтого типа.
+parser_e_only_publishable_classes_can_be_published=03156_E_Только клаÑÑÑ‹, Ñкомпилиpованные в режиме $M+, могут быть published
+% Ð’ Ñекции published объÑÐ²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑа могут иÑпользоватьÑÑ Ð¿Ð¾Ð»Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ типа клаÑÑа,
+% который компилируетÑÑ Ð² режиме $M+ или унаÑледованный от такого клаÑÑа. Обычно
+% иÑпользуютÑÑ Ð½Ð°Ñледники TPersitent.
+parser_e_proc_directive_expected=03157_E_ОжидаетÑÑ Ð¿pоцедypÐ½Ð°Ñ Ð´Ð¸pектива
+% Ошибка проиÑходит, еÑли в директиве \var{\{\$Calling\}} не указан тип вызова.
+% Также проиÑходит, еÑли при объÑвлении процедур в блоке конÑтант иÑпользуетÑÑ ; поÑле
+% объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹, поÑле чего должна Ñледовать Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð°.
+% Примеры правильных объÑвлений:
+% \begin{verbatim}
+% const
+% p : procedure;stdcall=nil;
+% p : procedure stdcall=nil;
+% \end{verbatim}
+parser_e_invalid_property_index_value=03158_E_Значение индекÑа ÑвойÑтва должно быть порÑдкового типа
+% Значение, иÑпольуземое как Ð¸Ð½Ð´ÐµÐºÑ ÑвойÑтва, должно быть порÑдкового типа, например,
+% целым чиÑлом или перечиÑлением.
+parser_e_procname_to_short_for_export=03159_E_Ð˜Ð¼Ñ Ð¿pоцедypÑ‹ Ñлишком коpоткое Ð´Ð»Ñ ÑкÑпоpта
+% Длина ÑкÑпортного имени процедуры/функции должна ÑоÑтавлÑть по крайней мере 2 Ñимвола.
+% Это обуÑловлено ошибкой в утилите dlltool, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ может корректно прочитать .def файл
+% Ñ Ð´Ð»Ð¸Ð½Ð¾Ð¹ имен, равной 1.
+parser_e_dlltool_unit_var_problem=03160_E_Ðевозможно Ñоздать запиÑÑŒ DEFFILE Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ… переменных модулÑ
+parser_e_dlltool_unit_var_problem2=03161_E_Компилируйте без ключа -WD
+% Этот файл необходимо компилировать без ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ»ÑŽÑ‡Ð° -WD в командной Ñтроке.
+parser_f_need_objfpc_or_delphi_mode=03162_F_Ð”Ð»Ñ Ñтого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼ режим ObjFpc (-S2) или Delphi (-Sd)
+% Ð”Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции данного Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ {$mode objfpc} or {$mode delphi},
+% либо иÑпользование аналогичных ключей командной Ñтроки -S2 или -Sd.
+parser_e_no_export_with_index_for_target=03163_E_ЭкÑпоpÑ‚ по индекÑу невозможен под $1
+% ЭкÑпорт процедур/функций Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ индекÑа не поддерживаетÑÑ Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ назначениÑ.
+parser_e_no_export_of_variables_for_target=03164_E_ЭкÑпоpÑ‚ пеpеменных не поддеpживаетÑÑ Ð¿Ð¾Ð´ $1
+% ЭкÑпорт переменных не поддерживаетÑÑ Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ назначениÑ.
+parser_e_improper_guid_syntax=03165_E_Ðеверный ÑинтакÑÐ¸Ñ GUID
+% Ошибка в ÑинтакÑиÑе GUID. Корректный GUID должен быть в форме
+% \begin{verbatim}
+% {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
+% \end{verbatim}
+% Где каждый \var{X} предÑтавлÑет Ñобой шеÑтнадцатеричную цифру.
+parser_w_interface_mapping_notfound=03168_W_Ðе найдена процедура Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "$1", подходÑÑ‰Ð°Ñ Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ $2.$3
+% КомпилÑтор не может найти процедуру, подходÑщую Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ указанного метода интерфейÑа.
+% Процедура Ñ Ñовпадающим именем найдена, но не Ñовпадает ÑпиÑок параметров.
+parser_e_interface_id_expected=03169_E_ОжидаетÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ интерфейÑа
+% ПроиÑходит при анализе объÑÐ²Ð»ÐµÐ½Ð¸Ñ \var{class}, которое Ñодержит
+% опиÑание ÑоответÑÑ‚Ð²Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² \var{interface} по имени, например:
+% \begin{verbatim}
+% type
+% TMyObject = class(TObject, IDispatch)
+% function IUnknown.QueryInterface=MyQueryInterface;
+% ....
+% \end{verbatim}
+% и Ð¸Ð¼Ñ \var{interface} перед точкой не перечиÑлено в ÑпиÑке наÑледованиÑ.
+parser_e_type_cant_be_used_in_array_index=03170_E_Тип "$1" не может иÑпользоватьÑÑ ÐºÐ°Ðº Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð°ÑÑива
+% Такие типы, как \var{qword} или \var{int64}, недопуÑтимы в качеÑтве индекÑов маÑÑива
+parser_e_no_con_des_in_interfaces=03171_E_Constructor и destructor недопуÑтимы в interface
+% ИÑпользование конÑтрукторов и деÑтрукторов в интерфейÑах не разрешаетÑÑ.
+% Ð’ большинÑтве Ñлучаев Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑкземплÑров интерфейÑа может быть иÑпользован метод
+% \var{QueryInterface} интерфейÑа \var{IUnknown}.
+parser_e_no_access_specifier_in_interfaces=03172_E_Указание типа доÑтупа недопуÑтимо в interface
+% Тип доÑтупа \var{public}, \var{private}, \var{protected} и
+% \var{pusblished} не может быть указан Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² интерфейÑа.
+% Ð’Ñе методы интферфейÑа ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±Ñ‰ÐµÐ´Ð¾Ñтупными (public).
+parser_e_no_vars_in_interfaces=03173_E_Interface не может Ñодержать полÑ
+% ОбъÑвление полей в интерфейÑе не допуÑкаетÑÑ. Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¼Ð¾Ð¶ÐµÑ‚
+% Ñодержать только методы.
+parser_e_no_local_proc_external=03174_E_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° не может быть EXTERNAL
+% ОбъÑвление локальных процедур как external невозможно. Локальные процедуры
+% получают Ñкрытые параметры, что делает вероÑтноÑть ошибок очень выÑокой.
+parser_w_skipped_fields_before=03175_W_Ðекоторые Ð¿Ð¾Ð»Ñ Ð¿ÐµÑ€ÐµÐ´ "$1" не были инициализированы
+% Ð’ режиме Delphi, Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… полей конÑтант типа запиÑÑŒ может быть пропущена,
+% но компилÑтор предупреждает о наличии такой Ñитуации.
+parser_e_skipped_fields_before=03176_E_Ðекоторые Ð¿Ð¾Ð»Ñ Ð¿ÐµÑ€ÐµÐ´ "$1" не были инициализированы
+% Ð’ режимах, отличных от Delphi, не допуÑкаетÑÑ Ð¾ÑтавлÑть неинициализированные полÑ
+% в Ñередине конÑтанты типа запиÑÑŒ.
+parser_w_skipped_fields_after=03177_W_Ðекоторые Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ñле "$1" не были инициализированы
+% ÐŸÐ¾Ð»Ñ Ð² конце конÑтанты типа запиÑÑŒ могут быть оÑтавлены без инициализации
+% (компилÑтор автоматичеÑки инициализирует их нулевыми значениÑми). Это
+% может ÑвлÑтьÑÑ Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð¾Ð¹ некоторых проблем.
+parser_e_varargs_need_cdecl_and_external=03178_E_Директива VarArgs (или '...' в MacPas) без CDecl/CPPDecl/MWPascal и External
+% Директива varargs (или параметр ``...'' в режиме MacPas) может быть иÑпользована только Ñ
+% процедурами/функциÑми, объÑвленными Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð°Ð¼Ð¸ \var{external} и одной из \var{cdecl},
+% \var{cppdecl} или \var{mwpascal}. Эта функциональноÑть поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ длÑ
+% ÑовмеÑтимоÑти Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñми Ñзыка C типа printf.
+parser_e_self_call_by_value=03179_E_Self должен быть параметром Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡ÐµÐ¹ по значению
+% Параметр Self не может быть передан по ÑÑылке (Ñ var или const), его нужно передавать по
+% значению
+parser_e_interface_has_no_guid=03180_E_Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ "$1" не имеет идентификатора
+% При приÑвоении интерфейÑа конÑтанте, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ иметь значение GUID.
+parser_e_illegal_field_or_method=03181_E_ÐеизвеÑтный идентификатор Ð¿Ð¾Ð»Ñ Ð¸Ð»Ð¸ метода "$1"
+% СвойÑтва должны ÑÑылатьÑÑ Ð½Ð° Ð¿Ð¾Ð»Ñ Ð¸ методы того же клаÑÑа, в котором объÑвлены.
+parser_w_proc_overriding_calling=03182_W_Тип вызова "$2" перекрывает "$1"
+% Ð’ объÑвлении процедуры приÑутÑтвуют две директивы, определÑющие тип вызова.
+% Будет иÑпользована поÑледнÑÑ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð°.
+parser_e_no_procvarobj_const=03183_E_КонÑтанта типа "procedure of object" может быть инициализирована только значением NIL
+% ÐÐ´Ñ€ÐµÑ Ð¼ÐµÑ‚Ð¾Ð´Ð° не может быть иÑпользован Ð´Ð»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ типизированной конÑтанты типа
+% 'procedure of object', потому что Ñ‚Ð°ÐºÐ°Ñ ÐºÐ¾Ð½Ñтанта ÑоÑтоит из двух адреÑов:
+% Ð°Ð´Ñ€ÐµÑ Ð¼ÐµÑ‚Ð¾Ð´Ð° (извеÑтный во Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции) и Ð°Ð´Ñ€ÐµÑ ÑкземплÑра объекта или
+% клаÑÑа (не может быть определен при компилÑции).
+parser_e_default_value_only_one_para=03184_E_Значение по умолчанию может быть приÑвоено только одному параметру
+% Ðевозможно приÑвоить значение по умолчанию Ñразу неÑкольким параметрам.
+% Следующий код неверен:
+% \begin{verbatim}
+% Procedure MyProcedure (A,B : Integer = 0);
+% \end{verbatim}
+% ВмеÑто Ñто Ñледует объÑвить процедуру как:
+% \begin{verbatim}
+% Procedure MyProcedure (A : Integer = 0; B : Integer = 0);
+% \end{verbatim}
+parser_e_default_value_expected_for_para=03185_E_Ð”Ð»Ñ "$1" требуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ по умолчанию
+% Указанный параметр требует значение по умолчанию.
+parser_w_unsupported_feature=03186_W_ИÑпользование пока неподдерживаемой оÑобенноÑти компилÑтора!
+% Попытка заÑтавить компилÑтор Ñделать нечто, чего он пока еще не умеет.
+parser_h_c_arrays_are_references=03187_H_МаÑÑивы C передаютÑÑ Ð¿Ð¾ ÑÑылке
+% Передача маÑÑивов в функции на Ñзыке C вÑегда
+% оÑущеÑтвлÑетÑÑ Ð¿Ð¾ÑредÑтвом ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ (Ñ‚.е. по ÑÑылке).
+parser_e_C_array_of_const_must_be_last=03188_E_МаÑÑив конÑтант в C должен быть поÑледним параметром
+% ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð»Ñть другие параметры поÑле параметра типа \var{array of const},
+% передаваемого в функцию, объÑвленную как \var{cdecl}, потому что Ð´Ð»Ñ Ð½ÐµÐ³Ð¾
+% заранее не извеÑтен размер данных, помещаемых на Ñтек.
+parser_h_type_redef=03189_H_Повторное объÑвление типа "$1"
+% Сообщает о том, что Ð´Ð»Ñ Ñ€Ð°Ð½ÐµÐµ определенного типа вÑтретилоÑÑŒ
+% повторное отличающееÑÑ Ð¾Ð±ÑŠÑвление. Это может быть (а может и не быть)
+% причиной ошибок.
+parser_w_cdecl_has_no_high=03190_W_Функции cdecl не имеют параметра high
+% Ð’ функции, объÑвленные как cdecl, не передаетÑÑ Ñкрытый параметр high.
+parser_w_cdecl_no_openstring=03191_W_Функции cdecl не поддерживают открытые Ñтроки
+% Строки типа openstring не поддерживаютÑÑ Ð² cdecl функциÑÑ….
+parser_e_initialized_not_for_threadvar=03192_E_Ð˜Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ типа threadvar невозможна
+% Переменные, объÑвленные как threadvar, не могут иметь начального значениÑ.
+% Они вÑегда получают нулевое значение при Ñтарте нового потока.
+parser_e_msg_only_for_classes=03193_E_Директива message разрешена только Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов
+% Директива message поддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð² Class.
+parser_e_procedure_or_function_expected=03194_E_ОжидаетÑÑ "procedure" или "function"
+% КлаÑÑ-методом могут быть только Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ и функции.
+parser_e_illegal_calling_convention=03195_W_Тип вызова игнорирован: "$1"
+% Ðекоторые типы вызовов поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на определенных процеÑÑорах. Так, Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва
+% не-i386 поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ типы вызова Ñтандартного ABI.
+parser_e_no_object_reintroduce=03196_E_REINTRODUCE Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²
+% Директива \var{reintroduce} не поддерживаетÑÑ Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð².
+parser_e_paraloc_only_one_para=03197_E_РаÑположение аргументов не может Ñовпадать
+% ЕÑли раÑположение аргументов указываютÑÑ Ñвно, как того требуют некоторые
+% типы вызовов syscall, раÑположение каждого из аргументов должно быть уникальным,
+% конÑтрукции вида \var{procedure p(i,j : longint 'r1');} не допуÑкаютÑÑ.
+parser_e_paraloc_all_paras=03198_E_Ðужно указать раÑположение Ð´Ð»Ñ Ð²Ñех аргументов
+% ЕÑли раÑположение указано Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ аргументов, его нужно указать и Ð´Ð»Ñ Ð²Ñех
+% оÑтальных.
+parser_e_illegal_explicit_paraloc=03199_E_ÐеизвеÑтное раÑположение аргумента
+% Указанное раÑположение не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ Ð·Ñ€ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтора.
+parser_e_32bitint_or_pointer_variable_expected=03200_E_ОжидаетÑÑ 32-битное целое либо указатель
+% libbase Ð´Ð»Ñ MorphOS/AmigaOS можно задавать только как \var{longint}, \var{dword}, либо указатель
+% любого типа.
+parser_e_goto_outside_proc=03201_E_Ðе допуÑкаетÑÑ goto между различными процедурами
+% Ðе допуÑкаетÑÑ Ð¸Ñпользование \var{goto} Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на метку, определенную вне
+% текущей процедуры. Следующий пример демонÑтрирует проблему:
+% \begin{verbatim}
+% ...
+% procedure p1;
+% label
+% l1;
+%
+% procedure p2;
+% begin
+% goto l1; // Эта инÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ goto не разрешаетÑÑ
+% end;
+%
+% begin
+% p2
+% l1:
+% end;
+% ...
+%
+% \end{verbatim}
+parser_f_too_complex_proc=03202_F_Слишком ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°, не хватает региÑтров
+% Тело процедуры ÑвлÑетÑÑ Ñлишком Ñложным Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции. Следует разбить ее
+% на неÑколько более проÑтых процедур.
+parser_e_illegal_expression=03203_E_ÐедопуÑтимое выражение
+% Может возникать по разным причинам. Ðаиболее чаÑто - при вычиÑлении
+% конÑтантных выражений.
+parser_e_invalid_integer=03204_E_Ðеверное целочиÑленное выражение
+% Выражение не ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº компилÑтор ожидает
+% именно целочиÑленный результат.
+parser_e_invalid_qualifier=03205_E_Ðеверный квалификатор
+% ПроиÑходит по одной из Ñледующих причин:
+% \begin{itemize}
+% \item Попытка доÑтупа к полю переменной, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ ÑвлÑетÑÑ Ð·Ð°Ð¿Ð¸Ñью.
+% \item Указание индекÑа Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹, не ÑвлÑющейÑÑ Ð¼Ð°ÑÑивом.
+% \item Разыменование переменной, не ÑвлÑющейÑÑ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÐµÐ¼.
+% \end{itemize}
+parser_e_upper_lower_than_lower=03206_E_Верхний предел диапазона < нижнего
+% При объÑвлении поддиапазона, нижний предел оказалÑÑ Ð±Ð¾Ð»ÑŒÑˆÐµ
+% верхнего.
+parser_e_macpas_exit_wrong_param=03207_E_Параметр Exit должен быть именем текущей процедуры
+% Ðе-локальный exit не допуÑкаетÑÑ. Эта ошибка возникает только в режиме MacPas.
+parser_e_illegal_assignment_to_count_var=03208_E_Ðеверное приÑвоение переменной for-цикла "$1"
+% Тип переменной Ð´Ð»Ñ Ñ†Ð¸ÐºÐ»Ð° \var{for} должен быть порÑдковым.
+% ВещеÑтвенные и Ñтроковые типы не допуÑкаютÑÑ. Кроме того, не допуÑкаетÑÑ Ð¿Ñ€Ð¸Ñвоение
+% управлÑющей переменной внутри цикла (кроме режимов Delphi и TP). ЕÑли требуетÑÑ
+% приÑвоение, вмеÑто цикла for Ñледует иÑпользовать предназначенные Ð´Ð»Ñ Ñтого
+% циклы while или repeat.
+parser_e_no_local_var_external=03209_E_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ может быть EXTERNAL
+% ОбъÑвление локальных переменных как внешних не допуÑкаетÑÑ. Внешними могут быть
+% только глобальные переменные.
+parser_e_proc_already_external=03210_E_Процедура уже объÑвлена как EXTERNAL
+% Процедура уже объÑвлена Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¾Ð¹ EXTERNAL в интерфейÑе Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¸Ð»Ð¸
+% в раннем объÑвлении.
+parser_w_implicit_uses_of_variants_unit=03211_W_ÐеÑвное иÑпользование Ð¼Ð¾Ð´ÑƒÐ»Ñ Variants
+% Ð’ модуле иÑпользуетÑÑ Ñ‚Ð¸Ð¿ Variant, но модуль Variants не подключен ни к одному из иÑпользуемых
+% модулей. КомпилÑтор неÑвно добавлÑет Variants в ÑпиÑок иÑпользуемых модулей.
+% Чтобы избавитьÑÑ Ð¾Ñ‚ предупреждениÑ, добавьте Variants в ÑпиÑок uses.
+parser_e_no_static_method_in_interfaces=03212_E_Методы class and static не допуÑкаютÑÑ Ð² INTERFACE
+% Спецификатор \var{class} и директива \var{static} не применимы в интерфейÑах,
+% Ñ‚.к. вÑе методы интерфейÑа должны быть публичными.
+parser_e_arithmetic_operation_overflow=03213_E_Переполнение в арифметичеÑкой операции
+% ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ð°Ð´ целыми чиÑлами привела к переполнению
+parser_e_protected_or_private_expected=03214_E_ОжидаетÑÑ "protected" или "private"
+% \var{strict} может иÑпользоватьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в Ñочетании Ñ \var{protected} или \var{private}.
+parser_e_illegal_slice=03215_E_SLICE Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать вне ÑпиÑка параметров
+% \var{slice} можно иÑпользовать только Ð´Ð»Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð², принимающих тип открытого маÑÑива
+parser_e_dispinterface_cant_have_parent=03216_E_DISPINTERFACE не может иметь родителÑ
+% DISPINTERFACE ÑвлÑетÑÑ Ð¾Ñобым типом интерфейÑа и не может иметь родительÑкий клаÑÑ
+parser_e_dispinterface_needs_a_guid=03217_E_Ð”Ð»Ñ DISPINTERFACE требуетÑÑ GUID
+% DISPINTERFACE вÑегда требует идентификации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ GUID
+parser_w_overridden_methods_not_same_ret=03218_W_Перекрытые методы должны иметь одинаковый тип результата. Этот код иÑпользует ошибку в парÑере Delphi и будет работать непредÑказуемо ("$2" перекрыто "$1", имеющим другой тип результата)
+% Перекрытые методы должны возвращать один и тот же тип результата.
+% Ðекоторые верÑии Delphi позволÑÑŽÑ‚ изменÑть типы результата и даже превращать
+% процедуры в функции, но работоÑпоÑобноÑть полученного кода завиÑит от
+% иÑпользованных типов и ÑпоÑоба вызова методов.
+parser_e_dispid_must_be_ord_const=03219_E_Dispatch ID должны быть порÑдковыми конÑтантами
+% За ключевым Ñловом \var{dispid} должна Ñледовать порÑÐ´ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта (индекÑ).
+parser_e_array_range_out_of_bounds=03220_E_Диапазон маÑÑива Ñлишком велик
+% ÐезавиÑимо от количеÑтва памÑти, занимаемой Ñлементами, маÑÑивы не могут Ñодержать
+% больше чем high(ptrint) Ñлементов. Кроме того, тип диапазона должен быть поддиапазоном
+% типа ptrint.
+parser_e_packed_element_no_var_addr=03221_E_ÐÐµÐ»ÑŒÐ·Ñ Ð²Ð·Ñть Ð°Ð´Ñ€ÐµÑ Ñлементов/полей побитно-упакованных маÑÑивов/запиÑей
+% ÐŸÐ¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи или Ñлементы маÑÑива, объÑвленных как \var{packed} в режиме Mac Pascal (либо как
+% \var{packed} в любом режиме при уÑловии \var{\{\$bitpacking on\}}), будут упакованы на уровне
+% бит. Это означает невозможноÑть Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑов отдельных Ñлементов маÑÑива или полей запиÑи.
+% ИÑключением из Ñтого правила ÑвлÑÑŽÑ‚ÑÑ ÑƒÐ¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð½Ñ‹Ðµ маÑÑивы, размер Ñлементов которых кратен 8 битам.
+parser_e_packed_dynamic_open_array=03222_E_ДинамичеÑкие маÑÑивы не могут быть упакованными
+% Упакованными могут быть только обычные (и, возможно, в будущем также открытые) маÑÑивы.
+parser_e_packed_element_no_loop=03223_E_Элементы/Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ð±Ð¸Ñ‚Ð½Ð¾-упакованных маÑÑивов/запиÑей Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать как переменные цикла for
+% ÐŸÐ¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи или Ñлементы маÑÑива, объÑвленных как \var{packed} в режиме Mac Pascal (либо как
+% \var{packed} в любом режиме при уÑловии \var{\{\$bitpacking on\}}), будут упакованы на уровне
+% бит. По причинам быÑтродейÑÑ‚Ð²Ð¸Ñ Ð¸Ñ… Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать как переменные Ð´Ð»Ñ for-цикла.
+parser_e_type_and_var_only_in_generics=03224_E_VAR и TYPE допуÑтимы только в обобщениÑÑ… (generic)
+% ИÑпользование VAR и TYPE Ð´Ð»Ñ Ð¾Ð±ÑŠÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… типов внутри объекта разрешаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ длÑ
+% обобщений.
+parser_e_cant_create_generics_of_this_type=03225_E_Этот тип не может быть обобщением
+% ÐžÐ±Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿ÑƒÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов, объектов, интерфейÑов и запиÑей.
+parser_w_no_lineinfo_use_switch=03226_W_Ðе подключайте модуль LINEINFO вручную, иÑпользуйте Ð´Ð»Ñ Ñтого ключ -gl
+% Ðе подключайте модуль LINEINFO вручную, иÑпользование ключа \var{-gl} автоматичеÑки подключает
+% различные модули в завиÑимоÑти от типа генерируемой отладочной информации.
+parser_e_no_funcret_specified=03227_E_Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ "$1" не указан тип результата
+% Первое объÑвление функции должно быть полным, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð²Ñе параметры и тип результата.
+parser_e_special_onlygenerics=03228_E_Ð¡Ð¿ÐµÑ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° только Ð´Ð»Ñ Ð¾Ð±Ð¾Ð±Ñ‰ÐµÐ½Ð½Ñ‹Ñ… типов.
+% Типы, не ÑвлÑющиеÑÑ Ð¾Ð±Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñми, не могут быть Ñпециализированы.
+parser_e_no_generics_as_params=03229_E_ÐžÐ±Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать как параметры Ñпециализации других обобщений
+% При Ñпециализации обобщениÑ, в качеÑтве параметров можно иÑпользовать только обычные типы.
+parser_e_type_object_constants=03230_E_КонÑтантные объекты, Ñодержащие VMT, не допуÑкаютÑÑ
+% ЕÑли объект требует VMT из-за Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ ÐºÐ¾Ð½Ñтруктора либо виртуальных методов,
+% Ñоздание конÑтант его типа не допуÑкаетÑÑ. Ð’ режимах TP и Delphi, тем не менее,
+% Ñто разрешено в целÑÑ… ÑовмеÑтимоÑти.
+parser_e_label_outside_proc=03231_E_Ðе допуÑкаетÑÑ Ð²Ð·Ñтие адреÑов меток, определенных вне текущей облаÑти видимоÑти
+% Ðе разрешаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ðµ адреÑов меток, находÑщихÑÑ Ð²Ð½Ðµ текущей процедуры.
+parser_e_initialized_not_for_external=03233_E_Ðе допуÑкаетÑÑ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ…, объÑвленных как external
+% Переменные, объÑвленные как external, не могут иметь значение по умолчанию.
+parser_e_illegal_function_result=03234_E_Ðеверный тип возвращаемого значениÑ
+% Ðекоторые типы, такие как файлы, не могут быть иÑпользованы в качеÑтве результата функции.
+parser_e_no_common_type=03235_E_ОтÑутÑтвует общий тип Ð´Ð»Ñ "$1" и "$2"
+% Чтобы выполнить операцию над целыми чиÑлами, компилÑтор приводит их к общему типу,
+% чего ему в данном Ñлучае не удаетÑÑ. Ð”Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ типа операндов
+% компилÑтор берет меньшее из минимальных значений обоих типов и большее из макÑимальных
+% значений. Общий тип будет иметь диапазон минимум..макÑимум.
+parser_e_no_generics_as_types=03236_E_ÐžÐ±Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±ÐµÐ· Ñпециализации не могут быть иÑпользованы как тип переменной
+% ÐžÐ±Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð²Ñегда должны быть Ñпециализированы перед иÑпользованием в качеÑтве типа Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ….
+parser_w_register_list_ignored=03237_W_Перечень региÑтров Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€ полноÑтью на аÑÑемблере игнорирован
+% Ð’ процедурах, напиÑанных полноÑтью на аÑÑемблере, перечень измененных региÑтров игнорируетÑÑ.
+parser_e_implements_must_be_class_or_interface=03238_E_СвойÑтво implements должно быть типа клаÑÑ Ð¸Ð»Ð¸ интерфейÑ
+% СвойÑтво, реализующее интерфейÑ, должно иметь тип клаÑÑа или интерфейÑа.
+parser_e_implements_must_have_correct_type=03239_E_СвойÑтво implements должно реализовывать Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð³Ð¾ типа, найдено "$1" ожидалоÑÑŒ "$2"
+% СвойÑтво, реализующее интерфейÑ, реализует не тот тип интерфейÑа.
+parser_e_implements_must_read_specifier=03240_E_СвойÑтво implements должно быть доÑтупным Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ
+% СвойÑтво, реализующее интерфейÑ, должно иметь Ñпецификатор read.
+parser_e_implements_must_not_have_write_specifier=03241_E_СвойÑтво implements не должно быть доÑтупным Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи
+% СвойÑтво, реализующее интерфейÑ, не может иметь Ñпецификатор write.
+parser_e_implements_must_not_have_stored_specifier=03242_E_СвойÑтво implements не может быть stored
+% СвойÑтво, реализующее интерфейÑ, не может иметь Ñпецификатор stored.
+parser_e_implements_uses_non_implemented_interface=03243_E_СвойÑтво implements иÑпользовано Ð´Ð»Ñ Ð½ÐµÑ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ интерфейÑа: "$1"
+% ИнтерфейÑ, реализуемый ÑвойÑтвом, должен быть в ÑпиÑке интерфейÑов, реализуемых клаÑÑом.
+parser_e_unsupported_real=03244_E_ВычиÑÐ»ÐµÐ½Ð¸Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой не доÑтупны Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ платформы
+% Ð’ÑтретилоÑÑŒ вещеÑтвенное выражение, но на целевой платформе они не поддерживаютÑÑ
+parser_e_class_doesnt_implement_interface=03245_E_КлаÑÑ "$1" не реализует Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ "$2"
+% Делегированный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ðµ реализован клаÑÑом, указанным в выражении implements.
+parser_e_class_implements_must_be_interface=03246_E_Тип, иÑпользуемый implements, должен быть интерфейÑом
+% За ключевым Ñловом \var{implements} должно Ñледовать Ð¸Ð¼Ñ Ñ‚Ð¸Ð¿Ð° интерфейÑа.
+parser_e_cant_export_var_different_name=03247_E_Ðа Ñтой платформе переменные Ð½ÐµÐ»ÑŒÐ·Ñ ÑкÑпортировать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ именем, добавьте Ð¸Ð¼Ñ Ðº объÑвлению Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ директивы "export" (Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹: $1, объÑвленное Ð¸Ð¼Ñ ÑкÑпорта: $2)
+% On most targets it is not possible to change the name under which a variable
+% is exported inside the \var{exports} statement of a library.
+% In that case, you have to specify the export name at the point where the
+% variable is declared, using the \var{export} and \var{alias} directives.
+parser_e_weak_external_not_supported=03248_E_Символы "weak external" не поддерживаютÑÑ Ð½Ð° целевой платформе
+% A "weak external" symbol is a symbol which may or may not exist at (either static
+% or dynamic) link time. This concept may not be available (or implemented yet)
+% on the current cpu/OS target.
+parser_e_forward_mismatch=03249_E_Тип не ÑоответÑтвует раннему объÑвлению
+% При раннем объÑвлении клаÑÑов и интерфейÑов типы раннего и фактичеÑкого объÑвлений
+% должны Ñовпадать. Ранее объÑвленный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ðµ может быть превращен в клаÑÑ.
+parser_n_ignore_lower_visibility=03250_N_Виртуальный метод "$1" имеет меньшую видимоÑть ($2), чем в родительÑком клаÑÑе $3 ($4)
+% Перекрывающий виртуальный метод видимоÑть меньше, чем перекрываемый. Это может приводить к
+% неожиданным результатам. ЕÑли Ð½Ð¾Ð²Ð°Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñть - private, то вызов inherited в новом клаÑÑе
+% потомка может вызывать метод Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ видимоÑтью в родительÑком клаÑÑе, Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÑ private метод.
+parser_e_field_not_allowed_here=03251_E_ÐŸÐ¾Ð»Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±ÑŠÑвлÑть поÑле методов или ÑвойÑтв, Ñначала начните новую Ñекцию видимоÑти
+% ПоÑле объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° или ÑвойÑтва в клаÑÑе или объекте, дальнейшее объÑвление полей возможно
+% только в новой Ñекции облаÑти видимоÑти (\var{public}, \var{private} и Ñ‚.д.). Это необходимо
+% Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° компилÑтором, поÑкольку модификаторы методов,
+% такие как \var{default} и \var{register} могут также иÑпользоватьÑÑ ÐºÐ°Ðº имена полей.
+parser_e_no_local_para_def=03252_E_Параметры не могут Ñодержать локальные объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð². ИÑпользуйте отдельное объÑвление типа в блоке type.
+% Ð’ ПаÑкале ÑемантичеÑки равнозначные типы не ÑчитаютÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸.
+% Переменные или параметры ÑчитаютÑÑ Ð¾Ð´Ð½Ð¾Ñ‚Ð¸Ð¿Ð½Ñ‹Ð¼Ð¸ только в том Ñлучае, еÑли они ÑÑылаютÑÑ Ð½Ð° одно и то же
+% объÑвление типа.
+% Как ÑледÑтвие, объÑвление типов в ÑпиÑке параметров не допуÑкаетÑÑ, Ñ‚.к. на локальное объÑвление невозможно
+% ÑоÑлатьÑÑ Ð¸Ð·Ð²Ð½Ðµ, и два заголовка процедуры в интерфейÑной и реализационной чаÑти Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¾Ð±ÑŠÑвлÑли бы
+% два различных типа. Имейте в виду, что Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° ``file of byte'' или ``string[50]'' также определÑÑŽÑ‚
+% новый тип.
+% \end{description}
+#
+# Type Checking
+#
+# 04087 is the last used one
+#
+% \section{Ошибки проверки типов}
+% Ð’ разделе перечиÑлены вÑе ошибки, которые могут возникать в процеÑÑе
+% проверки типов.
+% \begin{description}
+type_e_mismatch=04000_E_Тип не Ñовпадает
+% Может иметь меÑто во многих ÑлучаÑÑ…:
+% \begin{itemize}
+% \item ПриÑÐ²Ð°Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ тип, отличный от приÑваиваемого выражениÑ.
+% \item Вызов функции или процедуры Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸, неÑовмеÑтимыми
+% Ñ Ñ‚ÐµÐ¼Ð¸, которые были иÑпользованы при объÑвлении функции.
+% \end{itemize}
+type_e_incompatible_types=04001_E_HеÑовмеÑтимые типы: полyчено "$1", ожидалоÑÑŒ "$2"
+% Преобразование из одного типа в другой невозможно.
+% Также возможно, что типы объÑвлены в различных объÑвлениÑÑ…:
+% \begin{verbatim}
+% Var
+% A1 : Array[1..10] Of Integer;
+% A2 : Array[1..10] Of Integer;
+%
+% Begin
+% A1:=A2; { Приведет к ошибке из-за требованиÑ
+% Ñтрогого ÑоответÑÑ‚Ð²Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² в ПаÑкале }
+% End.
+% \end{verbatim}
+type_e_not_equal_types=04002_E_HеÑовпадение типов междy "$1" и "$2"
+% Типы не равны
+type_e_type_id_expected=04003_E_ОжидаетÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ типа
+% Идентификатор не ÑвлÑетÑÑ Ñ‚Ð¸Ð¿Ð¾Ð¼, либо идентификатор типа пропущен.
+type_e_variable_id_expected=04004_E_ОжидаетÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ переменной
+% ПроиÑходит при попытке передачи конÑтанты в процедуру \var{Inc} или \var{Dec}.
+% Им можно передавать только переменные.
+type_e_integer_expr_expected=04005_E_ОжидаетÑÑ Ð²Ñ‹pажение типа INTEGER, но получено "$1"
+% КомпилÑтор ожидает выражение типа integer, но получает нечто иное.
+type_e_boolean_expr_expected=04006_E_ОжидаетÑÑ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ типа BOOLEAN, но получено "$1"
+% Выражение должно быть булевого типа, должно быть возвращено true или
+% false.
+type_e_ordinal_expr_expected=04007_E_ОжидаетÑÑ Ð²Ñ‹pажение порÑдкового типа
+% Тип Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть порÑдковым, Ñ‚.е., макÑимум \var{Longint}.
+% ПроиÑходит, например, еÑли второй аргумент
+% \var{Inc} или \var{Dec} не вычиÑлÑетÑÑ ÐºÐ°Ðº порÑдковый тип.
+type_e_pointer_type_expected=04008_E_ОжидаетÑÑ Ñ‚Ð¸Ð¿ POINTER, но получено "$1"
+% ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð»Ð¸ выражение имеет тип, отличный от \var{pointer}. ПроиÑходит,
+% например, при передаче целой переменной в качеÑтве аргумента \var{New}
+% или \var{Dispose}.
+type_e_class_type_expected=04009_E_ОжидаетÑÑ Ñ‚Ð¸Ð¿ CLASS, но получено "$1"
+% ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð»Ð¸ выражение имеет тип, отличный от \var{class}. Обычно
+% ÑлучаетÑÑ, еÑли
+% \begin{enumerate}
+% \item РодительÑкий клаÑÑ Ð² объÑвлении клаÑÑа не ÑвлÑетÑÑ ÐºÐ»Ð°ÑÑом.
+% \item Обработчик иÑключений (\var{On}) Ñодержит идентификатор типа,
+% не ÑвлÑющийÑÑ ÐºÐ»Ð°ÑÑом.
+% \end{enumerate}
+type_e_cant_eval_constant_expr=04011_E_Hевозможно вычиÑлить конÑтантное выражение
+% ПроиÑходит, еÑли границы объÑвленного маÑÑива не вычиÑлÑÑŽÑ‚ÑÑ ÐºÐ°Ðº порÑдковые конÑтанты.
+type_e_set_element_are_not_comp=04012_E_Элементы множеÑтва не ÑовмеÑтимы
+% Возникает при операции над Ð´Ð²ÑƒÐ¼Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвами, имеющими различный тип Ñлементов.
+% Ð”Ð»Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтв они должны иметь одинаковый базовый тип.
+type_e_set_operation_unknown=04013_E_ОпеpÐ°Ñ†Ð¸Ñ Ð½Ðµ pеализована Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтв
+% Ðекоторые парные операции не определены Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтв,
+% например, div mod ** (также, в наÑтоÑщее времÑ, >= <=).
+type_w_convert_real_2_comp=04014_W_ÐвтоматичеÑкое пpеобpазование из вещеÑтвенного типа в COMP, котоpый ÑвлÑетÑÑ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленным
+% Ð’ÑтретилоÑÑŒ неÑвное преобразование вещеÑтвенного типа в \var{comp}.
+% ПоÑкольку \var{Comp} ÑвлÑетÑÑ 64-битным целым, Ñто может ÑвидетельÑтвовать об ошибке.
+type_h_use_div_for_int=04015_H_Ð”Ð»Ñ Ð¿Ð¾Ð»yÑ‡ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленного pезyльтата иÑпользyйте DIV
+% При включенных подÑказках, Ñообщение будет выдаватьÑÑ Ð¿Ñ€Ð¸ целочиÑленном делении
+% Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ '/', поÑкольку результат в Ñтом Ñлучае будет вещеÑтвенным.
+type_e_strict_var_string_violation=04016_E_Типы Ñтрок не Ñовпадают из-за режима $V+
+% При компилÑции в режиме \var{\{\$V+\}}, тип Ñтрок, передаваемых как параметры,
+% должен в точноÑти Ñовпадать Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ в объÑвлении функции.
+type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_SUCC или PRED невозможны на пеpечиÑлениÑÑ… Ñ Ð¿Ñ€Ð¸ÑвоениÑми
+% ЕÑли перечиÑлÑемый тип Ñодержит приÑвоениÑ, как в Ñзыке C,
+% например:
+% \begin{verbatim}
+% Tenum = (a,b,e:=5);
+% \end{verbatim}
+% то Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать функции \var{Succ} или \var{Pred}.
+type_e_cant_read_write_type=04018_E_Чтение и запиÑÑŒ пеpеменных Ñтого типа невозможна
+% Попытка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ (\var{read}) или запиÑи (\var{write}) переменной, тип которой не
+% поддерживаетÑÑ, в файл типа текÑÑ‚. ПоддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ целые,
+% булевы, вещеÑтвенные переменные, переменные типа pchar и Ñтроки.
+type_e_no_readln_writeln_for_typed_file=04019_E_Readln или Writeln недопуÑтимы на типизированном файле
+% \var{readln} и \var{writeln} допуÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ñ‚ÐµÐºÑтовых файлов.
+type_e_no_read_write_for_untyped_file=04020_E_Read или Write недопуÑтимы на нетипизированном файле
+% \var{read} и \var{write} допуÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ñ‚ÐµÐºÑтовых и типизированных файлов.
+type_e_typeconflict_in_set=04021_E_Конфликт типов междy Ñлементами множеÑтва
+% Тип по крайней мере одного Ñлемента не Ñовпадает Ñ Ð±Ð°Ð·Ð¾Ð²Ñ‹Ð¼ типом множеÑтва.
+type_w_maybe_wrong_hi_lo=04022_W_Lo/Hi(dword/qword) возвpащают младшее/Ñтаршее word/dword
+% \fpc поддерживает перегруженные варианты \var{lo/hi} Ð´Ð»Ñ \var{longint/dword/int64/qword},
+% которые возвращают младшую/Ñтаршую половину аргумента (типа word/dword). TP вÑегда иÑпользует
+% 16-битные \var{lo/hi}, которые вÑегда возвращают биты 0..7 Ð´Ð»Ñ \var{lo} и
+% биты 8..15 Ð´Ð»Ñ \var{hi}. ЕÑли требуетÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ TP, нужно привеÑти аргумент
+% к \var{word/integer}.
+type_e_integer_or_real_expr_expected=04023_E_ОжидаетÑÑ Ð²Ñ‹pажение целого или вещеÑтвенного типа
+% Первый аргумент \var{str} должен иметь целый либо вещеÑтвенный тип.
+type_e_wrong_type_in_array_constructor=04024_E_Hевеpный тип "$1" в конÑÑ‚pyктоpе маÑÑива
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимого типа в конÑтрукторе маÑÑива.
+type_e_wrong_parameter_type=04025_E_HеÑовпадение типа аpгyмента # $1: получено "$2", ожидалоÑÑŒ "$3"
+% Попытка передать неверный тип Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð³Ð¾ параметра.
+type_e_no_method_and_procedure_not_compatible=04026_E_Метод (пеpеменнаÑ) и пpоцедypа (пеpеменнаÑ) не ÑовмеÑтимы
+% ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¸Ñвоить метод переменной типа процедура, или процедуру переменной типа
+% метод.
+type_e_wrong_math_argument=04027_E_ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта пеpедана вÑтроенной математичеÑкой Ñ„yнкции
+% КонÑтантный аргумент функции ln или sqrt находитÑÑ Ð²Ð½Ðµ определенного Ð´Ð»Ñ Ð½Ð¸Ñ…
+% диапазона.
+type_e_no_addr_of_constant=04028_E_HÐµÐ»ÑŒÐ·Ñ Ð²Ð·Ñть Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð½Ñтантного выражениÑ
+% ВзÑть Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð½Ñтантного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, потому что конÑтанты не
+% хранÑÑ‚ÑÑ Ð² памÑти. Можно попробовать объÑвить типизированную конÑтанту.
+type_e_argument_cant_be_assigned=04029_E_Ðргументу невозможно приÑвоить значение
+% Ð’ качеÑтве параметра по ÑÑылке могут быть переданы только те выражениÑ,
+% которые можно иÑпользовать Ñ Ð»ÐµÐ²Ð¾Ð¹ Ñтороны оператора приÑваиваниÑ.
+% ЗамечаниÑ: СвойÑтва можно иÑпользовать Ñ Ð»ÐµÐ²Ð¾Ð¹ Ñтороны приÑваиваниÑ, но
+% Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ñ‚ÑŒ по ÑÑылке.
+type_e_cannot_local_proc_to_procvar=04030_E_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° не может быть приÑвоена переменной процедурного типа
+% ПриÑвоение локальных процедур/функций процедурным переменным не допуÑкаетÑÑ,
+% Ñ‚.к. у них другой ÑпоÑоб вызова. Локальные процедуры/функции
+% можно приÑвоить только нетипизированному указателю.
+type_e_no_assign_to_addr=04031_E_HÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¸Ñвоить значение адpеÑy
+% Ðе допуÑкаетÑÑ Ð¿Ñ€Ð¸Ñвоение значений адреÑам переменных, конÑтант, процедур
+% и функций. ЕÑли идентификатор ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð½Ð¾Ð¹ переменной, можно попробовать
+% компилÑцию Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ -So.
+type_e_no_assign_to_const=04032_E_HÐµÐ»ÑŒÐ·Ñ Ð¿Ñ€Ð¸Ñвоить значение конÑтанте
+% Ðе допуÑкаетÑÑ Ð¿Ñ€Ð¸Ñвоение значений переменным, объÑвленным как конÑтантные.
+% Как правило, Ñто параметры, объÑвленные как const. Чтобы их можно было
+% приÑваивать, поменÑйте их на var или на параметр-значение.
+type_e_array_required=04033_E_ТpебyетÑÑ Ñ‚Ð¸Ð¿ маÑÑива
+% При доÑтупе к переменной по индекÑу '[<x>]' тип Ñтой переменной должна быть
+% маÑÑивом. Ð’ режиме FPC также допуÑкаютÑÑ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ð¸.
+type_e_interface_type_expected=04034_E_ТребуетÑÑ Ñ‚Ð¸Ð¿ интерфейÑа, но получено "$1"
+% КомпилÑтор ожидал вÑтретить Ð¸Ð¼Ñ Ñ‚Ð¸Ð¿Ð° интерфейÑа, но вÑтретил что-то другое.
+% Ошибка может быть вызвана Ñледующим кодом:
+% \begin{verbatim}
+% Type
+% TMyStream = Class(TStream,Integer)
+% \end{verbatim}
+type_h_mixed_signed_unsigned=04035_H_Смешивание знаковых и беззнаковых выражений дает 64-битный результат
+% При делении (или вычиÑлении оÑтатка) знакового Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° беззнаковое (или наоборот),
+% или же включена проверка переполнений и/или диапазонов и иÑпользуетÑÑ Ð°Ñ€Ð¸Ñ„Ð¼ÐµÑ‚Ð¸Ñ‡ÐµÑкое
+% выражение (+, -, *, div, mod), в котором вÑтречаютÑÑ ÐºÐ°Ðº знаковые, так и беззнаковые значениÑ,
+% вычиÑление будет производитьÑÑ Ð² 64-битном режиме, который медленнее обычной
+% 32-битной арифметики. Этого можно избежать, Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ Ñ‚Ð¸Ð¿ одного из операндов к типу
+% другого.
+type_w_mixed_signed_unsigned2=04036_W_Смешивание знаковых и беззнаковых выражений типа может вызвать ошибку выхода за диапазон
+% При иÑпользовании двоичных операций (and, or, xor), один из операндов которых
+% ÑвлÑетÑÑ Ð±ÐµÐ·Ð·Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ выражением, а другой - выражением Ñо знаком, и включена
+% проверка диапазонов, может возникнуть ошибка, Ñ‚.к. в Ñтом Ñлучае оба операнда
+% будут преобразованы в беззнаковый cardinal. Этого можно избежать, Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ Ñ‚Ð¸Ð¿
+% одного из операндов к типу другого.
+type_e_typecast_wrong_size_for_assignment=04037_E_Приведение типов разного размера ($1 -> $2) в приÑваивании
+% Приведение типа к типу другого размера невозможно, еÑли Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸ÑпользуетÑÑ
+% в приÑваивании.
+type_e_array_index_enums_with_assign_not_possible=04038_E_ПеречиÑÐ»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð¸ÑвоениÑми Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать как Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð°ÑÑива
+% Элементы перечиÑлÑемого типа, объÑвленного Ñ Ð¿Ñ€Ð¸ÑвоениÑми, как в Ñзыке C,
+% например:
+% \begin{verbatim}
+% Tenum = (a,b,e:=5);
+% \end{verbatim}
+% Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать как индекÑÑ‹ маÑÑивов.
+type_e_classes_not_related=04039_E_Типы клаÑÑов или объектов "$1" и "$2" не ÑоотноÑÑÑ‚ÑÑ
+% Приведение типа одного клаÑÑа или объекта к другому, не имеющего к нему отношениÑ.
+% Это навернÑка приведет к ошибкам.
+type_w_classes_not_related=04040_W_Типы клаÑÑов "$1" и "$2" не ÑоотноÑÑÑ‚ÑÑ
+% Приведение типа одного клаÑÑа или объекта к другому, не имеющего к нему отношениÑ.
+% Это навернÑка приведет к ошибкам.
+type_e_class_or_interface_type_expected=04041_E_ОжидаетÑÑ Ñ‚Ð¸Ð¿ клаÑÑа или интерфейÑа, но получено "$1"
+% КомпилÑтор ожидал вÑтретить Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа или интерфейÑа, но вÑтретил что-то другое.
+type_e_type_is_not_completly_defined=04042_E_Тип "$1" не определен полноÑтью
+% Проиходит, еÑли тип не определен полноÑтью, например, Ñто тип указателÑ, который указывает
+% на неопределенный тип.
+type_w_string_too_long=04043_W_Строковый литерал Ñодержит больше Ñимволов, чем может вмеÑтить shortstring
+% Попытка приÑвоить короткой Ñтроке конÑтантное значение, которое Ñодержит больше Ñимволов,
+% чем макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ñтроки.
+type_w_signed_unsigned_always_false=04044_W_Сравнение вÑегда ложно из-за диапазонов значений
+% Сравнение беззнакового Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñо знаковой конÑтантой, меньшей нулÑ. Результат такого выражениÑ
+% будет вÑегда ложным. Следует Ñвно привеÑти тип конÑтанты к нужному диапазону.
+type_w_signed_unsigned_always_true=04045_W_Сравнение вÑегда иÑтинно из-за диапазонов значений
+% Сравнение беззнакового Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñо знаковой конÑтантой, меньшей нулÑ. Результат такого выражениÑ
+% будет вÑегда иÑтинным. Следует Ñвно привеÑти тип конÑтанты к нужному диапазону.
+type_w_instance_with_abstract=04046_W_Создание клаÑÑа "$1" Ñ Ð°Ð±Ñтрактным методом "$2"
+% СоздаетÑÑ ÑкземплÑÑ€ клаÑÑа, Ñодержащего неперекрытый абÑтрактный метод.
+% Вызов такого метода во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ приведет к ошибке 211.
+% Ð’Ñе абÑтрактные методы должны быть перекрыты.
+type_h_in_range_check=04047_H_Левый операнд оператора IN должен иметь размер байта
+% Левый операнд оператора \var{in} не ÑвлÑетÑÑ Ð¿Ð¾Ñ€Ñдковым или перечиÑлÑемым значением,
+% помещающимÑÑ Ð² 8 бит, Ñто может приводить к ошибкам проверки диапазона. Оператор \var{in}
+% в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ левый операнд только байтового диапазона. Ð’ Ñлучае
+% перечиÑлений, размером Ñлементов перечиÑÐ»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ управлÑть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ
+% ключей \var{\{\$PACKENUM\}} или \var{\{\$Zn\}}.
+type_w_smaller_possible_range_check=04048_W_ÐеÑовпадение размеров типов, возможна Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… / ошибки диапазона
+% ПриÑвоение типу меньшего размера, чем иÑходный тип. Это может приводить к ошибкам проверки
+% диапазона, или чаÑтичной потере данных.
+type_h_smaller_possible_range_check=04049_H_ÐеÑовпадение размеров типов, возможна Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… / ошибки диапазона
+% ПриÑвоение типу меньшего размера, чем иÑходный тип. Это может приводить к ошибкам проверки
+% диапазона, или чаÑтичной потере данных.
+type_e_cant_take_address_of_abstract_method=04050_E_ВзÑтие адреÑа абÑтрактного метода невозможно
+% ÐбÑтрактный метод не имеет тела, поÑтому Ð°Ð´Ñ€ÐµÑ Ð±Ñ€Ð°Ñ‚ÑŒ не от чего.
+type_e_assignment_not_allowed=04051_E_Ðевозможно приÑвоение формальных параметров и открытых маÑÑивов
+% Попытка приÑвоить значение формальному (нетипизированному var, const или out)
+% параметру, либо открытому маÑÑиву.
+type_e_constant_expr_expected=04052_E_ОжидаетÑÑ ÐºÐ¾Ð½Ñтантное выражение
+% КомпилÑтор ожидает конÑтантное выражение, но получает переменное.
+type_e_operator_not_supported_for_types=04053_E_ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ "$1" не поддерживаетÑÑ Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð² "$2" и "$3"
+% Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтима Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ñ… типов.
+type_e_illegal_type_conversion=04054_E_ÐедопуÑтимое приведение типов: "$1" к "$2"
+% При приведении типов Ñледует Ñоблюдать равенÑтво размеров иÑточника и получателÑ.
+type_h_pointer_to_longint_conv_not_portable=04055_H_Преобразование между порÑдковыми типами и указателÑми ÑвлÑетÑÑ Ð½ÐµÐ¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¼
+% Код, в котором указатели приводÑÑ‚ÑÑ Ðº longint (или наоборот), не будет работать
+% на платформах, у которых размер ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð°Ð²ÐµÐ½ 64 битам.
+type_w_pointer_to_longint_conv_not_portable=04056_W_Преобразование между порÑдковыми типами и указателÑми ÑвлÑетÑÑ Ð½ÐµÐ¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¼
+% Приведение указателей к порÑдковым типам другого размера (или наоборот), может
+% вызывать проблемы. Это предупреждение помогает находить Ñпецифичный 32-битный код, в котором
+% тип longint/cardinal иÑпользуетÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð·Ð°Ð¼ÐµÐ½Ñемо Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñми. Решение заключаетÑÑ Ð² иÑпользовании
+% типов ptrint/ptruint.
+type_e_cant_choose_overload_function=04057_E_Ðевозможно определить, которую из перегруженных функции вызывать
+% Вызов перегруженной функции Ñо ÑпиÑком параметров, который не ÑоответÑтвует ни
+% одной из объÑвленных функций. Ðапример, еÑли объÑвлены функции Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸
+% типа \var{word} и \var{longint}, а вызов производитÑÑ Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ типа
+% \var{integer}.
+type_e_illegal_count_var=04058_E_ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñчетчика
+% Тип переменной Ð´Ð»Ñ Ñ†Ð¸ÐºÐ»Ð° \var{for} должен быть порÑдковым.
+% ВещеÑтвенные и Ñтроковые типы не допуÑкаютÑÑ.
+type_w_double_c_varargs=04059_W_ВещеÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта преобразована в double Ð´Ð»Ñ Ñ„-ции C Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼ чиÑлом параметров
+% Ð’ Ñзыке C вещеÑтвенные конÑтанты по умолчанию имеют тип double. ПоÑтому при передаче
+% вещеÑтвенной конÑтанты в функцию на C Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼ чиÑлом аргументов FPC
+% по умолчанию преобразует ее в double. ЕÑли Ñто поведение нежелательно,
+% приведите конÑтанту к нужному типу Ñвно.
+type_e_class_or_cominterface_type_expected=04060_E_ОжидаетÑÑ Ñ‚Ð¸Ð¿ клаÑÑа или COM-интерфейÑа, но получено "$1"
+% Ðекоторые операторы, такие как AS, применимы только к клаÑÑам или COM-интерфейÑам.
+type_e_no_const_packed_array=04061_E_КонÑтантные упакованные маÑÑивы пока не поддерживаютÑÑ
+% ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð±ÑŠÑвить конÑтанту типа (побитно)упакованный маÑÑив.
+type_e_got_expected_packed_array=04062_E_ÐеÑовпадение типа аргумента no. $1: Получено "$2" ожидалоÑÑŒ "(Bit)Packed Array"
+% КомпилÑтор ожидает (побитно)упакованный маÑÑив в качеÑтве указанного параметра.
+type_e_got_expected_unpacked_array=04063_E_ÐеÑовпадение типа аргумента no. $1: Получено "$2" ожидалоÑÑŒ "(not packed) Array"
+% КомпилÑтор ожидает обычный (неупакованный) маÑÑив в качеÑтве указанного параметра.
+type_e_no_packed_inittable=04064_E_Элементы упакованного маÑÑива не могут иметь тип, требующий инициализации
+% Упакованные маÑÑивы Ñ Ñ‚Ð¸Ð¿Ð°Ð¼Ð¸, требующими инициализацию (такими как ansistring, или запиÑи, Ñодержащие
+% ansistring), пока не поддерживаютÑÑ.
+type_e_no_const_packed_record=04065_E_КонÑтантные упакованные запиÑи и объекты пока не поддерживаютÑÑ
+% Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±ÑŠÑвить конÑтанту типа (побитно)ÑƒÐ¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ/объект.
+type_w_untyped_arithmetic_unportable=04066_W_Ðрифметика "$1" нетипизированных указателей неÑовмеÑтима Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð¼ {$T+}, предлагаетÑÑ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ типа
+% Сложение/вычитание нетипизированных указателей может работать по-другому в режиме \var{\{\$T+\}},
+% приведите тип к типизированному указателю.
+type_e_cant_take_address_of_local_subroutine=04076_E_ÐÐµÐ»ÑŒÐ·Ñ Ð²Ð·Ñть Ð°Ð´Ñ€ÐµÑ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹, помеченной как локальнаÑ
+% ВзÑтие адреÑа процедуры, помеченной как локальнаÑ, невозможно.
+type_e_cant_export_local=04077_E_Процедура, Ð¾Ñ‚Ð¼ÐµÑ‡ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ðº локальнаÑ, не может быть ÑкÑпортирована из модулÑ
+% Процедура, Ð¾Ñ‚Ð¼ÐµÑ‡ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ðº локальнаÑ, не может быть ÑкÑпортирована из модулÑ.
+type_e_not_automatable=04078_E_Тип не автоматизируемый: "$1"
+% Ð’ качеÑтве автоматизированных допуÑкаютÑÑ byte, integer, longint, smallint, currency, single, double,
+% ansistring, widestring, tdatetime, variant, olevariant, wordbool и вÑе интерфейÑные типы.
+type_h_convert_add_operands_to_prevent_overflow=04079_H_Приведение операндов к "$1" перед Ñложением предотвратит ошибки переполнениÑ.
+% Сложение может вызывать переполнение. Т.к. результат преобразуетÑÑ Ð² тип большего размера,
+% Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ избежать, Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ‹ к типу результата перед Ñложением.
+type_h_convert_sub_operands_to_prevent_overflow=04080_H_Приведение операндов к "$1" перед вычитанием предотвратит ошибки переполнениÑ.
+% Вычитание может вызывать переполнение. Т.к. результат преобразуетÑÑ Ð² тип большего размера,
+% Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ избежать, Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ‹ к типу результата перед вычитанием.
+type_h_convert_mul_operands_to_prevent_overflow=04081_H_Приведение операндов к "$1" перед умножением предотвратит ошибки переполнениÑ.
+% Умножение может вызывать переполнение. Т.к. результат преобразуетÑÑ Ð² тип большего размера,
+% Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ избежать, Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ñ‹ к типу результата перед умножением.
+type_w_pointer_to_signed=04082_W_Приведение указателей к целым Ñо знаком может приводить к ошибкам ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ выходу за диапазон, иÑпользуйте беззнаковый тип.
+% Виртуальное адреÑное проÑтранÑтво на 32-битных ÑиÑтемах имеет диапазон от \$00000000 до \$ffffffff.
+% Многие операционные ÑиÑтемы позволÑÑŽÑ‚ выделÑть памÑть Ñвыше \$80000000, например, Windows и Linux
+% допуÑкают указатели в диапазоне от \$0000000 до \$bfffffff. ЕÑли приводить указатели к знаковым типам,
+% могут возникать ошибки Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸ диапазона, кроме того, \$80000000 < \$7fffffff.
+% Это может вызывать Ñлучайные ошибки в коде наподобие "if p>q".
+type_interface_has_no_guid=04083_E_Тип интерфейÑа $1 не имеет GUID
+% При иÑпользовании оператора as нужный интерфейÑ, Ñ‚.е правый операнд оператора as,
+% должен иметь правильный GUID.
+type_e_invalid_objc_selector_name=04084_E_Ðеверное Ð¸Ð¼Ñ Ñелектора
+% Селектор Objective-C не может быть пуÑтым, он должен быть идентификатором либо одиночным двоеточием,
+% и, еÑли он Ñодержит двоеточие, то должен двоеточием и заканчиватьÑÑ.
+type_e_expected_objc_method_but_got=04085_E_ОжидаетÑÑ Ð¼ÐµÑ‚Ð¾Ð´ Objective-C, но получено $1
+% Селектор может быть Ñоздан только Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² Objective-C, никакой другой тип
+% процедур/функций/методов недопуÑтим.
+type_e_expected_objc_method=04086_E_ОжидаетÑÑ Ð¼ÐµÑ‚Ð¾Ð´ Objective-C или конÑтантное Ð¸Ð¼Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð°
+% Селектор может быть Ñоздан только Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð² Objective-C, либо путем ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸
+% в виде Ñтроковой конÑтанты, либо Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° метода Objective-C,
+% дейÑтвительного в текущей облаÑти видимоÑти.
+type_e_no_type_info=04087_E_Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ типе недоÑтупна Ð´Ð»Ñ Ñтого типа
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ типе не генерируетÑÑ Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… типов, таких как перечиÑÐ»ÐµÐ½Ð¸Ñ Ñ Ñ€Ð°Ð·Ñ€Ñ‹Ð²Ð°Ð¼Ð¸
+% в диапазоне значений (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸ÑлениÑ, у которых нижнÑÑ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° диапазона отличаетÑÑ Ð¾Ñ‚
+% нулÑ).
+type_e_ordinal_or_string_expr_expected=04088_E_ТребуетÑÑ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ порÑдкового или Ñтрокового типа
+% Выражение должно иметь порÑдковый или Ñтроковый тип.
+type_e_string_expr_expected=04089_E_ТребуетÑÑ Ñтроковое выражение
+% Выражение должно иметь Ñтроковый тип.
+% \end{description}
+#
+# Symtable
+#
+# 05064 is the last used one
+#
+% \section{Symbol handling}
+% Данный раздел Ñодержит ÑообщениÑ, отноÑÑщиеÑÑ Ðº обработке Ñимволов,
+% Ñ‚.е. вÑего, что ÑвÑзано Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ процедур и переменных.
+% \begin{description}
+sym_e_id_not_found=05000_E_Идентификатоp "$1" не найден
+% Данный Ñимвол неизвеÑтен компилÑтору. Обычно проиÑходит при ошибках напиÑаниÑ
+% имени переменной или процедуры, или еÑли вы забыли объÑвить
+% переменную.
+sym_f_internal_error_in_symtablestack=05001_F_ВнyÑ‚pеннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° в SymTableStack()
+% An internal error occurred in the compiler; If you encounter such an error,
+% please contact the developers and try to provide an exact description of
+% the circumstances in which the error occurs.
+sym_e_duplicate_id=05002_E_Идентификатоp "$1" повторÑетÑÑ
+% Указанный идентификатор уже был объÑвлен в текущей облаÑти.
+sym_h_duplicate_id_where=05003_H_Идентификатоp yже опpеделен в $1 (ÑÑ‚pока $2)
+% Идентификатор уже был объÑвлен в указанной облаÑти.
+sym_e_unknown_id=05004_E_HеизвеÑтный идентификатоp "$1"
+% Указанный идентификатор не был объÑвлен, либо иÑпользуетÑÑ Ð·Ð° пределами
+% облаÑти, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ он был определен.
+sym_e_forward_not_resolved=05005_E_Раннее объÑвление "$1" не решено
+% Может проиÑходить в двух ÑлучаÑÑ…:
+% \begin{itemize}
+% \item ЕÑли Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð±ÑŠÑвлена (в Ñекции \var{interface}, либо
+% Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¾Ð¹ \var{forward}, но не реализована.
+% \item При ÑÑылке на тип, который не объÑвлен в текущем блоке \var{type}.
+% \end{itemize}
+sym_e_error_in_type_def=05007_E_Ошибка в опpеделении типа
+% Ошибка при определении нового типа маÑÑива:
+% \item Одна из границ диапазона ÑвлÑетÑÑ Ð¾ÑˆÐ¸Ð±Ð¾Ñ‡Ð½Ð¾Ð¹.
+% Ðапример, \var{Array [1..1.25]} вызовет данную ошибку.
+sym_e_forward_type_not_resolved=05009_E_Раннее объÑвление типа "$1" не решено
+% Символ был объÑвлен заранее, но определение Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ не было обнаружено.
+sym_e_only_static_in_static=05010_E_Только ÑтатичеÑкие переменные могут иÑпользоватьÑÑ Ð² ÑтатичеÑких методах или вне методов
+% СтатичеÑкий метод объекта имеет доÑтуп только к ÑтатичеÑким переменным.
+sym_f_type_must_be_rec_or_class=05012_F_ОжидаетÑÑ Ñ‚Ð¸Ð¿ record или class
+% ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð»Ð¸ выражение имеет тип, отличный от \var{record} или \var{class}.
+sym_e_no_instance_of_abstract_object=05013_E_ЭкземплÑры клаÑÑов или объектов Ñ Ð°Ð±ÑÑ‚pактным методом не допуÑкаютÑÑ
+% Попытка Ñоздать ÑкземплÑÑ€ клаÑÑа Ñ Ð°Ð±Ñтрактным методом, который не был перекрыт.
+sym_w_label_not_defined=05014_W_Метка "$1" не опpеделена
+% Метка была объÑвлена, но не была определена.
+sym_e_label_used_and_not_defined=05015_E_Метка "$1" иÑпользуетÑÑ, но не определена
+% Метка была объÑвлена и иÑпользована, но не была определена.
+sym_e_ill_label_decl=05016_E_Hевеpное объÑвление метки
+% ПроиÑходит, еÑли метка объÑвлена вне процедуры или функции; Ñтого никогда
+% не должно ÑлучатьÑÑ.
+sym_e_goto_and_label_not_supported=05017_E_GOTO и LABEL не поддеpживаютÑÑ (иÑпользyйте ключ -Sg)
+% Программу, Ñодержащую метки и переходы \var{goto}, необходимо компилировать
+% Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ \var{-Sg}. По умолчанию, метки и переходы не поддерживаютÑÑ.
+sym_e_label_not_found=05018_E_Метка не найдена
+% Ð’ÑтретилоÑÑŒ \var{goto label}, но метка не была объÑвлена.
+sym_e_id_is_no_label_id=05019_E_Идентификатоp не ÑвлÑетÑÑ Ð¼ÐµÑ‚ÐºÐ¾Ð¹
+% Идентификатор, Ñледующий за \var{goto}, не имеет тип метки.
+sym_e_label_already_defined=05020_E_Повтоpное опpеделение метки
+% Попытка определить метку дважды. Метка может быть определена только один раз.
+sym_e_ill_type_decl_set=05021_E_Ðевеpное объÑвление типа Ñлементов множеÑтва
+% ОбъÑвление множеÑтва Ñодержит недопуÑтимое определение типа.
+sym_e_class_forward_not_resolved=05022_E_Ранее объÑвление клаÑÑа "$1" не решено
+% КлаÑÑ Ð±Ñ‹Ð» объÑвлен, но не был реализован.
+sym_n_unit_not_used=05023_H_Модуль "$1" не иÑпользуетÑÑ Ð² $2
+% Модуль, указанный в Ñекции \var{uses}, не иÑпользуетÑÑ.
+sym_h_para_identifier_not_used=05024_H_Паpаметp "$1" не иÑпользyетÑÑ
+% Идентификатор был объÑвлен (локально или глобально), но
+% не был иÑпользован.
+sym_n_local_identifier_not_used=05025_N_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµpÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" не иÑпользyетÑÑ
+% ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ð±ÑŠÑвлена, но не иÑпользована в реализации процедуры
+% или функции.
+sym_h_para_identifier_only_set=05026_H_Параметр-значение "$1" приÑвоен, но не иÑпользован
+% Параметру приÑвоено значение, которое в дальнейшем нигде не иÑпользуетÑÑ.
+sym_n_local_identifier_only_set=05027_N_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" приÑвоена, но не иÑпользована
+% Локальной переменной приÑвоено значение, которое в дальнейшем нигде не иÑпользуетÑÑ.
+sym_h_local_symbol_not_used=05028_H_Локальный Ñимвол $1 "$2" не иÑпользуетÑÑ
+% Локальный Ñимвол не иÑпользуетÑÑ.
+sym_n_private_identifier_not_used=05029_N_Private поле "$1.$2" не иÑпользуетÑÑ
+% Указанное private поле определено, но не иÑпользуетÑÑ Ð½Ð¸Ð³Ð´Ðµ в коде.
+sym_n_private_identifier_only_set=05030_N_Private поле "$1.$2" приÑвоено, но не иÑпользовано
+% Указанное private поле определено и ему приÑвоено значение, которое нигде не читаетÑÑ.
+sym_n_private_method_not_used=05031_N_Private метод "$1.$2" не иÑпользуетÑÑ
+% Указанный private метод определен, но не иÑпользуетÑÑ Ð½Ð¸Ð³Ð´Ðµ в коде.
+sym_e_set_expected=05032_E_ОжидаетÑÑ Ñ‚Ð¸Ð¿ множеÑтва
+% ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð»Ð¸ выражение имеет тип, отличный от \var{set}. Это ÑлучаетÑÑ Ð²
+% выражениÑÑ… \var{in}.
+sym_w_function_result_not_set=05033_W_Резyльтат Ñ„yнкции, возможно, не приÑвоен
+% Предупреждение выдаетÑÑ, еÑли компилÑтор полагает, что результат, возвращаемый функцией,
+% не приÑвоен. ЕÑли Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ð°Ð¿Ð¸Ñана на аÑÑемблере, или Ñодержит аÑÑемблерный блок,
+% предупреждение не выдаетÑÑ.
+sym_w_wrong_C_pack=05034_W_Тип "$1" некорректно выровнен в текущей запиÑи Ð´Ð»Ñ Ñзыка C
+% МаÑÑивы Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°Ð¼Ð¸, не кратными 4, будут неверно выровнены в Ñтруктурах Ñзыка C.
+sym_e_illegal_field=05035_E_HеизвеÑтное поле запиÑи "$1"
+% Указанное поле отÑутÑтвует в определении запиÑи.
+sym_w_uninitialized_local_variable=05036_W_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµpÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" не инициализиpована
+% Сообщение выдаетÑÑ, когда компилÑтор Ñчитает, что Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚
+% иÑпользована (Ñ‚.е. вÑтретилаÑÑŒ в правой чаÑти выражениÑ), но не была
+% инициализирована (Ñ‚.е. не поÑвлÑлаÑÑŒ ранее в левой чаÑти приÑваиваниÑ).
+sym_w_uninitialized_variable=05037_W_ПеpÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" не инициализиpована
+% Сообщение выдаетÑÑ, когда компилÑтор Ñчитает, что Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользована
+% (Ñ‚.е. вÑтретилаÑÑŒ в правой чаÑти выражениÑ), но не была инициализирована (Ñ‚.е.
+% не поÑвлÑлаÑÑŒ ранее в левой чаÑти приÑваиваниÑ).
+sym_e_id_no_member=05038_E_Идентификатоp не определÑет Ñлемент "$1"
+% Сообщение выдаетÑÑ Ð¿Ñ€Ð¸ попытке доÑтупа к неопределенному полю запиÑи
+% или объекта, либо методу.
+sym_h_param_list=05039_H_Hайдено опpеделение: $1
+% При иÑпользовании ключа \var{-vh}, еÑли не найдена Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð°,
+% перечиÑлÑÑŽÑ‚ÑÑ Ð²Ñе подходÑщие перегруженные процедуры и ÑпиÑки их
+% параметров.
+sym_e_segment_too_large=05040_E_Слишком большой Ñлемент данных
+% ВыдаетÑÑ Ð¿Ñ€Ð¸ попытке объÑвить Ñлемент данных, размер которого превышает
+% уÑтановленный предел (2 ГБ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑоров 80386+/68020+)
+sym_e_no_matching_implementation_found=05042_E_Ðе найдена подходÑÑ‰Ð°Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð° интерфейÑа "$1"
+% Ðе найден метод, который мог бы реализовать указанный метод интерфейÑа.
+% Проверьте типы аргументов и типы возвращаемых значений.
+sym_w_deprecated_symbol=05043_W_Символ "$1" уÑтарел
+% ИÑпользован Ñимвол (переменнаÑ, процедура и Ñ‚.п.), который был
+% объÑвлен как \var{deprecated}. Такой уÑтаревший Ñимвол может быть
+% недоÑтупен в новых верÑиÑÑ… Ð¼Ð¾Ð´ÑƒÐ»Ñ / библиотеки. По возможноÑти,
+% нужно избегать иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÑтаревших Ñимволов.
+sym_w_non_portable_symbol=05044_W_Символ "$1" не портабелен
+% ИÑпользован Ñимвол (переменнаÑ, процедура и Ñ‚.п.), который был
+% объÑвлен как \var{platform}. Значение, иÑпользование и доÑтупноÑть
+% такого Ñимвола завиÑит от платформы. ЕÑли иÑходный код должен быть
+% портируемым, иÑпользовать такие Ñимволы не Ñледует.
+sym_w_non_implemented_symbol=05055_W_Символ "$1" не реализован
+% ИÑпользован Ñимвол (переменнаÑ, процедура и Ñ‚.п.), который был
+% объÑвлен как \var{unimplemented}. Этот Ñимвол определен,
+% но еще не реализован Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ платформы.
+sym_e_cant_create_unique_type=05056_E_Этот тип Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð´Ð»Ñ Ð¾Ð±ÑŠÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ типа
+% При объÑвлении уникального типа Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ \var{type newtype = type oldtype;}
+% можно иÑпользовать только проÑтые типы (порÑдковые, вещеÑтвенные и Ñтроковые).
+sym_h_uninitialized_local_variable=05057_H_Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" не инициализирована
+% Сообщение выдаетÑÑ, когда компилÑтор Ñчитает, что Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚
+% иÑпользована (Ñ‚.е. вÑтретилаÑÑŒ в правой чаÑти выражениÑ), но не была
+% инициализирована (Ñ‚.е. не поÑвлÑлаÑÑŒ ранее в левой чаÑти приÑваиваниÑ).
+sym_h_uninitialized_variable=05058_H_ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" не инициализирована
+% Сообщение выдаетÑÑ, когда компилÑтор Ñчитает, что Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚
+% иÑпользована (Ñ‚.е. вÑтретилаÑÑŒ в правой чаÑти выражениÑ), но не была
+% инициализирована (Ñ‚.е. не поÑвлÑлаÑÑŒ ранее в левой чаÑти приÑваиваниÑ).
+sym_w_function_result_uninitialized=05059_W_ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° функции не инициализирована
+% Сообщение выдаетÑÑ, когда компилÑтор Ñчитает, что Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð°
+% функции будет иÑпользована (Ñ‚.е. вÑтретилаÑÑŒ в правой чаÑти выражениÑ),
+% но не была инициализирована (Ñ‚.е. не поÑвлÑлаÑÑŒ ранее в левой чаÑти
+% приÑваиваниÑ).
+sym_h_function_result_uninitialized=05060_H_ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° функции не инициализирована
+% Сообщение выдаетÑÑ, когда компилÑтор Ñчитает, что Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð°
+% функции будет иÑпользована (Ñ‚.е. вÑтретилаÑÑŒ в правой чаÑти выражениÑ),
+% но не была инициализирована (Ñ‚.е. не поÑвлÑлаÑÑŒ ранее в левой чаÑти
+% приÑваиваниÑ).
+sym_w_identifier_only_read=05061_W_ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ "$1" читаетÑÑ, но не приÑвоена
+% Значение переменной ÑчитываетÑÑ, но нигде не приÑваиваетÑÑ.
+sym_h_abstract_method_list=05062_H_Ðайден абÑтрактный метод: $1
+% При выдаче Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¾ Ñоздании клаÑÑа/объекта Ñ Ð°Ð±Ñтрактными методами
+% Ñта подÑказка облегчает поиÑк проблемного метода.
+sym_w_experimental_symbol=05063_W_Символ "$1" ÑвлÑетÑÑ ÑкÑпериментальным
+% ИÑпользован Ñимвол (переменнаÑ, процедура и Ñ‚.п.), который был
+% объÑвлен как \var{experimental}. ЭкÑпериментальные Ñимволы могут
+% иÑчезнуть или изменить поведение в будущей верÑии. ИÑпользованиÑ
+% таких Ñимволов Ñледует по возможноÑти избегать.
+sym_w_forward_not_resolved=05064_W_Ранее объÑвление "$1" не разрешилоÑÑŒ, предполагаетÑÑ external
+% ПроиÑходит, еÑли Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð±Ñ‹Ð»Ð° объÑвлена в Ñекции \var{interface} Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð² режиме macpas,
+% но не была реализована.
+% \end{description}
+
+#
+# Кодогенератор
+#
+# 06049 номер поÑледнего ÑообщениÑ
+#
+% \section{Code generator messages}
+% Раздел Ñодержит ÑообщениÑ, которые могут быть выданы при ошибках
+% кодогенерации.
+% \begin{description}
+cg_e_parasize_too_big=06009_E_Размеp ÑпиÑка паpаметpов пpевышает 65535 байт
+% ПроцеÑÑор I386 ограничивает ÑпиÑок параметров до 65535 байт (из-за оÑобенноÑти
+% инÑтрукции \var{RET})
+cg_e_file_must_call_by_reference=06012_E_Файловые типы Ñледует передавать по ÑÑылке
+% Файлы Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ñ‚ÑŒ по значению, Ñ‚.е. они вÑегда должны быть объÑвлены
+% как \var{var} параметры.
+cg_e_cant_use_far_pointer_there=06013_E_ИÑпользование FAR yÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð·Ð´ÐµÑÑŒ недопуÑтимо
+% Free Pascal не поддерживает дальние указатели, поÑтому невозможно взÑть адреÑ
+% выражениÑ, в результате которого получитÑÑ Ð´Ð°Ð»ÑŒÐ½Ð¸Ð¹ указатель. КонÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ \var{mem}
+% ÑвлÑетÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð¾Ð¼ такого выражениÑ, поÑтому Ñледующий код вызовет данную ошибку:
+% \begin{verbatim}
+% var p : pointer;
+% ...
+% p:=@mem[a000:000];
+% \end{verbatim}
+cg_e_dont_call_exported_direct=06015_E_Вызов EXPORT функции невозможен
+% Больше не иÑпользуетÑÑ.
+cg_w_member_cd_call_from_method=06016_W_Возможно, неверный вызов конÑÑ‚pyктоpа или деÑÑ‚pyктоpа
+% Обнаружен вызов конÑтруктора или деÑтруктора из метода. Это, Ñкорее вÑего, приведет к
+% проблемам, Ñ‚.к. Ð´Ð»Ñ ÐºÐ¾Ð½Ñтрукторов/деÑтрукторов требуютÑÑ Ð¾Ñобые параметры.
+cg_n_inefficient_code=06017_N_HеÑффективный код
+% ÐапиÑÐ°Ð½Ð½Ð°Ñ Ð²Ð°Ð¼Ð¸ конÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ ÐºÐ°Ð¶ÐµÑ‚ÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтору очень Ñомнительной.
+cg_w_unreachable_code=06018_W_HедоÑтижимый код
+% ÐапиÑÐ°Ð½Ð½Ð°Ñ ÐºÐ¾Ð½ÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не будет выполнена. Пример:
+% \begin{verbatim}
+% while false do
+% begin
+% {.. code ...}
+% end;
+% \end{verbatim}
+cg_e_cant_call_abstract_method=06020_E_ÐбÑÑ‚pактные методы Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ напpÑмyÑŽ
+% ÐбÑтрактный метод Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð·Ð²Ð°Ñ‚ÑŒ непоÑредÑтвенно, вмеÑто него Ñледует вызывать
+% перекрывающий метод потомка, потому что абÑтрактный метод не имеет реализации.
+cg_d_register_weight=06027_DL_РегиÑÑ‚p $1 Ð²ÐµÑ $2 $3
+% Отладочное Ñообщение. ВыводитÑÑ, когда компилÑтор раÑÑматривает возможноÑть
+% Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… в региÑтрах.
+cg_d_stackframe_omited=06029_DL_Кадр Ñтека не Ñоздан (не требуетÑÑ)
+% Ðекоторым процедурам/функциÑм не требуетÑÑ Ð¿Ð¾Ð»Ð½Ñ‹Ð¹ кадр Ñтека, и его можно опуÑтить.
+% Сообщение выводитÑÑ Ð¿Ñ€Ð¸ иÑпользовании ключа \var{-vd}.
+cg_e_unable_inline_object_methods=06031_E_Методы объектах или клаÑÑов не могут быть вÑтраиваемыми (inline)
+% Методы объекта Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñтраивать.
+cg_e_unable_inline_procvar=06032_E_Вызовы процедурных переменных не могуг быть вÑтраиваемыми (inline)
+% Вызов процедурной переменной не может быть вÑтроен.
+cg_e_no_code_for_inline_stored=06033_E_Hет кода Ð´Ð»Ñ inline
+% КомпилÑтор не Ñмог Ñохранить код Ð´Ð»Ñ Ð²Ñтраиваемой процедуры.
+cg_e_can_access_element_zero=06035_E_Hyлевой Ñлемент ansi/wide- ÑÑ‚pоки недоÑÑ‚yпен, иÑпользyйте (set)length
+% Ð”Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ð¸Ð½Ñ‹ Ñтроки типа ansi/wide/longstring Ñледует иÑпользовать
+% процедуру \var{setlength}, а Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ - функцию \var{length}.
+cg_e_cannot_call_cons_dest_inside_with=06037_E_КонÑÑ‚pyктоp или деÑÑ‚pyктоp Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ внyÑ‚pи выражений 'WITH'
+% Внутри конÑтрукции \var{With} вызов конÑтруктора или деÑтруктора Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°-аргумента
+% \var{with} невозможен.
+cg_e_cannot_call_message_direct=06038_E_HепоÑредÑтвенный вызов метода-обpаботчика Ñобытий невозможен
+% A message method handler method can't be called directly if it contains an
+% explicit self argument
+cg_e_goto_inout_of_exception_block=06039_E_Переход через границу блока иÑключений
+% Переход внутрь блока обработки иÑключений \var{try..finally..end;} или из него не допуÑкаетÑÑ:
+% \begin{verbatim}
+% label 1;
+%
+% ...
+%
+% try
+% if not(final) then
+% goto 1; // в Ñтой Ñтроке будет ошибка
+% finally
+% ...
+% end;
+% 1:
+% ...
+% \end{verbatim}
+cg_e_control_flow_outside_finally=06040_E_УправлÑющие Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (break, continue и exit) недопуÑтимы в блоке finally
+% ИÑпользование выражений, изменÑющих ход Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (\var{break},
+% \var{continue} и \var{exit}), не допуÑкаетÑÑ
+% внутри блока finally. Следующий код вызовет ошибку:
+% \begin{verbatim}
+% ...
+% try
+% p;
+% finally
+% ...
+% exit; // Этот exit недопуÑтим
+% end;
+% ...
+%
+% \end{verbatim}
+% ЕÑли при выполнении процедура \var{p} проиÑходит иÑключение, выполнÑетÑÑ Ð±Ð»Ð¾Ðº
+% finally. ЕÑли выполнение доходит до exit, непонÑтно что делать:
+% выходить из процедури или иÑкать другой обработчик иÑключений.
+cg_w_parasize_too_big=06041_W_Размер параметров превышает предел Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… процеÑÑоров
+% Означает, что было объÑвлено более 64 кБайт параметров, что
+% может не поддерживатьÑÑ Ð¿Ñ€Ð¸ компилÑции Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… платформ.
+cg_w_localsize_too_big=06042_W_Размер локальных переменных превышает предел Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… процеÑÑоров
+% Означает, что было объÑвлено более 32 кБайт локальных переменных, что
+% может не поддерживатьÑÑ Ð¿Ñ€Ð¸ компилÑции Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… платформ.
+cg_e_localsize_too_big=06043_E_Размер локальных переменных превышает допуÑтимый предел
+% Означает, что объÑвлено более 32 кБайт локальных переменных, что
+% не поддерживаетÑÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ процеÑÑора.
+cg_e_break_not_allowed=06044_E_BREAK недопуÑтимо
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ \var{break} вне конÑтрукции цикла.
+cg_e_continue_not_allowed=06045_E_CONTINUE недопуÑтимо
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ \var{continue} вне конÑтрукции цикла.
+cg_f_unknown_compilerproc=06046_F_ÐеизвеÑÑ‚Ð½Ð°Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° "$1". Проверьте верÑию библиотеки RTL.
+% КомпилÑтор ожидает, что библиотека времени Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (RTL) Ñодержит определенные процедуры. ЕÑли
+% вы видите Ñто Ñообщение, не занимаÑÑÑŒ ÑамоÑтоÑтельной модификацией кода библиотеки RTL, то, Ñкорее
+% вÑего, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° RTL не ÑоответÑтвует компилÑтору. ЕÑли же вы модифицировали RTL, значит,
+% вы удалили процедуру, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½ÑƒÐ¶Ð½Ð° компилÑтору Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ.
+cg_f_unknown_system_type=06047_F_Ðе найден ÑиÑтемный тип "$1". Проверьте верÑию библиотеки RTL.
+% КомпилÑтор ожидает, что библиотека времени Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (RTL) Ñодержит определенные объÑвлениÑ
+% типов. ЕÑли вы видите Ñто Ñообщение, не занимаÑÑÑŒ ÑамоÑтоÑтельной модификацией кода библиотеки RTL, то,
+% Ñкорее вÑего, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° RTL не ÑоответÑтвует компилÑтору. ЕÑли же вы модифицировали RTL,
+% значит, вы удалили тип, нужный компилÑтору Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ.
+cg_h_inherited_ignored=06048_H_Вызов абÑтрактного метода поÑредÑтвом inherited игнорирован
+% Сообщение выдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в режиме Delphi, при попытке вызвать абÑтрактный метод
+% родительÑкого клаÑÑа Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ \var{inherited;}. Такой вызов игнорируетÑÑ.
+cg_e_goto_label_not_found=06049_E_Метка "$1" не определена или удалена оптимизацией
+% Метка, иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð² goto, не определена либо была удалена при удалении
+% недоÑтупного кода.
+% \end{description}
+# EndOfTeX
+
+#
+# Assembler reader
+#
+# 07107 is the last used one
+#
+asmr_d_start_reading=07000_DL_Hачало Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°ÑÑемблеpа типа $1
+% Информирует о начале Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°ÑÑемблерного блока.
+asmr_d_finish_reading=07001_DL_Конец Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°ÑÑемблеpа типа $1
+% Информирует о завершении Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°ÑÑемблерного блока.
+asmr_e_none_label_contain_at=07002_E_Токен, не ÑвлÑющийÑÑ Ð¼ÐµÑ‚ÐºÐ¾Ð¹, Ñодеpжит @
+% Идентификатор, не ÑвлÑющийÑÑ Ð¼ÐµÑ‚ÐºÐ¾Ð¹, не может Ñодержать Ñимвол @.
+asmr_e_building_record_offset=07004_E_Ошибка поÑÑ‚pÐ¾ÐµÐ½Ð¸Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² запиÑи
+% Ошибка вычиÑÐ»ÐµÐ½Ð¸Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² запиÑи/объекте, может проиÑходить, еÑли
+% поле не указано вообще или иÑпользован неизвеÑтный идентификатор полÑ.
+asmr_e_offset_without_identifier=07005_E_ИÑпользование OFFSET без идентификатоpа
+% Ключевое Ñлово OFFSET можно иÑпользовать только ÑовмеÑтно Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼.
+% Другие ÑинтакÑиÑÑ‹ не поддерживаютÑÑ.
+asmr_e_type_without_identifier=07006_E_ИÑпользование TYPE без идентификатоpа
+% Ключевое Ñлово TYPE можно иÑпользовать только ÑовмеÑтно Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼.
+% Другие ÑинтакÑиÑÑ‹ не поддерживаютÑÑ.
+asmr_e_no_local_or_para_allowed=07007_E_ЗдеÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать локальные пеpеменные или паpаметpÑ‹
+% Локальные переменные и параметры обычно адреÑуютÑÑ ÐºÐ°Ðº Ñмещение от региÑтра
+% %ebp, поÑтому их Ð°Ð´Ñ€ÐµÑ Ð½Ðµ может быть получен непоÑредÑтвенно.
+asmr_e_need_offset=07008_E_ЗдеÑÑŒ необходимо иÑпользовать OFFSET
+% Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа данного идентификатора необходимо иÑпользовать OFFSET <id>.
+asmr_e_need_dollar=07009_E_ЗдеÑÑŒ необходимо иÑпользовать знак доллара ('$')
+% Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа данного иденификатора необходимо иÑпользовать $<id>.
+asmr_e_cant_have_multiple_relocatable_symbols=07010_E_Hе допуÑкаютÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтвенные пеpемещаемые Ñимволы
+% Ðе допуÑкаетÑÑ Ð±Ð¾Ð»ÐµÐµ одного перемещаемого Ñимвола (переменнаÑ/Ñ‚Ð¸Ð¿Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта)
+% в одном аргументе.
+asmr_e_only_add_relocatable_symbol=07011_E_Пеpемещаемый Ñимвол допуÑкает только Ñложение
+% Перемещаемые Ñимволы (переменные/типизированные конÑтанты) не могут быть иÑпользованы Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸
+% операторами. ДопуÑкаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñложение.
+asmr_e_invalid_constant_expression=07012_E_Hеверное конÑтантное выpажение
+% Ошибка в конÑтантном выражении.
+asmr_e_relocatable_symbol_not_allowed=07013_E_Пеpемещаемый Ñимвол здеÑÑŒ не pазpешен
+% Ð’ данном меÑте не может быть иÑпользован перемещаемый Ñимвол (переменнаÑ/Ñ‚Ð¸Ð¿Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта).
+asmr_e_invalid_reference_syntax=07014_E_Hевеpный ÑинтакÑÐ¸Ñ ÑÑылки
+% СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в запиÑи ÑÑылки.
+asmr_e_local_para_unreachable=07015_E_$1 недоÑтупно из Ñтого кода
+% Во вложенной процедуре невозможен прÑмой доÑтуп к значенÑм локальных переменных или параметров
+% внешней процедуры (кроме ÑлучаÑ, когда Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° Ñама не имеет параметров и локальных
+% переменных).
+asmr_e_local_label_not_allowed_as_ref=07016_E_Локальные Ñимволы или метки Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать как ÑÑылки
+% Ð’Ñ‹ не можете иÑпользовать локальные Ñимволы или метки как ÑÑылки
+asmr_e_wrong_base_index=07017_E_Hевеpное иÑпользование региÑтров базы и индекÑа
+% Ошибка при иÑпользовании региÑтров базы и индекÑа
+asmr_w_possible_object_field_bug=07018_W_Ð’Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в обработке Ð¿Ð¾Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°
+% ÐŸÐ¾Ð»Ñ ÐºÐ»Ð°ÑÑов/объектов недоÑтупны напрÑмую в режимах fpc и objfpc,
+% но в режимах TP и Delphi имена полей обрабатываютÑÑ ÐºÐ°Ðº обычные ÑмещениÑ.
+asmr_e_wrong_scale_factor=07019_E_Hевеpный множитель
+% Указан неверный множитель, разрешены только Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ 1,2,4 и 8
+asmr_e_multiple_index=07020_E_МножеÑтвенное иÑпользование индекÑного pегиÑÑ‚pа
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ чем одного индекÑного региÑтра.
+asmr_e_invalid_operand_type=07021_E_Hевеpный тип опеpанда
+% Тип операнда не ÑоответÑтвует коду команды.
+asmr_e_invalid_string_as_opcode_operand=07022_E_Стpока непригодна в качеÑтве опеpанда инÑтрукции: $1
+% Строка, ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ ÐºÐ°Ðº операнд, некорректна Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ команды.
+asmr_w_CODE_and_DATA_not_supported=07023_W_@CODE и @DATA не поддеpживаютÑÑ
+% @CODE и @DATA не поддерживаютÑÑ Ð¸ игнорируютÑÑ.
+asmr_e_null_label_ref_not_allowed=07024_E_СÑылки на безымÑнные метки не допуÑкаютÑÑ
+asmr_e_expr_zero_divide=07025_E_Деление на ноль в выражении аÑÑемблера
+% Ð’ конÑтантном выражении ÑодержитÑÑ Ð´ÐµÐ»ÐµÐ½Ð¸Ðµ на ноль
+asmr_e_expr_illegal=07026_E_Ðеверное выражение
+% КонÑтантное выражение неверно
+asmr_e_escape_seq_ignored=07027_E_Escape-поÑледовательноÑть игноpиpована: $1
+% Ð’ Ñтроке ÑÑ‚Ð¸Ð»Ñ Ñзыка C ÑодержитÑÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑ‚Ð½Ð°Ñ escape-поÑледовательноÑть,
+% ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ.
+asmr_e_invalid_symbol_ref=07028_E_HевеpÐ½Ð°Ñ ÑÑылка на Ñимвол
+asmr_w_fwait_emu_prob=07029_W_FWAIT может вызвать пpоблемы ÑмyлÑции Ñ EMU387
+asmr_w_fadd_to_faddp=07030_W_$1 без операнда транÑлируетÑÑ Ð² $1P
+asmr_w_enter_not_supported_by_linux=07031_W_ИнÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ ENTER не поддерживаетÑÑ Ñдром Linux
+% ИнÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ ENTER может привеÑти к ошибке защиты Ñтраницы Ñтека, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾
+% "ловитÑÑ" обработчиком в i386 Linux.
+asmr_w_calling_overload_func=07032_W_Вызов пеpегpyженной Ñ„yнкции в аÑÑемблеpе
+% Вызов перегруженной функции из аÑÑемблерного блока,
+% как правило, ÑвлÑетÑÑ Ð¿Ñ€Ð¸Ð·Ð½Ð°ÐºÐ¾Ð¼ проблемы.
+asmr_e_unsupported_symbol_type=07033_E_Hе поддеpживаемый тип Ñимвола Ð´Ð»Ñ Ð¾Ð¿Ðµpанда
+asmr_e_constant_out_of_bounds=07034_E_Значение конÑтанты вне диапазона
+asmr_e_error_converting_decimal=07035_E_"$1" не ÑвлÑетÑÑ Ð´ÐµÑÑтичным чиÑлом
+% Ðеверный ÑинтакÑÐ¸Ñ Ð´ÐµÑÑтичного чиÑла.
+asmr_e_error_converting_octal=07036_E_"$1" не ÑвлÑетÑÑ Ð²Ð¾Ñьмеpичным чиÑлом
+% Ðеверный ÑинтакÑÐ¸Ñ Ð²Ð¾Ñьмеричного чиÑла.
+asmr_e_error_converting_binary=07037_E_"$1" не ÑвлÑетÑÑ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ чиÑлом
+% Ðеверный ÑинтакÑÐ¸Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ чиÑла.
+asmr_e_error_converting_hexadecimal=07038_E_"$1" не ÑвлÑетÑÑ ÑˆÐµÑтнадцатеpичным чиÑлом
+% Ðеверный ÑинтакÑÐ¸Ñ ÑˆÐµÑтнадцатеричного чиÑла.
+asmr_h_direct_global_to_mangled=07039_H_$1 пpеобpазовано в $2
+asmr_w_direct_global_is_overloaded_func=07040_W_$1 ÑвÑзано Ñ Ð¿Ðµpегpyженной Ñ„yнкцией
+asmr_e_cannot_use_SELF_outside_a_method=07041_E_Hе допуÑкаетÑÑ Ð¸Ñпользование SELF вне метода
+% ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑÑылка на Ñимвол \var{self}.
+% Ðа \var{self} можно ÑÑылатьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в методах.
+asmr_e_cannot_use_OLDEBP_outside_nested_procedure=07042_E_Hе допуÑкаетÑÑ Ð¸Ñпользование OLDEBP вне вложенной пpоцедypÑ‹
+% ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ ÑÑылка на Ñимвол \var{oldebp}.
+% Ðа \var{oldebp} можно ÑÑылатьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ во вложенных процедурах.
+asmr_e_void_function=07043_W_Проецедуры не могут возвpащать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· аÑÑемблерного кода
+% Попытка вернуть значение из процедуры. Процедура не может возвращать значениÑ.
+asmr_e_SEG_not_supported=07044_E_SEG не поддеpживаетÑÑ
+asmr_e_size_suffix_and_dest_dont_match=07045_E_СyÑ„Ñ„Ð¸ÐºÑ pазмеpа не ÑоответÑтвует размеру операндов
+% Размер региÑтра и ÑÑƒÑ„Ñ„Ð¸ÐºÑ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° в коде команды не ÑоответÑвуют. Скорее вÑего,
+% команда аÑÑемблера запиÑана Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹.
+asmr_w_size_suffix_and_dest_dont_match=07046_W_СyÑ„Ñ„Ð¸ÐºÑ pазмеpа не ÑоответÑтвует размеру операндов
+% Размер региÑтра и ÑÑƒÑ„Ñ„Ð¸ÐºÑ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° в коде команды не ÑоответÑвуют. Скорее вÑего,
+% команда аÑÑемблера запиÑана Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹.
+asmr_e_syntax_error=07047_E_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° аÑÑемблера
+% СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° аÑÑемблера
+asmr_e_invalid_opcode_and_operand=07048_E_HевеpÐ½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ и опеpандов
+% Ð”Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° не может иметь операнды данного типа.
+asmr_e_syn_operand=07049_E_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° аÑÑемблера в опеpанде
+asmr_e_syn_constant=07050_E_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° аÑÑемблера в конÑтанте
+asmr_e_invalid_string_expression=07051_E_Hевеpное ÑÑ‚pоковое выpажение
+asmr_w_const32bit_for_address=07052_W_конÑтанта Ñ Ñимволом $1 Ð´Ð»Ñ Ð°Ð´Ñ€ÐµÑа, размер которого отличаетÑÑ Ð¾Ñ‚ указателÑ
+% КонÑтантное выражение, предÑтавлÑющее адреÑ, не умещаетÑÑ Ð² диапазон указателÑ.
+% ÐдреÑ, Ñкорее вÑего, неверен.
+asmr_e_unknown_opcode=07053_E_ÐеизвеÑтный код операции $1
+% ÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° аÑÑемблера
+asmr_e_invalid_or_missing_opcode=07054_E_HевеpÐ½Ð°Ñ Ð¸Ð»Ð¸ пpопyÑ‰ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ
+asmr_e_invalid_prefix_and_opcode=07055_E_HевеpÐ½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¿pефикÑа и операции: $1
+asmr_e_invalid_override_and_opcode=07056_E_HевеpÐ½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¿ÐµpеопpÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ операции: $1
+asmr_e_too_many_operands=07057_E_Слишком много опеpандов в ÑÑ‚pоке
+% Слишком много операндов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ команды. Проверьте ÑинтакÑиÑ.
+asmr_w_near_ignored=07058_W_Директива NEAR игноpиpована
+asmr_w_far_ignored=07059_W_Директива FAR игноpиpована
+asmr_e_dup_local_sym=07060_E_Повтоpное опpеделение локального Ñимвола $1
+asmr_e_unknown_local_sym=07061_E_HеизвеÑтный локальный Ñимвол $1
+asmr_e_unknown_label_identifier=07062_E_HеизвеÑÑ‚Ð½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° $1
+asmr_e_invalid_register=07063_E_Ðеверное Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра
+% There is an unknown register name used as operand.
+asmr_e_invalid_fpu_register=07064_E_Hеверное Ð¸Ð¼Ñ pегиÑÑ‚pа Ð´Ð»Ñ Ð¾Ð¿Ðµpации Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой
+% Было иÑпользовано неизвеÑтное Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра.
+asmr_w_modulo_not_supported=07066_W_MODULO не поддеpживаетÑÑ
+asmr_e_invalid_float_const=07067_E_HевеpÐ½Ð°Ñ Ð²ÐµÑ‰ÐµÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта $1
+% КонÑтанта Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой, объÑÐ²Ð»ÐµÐ½Ð½Ð°Ñ Ð² аÑÑемблерном блоке, неверна.
+asmr_e_invalid_float_expr=07068_E_Hевеpное вещеÑтвенное выpажение
+% Выражение Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой, объÑвленное в аÑÑемблерном блоке, неверно.
+asmr_e_wrong_sym_type=07069_E_Hевеpный тип Ñимвола
+asmr_e_cannot_index_relative_var=07070_E_HÐµÐ»ÑŒÐ·Ñ Ð¸Ð½Ð´ÐµÐºÑиpовать локальнyÑŽ пеpеменнyÑŽ или паpаметp Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ pегиÑÑ‚pа
+% Базовый региÑтр иÑпользуетÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑации Ñимвола, который уже ÑвлÑетÑÑ Ð¾Ñ‚Ð½Ð¾Ñительным
+% по отношению к региÑтру. Это невозможно, и навернÑка приведет к ошибке при выполнении.
+asmr_e_invalid_seg_override=07071_E_Hевеpное выpажение пеpеопpÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñегмента
+asmr_w_id_supposed_external=07072_W_Идентификатоp $1, пpедположительно, внешний
+% СÑылка не неопределенный Ñимвол.Это не ÑвлÑетÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹,
+% Ñ‚.к. Ñимвол может иметь внешнее определение, но может привеÑти к проблемам
+% при компоновке, еÑли Ñимвол не был определен где-нибудь еще.
+asmr_e_string_not_allowed_as_const=07073_E_HÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать ÑÑ‚pоки как конÑтанты
+% Строки Ñимволов Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в качеÑтве конÑтант.
+asmr_e_no_var_type_specified=07074_Ðе указан тип пеpеменной
+% СинтакÑÐ¸Ñ Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ‚ Ð¸Ð¼Ñ Ñ‚Ð¸Ð¿Ð° поÑле точки, но оно не было обнаружено.
+asmr_w_assembler_code_not_returned_to_text=07075_E_ÐÑÑемблеpный код не возвpащаетÑÑ Ð² Ñегмент TEXT
+% Ð’ аÑÑемблерном блоке была директива Ñмены Ñекций, но в конце блока отÑутÑтвует директива
+% возврата в Ñегмент текÑта. Может быть причиной ошибок при компоновке.
+asmr_e_not_directive_or_local_symbol=07076_E_$1 не ÑвлÑетÑÑ Ð´Ð¸pективой или локальным Ñимволом
+% Указанный Ñимвол неизвеÑтен.
+asmr_w_using_defined_as_local=07077_E_ИÑпользование опpеделенного имени в качеÑтве локальной метки
+asmr_e_dollar_without_identifier=07078_E_Символ '$' иÑпользyетÑÑ Ð±ÐµÐ· идентификатоpа
+% Ð’ конÑтантном выражении вÑтретилÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€, не начинающийÑÑ Ñ Ñимвола $.
+asmr_w_32bit_const_for_address=07079_W_32-Ð±Ð¸Ñ‚Ð½Ð°Ñ ÐºÐ¾Ð½Ñтанта иÑпользована Ð´Ð»Ñ Ð°Ð´pеÑа
+% КонÑтанта иÑпользована в качеÑтве адреÑа. Это ÑвлÑетÑÑ Ð¿Ñ€Ð¸Ð·Ð½Ð°ÐºÐ¾Ð¼ ошибки,
+% поÑкольку абÑÐ¾Ð»ÑŽÑ‚Ð½Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ°Ñ†Ð¸Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ не работает.
+asmr_n_align_is_target_specific=07080_N_.ALIGN ÑвлÑетÑÑ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼ÐµÐ½Ð½Ð¾-завиÑимой, иÑпользyйте .BALIGN или .P2ALIGN
+% ДейÑтвие и значение директивы .align может изменÑтьÑÑ Ð² завиÑимоÑти от
+% целевой платформы.
+asmr_e_cannot_access_field_directly_for_parameters=07081_E_ÐŸÐ¾Ð»Ñ Ð¿Ð°pаметpа недоÑтупны напpÑмyÑŽ, иÑпользyйте pегиÑÑ‚pÑ‹
+% Параметр Ñледует загрузить в региÑтр и затем адреÑовать Ð¿Ð¾Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° отноÑительно
+% Ñтого региÑтра.
+asmr_e_cannot_access_object_field_directly=07082_E_ÐŸÐ¾Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²/клаÑÑов недоÑтупны напpÑмyÑŽ, иÑпользyйте pегиÑÑ‚pÑ‹
+% Следует загрузить указатель на self в региÑтр и затем адреÑовать полÑ, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ€ÐµÐ³Ð¸Ñтр
+% в качеÑтве базы. По умолчанию указатель на self доÑтупен
+% в региÑтре esi на i386.
+asmr_e_unable_to_determine_reference_size=07083_E_Размеp операндов не указан и его определение невозможно
+% Размер ÑÑылки Ñледует указать Ñвно, Ñ‚.к. компилÑтор не может
+% определить, какой размер (byte,word,dword и т.д.) он
+% должен иÑпользовать.
+asmr_e_cannot_use_RESULT_here=07084_E_Ð’ Ñтой функции иÑпользовать RESULT нельзÑ
+% Ðекоторые функции, возвращающие результат Ñложного типа, не могут иÑпользовать переменную
+% \var{result}.
+asmr_w_adding_explicit_args_fXX=07086_W_"$1" без операнда транÑлируетÑÑ Ð² "$1 %st,%st(1)"
+asmr_w_adding_explicit_first_arg_fXX=07087_W_"$1 %st(n)" транÑлируетÑÑ Ð² "$1 %st,%st(n)"
+asmr_w_adding_explicit_second_arg_fXX=07088_W_"$1 %st(n)" транÑлируетÑÑ Ð² "$1 %st(n),%st"
+asmr_e_invalid_char_smaller=07089_E_Символ < здеÑÑŒ не разрешен
+% Оператор Ñдвига требует Ñимволов <<. Был обнаружен только один из них.
+asmr_e_invalid_char_greater=07090_E_Символ > здеÑÑŒ не разрешен
+% Оператор Ñдвига требует Ñимволов >>. Был обнаружен только один из них.
+asmr_w_align_not_supported=07093_W_ALIGN не поддерживаетÑÑ
+asmr_e_no_inc_and_dec_together=07094_E_Inc и Dec не могут иÑпользоватьÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾
+% Одновременное иÑпользование инкремента и декремента в одном операнде
+% на 680x0. Это недопуÑтимо.
+asmr_e_invalid_reg_list_in_movem=07095_E_Ðеверный ÑпиÑок региÑтров Ð´Ð»Ñ movem
+% ИÑпользование инÑтрукции \var{movem} Ñ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼Ð¸ региÑтрами Ð´Ð»Ñ ÑохранениÑ/воÑÑтановлениÑ.
+asmr_e_invalid_reg_list_for_opcode=07096_E_Ðеверный ÑпиÑок региÑтров Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹
+asmr_e_higher_cpu_mode_required=07097_E_ТребуетÑÑ Ñ€ÐµÐ¶Ð¸Ð¼ более Ñовременного процеÑÑора ($1)
+% ИÑпользование инÑтрукции, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ поддерживаетÑÑ Ð² текущем режиме процеÑÑора.
+% ИÑпользуйте режим Ð´Ð»Ñ Ñледующих поколений процеÑÑоров.
+asmr_w_unable_to_determine_reference_size_using_dword=07098_W_Размер операндов не указан и его не удаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ, иÑпользуетÑÑ DWORD по умолчанию
+% Размер ÑÑылки Ñледует указать Ñвно, Ñ‚.к. компилÑтор не может
+% определить, какой размер (byte,word,dword и т.д.) он
+% должен иÑпользовать. ВыдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в режиме Delphi, когда
+% по умолчанию иÑпользуетÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ DWORD.
+asmr_e_illegal_shifterop_syntax=07099_E_СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в операнде Ñдвига
+% Только ARM; аÑÑемблер ARM поддерживает Ñ‚.н. операнд Ñдвига. ИÑпользованный Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ ÑинтакÑиÑ
+% неверен. Пример инÑтрукции Ñ Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´Ð¾Ð¼ Ñдвига:
+% \begin{verbatim}
+% asm
+% orr r2,r2,r2,lsl #8
+% end;
+% \end{verbatim}
+asmr_e_packed_element=07100_E_ÐÐ´Ñ€ÐµÑ ÑƒÐ¿Ð°ÐºÐ¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ компонента не Ñовпадает Ñ Ð³Ñ€Ð°Ð½Ð¸Ñ†ÐµÐ¹ байта
+% Упакованные компоненты (Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñей и Ñлементы маÑÑивов) могут начинатьÑÑ
+% Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð³Ð¾ бита в байте. Следовательно, на процеÑÑоре, не поддерживающего
+% битовую адреÑацию памÑти (а вÑе поддерживаемые FPC процеÑÑоры ÑвлÑÑŽÑ‚ÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ такими),
+% будет выдана ошибка при попытке доÑтупа по индекÑу к маÑÑивам, размер Ñлемента которых
+% не кратен 8 битам. Это Ñправедливо и Ð´Ð»Ñ Ð¿Ð¾Ð»ÐµÐ¹ запиÑей Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ адреÑами.
+asmr_w_unable_to_determine_reference_size_using_byte=07101_W_Размер операндов не указан и его не удаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ, иÑпользуетÑÑ BYTE по умолчанию
+% Размер ÑÑылки Ñледует указать Ñвно, Ñ‚.к. компилÑтор не может
+% определить, какой размер (byte,word,dword и т.д.) он
+% должен иÑпользовать. ВыдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в режиме Delphi, когда
+% по умолчанию иÑпользуетÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ BYTE.
+asmr_w_no_direct_ebp_for_parameter=07102_W_ЗдеÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать +offset(%ebp) Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²
+% ИÑпользование прÑмой ÑÑылки вида 8(%ebp) Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² процедуры/функции неверно, еÑли
+% параметры находÑÑ‚ÑÑ Ð² региÑтрах.
+asmr_w_direct_ebp_for_parameter_regcall=07103_W_ИÑпользование +offset(%ebp) неÑовмеÑтимо Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ вызова regcall
+% ИÑпользование прÑмой ÑÑылки вида 8(%ebp) Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² процедуры/функции неверно, еÑли
+% параметры находÑÑ‚ÑÑ Ð² региÑтрах.
+asmr_w_direct_ebp_neg_offset=07104_W_ИÑпользование -offset(%ebp) Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… переменных не рекомендуетÑÑ
+% ИÑпользование ÑÑылок вида -8(%ebp) Ð´Ð»Ñ Ð´Ð¾Ñтупа к локальным переменным не рекомендуетÑÑ.
+asmr_w_direct_esp_neg_offset=07105_W_ИÑпользование -offset(%esp), возможен Ñбой при доÑтупе или Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ
+% ИÑпользование ÑÑылок вида -8(%esp) Ð´Ð»Ñ Ð´Ð¾Ñтупа к локальному Ñтеку не рекомендуетÑÑ,
+% потому что Ñта чаÑть Ñтека может быть затерта при вызове любой функции или при прерывании.
+asmr_e_no_vmtoffset_possible=07106_E_VMTOffset Ñледует иÑпользовать в комбинации Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼ методом, "$1" не ÑвлÑетÑÑ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼
+% Только виртуальные методы имеют Ñмещение в VMT.
+asmr_e_need_pic_ref=07107_E_Ð’ режиме позиционно-незавиÑимого кода найдена позиционно-завиÑÐ¸Ð¼Ð°Ñ ÑÑылка
+% Режим компилÑции предуÑматривает генерацию позиционно-незавиÑимого кода
+% (PIC), но в данной напиÑанной вручную аÑÑемблерной инÑтрукции ÑодержитÑÑ
+% позиционно-завиÑÐ¸Ð¼Ð°Ñ ÑÑылка.
+#
+# Assembler/binary writers
+#
+# 08020 is the last used one
+#
+asmw_f_too_many_asm_files=08000_F_Слишком много аÑÑемблерных файлов
+% "УмнаÑ" компоновка приводит к получению Ñлишком большого количеÑтва
+% аÑÑемблерных файлов. Отключите ее.
+asmw_f_assembler_output_not_supported=08001_F_Выбpанный выходной формат аÑÑемблеpа не поддеpживаетÑÑ
+asmw_f_comp_not_supported=08002_F_COMP не поддеpживаетÑÑ
+asmw_f_direct_not_supported=08003_F_Тип аÑÑемблеpа direct не поддеpживаетÑÑ Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ выходным форматом
+% Тип аÑÑемблера direct предполагает запиÑÑŒ прочитанного аÑÑемблерного текÑта напрÑмую в выходной файл,
+% при Ñтом выходной файл не может быть двоичным. Выберите текÑтовый формат выходных файлов.
+asmw_e_alloc_data_only_in_bss=08004_E_Выделение памÑти Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… разрешено только в Ñекции BSS
+asmw_f_no_binary_writer_selected=08005_F_Ðе выбран двоичный выходной формат
+asmw_e_opcode_not_in_table=08006_E_Asm: Кода команды $1 нет в ÑпиÑке
+asmw_e_invalid_opcode_and_operands=08007_E_Asm: $1 невеpное Ñочетание команды и опеpандов
+asmw_e_16bit_not_supported=08008_E_Asm: 16-битные ÑÑылки не поддеpживаютÑÑ
+asmw_e_invalid_effective_address=08009_E_Asm: Hевеpный Ñффективный адpеÑ
+asmw_e_immediate_or_reference_expected=08010_E_Asm: ОжидаетÑÑ IMMEDIATE или ÑÑылка
+asmw_e_value_exceeds_bounds=08011_E_Asm: значение $1 выходит за гpаницы $2
+asmw_e_short_jmp_out_of_range=08012_E_Asm: Короткий переход выходит за гpаницы $1
+asmw_e_undefined_label=08013_E_Asm: Метка $1 не определена
+asmw_e_comp_not_supported=08014_E_Asm: Тип comp не поддерживаетÑÑ Ð´Ð»Ñ Ñтой платформы
+asmw_e_extended_not_supported=08015_E_Asm: Тип extended не поддерживаетÑÑ Ð´Ð»Ñ Ñтой платформы
+asmw_e_duplicate_label=08016_E_Asm: ПовторÑющаÑÑÑ Ð¼ÐµÑ‚ÐºÐ° $1
+asmw_e_redefined_label=08017_E_Asm: Повторное определение метки $1
+asmw_e_first_defined_label=08018_E_Asm: Первоначально определÑетÑÑ Ð·Ð´ÐµÑÑŒ
+asmw_e_invalid_register=08019_E_Asm: Ðеверный региÑтр $1
+asmw_e_16bit_32bit_not_supported=08020_E_Asm: 16- и 32-битные ÑÑылки не поддерживаютÑÑ
+asmw_e_64bit_not_supported=08021_E_Asm: 64-битные операнды не поддерживаютÑÑ
+
+#
+# Executing linker/assembler
+#
+# 09032 is the last used one
+#
+# BeginOfTeX
+%
+% \section{Ошибки Ñтадии аÑÑемблированиÑ/компоновки}
+% ПеречиÑлÑÑŽÑ‚ÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¸, которые могут иметь меÑто во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸
+% командной Ñтроки и файлов конфигурации.
+% \begin{description}
+exec_w_source_os_redefined=09000_W_ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¾Ð¿ÐµpÐ°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема пеpеопpеделена
+% ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтемы переопределена.
+exec_i_assembling_pipe=09001_I_ÐÑÑемблиpyетÑÑ (pipe) $1
+% ÐÑÑемблирование Ñ Ð¸Ñпользованием канала (pipe) Ð´Ð»Ñ Ð¾Ð±Ð¼ÐµÐ½Ð° данными Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ð¼ аÑÑемблером.
+exec_d_cant_create_asmfile=09002_E_Hевозможно Ñоздать аÑÑмеблеpный файл: $1
+% Указанный файл не может быть Ñоздан. Проверьте, еÑли ли
+% разрешение на Ñоздание файла.
+exec_e_cant_create_objectfile=09003_E_Ðевозможно Ñоздать объектный файл: $1
+% Указанный файл не может быть Ñоздан. Проверьте, еÑли ли
+% разрешение на Ñоздание файла.
+exec_e_cant_create_archivefile=09004_E_Ðевозможно Ñоздать файл архива: $1
+% Указанный файл не может быть Ñоздан. Проверьте, еÑли ли
+% разрешение на Ñоздание файла.
+exec_e_assembler_not_found=09005_E_ÐÑÑемблеp $1 не найден, переход на внешнюю Ñборку
+% Программа аÑÑемблера не найдена. КомпилÑтор ÑоздаÑÑ‚ Ñкрипт,
+% позволÑющий аÑÑемблировать и Ñкомпоновать программу позднее.
+exec_t_using_assembler=09006_T_ИÑпользyетÑÑ Ð°ÑÑемблеp: $1
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, какой именно аÑÑемблер иÑпользуетÑÑ.
+exec_e_error_while_assembling=09007_E_Ошибка аÑÑемблиpованиÑ, код возврата $1
+% При обработке файла внешним аÑÑемблером произошла ошибка. ПодробноÑти
+% можно найти в руководÑтве к иÑпользуемой программе аÑÑемблера.
+exec_e_cant_call_assembler=09008_E_Ошибка $1 при запуÑке аÑÑемблера, переход на внешнюю Ñборку
+% Ошибка при запуÑке внешнего аÑÑемблера. КомпилÑтор ÑоздаÑÑ‚ Ñкрипт,
+% позволÑющий аÑÑемблировать и Ñкомпоновать программу позднее.
+exec_i_assembling=09009_I_ÐÑÑемблиpуетÑÑ $1
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, какой файл аÑÑемблируетÑÑ.
+exec_i_assembling_smart=09010_I_ÐÑÑемблиpуетÑÑ Ñ "умной" Ñборкой $1
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, какой файл аÑÑемблируетÑÑ Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ "умной" Ñборки.
+exec_w_objfile_not_found=09011_W_Объектный файл $1 не найден, компоновка может не yдатьÑÑ!
+% Один из объектных файлов не найден, и компоновка, Ñкорее вÑего, не удаÑÑ‚ÑÑ.
+% Проверьте пути.
+exec_w_libfile_not_found=09012_W_Библиотека $1 не найдена, компоновка может не yдатьÑÑ!
+% Один из файлов библиотек не найден, и компоновка, Ñкорее вÑего, не удаÑÑ‚ÑÑ.
+% Проверьте пути.
+exec_e_error_while_linking=09013_E_Ошибка пpи компоновке
+% ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при компоновке.
+exec_e_cant_call_linker=09014_E_Hе удаетÑÑ Ð²Ñ‹Ð·Ð²Ð°Ñ‚ÑŒ компоновщик, переход на внешнюю компоновку
+% Ошибка при запуÑке внешнего компоновщика. КомпилÑтор ÑоздаÑÑ‚ Ñкрипт,
+% позволÑющий аÑÑемблировать и Ñкомпоновать программу позднее.
+exec_i_linking=09015_I_Компоновка $1
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, ÐºÐ°ÐºÐ°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° или библиотека компонуетÑÑ.
+exec_e_util_not_found=09016_E_Утилита $1 не найдена, пеpеход на внешнюю компоновку
+% ВнешнÑÑ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ð° не найдена. КомпилÑтор ÑоздаÑÑ‚ Ñкрипт,
+% позволÑющий произвеÑти неудавшиеÑÑ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ.
+exec_t_using_util=09017_T_ИÑпользуетÑÑ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ð° $1
+% Информационное Ñообщение о том, ÐºÐ°ÐºÐ°Ñ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ð° иÑпользуетÑÑ (обычно Ñто поÑÑ‚-процеÑÑор).
+exec_e_exe_not_supported=09018_E_Создание иÑполнÑемых файлов не поддеpживаетÑÑ
+% Создание иÑполнÑемых файлов Ð´Ð»Ñ Ñтой платформы еще не реализовано в компилÑторе
+% и потому невозможно.
+exec_e_dll_not_supported=09019_E_Создание динамичеÑких библиотек (DLL) не поддеpживаютÑÑ
+% Создание динамичеÑки загружаемых библиотек Ð´Ð»Ñ Ñтой платформы еще не реализовано в компилÑторе
+% и потому невозможно.
+exec_i_closing_script=09020_I_Создан Ñкpипт $1
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± окончании запиÑи Ñкрипта Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ аÑÑемблированиÑ/компоновки.
+exec_e_res_not_found=09021_E_КомпилÑтоp pеÑypÑов "$1" не найден, пеpеход во внешний режим
+% Ошибка при запуÑке внешнего компилÑтора реÑурÑов. КомпилÑтор ÑоздаÑÑ‚ Ñкрипт,
+% позволÑющий выполнить неудавшиеÑÑ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ð¸ завершить Ñоздание программы позднее.
+exec_i_compilingresource=09022_I_КомпилÑÑ†Ð¸Ñ pеÑypÑа $1
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, какой файл реÑурÑов компилируетÑÑ.
+exec_t_unit_not_static_linkable_switch_to_smart=09023_T_модyль $1 не может быть Ñкомпонован ÑтатичеÑки, переход на "умную" компоновку
+% Запрошена ÑтатичеÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ°, но иÑпользованный модуль не допуÑкает Ñтот режим.
+exec_t_unit_not_smart_linkable_switch_to_static=09024_T_модyль $1 не может быть Ñкомпонован в "умном" pежиме, переход на ÑтатичеÑкую компоновку
+% Запрошена "умнаÑ" компоновка, но иÑпользованный модуль не допуÑкает Ñтот режим.
+exec_t_unit_not_shared_linkable_switch_to_static=09025_T_модyль $1 не может быть Ñкомпонован в pежиме shared, переход на ÑтатичеÑкую компоновку
+% Запрошена разделÑÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ°, но иÑпользованный модуль не допуÑкает Ñтот режим.
+exec_e_unit_not_smart_or_static_linkable=09026_E_модyль $1 не может быть Ñкомпонован в pежимах smart или static
+% Запрошена "умнаÑ" или ÑтатичеÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ°, но иÑпользованный модуль не допуÑкает ни один из Ñтих режимов.
+exec_e_unit_not_shared_or_static_linkable=09027_E_модyль $1 не может быть Ñобpан в pежимах shared или static
+% Запрошена разделÑÐµÐ¼Ð°Ñ Ð¸Ð»Ð¸ ÑтатичеÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ°, но иÑпользованный модуль не допуÑкает ни один из Ñтих режимов.
+exec_d_resbin_params=09028_D_Вызов компилÑтора реÑурÑов "$1" Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтрокой "$2"
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± иÑпользуемом компилÑторе реÑурÑов и его командной Ñтроке.
+exec_e_error_while_compiling_resources=09029_E_Ошибка при компилÑции реÑурÑов
+% КомпилÑтор или конвертор реÑурÑов завершилÑÑ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹.
+exec_e_cant_call_resource_compiler=09030_E_Вызов компилÑтора реÑурÑов "$1" невозможен, переход во внешний режим
+% Ошибка при вызове компилÑтора реÑурÑов. КомпилÑтор ÑоздаÑÑ‚ Ñкрипт,
+% позволÑющий повторить неудавшиеÑÑ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ð¸ завершить Ñоздание программы
+% позднее.
+exec_e_cant_open_resource_file=09031_E_Ðевозможно открыть файл реÑурÑов "$1"
+% Ошибка при открытии указанного файла реÑурÑов.
+exec_e_cant_write_resource_file=09032_E_Ошибка запиÑи файла реÑурÑов "$1"
+% Ошибка при запиÑи указанного файла реÑурÑов.
+%\end{description}
+# EndOfTeX
+
+#
+# Executable information
+#
+# 09134 is the last used one
+#
+# BeginOfTeX
+% \section{Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± иÑполнÑемых файлах.}
+% Содержит ÑообщениÑ, выдаваемые при Ñоздании иÑполнÑемого файла
+% Ñ Ð¸Ñпользованием внутреннего компоновщика.
+% \begin{description}
+execinfo_f_cant_process_executable=09128_F_ПоÑÑ‚-обработка иÑполнÑемого файла $1 невозможна
+% Ð¤Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при невозможноÑти поÑÑ‚-обработки иÑполнÑемого файла.
+execinfo_f_cant_open_executable=09129_F_Ðевозможно открыть иÑполнÑемый файл $1
+% Ð¤Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при невозможноÑти открыть иÑполнÑемый файл.
+execinfo_x_codesize=09130_X_Размер кода: $1 байт
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ размере Ñозданной Ñекции кода.
+execinfo_x_initdatasize=09131_X_Размер инициализированных данных: $1 байт
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ размере Ñозданной Ñекции инициализированных данных.
+execinfo_x_uninitdatasize=09132_X_Размер неинициализированных данных: $1 bytes
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ размере Ñекции неинициализированных данных.
+execinfo_x_stackreserve=09133_X_Размер Ñтека (зарезервированный): $1 bytes
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ зарезервированном размере Ñтека иÑполнÑемого файла.
+execinfo_x_stackcommit=09134_X_Размер Ñтека (подключенный): $1 bytes
+% Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ подключенном размере Ñтека иÑполнÑемого файла.
+%\end{description}
+# EndOfTeX
+
+#
+# Internal linker messages
+#
+# 09200 is the last used one
+#
+# BeginOfTeX
+% \section{Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ°}
+% СообщениÑ, выдаваемые внутренним компоновщиком.
+% \begin{description}
+link_f_executable_too_big=09200_F_Размер иÑполнÑемого образа Ñлишком велик Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ $1.
+% Ð¤Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑŽÑ‰Ð°Ñ Ð² Ñлучае, еÑли Ñозданный иÑполнÑемый файл Ñлишком велик.
+link_w_32bit_absolute_reloc=09201_W_Объектный файл "$1" Ñодержит 32-битное абÑолютное перемещение Ð´Ð»Ñ Ñимвола "$2".
+% Ð’ Ñлучае, когда 64-битный объектный файл Ñодержит 32-битные абÑолютные перемещениÑ,
+% полученный иÑполнÑемый образ может быть загружен только в нижние 4 ГБ адреÑного
+% проÑтранÑтва.
+%\end{description}
+# EndOfTeX
+
+#
+# Unit loading
+#
+# 10061 is the last used one
+#
+# BeginOfTeX
+% \section{Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ модулей.}
+% СообщениÑ, выдаваемые при загрузке модулей Ñ Ð´Ð¸Ñка в памÑть.
+% Многие из них ноÑÑÑ‚ информационный характер.
+% \begin{description}
+unit_t_unitsearch=10000_T_ПоиÑк модyлÑ: $1
+% При иÑпользовании ключа \var{-vt} Ñообщает о том, где компилÑтор ищет
+% файлы модулей.
+unit_t_ppu_loading=10001_T_Загpyзка PPU $1
+% При иÑпользовании ключа \var{-vt} Ñообщает Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° загружаемого модулÑ.
+unit_u_ppu_name=10002_U_Ð˜Ð¼Ñ PPU: $1
+% При иÑпользовании ключа \var{-vu} Ñообщает Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ.
+unit_u_ppu_flags=10003_U_Флаги PPU: $1
+% При иÑпользовании ключа \var{-vu} показывает флаги модулÑ.
+unit_u_ppu_crc=10004_U_CRC PPU: $1
+% При иÑпользовании ключа \var{-vu} показывает контрольную Ñумму модулÑ.
+unit_u_ppu_time=10005_U_Ð’Ñ€ÐµÐ¼Ñ PPU: $1
+% При иÑпользовании ключа \var{-vu} показывает времÑ, когда модуль был Ñкомпилирован.
+unit_u_ppu_file_too_short=10006_U_PPU файл Ñлишком коpоткий
+% Файл Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñлишком короткий, в нем ÑодержатÑÑ Ð½Ðµ вÑе объÑвлениÑ.
+unit_u_ppu_invalid_header=10007_U_Hевеpный заголовок PPU (нет Ñигнатуры PPU в начале)
+% Первыми Ñ‚Ñ€ÐµÐ¼Ñ Ð±Ð°Ð¹Ñ‚Ð°Ð¼Ð¸ файла PPU должны быть коды Ñимволов \var{PPU}
+unit_u_ppu_invalid_version=10008_U_HевеpÐ½Ð°Ñ Ð²ÐµpÑÐ¸Ñ PPU файла $1
+% Указанный файл Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð±Ñ‹Ð» Ñоздан другой верÑией компилÑтора, и поÑтому не может быть
+% прочитан.
+unit_u_ppu_invalid_processor=10009_U_PPU файл Ñоздан Ð´Ð»Ñ Ð´pyгого пpоцеÑÑоpа
+% Этот модуль был Ñкомпилирован Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ типа процеÑÑора, и поÑтому не может
+% быть прочитан.
+unit_u_ppu_invalid_target=10010_U_PPU файл Ñоздан Ð´Ð»Ñ Ð´pyгой ОС
+% Этот модуль был Ñкомпилирован Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ операционной ÑиÑтемы, и поÑтому не может
+% быть прочитан.
+unit_u_ppu_source=10011_U_ИÑходный файл PPU: $1
+% При иÑпользовании ключа \var{-vu} показывает Ð¸Ð¼Ñ Ð¸Ñходного файла модулÑ.
+unit_u_ppu_write=10012_U_ЗапиÑÑŒ $1
+% При иÑпользовании ключа \var{-vu} Ñообщает, куда компилÑтор запиÑывает
+% файл модулÑ.
+unit_f_ppu_cannot_write=10013_F_Hевозможно запиÑать PPU-файл
+% При запиÑи файла Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð¾ÑˆÐ»Ð° ошибка.
+unit_f_ppu_read_error=10014_F_Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ PPU-файла
+% Файл Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½ и Ñодержит неверную
+% информацию. ПотребуетÑÑ Ñ€ÐµÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑциÑ.
+unit_f_ppu_read_unexpected_end=10015_F_Ðеожиданный конец PPU-файла
+% Ðеожиданный конец файла.
+unit_f_ppu_invalid_entry=10016_F_HÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ PPU-файла: $1
+% Файл Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½, или был Ñоздан более новой верÑией компилÑтора.
+unit_f_ppu_dbx_count_problem=10017_F_Ошибка PPU DBX count
+% ÐеÑтыковки в отладочной информации модулÑ.
+unit_e_illegal_unit_name=10018_E_Hевеpное Ð¸Ð¼Ñ Ð¼Ð¾Ð´yлÑ: $1
+% Ð˜Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½Ðµ Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ файла модулÑ.
+unit_f_too_much_units=10019_F_Слишком много модyлей
+% КомпилÑтор имеет предел 1024 Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð² программе. Его можно увеличить,
+% изменив значение конÑтанты \var{maxunits} в файле \file{files.pas} компилÑтора,
+% и перекомпилировав компилÑтор.
+unit_f_circular_unit_reference=10020_F_ÐšÐ¾Ð»ÑŒÑ†ÐµÐ²Ð°Ñ ÑÑылка междy модулÑми $1 и $2
+% Два Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¸Ñпользуют друг друга в интерфейÑной Ñекции. Это разрешено только в
+% Ñекции \var{implementation}. По крайней мере один из модулей должен Ñодержать
+% ÑÑылку на другой в Ñекции \var{implementation}.
+unit_f_cant_compile_unit=10021_F_КомпилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´yÐ»Ñ $1 невозможна, отÑутÑтвуют иÑходники.
+% Ðайден модуль, требующий перекомпилÑции, но иÑходные файлы Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ отÑутÑтвуют.
+unit_f_cant_find_ppu=10022_F_Hе найден модуль $1, иÑпользуемый $2
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ не найден файл PPU.
+% Проверьте пути модулей в файле конфигурации.
+unit_w_unit_name_error=10023_W_Модуль $1 не найден, но $2 ÑущеÑтвует
+% Больше не иÑпользуетÑÑ.
+unit_f_unit_name_error=10024_F_При поиÑке Ð¼Ð¾Ð´ÑƒÐ»Ñ $1 был найден $2
+% Ограничение DOS на длину имен файлов в 8 Ñимволов может вызывать
+% проблемы, еÑли Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¸Ð¼ÐµÐµÑ‚ большую длину.
+unit_w_switch_us_missed=10025_W_Ð”Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции Ð¼Ð¾Ð´ÑƒÐ»Ñ system требуетÑÑ ÐºÐ»ÑŽÑ‡ -Us
+% При компилÑции Ð¼Ð¾Ð´ÑƒÐ»Ñ system (требующего оÑобой обработки), Ñледует
+% указывать ключ \var{-Us}.
+unit_f_errors_in_unit=10026_F_Пpи компилÑции модyÐ»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð¾ÑˆÐ»Ð¾ $1 ошибок, работа прервана
+% КомпилÑтор прекращает работу Ñ Ñтим Ñообщением при возникновении фатальной ошибки,
+% или при превышении предельного количеÑтва ошибок.
+unit_u_load_unit=10027_U_Загpyзка из $1 ($2) модyль $3
+% При иÑпользовании ключа \var{-vu} Ñообщает, который модуль откуда загружаетÑÑ.
+% shown.
+unit_u_recompile_crc_change=10028_U_ПеpекомпилÑÑ†Ð¸Ñ $1, изменилаÑÑŒ контpÐ¾Ð»ÑŒÐ½Ð°Ñ Ñyмма $2
+% Модуль перекомпилируетÑÑ, потому что изменилаÑÑŒ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма модулÑ, от которого
+% он завиÑит.
+unit_u_recompile_source_found_alone=10029_U_ПеpекомпилÑÑ†Ð¸Ñ $1, найдены только иÑходные файлы
+% При иÑпользовании ключа \var{-vu} Ñообщает причину перекомпилÑции указанного модулÑ.
+unit_u_recompile_staticlib_is_older=10030_U_ПеpекомпилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´yлÑ, ÑтатичеÑÐºÐ°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° Ñтаpше чем ppu-файл
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что ÑтатичеÑÐºÐ°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° модулÑ
+% Ñтарше, чем ppu-файл модулÑ.
+unit_u_recompile_sharedlib_is_older=10031_U_ПеpекомпилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´yлÑ, разделÑÐµÐ¼Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° Ñтаpше чем ppu-файл
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что разделÑÐµÐ¼Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ° модулÑ
+% Ñтарше, чем ppu-файл модулÑ.
+unit_u_recompile_obj_and_asm_older=10032_U_ПеpекомпилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´yлÑ, .as и .obj файлы Ñтаpше чем ppu-файл
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что аÑÑемблерный или объектный файл модулÑ
+% Ñтарше, чем ppu-файл модулÑ.
+unit_u_recompile_obj_older_than_asm=10033_U_ПеpекомпилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´yлÑ, .obj файл Ñтаpше чем .as файл
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что объектный файл модулÑ
+% Ñтарше, чем его аÑÑемблерный файл.
+unit_u_parsing_interface=10034_U_Ðнализ интеpфейÑа $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о начале анализа
+% интерфейÑной чаÑти модулÑ.
+unit_u_parsing_implementation=10035_U_Ðнализ pеализации $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о начале анализа
+% реализационной чаÑти модулÑ.
+unit_u_second_load_unit=10036_U_ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ Ð·Ð°Ð³pyзка модyÐ»Ñ $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о начале повторной компилÑции
+% модулч. Это может проиÑходить при наличии взаимозавиÑимых модулей.
+unit_u_check_time=10037_U_Проверка PPU файла $1 вpÐµÐ¼Ñ $2
+% При иÑпользовании ключа \var{-vu} показвает Ð¸Ð¼Ñ Ð¸ дату/Ð²Ñ€ÐµÐ¼Ñ Ñ„Ð°Ð¹Ð»Ð°,
+% от которого завиÑит рекомпилÑциÑ.
+### The following two error msgs is currently disabled.
+#unit_h_cond_not_set_in_last_compile=10038_H_УÑловное выpажение $1 не было yÑтановлено пpи поÑледней компилÑции $2
+#% when recompilation of an unit is required the compiler will check that
+#% the same conditionals are set for the recompiliation. The compiler has
+#% found a conditional that currently is defined, but was not used the last
+#% time the unit was compiled.
+#unit_h_cond_set_in_last_compile=10039_H_УÑловное выpажение $1 было yÑтановлено пpи поÑледней компилÑции $2
+#% when recompilation of an unit is required the compiler will check that
+#% the same conditionals are set for the recompiliation. The compiler has
+#% found a conditional that was used the last time the unit was compiled, but
+#% the conditional is currently not defined.
+unit_w_cant_compile_unit_with_changed_incfile=10040_W_Ðайдены измененные включаемые файлы, но компилÑÑ†Ð¸Ñ $1 невозможна
+% Обнаружено изменение включаемых файлов модулÑ, но некоторые иÑходные файлы
+% не найдены, поÑтому рекомпилÑÑ†Ð¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°.
+unit_u_source_modified=10041_U_Файл $1 новее, чем $2
+% Ðайден измененный иÑходный файл модулÑ.
+unit_u_ppu_invalid_fpumode=10042_U_Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ, Ñкомпилированного Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ режимом ÑопроцеÑÑора
+% Попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹, которые были Ñкомпилированы Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð¸Ð¼ÑÑ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð¼
+% формата плавающей запÑтой. Ð’Ñе модули должны быть Ñкомпилированы либо Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹
+% ÑмулÑцией ÑопроцеÑÑора, либо Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹, но не вперемешку.
+unit_u_loading_interface_units=10043_U_Загрузка модулей из интерфейÑной чаÑти $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о начале загрузки модулей,
+% иÑпользуемых в интерфейÑной чаÑти указанного модулÑ.
+unit_u_loading_implementation_units=10044_U_Загрузка модулей из реализационной чаÑти $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о начале загрузки модулей,
+% иÑпользуемых в реализационной чаÑти указанного модулÑ.
+unit_u_interface_crc_changed=10045_U_У Ð¼Ð¾Ð´ÑƒÐ»Ñ $1 изменилаÑÑŒ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма интерфейÑа
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма,
+% вычиÑÐ»ÐµÐ½Ð½Ð°Ñ Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñной чаÑти модулÑ, изменилаÑÑŒ поÑле разбора его реализационной
+% чаÑти.
+unit_u_implementation_crc_changed=10046_U_У Ð¼Ð¾Ð´ÑƒÐ»Ñ $1 изменилаÑÑŒ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма реализации
+% При иÑпользовании ключа \var{-vu} Ñообщает, что ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма модулÑ
+% изменилаÑÑŒ поÑле разбора его реализационной чаÑти.
+unit_u_finished_compiling=10047_U_Завершена компилÑÑ†Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о завершени компилÑции модулÑ.
+unit_u_add_depend_to=10048_U_Добавлена завиÑимоÑть $1 от $2
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что была добавлена
+% завиÑимоÑть между Ð´Ð²ÑƒÐ¼Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñми.
+unit_u_no_reload_is_caller=10049_U_Без перезагрузки, Ñто инициатор: $1
+% При иÑпользовании ключа \var{-vu} предупреждает о том, что
+% модуль не будет перезагружен, потому что он Ñам ÑвлÑетÑÑ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ Ñвоей
+% перезагрузки.
+unit_u_no_reload_in_second_compile=10050_U_Без перезагрузки, уже Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑциÑ: $1
+% При иÑпользовании ключа \var{-vu} предупреждает, что модуль
+% не будет перезагружен, Ñ‚.к. он уже был перезагружен и компилируетÑÑ Ð²Ð¾ второй раз.
+unit_u_flag_for_reload=10051_U_Помечено Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸: $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что модуль будет перезагружен.
+unit_u_forced_reload=10052_U_Ð’Ñ‹Ð½ÑƒÐ¶Ð´ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что модуль пришлоÑÑŒ перезагрузить.
+unit_u_previous_state=10053_U_Прежний ÑÑ‚Ð°Ñ‚ÑƒÑ $1: $2
+% При иÑпользовании ключа \var{-vu} показывает предыдущий ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ð¾Ð´ÑƒÐ»Ñ.
+unit_u_second_compile_unit=10054_U_$1 уже компилируетÑÑ, переход к повторной компилÑции
+% При иÑпользовании ключа \var{-vu} предупреждает о начале перекомпилÑции модулÑ
+% во второй раз. Это может проиÑходить Ñо взаимозавиÑимыми модулÑми.
+unit_u_loading_unit=10055_U_Загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о начале загрузки модулÑ.
+unit_u_finished_loading_unit=10056_U_Загрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ $1 завершена
+% При иÑпользовании ключа \var{-vu} Ñообщает о завершении загрузки модулÑ.
+unit_u_registering_new_unit=10057_U_РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ $1
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что компилÑтор вÑтретил новый модуль
+% и зарегиÑтрировал его во внутренних ÑпиÑках.
+unit_u_reresolving_unit=10058_U_Повторное разрешение завиÑимоÑтей Ð¼Ð¾Ð´ÑƒÐ»Ñ $1
+% При иÑпользовании ключа \var{-vu} предупреждает о том, что компилÑтору пришлоÑÑŒ
+% повторно вычиÑлить внутренние данные указанного модулÑ.
+unit_u_skipping_reresolving_unit=10059_U_ПропуÑк повторного Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ $1, загрузка иÑпользуемых модулей продолжаетÑÑ
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что повторное вычиÑление данных
+% Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾, потому что вычиÑлÑть пока нечего.
+unit_u_unload_resunit=10060_U_Выгрузка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ реÑурÑов $1 (не нужен)
+% При иÑпользовании ключа \var{-vu} Ñообщает о том, что модуль обработки реÑурÑов
+% выгружаетÑÑ, Ñ‚.к. реÑурÑÑ‹ не иÑпользуютÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹.
+unit_e_different_wpo_file=10061_E_Модуль $1 Ñкомпилирован Ñ Ð¸Ñпользованием отличающихÑÑ Ð½Ð°Ñтроек оптимизации вÑей программы (wpo) ($2, $3); перекомпилируйте его без wpo или Ñ Ñ‚ÐµÐ¼ же файлом обратной ÑвÑзи
+% Когда модуль был Ñкомпилирован Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼ файлом обратной ÑвÑзи оптимизации вÑей программы (wpo) (\var{-FW<x>} \var{-OW<x>}),
+% его ÑÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñпециализирована под данный Ñценарий компилÑции и не может быть иÑпользована
+% по другому назначению. Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð² другой программе или Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ наÑтройками wpo
+% его необходимо перекомпилировать.
+% \end{description}
+# EndOfTeX
+
+#
+# Options
+#
+# 11047 is the last used one
+#
+option_usage=11000_O_$1 [опции] <файл> [опции]
+# BeginOfTeX
+%
+% \section{Ошибки обработки командной Ñтроки}
+% Ошибки, которые могут возникать во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ командной Ñтроки
+% или файлов конфигурации.
+% \begin{description}
+option_only_one_source_support=11001_W_ПоддеpживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один иÑходный файл, вмеÑто $1 будет Ñкомпилирован $2
+% Ð’ командной Ñтроке можно указывать только один файл. Первый обнаруженный файл будет
+% Ñкомпилирован, оÑтальные игнорируютÑÑ. Может быть признаком того, что
+% перед опцией забыт знак \var{'-'}.
+option_def_only_for_os2=11002_W_DEF файл можно Ñоздавать только Ð´Ð»Ñ OS/2
+% This option can only be specified when you're compiling for OS/2
+option_no_nested_response_file=11003_E_Вложенные файлы ответа не поддеpживаютÑÑ
+% ÐžÐ¿Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки \var{@file} не позволÑет иÑпользовать вложенные файлы ответа.
+option_no_source_found=11004_F_Ð’ командной Ñтроке отÑутÑтвует Ð¸Ð¼Ñ Ð¸Ñходного файла
+% Ð’ командной Ñтроке должно приÑутÑтвовать Ð¸Ð¼Ñ Ð¸Ñходного файла.
+option_no_option_found=11005_N_Файл конфигурации $1 не Ñодержит опций компилÑтора
+% В указанном файле конфигурации не обнаружено ни одной опции.
+option_illegal_para=11006_E_Hевеpный паpаметp: $1
+% Указана неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ.
+option_help_pages_para=11007_H_-? выводит ÑÑ‚pаницы Ñправки
+% Это Ñообщение выводитÑÑ, еÑли указана неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ.
+option_too_many_cfg_files=11008_F_Слишком много вложенных файлов конфигурации
+% Уровень Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² конфигурации ограничен чиÑлом 16.
+option_unable_open_file=11009_F_Hевозможно откpыть $1
+% Ошибка при открытии файла конфигурации.
+option_reading_further_from=11010_D_ПродолжаетÑÑ Ñ‡Ñ‚ÐµÐ½Ð¸Ðµ паpаметpов из $1
+% ВыдаетÑÑ, еÑли включен вывод заметок, и компилÑтор переключаетÑÑ Ð½Ð°
+% другой файл конфигурации.
+option_target_is_already_set=11011_W_Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° уже yÑтановлена в: $1
+% Указано более одной опции \var{-T}, определÑющей целевую платформу.
+option_no_shared_lib_under_dos=11012_W_РазделÑемые библиотеки не поддеpживаютÑÑ Ð´Ð»Ñ DOS, будут ÑтатичеÑкими
+% If you specify \var{-CD} for the \dos platform, this message is displayed.
+% The compiler supports only static libraries under \dos
+option_too_many_ifdef=11013_F_Слишком много $IFDEF или $IFNDEF в файле опций $1 Ñтрока $2
+% КоличеÑтво директив \var{\#IF(N)DEF} в файле конфигурации не Ñовпадает Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтвом
+% директив \var{\#ENDIF}.
+option_too_many_endif=11014_F_Ðеожиданный $ENDIF в файле опций $1 Ñтрока $2
+% КоличеÑтво директив \var{\#IF(N)DEF} в файле конфигурации не Ñовпадает Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтвом
+% директив \var{\#ENDIF}.
+option_too_less_endif=11015_F_Ðезакрытое yÑловное выpажение в конце файла опций
+% КоличеÑтво директив \var{\#IF(N)DEF} в файле конфигурации не Ñовпадает Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтвом
+% директив \var{\#ENDIF}.
+option_no_debug_support=11016_W_Этот ÑкземплÑÑ€ компилÑтора не поддерживает генеpацию отладочной инфоpмации
+% It is possible to have a compiler executable that doesn't support
+% the generation of debugging info. If you use such an executable with the
+% \var{-g} switch, this warning will be displayed.
+option_no_debug_support_recompile_fpc=11017_H_Попpобyйте Ñобрать Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ -dGDB
+% It is possible to have a compiler executable that doesn't support
+% the generation of debugging info. If you use such an executable with the
+% \var{-g} switch, this warning will be displayed.
+option_obsolete_switch=11018_W_ИÑпользyетÑÑ yÑтаpевший ключ $1
+% Предупреждает, что ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не нужна/не поддерживаетÑÑ.
+% Ее рекомендуетÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ, чтобы избежать проблем в Ñлучае, еÑли
+% в будущем значение опции изменитÑÑ.
+option_obsolete_switch_use_new=11019_W_ИÑпользyетÑÑ yÑтаpевший ключ $1, иÑпользyйте вмеÑто него ключ $2
+% Предупреждает, что ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не поддерживаетÑÑ Ð¸ вмеÑто нее Ñледует иÑпользовать другую.
+% РекомендуетÑÑ Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ ключ, чтобы избежать проблем в Ñлучае, еÑли
+% в будущем его значение изменитÑÑ.
+option_switch_bin_to_src_assembler=11020_N_Пеpеключение на аÑÑемблеp, генерирующий текÑÑ‚
+% ÐÑÑемблер (Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼ форматом выходных файлов) был изменен, потому что был иÑпользован ключ -a,
+% который означает Ñоздание аÑÑемблерных файлов в текÑтовом формате.
+option_incompatible_asm=11021_W_Выбранный аÑÑемблер "$1" не ÑовмеÑтим Ñ "$2"
+option_asm_forced=11022_W_Вынужденно иÑпользетÑÑ Ð°ÑÑемблер "$1"
+% Заданный тип аÑÑемблера не позволÑет Ñоздавать объектные файлы
+% в правильном формате. ВмеÑто него будет иÑпользован аÑÑемблер по умолчанию
+% Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ платформы.
+option_using_file=11026_T_Чтение опций из файла $1
+% Опции читаютÑÑ Ñ‚Ð°ÐºÐ¶Ðµ из указанного файла.
+option_using_env=11027_T_Чтение опций из переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ $1
+% Опции читаютÑÑ Ñ‚Ð°ÐºÐ¶Ðµ из указанной переменной окружениÑ.
+option_handling_option=11028_D_Обработка опции "$1"
+% Отладочное Ñообщение о том, что Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° и будет обработана.
+option_help_press_enter=11029_O_*** нажмите enter ***
+% Сообщени выдаетÑÑ Ð¿Ñ€Ð¸ поÑтраничном выводе Ñправки. Ðажатие клавиши ENTER
+% вызывает показ Ñледующей Ñтраницы. ЕÑли нажать q и затем ENTER, компилÑтор
+% завершает работу.
+option_start_reading_configfile=11030_H_Ðачало Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации $1
+% Ðачало Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации.
+option_end_reading_configfile=11031_H_Конец Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации $1
+% Окончание Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации.
+option_interpreting_option=11032_D_Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ñ€ÐµÑ‚Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ñ†Ð¸Ð¸ "$1"
+% КомпилÑтор интерпретирует опцию.
+option_interpreting_firstpass_option=11036_D_Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ñ€ÐµÑ‚Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ñ†Ð¸Ð¸ первого прохода "$1"
+% КомпилÑтор интерпретирует опцию в первый раз.
+option_interpreting_file_option=11033_D_Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ñ€ÐµÑ‚Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ñ†Ð¸Ð¸ из файла "$1"
+% КомпилÑтор интерпретирует опцию, прочитанную из файла конфигурации.
+option_read_config_file=11034_D_Чтение файла конфигурации "$1"
+% Ðачало Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð³Ð¾ файла конфигурации (отладочное Ñообщение).
+option_found_file=11035_D_найдено Ð¸Ð¼Ñ Ð¸Ñходного файла "$1"
+% Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± опциÑÑ…, выводитÑÑ Ð¿Ñ€Ð¸
+% включенных отладочных ÑообщениÑÑ….
+option_code_page_not_available=11039_E_ÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ Ñтраница
+% Указана неизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ Ñтраница Ð´Ð»Ñ Ð¸Ñходных файлов.
+% КомпилÑтор имеет вÑтроенную поддержку неÑкольких кодовых Ñтраниц.
+% Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð´Ð¾Ð²Ð°Ñ Ñтраница в их чиÑло не входит. Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ
+% поддержки потребуетÑÑ Ð¿ÐµÑ€ÐµÑборка компилÑтора.
+option_config_is_dir=11040_F_Файл конфигурации $1 - директориÑ
+% Директории Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в качеÑтве файлов конфигурации.
+option_confict_asm_debug=11041_W_Выбранный тип аÑÑемблера "$1" не поддерживает отладочную информацию, отладка отключена
+% Выбранный аÑÑемблер не поддерживает генерацию отладочной информации,
+% поÑтому возможноÑть отладки отключена.
+option_ppc386_deprecated=11042_W_ИÑпользование ppc386.cfg ÑвлÑетÑÑ ÑƒÑтаревшим, вмеÑто него Ñледует иÑпользовать fpc.cfg
+% Using ppc386.cfg is still supported for historical reasons, however, for a multiplatform
+% system the naming makes no sense anymore. Please continue to use fpc.cfg instead.
+option_else_without_if=11043_F_Ð’ файле опций $1 Ñтрока $2 обнаружена директива \var{\#ELSE} без предварительной \var{\#IF(N)DEF}
+% В файле конфигурации обнаружена директива \var{\#ELSE} без предварительной директивы \var{\#IF(N)DEF}.
+option_unsupported_target=11044_F_ÐžÐ¿Ñ†Ð¸Ñ "$1" не поддерживаетÑÑ (или пока не поддерживаетÑÑ) Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ платформы
+% Ðе вÑе опции поддерживаютÑÑ Ð¸Ð»Ð¸ реализованы Ð´Ð»Ñ Ð²Ñех платформ. Это Ñообщение о том,
+% что Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð½ÐµÑовмеÑтима Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ платформой.
+option_unsupported_target_for_feature=11045_F_ОÑобенноÑть "$1" не поддерживаетÑÑ (или пока не поддерживаетÑÑ) Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ целевой платформы
+% Ðе вÑе опции поддерживаютÑÑ Ð¸Ð»Ð¸ реализованы Ð´Ð»Ñ Ð²Ñех платформ. Это Ñообщение о том,
+% что Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð½ÐµÑовмеÑтима Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ платформой.
+option_dwarf_smart_linking=11046_N_Ðа выбранной платформе Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать отладочную информацию типа DWARF ÑовмеÑтно Ñ "умной" компоновкой, переключение на ÑтатичеÑкую компоновку
+% "УмнаÑ" компоновка в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÑовмеÑтима Ñ Ð¾Ñ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð¾Ð¹ информацией типа DWARF на большинÑтве
+% платформ, поÑтому при выборе формата DWARF "умнаÑ" компоновка отключаетÑÑ.
+option_ignored_target=11047_W_ÐžÐ¿Ñ†Ð¸Ñ "$1" игнорируетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ целевой платформы.
+% Ðе вÑе опции поддерживаютÑÑ Ð¸Ð»Ð¸ реализованы Ð´Ð»Ñ Ð²Ñех платформ. Это Ñообщение о том,
+% что Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ платформы.
+% \end{description}
+# EndOfTeX
+
+#
+# Whole program optimization
+#
+# 12019 is the last used one
+#
+# BeginOfTeX
+%
+% \section{Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ вÑей программы}
+% Раздел Ñодержит ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках, которые могут возникать
+% в процеÑÑе оптимизации вÑей программы (wpo).
+% \begin{description}
+wpo_cant_find_file=12000_F_Ðевозможно открыть файл данных WPO "$1"
+% КомпилÑтор не может открыть указанный файл Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ оптимизации вÑей программы.
+wpo_begin_processing=12001_D_Обработка информации WPO в файле "$1"
+% КомпилÑтор начинает обработку данных Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ вÑей программы в указанном файле.
+wpo_end_processing=12002_D_Закончена обработка информации WPO в файле "$1"
+% КомпилÑтор закончил обработку данных Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ вÑей программы в указанном файле.
+wpo_expected_section=12003_E_ОжидалÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Ñекции, но получено "$2" в Ñтроке $1 файла WPO-информации
+% При обработке файла оптимизации вÑей программы компилÑтор ожидал заголовок Ñекции (начинаетÑÑ Ñ \%),
+% но не нашел его.
+wpo_no_section_handler=12004_W_Ðе зарегиÑтрирован обработчик Ð´Ð»Ñ Ñекции "$2" в Ñтроке $1 файла WPO, игнорируетÑÑ
+% КомпилÑтор не имеет обработчика Ð´Ð»Ñ ÑƒÐ¿Ð¾Ð¼Ñнутой Ñекции файла WPO-информации,
+% поÑтому он пропуÑкает Ñту Ñекцию и переходит к Ñледующей.
+wpo_found_section=12005_D_Ðайдена ÑÐµÐºÑ†Ð¸Ñ "$1" Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о "$2"
+% КомпилÑтор обнаружил в файле WPO Ñекцию Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹, которую он может обработать.
+wpo_no_input_specified=12006_F_Выбранные режимы оптимизации вÑей программы требуют предварительно Ñозданного файла обратной ÑвÑзи (укажите Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -Fw)
+% Чтобы выполнить выбранную оптимизацию вÑей программы, компилÑтору требуетÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ,
+% ÑÐ¾Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð² процеÑÑе предыдущей компилÑции. Файл, Ñодержащий Ñту информацию, должен быть указан
+% Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа -Fw.
+wpo_not_enough_info=12007_E_Файл обратной ÑвÑзи не Ñодержит информации, необходимой Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ "$1"
+% Указанный файл обратной ÑвÑзи не Ñодержит информацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð°Ñ Ð½ÑƒÐ¶Ð½Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð¾Ð³Ð¾ вида
+% оптимизации. Скорее вÑего, нужно перекомпилировать программу, указав подходÑщий ключ -OWxxx.
+wpo_no_output_specified=12008_F_Укажите файл обратной ÑвÑзи Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи Ñобранной информации (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -FW)
+% Ðеобходимо указать файл, в который компилÑтор запишет Ñобранные во Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции
+% данные Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ вÑей программы. Это делаетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа -FW.
+wpo_output_without_info_gen=12009_E_Файл обратной ÑвÑзи указан (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -FW), но не указан требуемый тип Ñобираемой информации
+% Помимо ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ файла обратной ÑвÑзи wpo Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -FW, Ñледует указывать
+% требуемые виды оптимизации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -OWxxx, иначе Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² файл запиÑана
+% не будет.
+wpo_input_without_info_use=12010_E_Файл обратной ÑвÑзи указан (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -Fw), но не указан тип оптимизации, который Ñледует выполнить
+% ЕÑли указан файл обратной ÑвÑзи wpo Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -Fw, но не заданы виды оптимизации Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ -Owxxx,
+% будет выдана Ð´Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Указанные ключи Ñледует иÑпользовать ÑовмеÑтно.
+wpo_skipping_unnecessary_section=12011_D_Ð¡ÐµÐºÑ†Ð¸Ñ wpo пропущена "$1", поÑкольку не требуетÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ‹Ñ… оптимизаций
+% Файл обратной ÑвÑзи wpo Ñодержит Ñекцию Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ðµ требуетÑÑ
+% Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… типов оптимизации.
+wpo_duplicate_wpotype=12012_W_ИнформациÑ, ранее Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ð°Ñ Ð¸Ð· файла обратной ÑвÑзи Ð´Ð»Ñ "$1", перекрываетÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ из Ñекции "$2"
+% Файл обратной ÑвÑзи wpo Ñодержит неÑколько Ñекций Ñ Ð¾Ð´Ð½Ð¾Ñ‚Ð¸Ð¿Ð½Ð¾Ð¹ информацией (например,
+% о том, какие виртуальные методы могут быть де-виртуализированы). Ð’ Ñтом Ñлучае иÑпользуетÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ
+% из поÑледней Ñекции. Включите отладочные ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ (-vd), чтобы увидеть, какие клаÑÑÑ‹ информации ÑодержатÑÑ
+% в каждой из Ñекций.
+wpo_cannot_extract_live_symbol_info_strip=12013_E_Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ живучеÑти Ñимволов не может быть получена из программы без отладочной информации, иÑпользуйте -Xs-
+% Ðекоторые ÑпоÑобы Ñбора информации о живучеÑти Ñимволов предполагают анализ Ñимвольной информации
+% готовой программы. ЕÑли Ñта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð° (Ð¾Ð¿Ñ†Ð¸Ñ -Xs), такой анализ невозможен.
+wpo_cannot_extract_live_symbol_info_no_link=12014_E_Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ живучеÑти Ñимволов не может быть получена без Ñкомпонованной программы
+% Ðекоторые ÑпоÑобы Ñбора информации о живучеÑти Ñимволов предполагают анализ Ñимвольной информации
+% готовой программы. ЕÑли программа не Ñкомпонована, такой анализ невозможен.
+wpo_cannot_find_symbol_progs=12015_F_Ðе найдены "$1" или "$2" Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о Ñимволах из Ñкомпонованной программы
+% Ðекоторые ÑпоÑобы Ñбора информации о живучеÑти Ñимволов иÑпользуют вÑпомогательные программы
+% Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о Ñимволах программы. Обычно Ñто программа 'nm', входÑÑ‰Ð°Ñ Ð² ÑоÑтав GNU binutils.
+wpo_error_reading_symbol_file=12016_E_Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о живучеÑти Ñимволов, полученной от "$1"
+% При получении информации о Ñимволах Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ вÑпомогательной программы ('nm' или 'objdump') произошла
+% ошибка. Вывод вÑпомогательной программы оказалÑÑ ÐºÐ¾Ñ€Ð¾Ñ‡Ðµ ожидаемого, или имеет неверный формат.
+wpo_error_executing_symbol_prog=12017_F_Ошибка Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ "$1" (код выхода: $2) при извлечении информации о Ñимволах
+% При получении информации о Ñимволах Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ вÑпомогательной программы ('nm' или 'objdump') произошла
+% ошибка. Ð’ÑÐ¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° вернула указанный код ошибки.
+wpo_symbol_live_info_needs_smart_linking=12018_E_Сбор информации о живучеÑти Ñимволов полезен только при "умной" компоновке, иÑпользуйте -CX -XX
+% ЖивучеÑть Ñимвола определÑетÑÑ Ñ„Ð°ÐºÑ‚Ð¾Ð¼ его Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð² готовой Ñкомпонованной программе. ЕÑли отключена
+% "умнаÑ" компоновка, вÑе Ñимволы вкючаютÑÑ Ð² программу незавиÑимо от того, иÑпользуютÑÑ Ð¾Ð½Ð¸ или нет.
+% Это делает Ñбор информации о живучеÑти Ñимволов беÑÑмыÑленным.
+wpo_cant_create_feedback_file=12019_E_Ðевозможно Ñоздать файл обратной ÑвÑзи "$1"
+% Файл обратной ÑвÑзи wpo, указанный Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ключа -FW, не может быть Ñоздан.
+%\end{description}
+# EndOfTeX
+
+
+#
+# Logo (option -l)
+#
+option_logo=11023_[
+КомпилÑтор Free Pascal верÑии $FPCFULLVERSION [$FPCDATE] Ð´Ð»Ñ $FPCCPU
+Copyright (c) 1993-2009 by Florian Klaempfl
+]
+
+#
+# Info (option -i)
+#
+option_info=11024_[
+Free Pascal Compiler version $FPCVERSION
+
+Compiler Date : $FPCDATE
+Compiler CPU Target: $FPCCPU
+
+Поддерживаемые платформы:
+ $OSTARGETS
+
+Поддерживаемые наборы команд CPU:
+ $INSTRUCTIONSETS
+
+Поддерживаемые наборы команд FPU:
+ $FPUINSTRUCTIONSETS
+
+Поддерживаемые ABI:
+ $ABITARGETS
+
+Поддерживаемые оптимизации:
+ $OPTIMIZATIONS
+
+Поддерживаемые оптимизации вÑей программы:
+ All
+ $WPOPTIMIZATIONS
+
+Поддерживаемые типы микроконтроллеров:
+ $CONTROLLERTYPES
+
+This program comes under the GNU General Public Licence
+For more information read COPYING.FPC
+
+Report bugs, suggestions, etc. to:
+ http://bugs.freepascal.org
+or
+ bugs@freepascal.org
+]
+
+#
+# Help pages (option -? and -h)
+#
+# The first character on the line indicates who will display this
+# line, the current possibilities are :
+# * = every target
+# 3 = 80x86 targets
+# 6 = 680x0 targets
+# e = in extended debug mode only
+# P = PowerPC targets
+# S = Sparc targets
+# V = Virtual machine targets
+# The second character also indicates who will display this line,
+# (if the above character was TRUE) the current possibilities are :
+# * = everyone
+# g = with GDB info supported by the compiler
+# O = OS/2
+# L = UNIX systems
+# The third character represents the indentation level.
+#
+option_help_pages=11025_[
+**0*_Добавьте '+' поÑле опции булева ключа Ð´Ð»Ñ ÐµÐ³Ð¾ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸ '-' Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ
+**1a_КомпилÑтор не удалÑет Ñозданный аÑÑемблерный файл
+**2al_Вывод номеpов Ñтрок в аÑÑемблерный файл
+**2an_Вывод информации об узлах графа в аÑÑемблерный файл
+*L2ap_ИÑпользовать пайпы вмеÑто временных аÑÑемблерный файлов
+**2ar_ПеречиÑлÑть выделениÑ/оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ pегиÑÑ‚pов в аÑÑемблеpном файле
+**2at_ПеречиÑлÑть выделениÑ/оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²pеменных пеpеменных в аÑÑемблеpном файле
+**1A<x>_Формат вывода:
+**2Adefault_ÐÑÑемблер по умолчанию
+3*2Aas_ÐÑÑемблер GNU AS
+3*2Anasmcoff_COFF файл (Go32v2), иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Nasm
+3*2Anasmelf_ELF32 файл (Linux), иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Nasm
+3*2Anasmwin32_Win32 объектный файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Nasm
+3*2Anasmwdosx_Win32/WDOSX объектный файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Nasm
+3*2Awasm_Obj файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Wasm (Watcom)
+3*2Anasmobj_Obj файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Nasm
+3*2Amasm_Obj файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Masm (Microsoft)
+3*2Atasm_Obj файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Tasm (Borland)
+3*2Aelf_ELF (Linux) иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ генератор
+3*2Acoff_COFF (Go32v2) иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ генератор
+3*2Apecoff_PE-COFF (Win32) иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ð¹ генератор
+4*2Aas_ÐÑÑемблер GNU AS
+6*2Aas_Unix o-файл, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ GNU AS
+6*2Agas_GNU Motorola аÑÑемблер
+6*2Amit_СинтакÑÐ¸Ñ MIT (Ñтарый GAS)
+6*2Amot_Стандартный аÑÑемблер Motorola
+A*2Aas_ÐÑÑемблер GNU AS
+P*2Aas_ÐÑÑемблер GNU AS
+S*2Aas_ÐÑÑемблер GNU AS
+**1b_Генеpиpовать инфоpмацию Ð´Ð»Ñ Ð±pаyзеpа (IDE)
+**2bl_Генеpиpовать также инфоpмацию о локальных Ñимволах
+**1B_ПеpеÑборка вÑех модyлей
+**1C<x>_Опции генеpатора кода:
+**2Ca<x>_Выбор ABI, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2Cb_Генерировать big-endian код
+**2Cc<x>_УÑтановить тип вызова по умолчанию в <x>
+**2CD_Создать также динамичеÑкyÑŽ библиотекy (не поддеpживаетÑÑ)
+**2Ce_Компилировать Ñ Ñмулированными инÑтрукциÑми Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой
+**2Cf<x>_Выбор набора команд ÑопроцеÑÑора, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2CF<x>_ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñть конÑтант Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ запÑтой (default, 32, 64)
+**2Cg_Генерировать позиционно-незавиÑимый код (PIC)
+**2Ch<n>_<n> байт кyчи (от 1023 до 67107840)
+**2Ci_Пpовеpка ввода-вывода
+**2Cn_ПpопyÑтить Ñтадию компоновки
+**2Co_Пpовеpка Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленных операций
+**2CO_Проверка возможного Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленных операций
+**2Cp<x>_Выбор набора команд, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2CP<x>=<y>_ наÑтройки упаковки
+**3CPPACKSET=<y>_ <y> упаковка множеÑтв: 0, 1 или DEFAULT или NORMAL, 2, 4 и 8
+**2Cr_Пpовеpка диапазонов
+**2CR_Проверка правильноÑти вызова методов объектов
+**2Cs<n>_УÑтановить pазмеp Ñтека в <n>
+**2Ct_Проверка Ñтека (только теÑтирование, Ñм. руководÑтво)
+**2CX_Создать также smartlink-библиотеку
+**1d<x>_Опpеделить Ñимвол <x>
+**1D_Создать DEF-файл
+**2Dd<x>_УÑтановить опиÑание в <x>
+**2Dv<x>_УÑтановить верÑию DLL в <x>
+*O2Dw_Приложение PM
+**1e<x>_УÑтановить пyть Ð´Ð»Ñ Ð¸ÑполнÑемых файлов
+**1E_То же, что и -Cn
+**1fPIC_То же, что и -Cg
+**1F<x>_УÑтановка имен и путей файлов
+**2Fa<x>[,y]_(Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹) загрузить модули <x> и [y] перед чтением Ñекции uses
+**2Fc<x>_УÑтановить кодовую Ñтраницу иÑходного файла в <x>
+**2FC<x>_УÑтановить Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñтора реÑурÑов (.rc) в <x>
+**2Fd_Отключить внутренний кÑш директорий компилÑтора
+**2FD<x>_УÑтановить пyть поиÑка утилит компилÑтора
+**2Fe<x>_Пеpенапpавить вывод ошибок в <x>
+**2Ff<x>_Добавить <x> к пути фреймворка (только Darwin)
+**2FE<x>_УÑтановить путь вывода exe/модулей в <x>
+**2Fi<x>_Добавить <x> к пyÑ‚Ñм включаемых файлов
+**2Fl<x>_Добавить <x> к пyÑ‚Ñм библиотек
+**2FL<x>_ИÑпользовать <x> как динамичеÑкий компоновщик
+**2Fm<x>_Загрузить таблицу Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ unicode из <x>.txt в директории компилÑтора
+**2Fo<x>_Добавить <x> к пyÑ‚Ñм объектных файлов
+**2Fr<x>_Загpyзить файл Ñообщений об ошибках <x>
+**2FR<x>_УÑтановить Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²Ñ‰Ð¸ÐºÐ° реÑурÑов (.res) в <x>
+**2Fu<x>_Добавить <x> к путÑм модулей
+**2FU<x>_УÑтановить пyть вывода модyлей в <x>, отменÑет -FE
+**2FW<x>_ЗапиÑать файл обратной ÑвÑзи оптимизации вÑей программы в <x>
+**2Fw<x>_Загрузить ранее Ñозданный файл обратной ÑвÑзи из <x>
+*g1g_Создавать отладочную информацию (формате по умолчанию Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ платформы)
+*g2gc_Создавать проверки указателей
+*g2gh_ИÑпользовать модyль heaptrc (Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ yтечек/повреждений памÑти)
+*g2gl_ИÑпользовать модуль lineinfo (больше информации о Ñтеке вызовов)
+*g2go<x>_Опции отладочной информации
+*g3godwarfsets_ Включить информацию о множеÑтвах DWARF (ломает gdb < 6.5)
+*g3gostabsabsincludes_ СохранÑть абÑолютные/полные пути включаемых файлов в Stabs
+*g2gp_СохранÑть региÑтр в именах Ñимволов stabs
+*g2gs_ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² формате Stabs
+*g2gt_Затирать локальные переменные (выÑвление иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±ÐµÐ· инициализации)
+*g2gv_Поддержка траÑÑировки Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Valgrind
+*g2gw_ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² формате DWARFv2 (то же, что и -gw2)
+*g2gw2_ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² формате DWARFv2
+*g2gw3_ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² формате DWARFv3
+**1i_ИнфоpмациÑ
+**2iD_Вернуть датy компилÑтоpа
+**2iV_Вернуть короткую веpÑию компилÑтора
+**2iW_Вернуть полную верÑию компилÑтора
+**2iSO_Вернуть тип ОС компилÑтора
+**2iSP_Вернуть тип пpоцеÑÑоpа компилÑтора
+**2iTO_Вернуть тип ОС назначениÑ
+**2iTP_Вернуть тип пpоцеÑÑоpа назначениÑ
+**1I<x>_Добавить <x> к пyти до включаемых файлов
+**1k<x>_Передать <x> компоновщикy
+**1l_ВывеÑти логотип
+**1M<x>_УÑтановить режим Ñзыка в <x>
+**2Mfpc_Диалект Free Pascal (по умолчанию)
+**2Mobjfpc_Режим FPC Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ Object Pascal
+**2Mdelphi_Режим ÑовмеÑтимоÑти Ñ Delphi 7
+**2Mtp_Режим ÑовмеÑтимоÑти Ñ TP/BP 7.0
+**2Mmacpas_Режим ÑовмеÑтимоÑти Ñ Ð´Ð¸Ð°Ð»ÐµÐºÑ‚Ð°Ð¼Ð¸ Macintosh Pascal
+**1n_Ðе читать Ñтандаpтные файлы конфигурации
+**1N<x>_ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð³Ñ€Ð°Ñ„Ð°
+**2Nu_Разворачивать циклы
+**1o<x>_Изменить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°ÐµÐ¼Ð¾Ð³Ð¾ иÑполнÑемого файла на <x>
+**1O<x>_Оптимизации:
+**2O-_Отключить оптимизации
+**2O1_Оптимизации ÑƒÑ€Ð¾Ð²Ð½Ñ 1 (быÑтро и ÑовмеÑтимо Ñ Ð¾Ñ‚Ð»Ð°Ð´Ñ‡Ð¸ÐºÐ¾Ð¼)
+**2O2_Оптимизации ÑƒÑ€Ð¾Ð²Ð½Ñ 2 (-O1 + быÑтрые оптимизации)
+**2O3_Оптимизации ÑƒÑ€Ð¾Ð²Ð½Ñ 3 (-O2 + медленные оптимизации)
+**2Oa<x>=<y>_УÑтановить выравнивание
+**2Oo[NO]<x>_Включить или отключить отдельные оптимизации, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2Op<x>_Задать процеÑÑор Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2OW<x>_Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° обратной ÑвÑзи wpo Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ <x>, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2Ow<x>_Выполнить оптимизацию <x> вÑей программы, Ñм. fpc -i Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений
+**2Os_ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ размеру вмеÑто ÑкороÑти
+**1pg_ГенеpÐ°Ñ†Ð¸Ñ ÐºÐ¾Ð´Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ gprof (опpеделÑет Ñимвол FPC_PROFILE)
+**1R<x>_Стиль Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°ÑÑемблера:
+**2Rdefault_ÐÑÑемблер по умолчанию Ð´Ð»Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ платформы
+3*2Ratt_Чтение аÑÑемблера в Ñтиле AT&T
+3*2Rintel_Чтение аÑÑемблера в Ñтиле Intel
+6*2RMOT_Чтение аÑÑемблера в Ñтиле Motorola
+**1S<x>_Опции ÑинтакÑиÑа:
+**2S2_То же, что и -Mobjfpc
+**2Sc_Поддеpжка операторов как в C (*=,+=,/= и -=)
+**2sa_Включить проверки Assert
+**2Sd_То же, что и -Mdelphi
+**2Se<x>_Опции ошибок. <x> - ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ñледующих Ñимволов:
+**3*_<n> : ОÑтановка компилÑции поÑле <n> ошибок (по умолчанию 1)
+**3*_w : КомпилÑтор также оÑтанавливаетÑÑ Ð¿Ð¾Ñле предупреждений
+**3*_n : КомпилÑтор также оÑтанавливаетÑÑ Ð¿Ð¾Ñле заметок
+**3*_h : КомпилÑтор также оÑтанавливаетÑÑ Ð¿Ð¾Ñле подÑказок
+**2Sg_Разрешить LABEL и GOTO (по умолчанию в -Mtp и -Mdelphi)
+**2Sh_ИÑпользовать ÑÑ‚pоки ansistring по умолчанию вмеÑто shortstring
+**2Si_Включить вÑтраивание процедур/функций, объÑвленных как "inline"
+**2Sk_Загрузить модуль fpcylix
+**2SI<x>_УÑтановить Ñтиль интерфейÑов в <x>
+**3SIcom_COM-ÑовмеÑтимые интерфейÑÑ‹ (по умолчанию)
+**3SIcorba_CORBA-ÑовмеÑтимые интерфейÑÑ‹
+**2Sm_Поддеpжка макрокоманд как в C (глобально)
+**2So_То же, что и -Mtp
+**2Ss_Ð˜Ð¼Ñ ÐºÐ¾Ð½Ñтруктора должно быть init (Ð¸Ð¼Ñ Ð´ÐµÑтруктора должно быть done)
+**2St_Поддеpжка ключевого Ñлова static в объектах
+**2Sx_Поддержка ключевых Ñлов иÑключений (по умолчанию в режимах Delphi/ObjFPC)
+**1s_Ðе вызывать аÑÑемблер и компоновщик
+**2sh_Создать Ñкрипт Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ на хоÑте
+**2st_Создать Ñкрипт Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ на платформе назначениÑ
+**2sr_ПропуÑтить фазу раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтров (иÑпользуетÑÑ Ñ -alr)
+**1T<x>_ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема назначениÑ:
+3*2Temx_OS/2 через EMX (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ñ€Ð°Ñширитель EMX/RSX)
+3*2Tfreebsd_FreeBSD
+3*2Tgo32v2_ВерÑÐ¸Ñ 2 раÑÑˆÐ¸Ñ€Ð¸Ñ‚ÐµÐ»Ñ DOS DJ Delorie
+3*2Tlinux_Linux
+3*2Tnetbsd_NetBSD
+3*2Tnetware_Модуль Novell Netware (clib)
+3*2Tnetwlibc_Модуль Novell Netware (libc)
+3*2Topenbsd_OpenBSD
+3*2Tos2_OS/2 / eComStation
+3*2Tsunos_SunOS/Solaris
+3*2Tsymbian_Symbian OS
+3*2Twatcom_Watcom-ÑовмеÑтимый раÑширитель DOS
+3*2Twdosx_РаÑширитель DOS WDOSX
+3*2Twin32_Windows 32 бита
+3*2Twince_Windows CE
+4*2Tlinux_Linux
+6*2Tamiga_Commodore Amiga
+6*2Tatari_Atari ST/STe/TT
+6*2Tlinux_Linux/m68k
+6*2Tmacos_Macintosh m68k (не поддерживаетÑÑ)
+6*2Tpalmos_PalmOS
+A*2Tlinux_Linux
+A*2Twince_Windows CE
+P*2Tamiga_AmigaOS на PowerPC
+P*2Tdarwin_Darwin и Mac OS X на PowerPC
+P*2Tlinux_Linux на PowerPC
+P*2Tmacos_Mac OS (classic) на PowerPC
+P*2Tmorphos_MorphOS
+S*2Tlinux_Linux
+**1u<x>_yдалÑет опpеделение Ñимвола <x>
+**1U_Опции модyлей:
+**2Un_Ðе пpовеpÑть ÑоответÑтвие имени модyÐ»Ñ Ð¸ имени файла
+**2Ur_Генерировать релизные файлы модулей (не перекомпилируютÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки)
+**2Us_Компилиpовать модyль system
+**1v<x>_Уровень подpобноÑти. <x> - ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ñледyющих Ñимволов:
+**2*_e : Ошибки (по умолчанию) 0 : Ðичего (кроме ошибок)
+**2*_w : ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ u : Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ модулÑÑ…
+**2*_n : ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ t : Попробованные/иÑпользованные файлы
+**2*_h : ПодÑказки c : УÑловные выражениÑ
+**2*_i : ÐžÐ±Ñ‰Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ d : Отладочные ÑообщениÑ
+**2*_l : Hомеpа Ñтрок c : Режим ÑовмеÑтимоÑти Ñ Rhide/GCC
+**2*_s : Отметки времени q : Ðомера Ñообщений
+**2*_a : Показывать вÑе x : Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ иÑполнÑемом файле (только Win32)
+**2*_b : Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ файлах p : ЗапиÑÑŒ tree.log Ñ Ð³Ñ€Ð°Ñ„Ð¾Ð¼ разбора
+**2*_ Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼Ð¸ путÑми x : ЗапиÑÑŒ fpcdebug.txt Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ð¹
+**2*_ именно в ней отладочной информацией
+**2*_m<x>,<y> : Ðе показывать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Ð½Ð¾Ð¼ÐµÑ€Ð°Ð¼Ð¸ <x> и <y>
+3*1W<x>_Платформенно-Ñпецифичные опции (платформы)
+A*1W<x>_Платформенно-Ñпецифичные опции (платформы)
+P*1W<x>_Платформенно-Ñпецифичные опции (платформы)
+p*1W<x>_Платформенно-Ñпецифичные опции (платформы)
+3*2Wb_Создавать bundle вмеÑто библиотеки (Darwin)
+P*2Wb_Создавать bundle вмеÑто библиотеки (Darwin)
+p*2Wb_Создавать bundle вмеÑто библиотеки (Darwin)
+3*2WB_Создавать перемещаемый образ (Windows)
+A*2WB_Создавать перемещаемый образ (Windows, Symbian)
+3*2WC_Указать конÑольный тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (EMX, OS/2, Windows)
+A*2WC_Указать конÑольный тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Windows)
+P*2WC_Указать конÑольный тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Classic Mac OS)
+3*2WD_ИÑпользовать DEFFILE Ð´Ð»Ñ ÑкÑпорта функции DLL или EXE (Windows)
+A*2WD_ИÑпользовать DEFFILE Ð´Ð»Ñ ÑкÑпорта функции DLL или EXE (Windows)
+3*2We_ИÑпользовать внешние реÑурÑÑ‹ (Darwin)
+P*2We_ИÑпользовать внешние реÑурÑÑ‹ (Darwin)
+p*2We_ИÑпользовать внешние реÑурÑÑ‹ (Darwin)
+3*2WF_Указать полноÑкранный тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (EMX, OS/2)
+3*2WG_Указать графичеÑкий тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (EMX, OS/2, Windows)
+A*2WG_Указать графичеÑкий тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Windows)
+P*2WG_Указать графичеÑкий тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Classic Mac OS)
+3*2Wi_ИÑпользовать внутренние реÑурÑÑ‹ (Darwin)
+P*2Wi_ИÑпользовать внутренние реÑурÑÑ‹ (Darwin)
+p*2Wi_ИÑпользовать внутренние реÑурÑÑ‹ (Darwin)
+3*2WN_Ðе генерировать код перемещениÑ, нужно Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ (Windows)
+A*2WN_Ðе генерировать код перемещениÑ, нужно Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ (Windows)
+3*2WR_Генерировать код Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ (Windows)
+A*2WR_Генерировать код Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ (Windows)
+P*2WT_Указать тип Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ MPW tool (Classic Mac OS)
+3*2WX_Разрешить иÑполнÑемый Ñтек (Linux)
+A*2WX_Разрешить иÑполнÑемый Ñтек (Linux)
+p*2WX_Разрешить иÑполнÑемый Ñтек (Linux)
+P*2WX_Разрешить иÑполнÑемый Ñтек (Linux)
+**1X_опции выполнениÑ
+**2Xc_Передать компоновщику --shared/-dynamic (BeOS, Darwin, FreeBSD, Linux)
+**2Xd_Ðе иÑпользовать Ñтандартный путь поиÑка библиотек (нужно Ð´Ð»Ñ ÐºÑ€Ð¾ÑÑкомпилÑции)
+**2Xe_ИÑпользовать внешний компоновщик
+**2Xg_Создать отладочную информацию в отдельном файле и добавит Ñекцию debuglink в иÑполнÑемый файл
+**2XD_Попробовать Ñкомпоновать динамичеÑки (определÑет Ñимвол FPC_LINK_DYNAMIC)
+**2Xi_ИÑпользовать внутренний компоновщик
+**2Xm_Создать карту компоновки
+**2XM<x>_Задать Ð¸Ð¼Ñ Ð¾Ñновной точки входа 'main' (по умолчанию 'main')
+**2XP<x>_Добавить к именам binutils Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ <x>
+**2Xr<x>_УÑтановить rlink-path компоновщика в <x> (нужно Ð´Ð»Ñ ÐºÑ€Ð¾ÑÑкомпилÑции, Ñм. руководÑтво ld) (BeOS, Linux)
+**2XR<x>_Добавит Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ <x> ко вÑем путÑм поиÑка компоновщика (BeOS, Darwin, FreeBSD, Linux, Mac OS, Solaris)
+**2Xs_Убрать вÑе Ñимволы из иÑполнÑемого файла
+**2XS_Попробовать Ñкомпоновать ÑтатичеÑки (по умолчаению, определÑет Ñимвол FPC_LINK_STATIC)
+**2Xt_Компоновка Ñо ÑтатичеÑкими библиотеками (компоновщику передаетÑÑ -static)
+**2XX_Попробовать "умную" компоновку (определÑет Ñимвол FPC_LINK_SMART)
+**1*_
+**1?_показать ÑÑ‚y Ñправкy
+**1h_показать ÑÑ‚y Ñправкy без ожиданиÑ
+]
+
+#
+# The End...
diff --git a/compiler/msg/errorrw.msg b/compiler/msg/errorrw.msg
deleted file mode 100644
index 33c36b88e9..0000000000
--- a/compiler/msg/errorrw.msg
+++ /dev/null
@@ -1,2017 +0,0 @@
-#
-# $Id: errorr.msg 1.21 2002/01/21 00:00:02 Michail A.Baikov (xakep@gamedot.ru)
-# Ýòîò ôàéë - ÷àñòü ïðîãðàììíîãî ïðîäóêòà Free Pascal Compiler
-# Copyright (c) 1999-2002 by Free Pascal Development Team
-#
-# Ðyññêèé ôàéë (Windows CP1251) ñîîáùåíèé äëÿ Free Pascal Compiler
-#
-# Ñì. ôàéë COPYING.FPC, âêëþ÷åííûé â ýòy ïîñòàâêy,
-# ïî âñåì âîïðîñàì îòíîñèòåëüíî àâòîðñêîãî ïðàâà.
-#
-# Ýòà ïðîãðàììà ðàñïðîñòpàíÿåòñÿ ñ íàäåæäîé, ÷òî îíà áóäåò êîìy-íèáóäü
-# ïîëåçíà, íî ÁÅÇ ÂÑßÊÎÉ ÃÀÐÀÍÒÈÈ! Ìû íå ãàðàíòèðóåì, ÷òî ïðîãðàììà äàæå
-# ñîîòâåòñòâóåò ñâîåé öåëè!
-#
-#
-# Êîíñòàíòû - îáîçíà÷åíèÿ, ïèøóòñÿ â ñëåäyþùåì âèäå:
-# <part>_<type>_<txtidentifier>
-#
-# <part> ýòî òà ÷àñòü êîìïèëÿòîðà, êîòîðàÿ ñîîáùàåò îá îøèáêå:
-# asmr_ ñèíòàêñè÷åñêèé àíàëèç àññåìáëåðà (÷òåíèå àññåìáëåðà)
-# asmw_ ñèíòàêñè÷åñêèé àíàëèç àññåìáëåðà (çàïèñü îáüåêòíûõ ôàéëîâ)
-
-# unit_ îáðàáîòêà ìîäóëÿ
-# scan_ ñêàíåð
-# parser_ ñèíòàêñè÷åñêèé àíàëèçàòîð
-# type_ êîíòðîëü ñîîòâåòñòâèÿ òèïîâ
-# general_ îáùàÿ èíôîðìàöèÿ
-# exec_ âûçîâû àññåìáëåðà, êîìïîíîâùèêà, ðåäàêòîðà
-#
-# <type> òèï ñîîáùåíèÿ:
-# f_ ôàòàëüíàÿ îøèáêà
-# e_ îøèáêà
-# w_ ïðåäóïðåæäåíèå
-# n_ ïðèìå÷àíèå
-# h_ ïîäñêàçêà
-# i_ èíôîðìàöèÿ
-# l_ íîìåp ñòpîêè
-# u_ èñïîëüçîâàíèå
-# t_ ïîïûòêà èñïîëüçîâàòü
-# m_ ìàêðîêîìàíäà
-# p_ ïðîöåäóðà
-# c_ óñëîâíîå âûðàæåíèå
-# d_ ñîîáùåíèå äëÿ îòëàäêè
-# b_ îòîáðàæàåò ïåðåãðóæåííûå ïðîöåäóðû è ôóíêöèè
-# x_ èíôîðìàöèÿ äëÿ èñïîëíÿåìûõ ôàéëîâ
-#
-
-#
-# Îáùåå
-#
-# 01016 ïîñëåäíèé íîìåð èñïîëüçîâàííîãî ñîîáùåíèÿ
-#
-# BeginOfTeX
-% \section{Îáùèå ñîîáùåíèÿ êîìïèëÿòîðà}
-% Ýòîò ðàçäåë äàåò ñîîáùåíèÿ êîìïèëÿòîðà, êîòîðûå íå ôàòàëüíû, íî êîòîðûå
-% îòîáðàæàþò ïîëåçíóþ èíôîðìàöèþ. ×èñëî òàêèõ ñîîáùåíèé ìîæåò áûòü
-% óïðàâëÿåìûì ñ ðàçëè÷íûìè íàñòpîéêàìè ypîâíÿ \var{-v} ëîãèëèpîâàíèÿ.
-% \begin {îïèñàíèå}
-general_t_compilername=01000_T_Êîìïèëÿòîp: $1
-% Êîãäà \var{-vt} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì, êàêîé
-% êîìïèëÿòîð èñïîëüçóåòñÿ.
-general_d_sourceos=01001_D_Êîìïèëèðóåòñÿ íà OS: $1
-% Êîãäà \var{-vd} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì, â êàêîé
-% îïåðàöèîííîé ñèñòåìå, ñîçäàåòñÿ ôàéë.
-general_i_targetos=01002_I_Ñîçäàåòñÿ äëÿ OS: $1
-% Êîãäà \var{-vd} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì, äëÿ êàêîé
-% îïåðàöèîííîé ñèñòåìû ñîçäàåòñÿ ôàéë
-general_t_exepath=01003_T_Èñïîëüçyåì ïyòü äëÿ áèíàpíûõ ôàéëîâ: $1
-% Êîãäà \var{-vt} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì,
-% ãäå êîìïèëÿòîðà èùåò áèíàpíûå ôàéëû.
-general_t_unitpath=01004_T_Èñïîëüçyåì ïóòü äî ìîäóëåé: $1
-% Êîãäà \var{-vt} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì,
-% ãäå êîìïèëÿòîð èùåò êîìïèëèðóåìûå ìîäóëè. Âû ìîæåòå óñòàíàâëèâàòü ýòîò ïóòü
-% ÷åpåç \var{-Fu} èëè \var{-Up} îïöèè.
-general_t_includepath=01005_T_Èñïîëüçyåì ïyòü äëÿ âêëþ÷àåìûõ ôàéëîâ: $1
-% Êîãäà \var{-vt} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì, ãäå
-% êîìïèëÿòîð èùåò ôàéëû äëÿ âêëþ÷åíèÿ (ôàéëû, èñïîëüçóåìûå â \var{\{\$I xxx\}}
-% âûpàæåíèÿõ). Âû ìîæåòå óñòàíàâëèâàòü ýòîò ïóòü ÷åpåç \var{-I} îïöèþ.
-general_t_librarypath=01006_T_Èñïîëüçyåì ïyòü äî áèáëèîòåê: $1
-% Êîãäà \var{-vt} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì, ãäå
-% êîìïèëÿòîð èùåò áèáëèîòåêè. Âû ìîæåòå óñòàíàâëèâàòü ýòîò ïóòü ÷åpåç
-% \var{-Fl} îïöèþ.
-general_t_objectpath=01007_T_Èñïîëüçyåì ïyòü äî îáúåêòíûõ ôàéëîâ: $1
-% Êîãäà \var{-vt} êëþ÷ èñïîëüçóåòñÿ, ýòà ñòðîêà, ñîîáùàåò âàì, ãäå
-% êîìïèëÿòîð èùåò îáúåêòíûå ôàéëû, Âû ñâÿçûâàåòå â (ôàéëû,
-% èñïîëüçóþòñÿ â \var{\{\$L xxx \}} âûpàæåíèÿõ).
-% Âû ìîæåòå óñòàíàâëèâàòü ýòîò ïóòü ÷åpåç \var{-Fo} îïöèþ.
-general_i_abslines_compiled=01008_I_$1 ëèíèé ñêîìïèëèpîâàííî, $2 ñåê.
-% Êîãäà \var{-vi} êëþ÷ èñïîëüçóåòñÿ, êîìïèëÿòîð, ñîîáùàåò ÷èñëî
-% ñêîìïèëèpîâàííûõ ñòðîê, è âðåìåíè, êîòîðîå ïîòpåáîâàëîñü äëÿ ýòîãî.
-% (ðåàëüíîå âðåìÿ, íå ïðîãðàììèpyåìîå âðåìÿ).
-general_f_no_memory_left=01009_F_Håò ñâîáîäíîé ïàìÿòè
-% Êîìïèëÿòîð íå èìååò äîñòàòî÷íî ïàìÿòè, ÷òîáû êîìïèëèðîâàòü âàøó ïðîãðàììó.
-% Èìååòñÿ íåñêîëüêî påêîìåíäàöèé äëÿ påøåíèÿ ýòîãî âîïpîñà:
-% \begin{itemsize}
-% \item Åñëè âû èñïîëüçóåòå ôîðìèðóþùóþñÿ îïöèþ êîìïèëÿòîðà, ïðîáóéòå
-% êîìïèëèðîâàòü ðàçëè÷íûå ìîäóëè âðó÷íóþ.
-% \item Åñëè âû êîìïèëèðóåòå, îãðîìíyþ ïðîãðàììy, ðàçáèâàéòå åå íà ìîäóëè, è
-% êîìïèëèðóéòå èõ îòäåëüíî.
-% \item Åñëè ïðåäûäóùèå äâà ïyíêòà íå ðàáîòàþò, ïåðåòðàíñëèðyéòå êîìïèëÿòîð
-% ñ áîëüøèì pàçìåpîì êy÷è (âû ìîæåòå èñïîëüçîâàòü \var{-Ch} îïöèþ äëÿ ýòîãî, \seeo{Ch})
-% \end {itemsize}
-% \end {îïèñàíèå}
-general_i_writingresourcefile=01010_I_Çàïèñûâàåì ôàéë-òàáëèöy ñòpîêîâûõ påñypñîâ: $1
-% This message is shown when the compiler writes the Resource String Table
-% file containing all the resource strings for a program.
-general_e_errorwritingresourcefile=01011_E_Îøèáêà ïpè çàïèñè ôàéëà-òàáëèöû ñòpîêîâûõ påñypñîâ: $1
-% This message is shown when the compiler encountered an error when writing
-% the Resource String Table file
-general_i_fatal=01012_I_Fatal:
-% Prefix for Fatal Errors
-general_i_error=01013_I_Error:
-% Prefix for Errors
-general_i_warning=01014_I_Warning:
-% Prefix for Warnings
-general_i_note=01015_I_Note:
-% Prefix for Notes
-general_i_hint=01016_I_Hint:
-% Prefix for Hints
-
-% \end{description}
-
-
-#
-# Ñêàíåð
-#
-% \section {Ñîîáùåíèÿ ñêàíåðà.}
-% Ýòîò ðàçäåë ïåðå÷èñëÿåò ñîîáùåíèÿ, êîòîpûå âûäàåò ñêàíåð. Ñêàíåð áåðåò çàáîòó
-% î ëåêñè÷åñêîé ñòðóêòóðå ôàéëà Free Pascal, òî åñòü îí ïpîáyåò íàõîäèòü
-% çàðåçåðâèðîâàííûå ñëîâà, ñòðîêè, è ò.ä. Îí òàêæå çàáîòèòñÿ î äèðåêòèâàõ è
-% óñëîâíûõ âûðàæåíèÿõ âëèÿþùèå íà îápàáîòêy ïpîãpàììû êîìïèëÿòîpîì.
-% \begin {îïèñàíèå}
-scan_f_end_of_file=02000_F_Håîæèäàííûé êîíåö ôàéëà
-% Ýòî îáû÷íî ñëó÷àåòñÿ â ñëåäóþùèõ ñëó÷àÿõ:
-% \begin{itemsize}
-% \item Èñõîäíûé ôàéë çàêàí÷èâàåòñÿ äî ïîñëåäíåãî \var{end} âûpàæåíèÿ.
-% Ýòî ñëó÷àåòñÿ îáû÷íî, êîãäà \var{begin} è \var{end} âûpàæåíèÿ íå
-% ñáàëàíñèðîâàííûé (íå îäèíàêîâîå êîëè÷åñòâî);
-% \item Âêëþ÷àåìûé ôàéë çàêàí÷èâàåòñÿ â ñåðåäèíå âûpàæåíèÿ.
-% \item Êîììåíòàðèé íå áûë çàêðûò (ôèãypíîé ñêîáêîé èëè åùå êàê)
-% \end{itemsize}
-scan_f_string_exceeds_line=02001_F_Håâîçìîæíî íàéòè êîíåö ñòpîêè
-% Âû, âîçìîæíî, çàáûëè âêëþ÷èòü çàêðûòèå ' ñòpîêè, òàê ÷òî ñòpîêà çàíèìàåò
-% íåñêîëüêî ëèíèé êîäà (ñòpîê).
-scan_f_illegal_char=02002_F_Çàïpåùåííûé ñèìâîë "$1" ($2)
-% Ñêàíåp ñòîëêíyëñÿ ñ çàïðåùåííûì ñèìâîëîì âî âõîäíîì ôàéëå.
-scan_f_syn_expected=02003_F_Ñèíòàêñè÷åñêàÿ îøèáêà: îæèäàåòñÿ "$1", íî íàøëè "$2"
-% Ýòî óêàçûâàåò, ÷òî êîìïèëÿòîð îæèäàë äpyãyþ ëåêñåìó (èëè ìàðêåð) ÷åì
-% òîò, êîòîðûé âû íàïå÷àòàëè. Ýòî ìîæåò ïðîèñõîäèòü ïî÷òè âñþäó, ãäå
-% Âû ïèøèòå íå ïî çàêîíàì ÿçûêà Ïàñêàëü.
-scan_t_start_include_file=02004_T_Hà÷èíàþ ÷òåíèå âêëþ÷àåìîãî ôàéëà $1
-% Êîãäà Âû îáåñïå÷èâàåòå \var{-vt} êëþ÷, êîìïèëÿòîð, ñîîáùàåò Âàì
-% êîãäà îí íà÷èíàåò ÷èòàòü âêëþ÷àåìûé ôàéë.
-scan_w_comment_level=02005_W_Hàéäåí $1 ypîâåíü êîììåíòàpèÿ
-% Êîãäà \var{-vw} êëþ÷ èñïîëüçóåòñÿ, òî êîìïèëÿòîð ïðåäóïðåæäàåò Âàñ,
-% åñëè îí íàõîäèò âëîæåííûå êîììåíòàðèè. Âëîæåííûå êîììåíòàðèè íå ïîçâîëÿþòñÿ â
-% Turbo Pascal è ýòî ìîæåò áûòü èñòî÷íèêîì îøèáîê.
-scan_n_far_directive_ignored=02006_N_$F äèðåêòèâà (FAR) èãíîðèðóåòñÿ
-% \var{FAR} äèðåêòèâà ýòî 16-ðàçðÿäíàÿ êîíñòðóêöèÿ, êîòîðàÿ ÿâëÿåòñÿ
-% ïîääåpæèâàåìîé, íî èãíîðèðóåìàÿ êîìïèëÿòîðîì, òàê êàê îí ïðîèçâîäèò
-% 32 ðàçðÿäíûõ êîä.
-scan_n_stack_check_global_under_linux=02007_N_Linux ïpîâåpÿåò ñòåê àâòîìàòè÷åñêè
-% Ïðîâåðêà ñòåêà ñ \var{-Cs} êëþ÷ èãíîðèðóåòñÿ ïîä \linux, òàê êàê
-% \linux äåëàåò ýòî çà Âàñ. Îòîápàæàåòñÿ òîëüêî, êîãäà \var{-vn} èñïîëüçóåòñÿ.
-scan_n_ignored_switch=02008_N_Èãíîpèpyåìûé êîìïèëÿòîðîì êëþ÷ $1
-% Ñ âêëþ÷åííûì \var{-vn}, êîìïèëÿòîð ïðåäóïðåæäàåò, åñëè îí èãíîðèðóåò êëþ÷
-scan_w_illegal_switch=02009_W_Håèçâåñòíûé êëþ÷ êîìïèëÿòîpà $1
-% Âû âêëþ÷èëè êëþ÷ êîìïèëÿòîðà (òî åñòü \var{\{\$... \}}) êîòîðûé
-% êîìïèëÿòîð íå çíàåò.
-scan_w_switch_is_global=02010_W_Ýòîò êëþ÷ êîìïèëÿòîðà èìååò ãëîáàëüíûé ñòàòyñ
-% Êîãäà \var{-vw} èñïîëüçóåòñÿ, êîìïèëÿòîð ïðåäóïðåæäàåò, åñëè êëþ÷ ãëîáàëåí.
-scan_e_illegal_char_const=02011_E_Håèçâåñòíûé ñèìâîë â êîíñòàíòå
-% Ýòî ñëó÷àåòñÿ, êîãäà Âû îïðåäåëÿåòå ñèìâîë ñ êîäîì ASCII, ïîñêîëüêó â
-% \var{\#96}, íî íîìåð ÿâëÿåòñÿ èëè çàïðåùåííûì, èëè âíå äèàïàçîíà.
-% Äèàïàçîí - 1-255.
-scan_f_cannot_open_input=02012_F_Hå ìîãy îòêpûòü ôàéë $1
-% \fpc íå ìîæåò íàéòè ïðîãðàììó èëè èñõîäíûé ôàéë ìîäóëÿ, êîòîðûé Âû
-% îïðåäåëèëè â êîìàíäíîé ñòðîêå.
-scan_f_cannot_open_includefile=02013_F_Hå ìîãy îòêpûòü âêëþ÷àåìûé ôàéë $1
-% \fpc íå ìîæåò íàéòè èñõîäíûé ôàéë, êîòîpûé âû îïðåäåëèëè â \var{\{\$include \}}
-% âûpàæåíèè.
-scan_e_too_much_endifs=02014_E_Ñëèøêîì ìíîãî $ENDIF èëè $ELSE äèpåêòèâ
-% Âàø \var{\{\$IFDEF.. \}} è {\{\$ENDIF} \}} âûpàæåíèÿ íå èìåþò îäèíàêîâîå êîë-âî.
-scan_w_only_pack_records=02015_W_Record ïîëÿ ìîãyò âûðàâíèâàòüñÿ òîëüêî ê 1,2,4 èëè 16 áàéòàì
-% Âû îïðåäåëÿåòå \var{\{\$PACKRECORDS n\} } ñ çàïðåùåííûì çíà÷åíèåì äëÿ
-% \var{n}. Òîëüêî 1,2,4 èëè 16 äîïóñòèìî â ýòîì ñëó÷àå.
-scan_w_only_pack_enum=02016_W_Ïåpå÷èñëåíèÿ ìîãyò áûòü ñîõðàíåíû òîëüêî â 1,2 èëè 4 áàéòàõ
-% Âû îïðåäåëÿåòå \var{\{\$PACKENUM n \}} ñ çàïðåùåííûì çíà÷åíèåì äëÿ
-% \var {n}. Òîëüêî 1,2 èëè 4 äîïóñòèìî â ýòîì ñëó÷àå.
-scan_e_endif_expected=02017_E_$1 îæèäàåòñÿ äëÿ $2 îïðåäåëåíèÿ â ñòðîêå $3
-% Âàøè óñëîâíûå óòâåðæäåíèÿ òðàíñëÿöèè íåñáàëàíñèðîâàííû.
-scan_e_preproc_syntax_error=02018_E_Ñèíòàêñè÷åñêàÿ îøèáêà ïðè àíàëèçå âûðàæåíèÿ äëÿ êîìïèëÿòîpà
-% Â óñëîâíîì âûðàæåíèè èìååòñÿ îøèáêà ïîñëå \var{\{\$if \}} äèðåêòèâû êîìïèëÿòîðà.
-scan_e_error_in_preproc_expr=02019_E_Îøèáêà â pàñ÷åòå âûðàæåíèÿ ïpåïpîöåññîpà äëÿ êîìïèëèðîâàíèÿ
-% Â óñëîâíîì âûðàæåíèè èìååòñÿ îøèáêà ïîñëå \var{\{\$if \}} äèðåêòèâû êîìïèëÿòîðà.
-scan_w_macro_cut_after_255_chars=02020_W_Äëÿ pàñ÷åòà âûpàæåíèÿ, äëèíà ìàêpîñà ñîêpàùåíà äî 255 ñèìâîëîâ
-% Âûðàæåíèÿ ñîäåðæàùèå ìàêðîêîìàíäû íå ìîæåò áûòü áîëüøå ÷åì 255 ñèìâîëîâ.
-% Ýòî ÿâëÿåòñÿ ÷àñòüþ áåçîïàñíîñòè â êîìïèëÿòîðå, ýòî ïðåäîòâðàùàåò áóôåðíûå
-% ïåðåïîëíåíèå. Ýòî ïîêàçûâàåòñÿ êàê ïðåäóïðåæäåíèå, òî åñòü
-% êîãäà êëþ÷ \var{-vw} èñïîëüçyåòñÿ.
-scan_e_endif_without_if=02021_E_ENDIF áåç IF{N}DEF
-% Âàø \var{\{\$IFDEF.. \}} è {\ {\$ENDIF \}} óòâåðæäåíèÿ íå ñáàëàíñèðîâàíû.
-scan_f_user_defined=02022_F_Ïîëüçîâàòåëü îïðåäåëèë $1
-% Ïpîèçîøëà îïðåäåëÿåìàÿ ïîëüçîâàòåëåì ôàòàëüíàÿ îøèáêà. Ñì. òàêæå \progref
-scan_e_user_defined=02023_E_Ïîëüçîâàòåëü îïpåäåëèë $1
-% Ïpîèçîøëà îïðåäåëÿåìàÿ ïîëüçîâàòåëåì îøèáêà. Ñì. òàêæå \progref
-scan_w_user_defined=02024_W_Ïîëüçîâàòåëü îïpåäåëèë $1
-% Ïpîèçîøëî îïðåäåëÿåìîå ïîëüçîâàòåëåì ïðåäóïðåæäåíèå. Ñì. òàêæå \progref
-scan_n_user_defined=02025_N_Ïîëüçîâàòåëü îïpåäåëèë $1
-% Ñòîëêíyëèñü ñ îïðåäåëÿåìûì ïîëüçîâàòåëåì ïðèìå÷àíèåì. Ñì. òàêæå \progref
-scan_h_user_defined=02026_H_Ïîëüçîâàòåëü îïpåäåëèë $1
-% Ñòîëêíyëèñü ñ îïðåäåëÿåìîé ïîëüçîâàòåëåì ïîäñêàçêîé. Ñì. òàêæå \progref
-scan_i_user_defined=02027_I_Ïîëüçîâàòåëü îïpåäåëèë $1
-% Ñòîëêíyëèñü ñ îïðåäåëÿåìîé ïîëüçîâàòåëåì ïîäñêàçêîé. Ñì. òàêæå \progref
-scan_e_keyword_cant_be_a_macro=02028_E_Êëþ÷åâîå ñëîâî ïåðåîïðåäåëåíî, ïîñêîëüêó ìàêðîêîìàíäà íå èìååò íèêàêîãî ýôôåêòà
-% Âû íå ìîæåòå ïåðåîïðåäåëÿòü êëþ÷åâûå ñëîâà ñ ìàêðîêîìàíäàìè.
-scan_f_macro_buffer_overflow=02029_F_Áyôåp ìàêpîñîâ ïåðåïîëíåí ïðè ÷òåíèè èëè ðàñøèðåíèè ìàêðîêîìàíäû
-% Âàø ìàêpîñ èëè ðåçóëüòàò, ñëèøêîì äëèíåí äëÿ êîìïèëÿòîðà.
-scan_w_macro_deep_ten=02030_W_Ðàñøèpåíèå ìàêðîêîìàíäû ïðåâûøàåò âîçìîæíûé ypîâåíü (áîëåå 16).
-% Ïðè ðàñøèðåíèè ìàêðîêîìàíäû áûëî èñïîëüçîâàíî áîëåå 16 ypîâíåé âëîæåííîñòè.
-% Êîìïèëÿòîð íå ìîæåò pàñøèpèòü ìàêpîñ, òàê êàê ýòî ìîæåò áûòü çíàê, ÷òî
-% èñïîëüçyåòñÿ ðåêóðñèÿ
-scan_e_wrong_styled_switch=02031_E_Ïåpåêëþ÷àòåëè êîìïèëÿòîpà íå ïîçâîëÿþò èñïîëüçîâàòü (* è *) ñòèëü êîììåíòàpèåâ.
-% Ïåðåêëþ÷àòåëè êîìïèëÿòîðà äîëæíû âñåãäà áûòü ìåæäó \var{\{\ }} ðàçäåëèòåëÿìè êîììåíòàðèÿ.
-scan_d_handling_switch=02032_D_Ïpîâåpÿåì êëþ÷ "$1"
-% Êîãäà Âû âêëþ÷àåòå èíôîðìàöèþ äëÿ îòëàäêè (\var{-vd}), êîìïèëÿòîð ñîîáùàåò
-% âàì, êîãäà îí îöåíèâàåò óñëîâíîå âûðàæåíèå, âëèÿþùåå íà êîìïèëÿöèþ.
-scan_c_endif_found=02033_C_ENDIF $1 íàéäåí
-% Êîãäà Âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var{-vc}), êîìïèëÿòîð ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè.
-scan_c_ifdef_found=02034_C_IFDEF $1 íàéäåí, $2
-% Êîãäà Âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var{-vc}), êîìïèëÿòîð, ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè.
-scan_c_ifopt_found=02035_C_IFOPT $1 íàéäåí, $2
-% Êîãäà âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var{-vc}), êîìïèëÿòîð, ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè.
-scan_c_if_found=02036_C_IF $1 íàéäåí, $2
-% Êîãäà âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var{-vc}), êîìïèëÿòîð, ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè.
-scan_c_ifndef_found=02037_C_IFNDEF $1 íàéäåí, $2
-% Êîãäà âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var {-vc}), êîìïèëÿòîð, ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè.
-scan_c_else_found=02038_C_ELSE $1 íàéäåí, $2
-% Êîãäà âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var{-vc}), êîìïèëÿòîð, ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè.
-scan_c_skipping_until=02039_C_Ïpîïyñêàåì äî ...
-% Êîãäà âû âêëþ÷àåòå óñëîâíûå ñîîáùåíèÿ (\var{-vc}), êîìïèëÿòîð ñîîáùàåò âàì
-% ãäå îí ñòàëêèâàåòñÿ ñ óñëîâíûìè óòâåðæäåíèÿìè, è ïðîïóñêàåò ëè ýòî èëè íåò.
-scan_i_press_enter=02040_I_Hàæìèòå <ENTER>, ÷òîáû ïðîäîëæèòü
-% Êîãäà èñïîëüçyåòñÿ \var{-vi} êëþ÷, êîìïèëÿòîð îñòàíàâëèâàåò
-% òðàíñëÿöèè è æäåò \var{enter} êëàâèøy, êîòîðàÿ áóäåò íàæàòà, êîãäà îí
-% ñòîëêíåòñÿ ñ äèpåêòèâîé \var {\{\$STOP\}}.
-scan_w_unsupported_switch=02041_W_Håïîääåpæèâàåìûé êëþ÷ $1
-% Êîãäà ïpåäyïpåæäåíèÿ âêëþ÷åíû (\var{-vw}), êîìïèëÿòîð ïðåäóïðåæäàåò âàñ
-% îòíîñèòåëüíî íåïîääåðæèâàåìûõ êëþ÷åé. Ýòî îçíà÷àåò ÷òî, êëþ÷ èñïîëüçóåòñÿ
-% â Delphi èëè Turbo Pascal, íî íå â \fpc
-scan_w_illegal_directive=02042_W_Håïpàâèëüíàÿ äèðåêòèâà êîìïèëÿòîðà $1
-% Êîãäà ïpåäyïpåæäåíèÿ âêëþ÷åíû (\var{-vw}), êîìïèëÿòîð ïðåäóïðåæäàåò âàñ
-% îòíîñèòåëüíî íåïðèçíàííûõ äèpåêòèâ. Äëÿ ñïèñêà ðàñïîçíàííûõ äèpåêòèâ, ñì. \progref
-scan_t_back_in=02043_T_Âîçpàùàåìñÿ â $1
-% Êîãäà âû èñïîëüçóåòå (\var{-vt}) êîìïèëÿòîð, ñîîáùàåò âàì, êîãäà îí
-% çàêîí÷èë ÷èòàòü âêëþ÷àåìûé ôàéë.
-scan_w_unsupported_app_type=02044_W_Håïîääåpæèâàåìûé òèï ïpèëîæåíèÿ: $1
-% Âû ïîëó÷àåòå ýòî ïðåäóïðåæäåíèå, êîãäà îïðåäåëÿåòå íåèçâåñòíûé òèï
-% ïðèëîæåíèÿ ñ äèðåêòèâîé $APPTYPE
-scan_w_app_type_not_support=02045_W_$APPTYPE íå ïîääåðæèâàåòñÿ ñèñòåìîé äëÿ êîòîpîé âû êîìïèëèpyåòå ôàéë
-% $APPTYPE äèðåêòèâà îáåñïå÷èâàåòñÿ òîëüêî win32 ïðèëîæåíèÿìè.
-scan_w_description_not_support=02046_W_Òåã DESCRIPTION íå ïîääåðæèâàåòñÿ ñèñòåìîé äëÿ êîòîpîé âû êîìïèëèpyåòå ôàéë
-% Òåã \var{\{\$DESCRIPTION\}} ïîääåðæèâàåòñÿ òîëüêî íà ñèñòåìàõ OS/2 è Win32.
-scan_n_version_not_support=02047_N_Òåã VERSION íå ïîääåðæèâàåòñÿ ñèñòåìîé äëÿ êîòîpîé âû êîìïèëèpyåòå ôàéë
-% Òåã \var{\{\$VERSION\}} ïîääåðæèâàåòñÿ òîëüêî â Win32 ñèñòåìàõ.
-scan_n_only_exe_version=02048_N_Òåã VERSION èñïîëüçóåòñÿ òîëüêî äëÿ .EXE è .DLL èñõîäíèêîâ.
-% Òåã \var{\{\$VERSION\}} èñïîëüçóåòñÿ òîëüêî äëÿ .EXE è .DLL èñõîäíèêîâ.
-scan_w_wrong_version_ignored=02049_W_Íåâåðíûé ôîðìàò äëÿ òåãà VERSION äëÿ äèðåêòèâû $1
-% The \var{\{\$VERSION\}} directive format is major_version.minor_version
-% where major_version and minor_version are words.
-scan_w_unsupported_asmmode_specifier=02050_W_Håïîääåpæèâàåìûé ñòèëü àññåìáëåpà â $1
-% Êîãäà Âû îïðåäåëÿåòå ðåæèì àññåìáëåðà ñ \var{\{\$ASMMODE xxx\}}
-% êîìïèëÿòîð íå ðàñïîçíàâàë ðåæèì, êîòîðûé Âû òàì yêàçàëè.
-% \end {îïèñàíèå}
-scan_w_no_asm_reader_switch_inside_asm=02051_W_Êëþ÷ àññåìáëåpà: íåâîçìîæíàÿ âíyòpåííÿÿ èíñòpyêöèÿ àññåìáëåpà, $1 áyäåò ýôôåêòèâíà òîëüêî â ñëåäyþùèé pàç
-% It is not possible to switch from one assembler reader to another
-% inside an assmebler block. The new reader will be used for next
-% assembler statement only.
-scan_e_wrong_switch_toggle=02052_E_Håâåpíûé påæèì ïåðåêëþ÷àòåëÿ, èñïîëüçóéòå ON/OFF èëè +/-
-% You need to use ON or OFF or a + or - to toggle the switch
-scan_e_resourcefiles_not_supported=02053_E_Ôàéëû påñypñîâ íå ïîääåðæèâàåòñÿ ñèñòåìîé äëÿ êîòîpîé âû êîìïèëèpyåòå ôàéë
-% The target you are compiling for doesn't support Resource files. The
-% only target which can use resource files is Win32
-scan_w_include_env_not_found=02054_W_Âêëþ÷àåìàÿ ïåpåìåííàÿ îêpyæåíèÿ $1 íå íàéäåíà â îêpyæåíèè ñèñòåìû
-% The included environment variable can't be found in the environment, it'll
-% be replaced by an empty string instead.
-scan_e_invalid_maxfpureg_value=02055_E_Íåâåðíîå çíà÷åíèå äëÿ ãðàíèöû ðåãèñòðà ñîïðîöåññîðà
-% Valid values for this directive are 0..8 and NORMAL/DEFAULT
-scan_w_only_one_resourcefile_supported=02056_W_Äëÿ ýòîé ñèñòåìû ïîääåðæèâàþòñÿ òîëüêî îäèí ôàéë ðåñóðñîâ
-% The target you are compiling for supports only one resource file. This is the
-% case of OS/2 (EMX) currently. The first resource file found is used, the
-% others are discarded.
-scan_w_macro_support_turned_off=02057_W_Ïîääåpæêà ìàêpîñîâ áûëà îòêëþ÷åíà
-% A macro declaration has been found, but macro support is currently off,
-% so the declaration will be ignored. To turn macro support on compile with
-% -Sm on the commandline or add {$MACRO ON} in the source
-scan_e_invalid_interface_type=02058_E_Óêàçàí íåâåðíûé òèï interface. Ïðàâèëüíûå òîëüêî COM, COBRA èëè DEFAULT
-% The interface type that was specified is not supported
-scan_w_appid_not_support=02059_W_APPID ïîääåðæèâàåòñÿ òîëüêî äëÿ PalmOS
-% The \var{\{\$APPID\}} directive is only supported for the PalmOS target.
-scan_w_appname_not_support=02060_W_APPNAME ïîääåðæèâàåòñÿ òîëüêî äëÿ PalmOS
-% The \var{\{\$APPNAME\}} directive is only supported for the PalmOS target.
-scan_e_string_exceeds_255_chars=02061_E_Êîíñòàíòà ñòðîê íå ìîæåò áûòü áîëåå ÷åì 255 ñèìâîëîâ
-% A single string constant can contain at most 255 chars. Try splitting up the
-% string in multiple smaller parts and concatenate them with a + operator.
-% \end{description}
-
-#
-# Ñèíòàêñè÷åñêèé àíàëèçàòîð
-#
-% \section {ñîîáùåíèÿ ñèíòàêñè÷åñêîãî àíàëèçàòîðà}
-% Ýòîò ðàçäåë ïåðå÷èñëÿåò âñå ñîîáùåíèÿ ñèíòàêñè÷åñêîãî àíàëèçàòîðà.
-% Ñèíòàêñè÷åñêèé àíàëèçàòîð çàáîòèòñÿ î ñåìàíòèêå ÿçûêà, òî åñòü îí
-% îïðåäåëÿåò, ïðàâèëåí ëè âàø Ïàñêàëü.
-% \begin {îïèñàíèå}
-parser_e_syntax_error=03000_E_Ñèíòàêñè÷åñêàÿ îøèáêà (àíàëèçàòîð)
-% An error against the Turbo Pascal language was encountered. This happens
-% typically when an illegal character is found in the sources file.
-parser_w_proc_far_ignored=03001_W_Ïpîöåäypà èìååò òèï FAR - èãíîpèpyåì
-% This is a warning. \var{FAR} is a construct for 8 or 16 bit programs. Since
-% the compile generates 32 bit programs, it ignores this directive.
-parser_w_proc_near_ignored=03002_W_Ïpîöåäypà èìååò òèï NEAR - èãíîpèpyåì
-% This is a warning. \var{NEAR} is a construct for 8 or 16 bit programs. Since
-% the compile generates 32 bit programs, it ignores this directive.
-parser_w_proc_interrupt_ignored=03003_W_Ïðîöåäóðíûé òèï INTERRUPT èãíîðèðóåòñÿ äëÿ íå i386 ïðîöåññîðîâ
-% This is a warning. \var{INTERRUPT} is a i386 specific construct
-% and is ignored for other processors.
-parser_e_dont_nest_interrupt=03004_E_INTERRUPT ïðîöåäóðà íå ìîæåò áûòü âëîæåííîé
-% An \VAR{INTERRUPT} procedure must be global.
-parser_w_proc_directive_ignored=03005_W_Ïðîöåäóðíûé òèï $1 èãíîðèðóåòñÿ
-% This is a warning. \var{REGISTER},\var{REINTRODUCE} is ignored by FPC programs for now.
-% This is introduced first for Delphi compatibility.
-parser_e_no_overload_for_all_procs=03006_E_Íå âñå îïðåäåëåíèÿ $1 îïðåäåëåíû êàê OVERLOAD
-% When you want to use overloading using the \var{OVERLOAD} directive, then
-% all declarations need to have \var{OVERLOAD} specified.
-parser_e_no_dll_file_specified=03007_E_DLL-ôàéë íå yêàçàí
-% No longer in use.
-parser_e_export_name_double=03008_E_Èìÿ ôyíêöèè ýêñïîpòèpyåòñÿ äâàæäû $1
-% Exported function names inside a specific DLL must all be different
-parser_e_export_ordinal_double=03009_E_Èíäåêñ ôyíêöèè ýêñïîpòèpyåòñÿ äâàæäû $1
-% Exported function names inside a specific DLL must all be different
-parser_e_export_invalid_index=03010_E_Håâåpíûé èíäåêñ y ýêñïîpòèpyåìîé ôyíêöèè
-% DLL function index must be in the range \var{1..\$FFFF}
-parser_w_parser_reloc_no_debug=03011_W_Ïåðåìåùàåìûé DLL/EXE ôàéë $1 îòëàäî÷íóþ èíôîðìàöèþ íå ñîäåðæèò, îòêëþ÷åíî.
-parser_w_parser_win32_debug_needs_WN=03012_W_Äëÿ ïîääåðæêè îòëàäêè Win32-êîäà, âàì íåîáõîäèìî îòêëþ÷àòü ïåðåìåùåíèå ñ îïöèåé -WN
-% Stabs info is wrong for relocatable DLL or EXES use -WN
-% if you want to debug win32 executables.
-parser_e_constructorname_must_be_init=03013_E_Êîíñòpyêòîp äîëæåí èìåòü èìÿ INIT
-% You are declaring a constructor with a name which isn't \var{init}, and the
-% \var{-Ss} switch is in effect. See the \var{-Ss} switch (\seeo{Ss}).
-parser_e_destructorname_must_be_done=03014_E_Äåñòpyêòîp äîëæåí èìåòü èìÿ DONE
-% You are declaring a constructor with a name which isn't \var{done}, and the
-% \var{-Ss} switch is in effect. See the \var{-Ss} switch (\seeo{Ss}).
-parser_e_illegal_open_parameter=03015_E_Håïpàâèëüíî îôîpìëåííûå 'îòêpûòûå ïàpàìåòpû'
-% You are trying to use the wrong type for an open parameter.
-parser_e_proc_inline_not_supported=03016_E_Ïpîöåäypíûé òèï INLINE íå ïîääåpæèâàåòñÿ
-% You tried to compile a program with C++ style inlining, and forgot to
-% specify the \var{-Si} option (\seeo{Si}). The compiler doesn't support C++
-% styled inlining by default.
-parser_w_priv_meth_not_virtual=03017_W_Private ìåòîäû íå ìîãyò áûòü âèpòyàëüíûìè
-% You declared a method in the private part of a object (class) as
-% \var{virtual}. This is not allowed. Private methods cannot be overridden
-% anyway.
-parser_w_constructor_should_be_public=03018_W_Êîíñòpyêòîp äîëæåí áûòü public
-% Constructors must be in the 'public' part of an object (class) declaration.
-parser_w_destructor_should_be_public=03019_W_Äåñòpyêòîp äîëæåí áûòü public
-% Destructors must be in the 'public' part of an object (class) declaration.
-parser_n_only_one_destructor=03020_N_Êëàññ ìîæåò èìåòü òîëüêî îäèí äåñòpyêòîp
-% You can declare only one destructor for a class.
-parser_e_no_local_objects=03021_E_Îïpåäåëåíèÿ ëîêàëüíûõ êëàññîâ íå ïîääåpæèâàåòñÿ
-% Classes must be defined globally. They cannot be defined inside a
-% procedure or function
-parser_f_no_anonym_objects=03022_F_Îïpåäåëåíèÿ íåèçâåñòíûõ êëàññîâ íå ïîääåpæèâàåòñÿ
-% An invalid object (class) declaration was encountered, i.e. an
-% object or class without methods that isn't derived from another object or
-% class. For example:
-% \begin{verbatim}
-% Type o = object
-% a : longint;
-% end;
-% \end{verbatim}
-% will trigger this error.
-parser_object_has_no_vmt=03023_E_Îáúåêò $1 íå ÿâëÿåòñÿ òàáëèöåé VMT
-parser_e_illegal_parameter_list=03024_E_Håâåpíûé ñïèñîê ïàpàìåòpîâ
-% You are calling a function with parameters that are of a different type than
-% the declared parameters of the function.
-parser_e_wrong_parameter_type=03025_E_Håïpàâèëüíî îïpåäåëåí òèï ïàpàìåòpà äëÿ àpãyìåíòà $1
-% There is an error in the parameter list of the function or procedure.
-% The compiler cannot determine the error more accurate than this.
-parser_e_wrong_parameter_size=03026_E_Håïpàâèëüíî îïpåäåëåíî êîëè÷åñòâî ïàpàìåòpîâ
-% There is an error in the parameter list of the function or procedure,
-% the number of parameters is not correct.
-parser_e_overloaded_no_procedure=03027_E_Ïåðåãðóæåííûé èäåíòèôèêàòîp $1 íå ÿâëÿåòñÿ ôyíêöèåé
-% The compiler encountered a symbol with the same name as an overloaded
-% function, but it isn't a function it can overload.
-parser_e_overloaded_have_same_parameters=03028_E_Ïåðåãðóæåííûå ôyíêöèè äîëæíû èìåòü òîò-æå ñïèñîê ïàpàìåòpîâ
-% You're declaring overloaded functions, but with the same parameter list.
-% Overloaded function must have at least 1 different parameter in their
-% declaration.
-parser_e_header_dont_match_forward=03029_E_Çàãîëîâîê ôyíêöèè íå ñîîòâåòñòâyåò ïpåäûäyùåìy îïpåäåëåíèþ â forward $1
-% You declared a function with same parameters but
-% different result type or function modifiers.
-parser_e_header_different_var_names=03030_E_Çàãîëîâîê ôyíêöèè $1 íå ñîîòâåòñòâyåò ïpåäûäyùåìy îïpåäåëåíèþ â forward : èìåíà ïåpåìåííûõ èçìåíåíû $2 => $3
-% You declared the function in the \var{interface} part, or with the
-% \var{forward} directive, but define it with a different parameter list.
-parser_n_duplicate_enum=03031_N_Çíà÷åíèÿ â òèïàõ ïåðå÷èñëåíèÿ äîëæíû áûòü âîçðàñòàþùèìè
-% \fpc allows enumeration constructions as in C. Given the following
-% declaration two declarations:
-% \begin{verbatim}
-% type a = (A_A,A_B,A_E:=6,A_UAS:=200);
-% type a = (A_A,A_B,A_E:=6,A_UAS:=4);
-% \end{verbatim}
-% The second declaration would produce an error. \var{A\_UAS} needs to have a
-% value higher than \var{A\_E}, i.e. at least 7.
-parser_n_interface_name_diff_implementation_name=03032_N_Interface è Implementation èìåíà pàçíûå $1 => $2
-% This note warns you if the implementation and interface names of a
-% functions are different, but they have the same mangled name. This
-% is important when using overloaded functions (but should produce no error).
-parser_e_no_with_for_variable_in_other_segments=03033_E_With íå ìîæåò áûòü èñïîëüçîâàí â ïåpåìåííûõ êîòîpûå íàõîäÿòñÿ â pàçëè÷íûõ ñåãìåíòàõ
-% With stores a variable locally on the stack,
-% but this is not possible if the variable belongs to another segment.
-parser_e_too_much_lexlevel=03034_E_Êîëè÷åñòâî âëîæåíèé â ôyíêöèè ñëèøêîì ìíîãî (áîëåå 31)
-% You can nest function definitions only 31 times.
-parser_e_range_check_error=03035_E_Îøèáêà âûõîäà èç äîïyñòèìîãî äèàïàçîíà ïpè pàñ÷åòå êîíñòàíò
-% The constants are out of their allowed range.
-parser_w_range_check_error=03036_W_Îøèáêà âûõîäà èç äîïyñòèìîãî äèàïàçîíà ïpè pàñ÷åòå êîíñòàíò
-% The constants are out of their allowed range.
-parser_e_double_caselabel=03037_E_Ïîâòîpíàÿ ìåòêà CASE
-% You are specifying the same label 2 times in a \var{case} statement.
-parser_e_case_lower_less_than_upper_bound=03038_E_Âåpõíÿÿ ãpàíèöà äèàïàçîíà ìåíüøå ÷åì íèæíÿÿ
-% The upper bound of a \var{case} label is less than the lower bound and this
-% is useless
-parser_e_type_const_not_possible=03039_E_Òèïèçèpîâàííûå êîíñòàíòû êëàññîâ íå ïîääåpæèâàþòñÿ
-% You cannot declare a constant of type class or object.
-parser_e_no_overloaded_procvars=03040_E_Ïåðåìåííûå ïåðåãðóæåííûõ ôóíêöèé íå ïîääåpæèâàþòñÿ
-% You are trying to assign an overloaded function to a procedural variable.
-% This isn't allowed.
-parser_e_invalid_string_size=03041_E_Äëèíà ñòpîêè äîëæíà áûòü â äèàïàçîíå 1 .. 255
-% The length of a string in Pascal is limited to 255 characters. You are
-% trying to declare a string with length lower than 1 or greater than 255
-% (This is not true for \var{Longstrings} and \var{AnsiStrings}.
-parser_w_use_extended_syntax_for_objects=03042_W_Èñïîëüçîâàíèå pàñøèpåííîãî ñèíòàêñèñà NEW è DISPOSE äëÿ èíñòàíöèé îáúåêòîâ
-% If you have a pointer \var{a} to a class type, then the statement
-% \var{new(a)} will not initialize the class (i.e. the constructor isn't
-% called), although space will be allocated. you should issue the
-% \var{new(a,init)} statement. This will allocate space, and call the
-% constructor of the class.
-parser_w_no_new_dispose_on_void_pointers=03043_W_Èñïîëüçîâàíèå NEW è DISPOSE äëÿ íåòèïèçèpîâàííûõ yêàçàòåëåé, áåññìûñëåííî
-parser_e_no_new_dispose_on_void_pointers=03044_E_Èñïîëüçîâàíèå NEW è DISPOSE äëÿ íåòèïèçèpîâàííûõ yêàçàòåëåé, íå ïîääåpæèâàåòñÿ
-% You cannot use \var{new(p)} or \var{dispose(p)} if \var{p} is an untyped pointer
-% because no size is associated to an untyped pointer.
-% Accepted for compatibility in \var{tp} and \var{delphi} modes.
-parser_e_class_id_expected=03045_E_Îæèäàåòñÿ èäåíòèôèêàòîp êëàññà
-% This happens when the compiler scans a procedure declaration that contains
-% a dot,
-% i.e., a object or class method, but the type in front of the dot is not
-% a known type.
-parser_e_no_type_not_allowed_here=03046_E_Èäåíòèôèêàòîp òèïà çäåñü íåyìåñòåí
-% You cannot use a type inside an expression.
-parser_e_methode_id_expected=03047_E_Îæèäàåòñÿ èäåíòèôèêàòîp ìåòîäà
-% This identifier is not a method.
-% This happens when the compiler scans a procedure declaration that contains
-% a dot, i.e., a object or class method, but the procedure name is not a
-% procedure of this type.
-parser_e_header_dont_match_any_member=03048_E_Çàãîëîâîê ôyíêöèè íå ñîäåpæèò íå îäíîãî èç ìåòîäîâ îáúåêòà $1
-% This identifier is not a method.
-% This happens when the compiler scans a procedure declaration that contains
-% a dot, i.e., a object or class method, but the procedure name is not a
-% procedure of this type.
-parser_p_procedure_start=03049_P_Ïpîöåäypà/Ôyíêöèÿ $1
-% When using the \var{-vp} switch, the compiler tells you when it starts
-% processing a procedure or function implementation.
-parser_e_error_in_real=03050_E_Håâåpíàÿ êîíñòàíòà ñ ïëàâàþùåé çàïÿòîé
-% The compiler expects a floating point expression, and gets something else.
-parser_e_fail_only_in_constructor=03051_E_FAIL ìîæåò èñïîëüçîâàòñÿ òîëüêî â êîíñòpyêòîpàõ
-% You are using the \var{FAIL} instruction outside a constructor method.
-parser_e_no_paras_for_destructor=03052_E_Äåñòpyêòîpû íå ìîãyò èìåòü ïàpàìåòpîâ
-% You are declaring a destructor with a parameter list. Destructor methods
-% cannot have parameters.
-parser_e_only_class_methods_via_class_ref=03053_E_Òîëüêî ìåòîäû êëàññà ìîãóò ññûëàòüñÿ íà êëàññ
-% This error occurs in a situation like the following:
-% \begin{verbatim}
-% Type :
-% Tclass = Class of Tobject;
-%
-% Var C : TClass;
-%
-% begin
-% ...
-% C.free
-% \end{verbatim}
-% \var{Free} is not a class method and hence cannot be called with a class
-% reference.
-parser_e_only_class_methods=03054_E_Òîëüêî ê ìåòîäàì êëàññà ìîæíî îáðàùàòüñÿ â ìåòîäàõ êëàññà
-% This is related to the previous error. You cannot call a method of an object
-% from a inside a class method. The following code would produce this error:
-% \begin{verbatim}
-% class procedure tobject.x;
-%
-% begin
-% free
-% \end{verbatim}
-% Because free is a normal method of a class it cannot be called from a class
-% method.
-parser_e_case_mismatch=03055_E_Òèï êîíñòàíòû è òèï âûpàæåíèÿ â CASE íå ñîâïàäàþò
-% One of the labels is not of the same type as the case variable.
-parser_e_illegal_symbol_exported=03056_E_Ñèìâîë íå ìîæåò ýêñïîðòèðîâàòüñÿ èç áèáëèîòåêè
-% You can only export procedures and functions when you write a library. You
-% cannot export variables or constants.
-parser_w_should_use_override=03057_W_Óíàñëåäîâàííûé ìåòîä ñêpûò $1
-% A method that is declared \var{virtual} in a parent class, should be
-% overridden in the descendent class with the \var{override} directive. If you
-% don't specify the \var{override} directive, you will hide the parent method;
-% you will not override it.
-parser_e_nothing_to_be_overridden=03058_E_Íå èìååòñÿ íèêàêîãî ìåòîäà â êëàññå ïðåäêà, êîòîðûé íóæíî ïåpåîïpåäåëèòü: $1
-% You try to \var{override} a virtual method of a parent class that doesn't
-% exist.
-parser_e_no_procedure_to_access_property=03059_E_Íèêàêîé ýëåìåíò íå îáåñïå÷èâàåò îáðàùåíèÿ ê ñâîéñòâàì êëàññà
-% You specified no \var{read} directive for a property.
-parser_w_stored_not_implemented=03060_W_Ñîõðàíåííàÿ äèðåêòèâà ñâîéñòâ åñòü, íî åùå íå påàëèçîâàíà
-% The \var{stored} directive is not yet implemented
-parser_e_ill_property_access_sym=03061_E_Håâåpíûé ñèìâîë äëÿ äîñòóïà ê ñâîéñòây
-% There is an error in the \var{read} or \var{write} directives for an array
-% property. When you declare an array property, you can only access it with
-% procedures and functions. The following code woud cause such an error.
-% \begin{verbatim}
-% tmyobject = class
-% i : integer;
-% property x [i : integer]: integer read I write i;
-% \end{verbatim}
-%
-parser_e_cant_access_protected_member=03062_E_Håâîçìîæíî îáðàòèòüñÿ ê protected ïîëþ îáúåêòà
-% Fields that are declared in a \var{protected} section of an object or class
-% declaration cannot be accessed outside the module wher the object is
-% defined, or outside descendent object methods.
-parser_e_cant_access_private_member=03063_E_Håâîçìîæíî îáðàòèòüñÿ ê private ïîëþ îáúåêòà
-% Fields that are declared in a \var{private} section of an object or class
-% declaration cannot be accessed outside the module where the class is
-% defined.
-parser_w_overloaded_are_not_both_virtual=03064_W_Ïåðåãðóæåííûå ìåòîäû âèpòyàëüíûõ ìåòîäîâ, äîëæíû áûòü òîæå âèpòyàëüíûìè: $1
-% If you declare overloaded methods in a class, then they should either all be
-% virtual, or none. You shouldn't mix them.
-parser_w_overloaded_are_not_both_non_virtual=03065_W_Ïåðåãðóæåííûé ìåòîä HÅ âèðòóàëüíîãî ìåòîäà äîëæåí áûòü òîæå HÅ âèðòóàëüíûì: $1
-% If you declare overloaded methods in a class, then they should either all be
-% virtual, or none. You shouldn't mix them.
-parser_e_overridden_methods_not_same_ret=03066_E_Ïåðåîïðåäåëåííûå ìåòîäû äîëæíû èìåòü òîò-æå ñàìûé òèï âîçâðàùàåìîãî çíà÷åíèÿ: "$2" ïåðåîïðåäåëåí "$1" êîòîðûé âîçâðàùàåò äðóãîé òèï
-% If you declare oerridden methods in a class definition, they must
-% have the same return type.
-parser_e_dont_nest_export=03067_E_EXPORT ôyíêöèè íå ìîãyò áûòü âëîæåííûìè
-% You cannot declare a function or procedure within a function or procedure
-% that was declared as an export procedure.
-parser_e_methods_dont_be_export=03068_E_Ìåòîäû íå ìîãyò ýêñïîpòèpîâàòüñÿ
-% You cannot declare a procedure that is a method for an object as
-% \var{export}ed. That is, your methods cannot be called from a C program.
-parser_e_call_by_ref_without_typeconv=03069_E_Âûçîâ ñ ïåðåìåííûìè ïàðàìåòðàìè äîëæåí ñîîòâåòñòâîâàòü òî÷íî: Ïîëó÷åíî "$1", îæèäàåòñÿ "$2"
-% When calling a function declared with \var{var} parameters, the variables in
-% the function call must be of exactly the same type. There is no automatic
-% type conversion.
-parser_e_no_super_class=03070_E_Äàííûé êëàññ íå ÿâëÿåòñÿ ðîäèòåëüñêèì êëàññîì òåêóùåãî êëàññà
-% When calling inherited methods, you are trying to call a method of a strange
-% class. You can only call an inherited method of a parent class.
-parser_e_self_not_in_method=03071_E_SELF pàçpåøàåòñÿ òîëüêî â ìåòîäàõ
-% You are trying to use the \var{self} parameter outside an object's method.
-% Only methods get passed the \var{self} parameters.
-parser_e_generic_methods_only_in_methods=03072_E_Ìåòîäû ìîãyò âûçûâàòüñÿ òîëüêî â äpyãèõ ìåòîäàõ íàïpÿìyþ ñ èäåíòèôèêàòîpîì òèïà êëàññà
-% A construction like \var{sometype.somemethod} is only allowed in a method.
-parser_e_illegal_colon_qualifier=03073_E_Håïpàâèëüíîå èñïîëüçîâàíèå ':'
-% You are using the format \var{:} (colon) 2 times on an expression that
-% is not a real expression.
-parser_e_illegal_set_expr=03074_E_Îøèáêà ïðîâåðêè ïðèíàäëåæíîñòè ê äèàïàçîíó â êîíñòðóêòîðå íàáîðà èëè äâîéíîì ýëåìåíòå íàáîðà
-% The declaration of a set contains an error. Either one of the elements is
-% outside the range of the set type, either two of the elements are in fact
-% the same.
-parser_e_pointer_to_class_expected=03075_E_Îæèäàåòñÿ yêàçàòåëü íà îáúåêò
-% You specified an illegal type in a \var{New} statement.
-% The extended synax of \var{New} needs an object as a parameter.
-parser_e_expr_have_to_be_constructor_call=03076_E_Âûpàæåíèå äîëæíî âûçûâàòü êîíñòpyêòîp
-% When using the extended syntax of \var{new}, you must specify the constructor
-% method of the object you are trying to create. The procedure you specified
-% is not a constructor.
-parser_e_expr_have_to_be_destructor_call=03077_E_Âûpàæåíèå äîëæíî âûçûâàòü äåñòpyêòîp
-% When using the extended syntax of \var{dispose}, you must specify the
-% destructor method of the object you are trying to dispose of.
-% The procedure you specified is not a destructor.
-parser_e_invalid_record_const=03078_E_Håâåpíûé ïîpÿäîê ýëåìåíòîâ òèïà RECORD
-% When declaring a constant record, you specified the fields in the wrong
-% order.
-parser_e_false_with_expr=03079_E_Òèï âûpàæåíèÿ äîëæíî áûòü CLASS èëè RECORD
-% A \var{with} statement needs an argument that is of the type \var{record}
-% or \var{class}. You are using \var{with} on an expression that is not of
-% this type.
-parser_e_void_function=03080_E_Ïpîöåäypû íå ìîãyò âîçâpàùàòü çíà÷åíèÿ
-% In \fpc, you can specify a return value for a function when using
-% the \var{exit} statement. This error occurs when you try to do this with a
-% procedure. Procedures cannot return a value.
-parser_e_constructors_always_objects=03081_E_Êîíñòpyêòîpû è äåñòpyêòîpû äîëæíû áûòü ìåòîäàìè
-% You're declaring a procedure as destructor or constructor, when the
-% procedure isn't a class method.
-parser_e_operator_not_overloaded=03082_E_Îïåpàòîp íå ïåpåãpyæåí
-% You're trying to use an overloaded operator when it isn't overloaded for
-% this type.
-parser_e_no_such_assignment=03083_E_Ïåðåãðóæåííîå ñâÿçûâàíèå íåâîçìîæíî ñ îäèíàêîâûìè òèïàìè äàííûõ
-% You can not overload assignment for types
-% that the compiler considers as equal.
-parser_e_overload_impossible=03084_E_Ïåðåãðóçêà îïåðàòîðà íåâîçìîæíà
-% The combination of operator, arguments and return type are
-% incompatible.
-parser_e_no_reraise_possible=03085_E_RERAISE çäåñü íåâîçìîæåí
-% You are trying to raise an exception where it isn't allowed. You can only
-% raise exceptions in an \var{except} block.
-parser_e_no_new_or_dispose_for_classes=03086_E_Ðàñøèpåííûé ñèíòàêñèñ NEW è DISPOSE äëÿ êëàññà íåäîïyñòèìî
-% You cannot generate an instance of a class with the extended syntax of
-% \var{new}. The constructor must be used for that. For the same reason, you
-% cannot call \var{Dispose} to de-allocate an instance of a class, the
-% destructor must be used for that.
-parser_e_asm_incomp_with_function_return=03087_E_Àññåìáëåp íåñîâìåñòèì ñ òèïîì, êîòîpîå âîçpàùàåò ôyíêöèÿ
-% You're trying to implement a \var{assembler} function, but the return type
-% of the function doesn't allow that.
-parser_e_procedure_overloading_is_off=03088_E_Ïpîöåäypíàÿ ïåðåãðóçêà îòêëþ÷åíà
-% When using the \var{-So} switch, procedure overloading is switched off.
-% Turbo Pascal does not support function overloading.
-parser_e_overload_operator_failed=03089_E_Íåâîçìîæíî ïðåîáðàçèòü ýòîò îïåðàòîð â ïåðåãðóæåííûé îïåðàòîð
-% You are trying to overload an operator which cannot be overloaded.
-% The following operators can be overloaded :
-% \begin{verbatim}
-% +, -, *, /, =, >, <, <=, >=, is, as, in, **, :=
-% \end{verbatim}
-parser_e_comparative_operator_return_boolean=03090_E_Ñðàâíèòåëüíûé îïåðàòîð äîëæåí âîçâðàòèòü áóëåâî çíà÷åíèå
-% When overloading the \var{=} operator, the function must return a boolean
-% value.
-parser_e_only_virtual_methods_abstract=03091_E_Òîëüêî âèðòóàëüíûå ìåòîäû ìîãóò áûòü àáñòðàêòíû
-% You are declaring a method as abstract, when it isn't declared to be
-% virtual.
-parser_f_unsupported_feature=03092_F_Èñïîëüçîâàíèå ïîêà íåïîääåðæèâàåìîé îñîáåííîñòè êîìïèëÿòîðà
-% You're trying to force the compiler into doing something it cannot do yet.
-parser_e_mix_of_classes_and_objects=03093_E_Ñìåøèâàòü ÊËÀÑÑÛ è ÎÁÚÅÊÒÛ íå ïîçâîëÿåòñÿ
-% You cannot derive \var{objects} and \var{classes} intertwined . That is,
-% a class cannot have an object as parent and vice versa.
-parser_w_unknown_proc_directive_ignored=03094_W_Íåèçâåñòíàÿ äèðåêòèâà ïðîöåäóðû, $1 èãíîðèðyåòñÿ
-% The procedure direcive you secified is unknown. Recognised procedure
-% directives are \var{cdecl}, \var{stdcall}, \var{popstack}, \var{pascal}
-% \var{register}, \var{export}.
-parser_e_absolute_only_one_var=03095_E_ABSOLUTE ìîæåò áûòü ñâÿçàíà òîëüêî ñ ÎÄHÎÉ ïåpåìåííîé
-% You cannot specify more than one variable before the \var{absolute} directive.
-% Thus, the following construct will provide this error:
-% \begin{verbatim}
-% Var Z : Longint;
-% X,Y : Longint absolute Z;
-% \end{verbatim}
-% \item [ absolute can only be associated a var or const ]
-% The address of a \var{absolute} directive can only point to a variable or
-% constant. Therefore, the following code will produce this error:
-% \begin{verbatim}
-% Procedure X;
-%
-% var p : longint absolute x;
-% \end{verbatim}
-%
-parser_e_absolute_only_to_var_or_const=03096_E_ABSOLUTE ìîæåò áûòü ñâÿçàíà òîëüêî ñ ïåpåìåííîé èëè êîíñòàíòîé
-% The address of a \var{absolute} directive can only point to a variable or
-% constant. Therefore, the following code will produce this error:
-% \begin{verbatim}
-% Procedure X;
-%
-% var p : longint absolute x;
-% \end{verbatim}
-%
-parser_e_initialized_only_one_var=03097_E_Òîëüêî ÎÄHÀ ïåpåìåííàÿ ìîæåò áûòü èíèöèàëèçèpîâàíà
-% You cannot specify more than one variable with a initial value
-% in Delphi syntax.
-parser_e_abstract_no_definition=03098_E_Àáñòðàêòíûå ìåòîäû íå äîëæíû èìåòü îïðåäåëåíèå (òî åñòü èìåòü òåëî)
-% Abstract methods can only be declared, you cannot implement them. They
-% should be overridden by a descendant class.
-parser_e_overloaded_must_be_all_global=03099_E_Ýòà ïåðåãðóæåííàÿ ôóíêöèÿ íå ìîæåò áûòü ëîêàëüíîé, è äîëæíà ýêñïîðòèðîâàòüñÿ
-% You are defining a overloaded function in the implementation part of a unit,
-% but there is no corresponding declaration in the interface part of the unit.
-parser_w_virtual_without_constructor=03100_W_Âèðòóàëüíûå ìåòîäû èñïîëüçóþòñÿ áåç êîíñòðóêòîðà â $1
-% If you declare objects or classes that contain virtual methods, you need
-% to have a constructor and destructor to initialize them. The compiler
-% encountered an object or class with virtual methods that doesn't have
-% a constructor/destructor pair.
-parser_m_macro_defined=03101_M_Îïpåäåëåí ìàêpîñ: $1
-% When \var{-vm} is used, the compiler tells you when it defines macros.
-parser_m_macro_undefined=03102_M_Ìàêpîñ íåîïpåäåëåí: $1
-% When \var{-vm} is used, the compiler tells you when it undefines macros.
-parser_m_macro_set_to=03103_M_Ìàêpîñ $1 yñòàíîâëåí â $2
-% When \var{-vm} is used, the compiler tells you what values macros get.
-parser_i_compiling=03104_I_Êîìïèëèpîâàíèå $1
-% When you turn on information messages (\var{-vi}), the compiler tells you
-% what units it is recompiling.
-parser_u_parsing_interface=03105_U_Àíàëèçèðóåì èíòåðôåéñíóþ ÷àñòü ìîäyëÿ $1
-% This tells you that the reading of the interface
-% of the current unit starts
-parser_u_parsing_implementation=03106_U_Àíàëèçèðóåì ðåàëèçàöèîííóþ ÷àñòü ìîäyëÿ $1
-% This tells you that the code reading of the implementation
-% of the current unit, library or program starts
-parser_d_compiling_second_time=03107_D_Ïîâòîðíîå êîìïèëèðîâàíèå $1
-% When you request debug messages (\var{-vd}) the compiler tells you what
-% units it recompiles for the second time.
-parser_e_no_paras_allowed=03108_E_Ñâîéñòâà ìàññèâà â ýòîé òî÷êå íå ïîääåpæèâàþòñÿ
-% You cannot use array properties at that point in the source.
-parser_e_no_property_found_to_override=03109_E_Håò íèêàêèõ ñâîéñòâ äëÿ ïåpåîïpåäåëåíèÿ
-% You want to overrride a property of a parent class, when there is, in fact,
-% no such property in the parent class.
-parser_e_only_one_default_property=03110_E_Òîëüêî îäíî çàäàííîå ïî-óìîë÷àíèþ ñâîéñòâî pàçpåøàåòñÿ, íàéäåíî yíàñëåäîâàííîå, çàäàííîå ïî yìîë÷àíèþ, ñâîéñòâî â êëàññå $1
-% You specified a property as \var{Default}, but a parent class already has a
-% default property, and a class can have only one default property.
-parser_e_property_need_paras=03111_E_Çàäàííîå ïî-óìîë÷àíèþ ñâîéñòâî äîëæíî áûòü ñâîéñòâîì ìàññèâà
-% Only array properties of classes can be made \var{default} properties.
-parser_e_constructor_cannot_be_not_virtual=03112_E_Âèpòyàëüíûå êîíñòpyêòîpû ïîääåpæèâàþòñÿ òîëüêî â êëàññîâûõ ìîäåëÿõ îáúåêòà
-% You cannot have virtual constructors in objects. You can only have them
-% in classes.
-parser_e_no_default_property_available=03113_E_Håò ñâîéñòâ
-% You try to access a default property of a class, but this class (or one of
-% its ancestors) doesn't have a default property.
-parser_e_cant_have_published=03114_E_Êëàññ íå ìîæåò èìåòü PUBLISHED ðàçäåë, èñïîëüçyéòå êëþ÷ {$M+}
-% If you want a \var{published} section in a class definition, you must
-% use the \var{\{\$M+\}} switch, whch turns on generation of type
-% information.
-parser_e_forward_declaration_must_be_resolved=03115_E_FORWARD îïpåäåëåíèå êëàññà $1 äîëæíî áûòü ðåàëèçîâàíî çäåñü, ÷òîáû èñïîëüçîâàòü êëàññ êàê ïðåäîê
-% To be able to use an object as an ancestor object, it must be defined
-% first. This error occurs in the following situation:
-% \begin{verbatim}
-% Type ParentClas = Class;
-% ChildClass = Class(ParentClass)
-% ...
-% end;
-% \end{verbatim}
-% Where \var{ParentClass} is declared but not defined.
-parser_e_no_local_operator=03116_E_Ëîêàëüíûå îïåpàòîpû íå ïîääåpæèâàþòñÿ
-% You cannot overload locally, i.e. inside procedures or function
-% definitions.
-parser_e_proc_dir_not_allowed_in_interface=03117_E_Ïpîöåäypíàÿ äèpåêòèâà $1 íå pàçpåøåíà â èíòåðôåéñíîé ÷àñòè ìîäóëÿ
-% This procedure directive is not allowed in the \var{interface} section of
-% a unit. You can only use it in the \var{implementation} section.
-parser_e_proc_dir_not_allowed_in_implementation=03118_E_Ïpîöåäypíàÿ äèpåêòèâà $1 íå pàçpåøåíà â ðåàëèçàöèîííîé ÷àñòè ìîäóëÿ
-% This procedure directive is not defined in the \var{implementation} section of
-% a unit. You can only use it in the \var{interface} section.
-parser_e_proc_dir_not_allowed_in_procvar=03119_E_Ïpîöåäypíàÿ äèpåêòèâà $1 íå pàçpåøåíà â PROCVAR îïpåäåëåíèè
-% This procedure directive cannot be part of a procedural or function
-% type declaration.
-parser_e_function_already_declared_public_forward=03120_E_Ôóíêöèÿ $1 óæå îáúÿâëåíà êàê PUBLIC èëè FORWARD
-% You will get this error if a function is defined as \var{forward} twice.
-% Or it is once in the \var{interface} section, and once as a \var{forward}
-% declaration in the \var{implmentation} section.
-parser_e_not_external_and_export=03121_E_Håëüçÿ èñïîëüçîâàòü EXPORT è EXTERNAL âìåñòå
-% These two procedure directives are mutually exclusive
-parser_e_name_keyword_expected=03122_E_Îæèäàåòñÿ êëþ÷åâîå ñëîâî NAME
-% The definition of an external variable needs a \var{name} clause.
-parser_w_not_supported_for_inline=03123_W_$1 íå ïîääåpæèâàåòñÿ âíyòpè INLINE ïpîöåäypû/ôyíêöèè
-% Inline procedures don't support this declaration.
-parser_w_inlining_disabled=03124_W_Âêëþ÷åíèå INLINE îòêëþ÷åíî
-% Inlining of procedures is disabled.
-parser_i_writing_browser_log=03125_I_Çàïèñûâàåì ëîã ápàyçåpà $1
-% When information messages are on, the compiler warns you when it
-% writes the browser log (generated with the \var{\{\$Y+ \}} switch).
-parser_h_maybe_deref_caret_missing=03126_H_Ìîæåò áûòü îòñyòñòâyåò pàçûìåíîâàííûé yêàçàòåëü
-% The compiler thinks that a pointer may need a dereference.
-parser_f_assembler_reader_not_supported=03127_F_Âûápàííûé ñòèëü ÷òåíèÿ àññåìáëåpà íå ïîääåpæèâàåòñÿ
-% The selected assembler reader (with \var{\{\$ASMMODE xxx\}} is not
-% supported. The compiler can be compiled with or without support for a
-% particular assembler reader.
-parser_e_proc_dir_conflict=03128_E_Ïpîöåäypíàÿ äèpåêòèâà $1 êîíôëèêòyåò ñ äpyãèìè äèpåêòèâàìè
-% You specified a procedure directive that conflicts with other directives.
-% for instance \var{cdecl} and \var{pascal} are mutually exclusive.
-parser_e_call_convention_dont_match_forward=03129_E_Ñîãëàøåíèå î âûçîâå ïpîöåäypû/ôyíêöèè íå ñîîòâåòñòâóåò yêàçàííîìy âûøå â FORWARD
-% This error happens when you declare a function or procedure with
-% e.g. \var{cdecl;} but omit this directive in the implementation, or vice
-% versa. The calling convention is part of the function declaration, and
-% must be repeated in the function definition.
-parser_e_register_calling_not_supported=03130_E_Âûçîâ påãèñòpîâ ("FAST CALL") íå ïîääåpæèâàåòñÿ
-% The \var{register} calling convention, i.e., arguments are passed in
-% registers instead of on the stack is not supported. Arguments are always
-% passed on the stack.
-parser_e_property_cant_have_a_default_value=03131_E_Ñâîéñòâî íå ìîæåò èìåòü çíà÷åíèå ïî yìîë÷àíèþ
-% Set properties or indexed properties cannot have a default value.
-parser_e_property_default_value_must_const=03132_E_Çíà÷åíèå ïî yìîë÷àíèþ y ñâîéñòâà äîëæíî áûòü êîíñòàíòîé
-% The value of a \var{default} declared property must be known at compile
-% time. The value you specified is only known at run time. This happens
-% .e.g. if you specify a variable name as a default value.
-parser_e_cant_publish_that=03133_E_Ñèìâîë íå ìîæåò áûòü PUBLISHED, òîëüêî êëàññ
-% Only class type variables can be in a \var{published} section of a class
-% if they are not declared as a property.
-parser_e_cant_publish_that_property=03134_E_Ýòîò âèä ñâîéñòâà íå ìîæåò áûòü PUBLISHED
-% Properties in a \var{published} section cannot be array properties.
-% they must be moved to public sections. Properties in a \var{published}
-% section must be an ordinal type, a real type, strings or sets.
-parser_w_empty_import_name=03135_W_Óêàçàííîå èìÿ èìïîðòà ïyñòî
-% Both index and name for the import are 0 or empty
-parser_e_empty_import_name=03136_W_Òðåáóåòñÿ èìÿ èìïîðòà
-% Some targets need a name for the imported procedure or a cdecl specifier
-parser_e_used_proc_name_changed=03137_E_Âíóòðåííåå èìÿ ôóíêöèè, èçìåíåííî ïîñëå èñïîëüçîâàíèÿ ôóíêöèè
-% This is an internal error; please report any occurrences of this error
-% to the \fpc team.
-parser_e_division_by_zero=03138_E_Äåëåíèå íà íîëü
-% There is a divsion by zero encounted
-parser_e_invalid_float_operation=03139_E_Håïpàâèëüíàÿ îïåpàöèÿ ñ ïëàâàþùåé çàïÿòîé
-% An operation on two real type values produced an overflow or a division
-% by zero.
-parser_e_array_lower_less_than_upper_bound=03140_E_Âåpõíÿÿ ãpàíèöà äèàïàçîíà ìåíüøå, ÷åì íèæíÿÿ ãpàíèöà
-% The upper bound of a \var{case} label is less than the lower bound and this
-% is not possible
-parser_w_string_too_long=03141_W_Ñòðîêà "$1" áîëüøå ÷åì $2
-% The size of the constant string is larger than the size you specified in
-% string type definition
-parser_e_string_larger_array=03142_E_Ñòðîêîâàÿ äëèíà áîëüøå, ÷åì äëèíà ìàññèâà ñèìâîëîâ
-% The size of the constant string is larger than the size you specified in
-% the array[x..y] of char definition
-parser_e_ill_msg_expr=03143_E_Håâåpíîå âûpàæåíèå ïîñëå äèpåêòèâû ñîîáùåíèÿ
-% \fpc supports only integer or string values as message constants
-parser_e_ill_msg_param=03144_E_Îápàáîò÷èêè ñîîáùåíèé ìîãyò ápàòü òîëüêî îäèí çàïpîñ â ññûëî÷íîì ïàpàìåòpå
-% A method declared with the \var{message}-directive as message handler
-% can take only one parameter which must be declared as call by reference
-% Parameters are declared as call by reference using the \var{var}-directive
-parser_e_duplicate_message_label=03145_E_Ïîâòîpíîå îïpåäåëåíèå ìåòêè ñîîáùåíèÿ: $1
-% A label for a message is used twice in one object/class
-parser_e_self_in_non_message_handler=03146_E_SELF ìîæåò áûòü òîëüêî êàê ÿâíûé ïàðàìåòð â îáðàáîò÷èêàõ ñîîáùåíèÿ
-% The self parameter can be passed only explicitly in a method which
-% is declared as message method handler.
-parser_e_threadvars_only_sg=03147_E_Ïåpåìåííûå òpåéäîâ ìîãyò áûòü òîëüêî ñòàòè÷åñêèìè èëè ãëîáàëüíûìè
-% Threadvars must be static or global, you can't declare a thread
-% local to a procedure. Local variables are always local to a thread,
-% because every thread has its own stack and local variables
-% are stored on the stack
-parser_f_direct_assembler_not_allowed=03148_F_Ïðÿìîé ñòèëü àññåìáëåpà íå ïîääåpæèâàåòñÿ ôîpìàòîì âûõîäíîãî ôàéëà
-% You can't use direct assembler when using a binary writer, choose an
-% other outputformat or use an other assembler reader
-parser_w_no_objpas_use_mode=03149_W_Hå çàãpyæàéòå OBJPAS ìîäyëü, èñïîëüçyéòå {$mode objfpc} èëè {$mode delphi} âìåñòî ýòîãî
-% You're trying to load the ObjPas unit manual from a uses clause. This is
-% not a good idea to do, you can better use the \var{\{\$mode objfpc\}} or
-% \var{\{\$mode delphi\}}
-% directives which load the unit automaticly
-parser_e_no_object_override=03150_E_Ïåpåîïpåäåëåíèå íå ìîæåò áûòü èñïîëüçîâàííî â îáúåêòàõ
-% Override isn't support for objects, use VIRTUAL instead to override
-% a method of an anchestor object
-parser_e_cant_use_inittable_here=03151_E_Òèï äàííûõ, êîòîpûé òpåáyåò INITILIZATION/FINALIZATION íå ìîæåò èñïîëüçîâàòüñÿ â pàçëè÷íûõ çàïèñÿõ
-% Some data type (e.g. \var{ansistring}) needs initialization/finalization
-% code which is implicitly generated by the compiler. Such data types
-% can't be used in the variant part of a record.
-parser_e_resourcestring_only_sg=03152_E_Ñòðîêîâûå ðåñóðñû ìîãóòü áûòü òîëüêî ñòàòè÷åñêèìè èëè ãëîáàëüíûìè
-% Resourcestring can not be declared local, only global or using the static
-% directive.
-parser_e_exit_with_argument_not__possible=03153_E_Ïðîöåäóðà Exit ñ àðãóìåíòîì çäåñü íåäîïóñòèìà
-% an exit statement with an argument for the return value can't be used here, this
-% can happen e.g. in \var{try..except} or \var{try..finally} blocks
-parser_e_stored_property_must_be_boolean=03154_E_Òèï ñîõðàíÿåìîãî ñèìâîëà äîëæåí áûòü boolean
-% If you specify a storage symbol in a property declaration, it must be of
-% the type boolean
-parser_e_ill_property_storage_sym=03155_E_Ýòîò òèï ñèìâîëà íå ìîæåò áûòü ñîõpàíåí â ýòîì ñâîéñòâå
-% You can't use this type of symbol as storage specifier in property
-% declaration. You can use only methods with the result type boolean,
-% boolean class fields or boolean constants
-parser_e_only_publishable_classes_can__be_published=03156_E_Òîëüêî êëàññ, êîòîpûé êîìïèëèpyåòñÿ â $M+ påæèìå ìîæåò áûòü published
-% In the published section of a class can be only class as fields used which
-% are compiled in $M+ or which are derived from such a class. Normally
-% such a class should be derived from TPersitent
-parser_e_proc_directive_expected=03157_E_Îæèäàåòñÿ ïpîöåäypíàÿ äèpåêòèâà
-% When declaring a procedure in a const block you used a ; after the
-% procedure declaration after which a procedure directive must follow.
-% Correct declarations are:
-% \begin{verbatim}
-% const
-% p : procedure;stdcall=nil;
-% p : procedure stdcall=nil;
-% \end{verbatim}
-parser_e_invalid_property_index_value=03158_E_Çíà÷åíèå ñâîéñòâà èíäåêñà äîëæíî áûòü îáû÷íîãî òèïà
-% The value you use to index a property must be of an ordinal type, for
-% example an integer or enumerated type.
-parser_e_procname_to_short_for_export=03159_E_Èìÿ ïpîöåäypû ñëèøêîì êîpîòêîå äëÿ ýêñïîpòà
-% The length of the procedure/function name must be at least 2 characters
-% long. This is because of a bug in dlltool which doesn't parse the .def
-% file correct with a name of length 1.
-parser_e_dlltool_unit_var_problem=03160_E_Îòñóòñòâóþùàÿ DEFFILE çàïèñü ìîæåò áûòü ñîçäàíà äëÿ ãëîáàëüíûõ ïåðåìåííûõ ìîäóëÿ
-parser_e_dlltool_unit_var_problem2=03161_E_Êîìïèëèðîâàíèå áåç -WD îïöèè
-parser_f_need_objfpc_or_delphi_mode=03162_F_Âàì íåîáõîäèì ObjFpc (-S2) èëè Delphi (-Sd) påæèì ñîâìåñòèìîñòè äëÿ êîìïèëÿöèè ýòîãî ìîäyëÿ
-% You need to use {$mode objfpc} or {$mode delphi} to compile this file.
-% Or use the equivalent commandline switches -S2 or -Sd.
-parser_e_no_export_with_index_for_target=03163_E_Hå ìîãy ýêñïîpòèpîâàòü ñ ýòèì èíäåêñîì ïîä $1
-% Exporting of functions or procedures with a specified index is not
-% support on all targets. The only platforms currently supporting
-% export with index are OS/2 and Win32.
-parser_e_no_export_of_variables_for_target=03164_E_Ýêñïîpòèpîâàíèå ïåpåìåííûõ íå ïîääåpæèâàåòñÿ ïîä $1
-% Exporting of variables is not support on all targets. The only platform
-% currently supporting export of variables is Win32.
-parser_e_improper_guid_syntax=03165_E_Íåïîäõîäÿùèé GUID ñèíòàêñèñ
-parser_f_interface_cant_have_variables=03166_F_Interface íå ìîæåò èìåòü ïåðåìåííûõ
-parser_f_interface_cant_have_constr_or_destr=03167_F_Interface íå ìîæåò èìåòü êîíñòðóêòîðà èëè destructor
-parser_w_interface_mapping_notfound=03168_W_Ïðîöåäóðà íàçâàííàÿ "$1" íå íàéäåíà ïîäõîäÿùåé äëÿ ðåàëèçàöèè $2.$3
-parser_e_interface_id_expected=03169_E_Òðåáóåòñÿ inteface
-% This happens when the compiler scans a \var{class} declaration that contains
-% \var{interface} function name mapping code like this:
-% \begin{verbatim}
-% type
-% TMyObject = class(TObject, IDispatch)
-% function IUnknown.QueryInterface=MyQueryInterface;
-% ....
-% \end{verbatim}
-% and the \var{interface} before the dot not listed in the inheritance list.
-parser_e_type_cant_be_used_in_array_index=03170_E_Òèï "$1" íå ìîæåò áûòü èñïîëüçîâàí êàê èíäåêñ ìàññèâà
-% Types like DWord or Int64 aren't allowed as array index type
-parser_e_no_con_des_in_interfaces=03171_E_Con- è destructor íå ïîçâîëÿþòñÿ â interface
-% Constructor and destructor declarations aren't allowed in interface
-% In the most cases the method \var{QueryInterface} of \var{IUnknown} can
-% be used to create a new interface.
-parser_e_no_access_specifier_in_interfaces=03172_E_Ñïåöèôèêàòîðû äîñòóïà íå ìîãóò èñïîëüçîâàòüñÿ â INTERFACES
-% The access specifiers \var{public}, \var{private}, \var{protected} and
-% \var{pusblished} can't be used in interfaces because all methods
-% of an interfaces must be public.
-parser_e_no_vars_in_interfaces=03173_E_Interface íå ìîæåò èìåòü ïîëåé, òîëüêî ìåòîäû
-% Declarations of fields aren't allowed in interfaces. An interface
-% can contain only methods
-parser_e_no_local_external=03174_E_Íå ìîãó îïðåäåëèòü ëîêàëüíóþ ïðîöåäóðó êàê EXTERNAL
-% Declaring local procedures as external is not possible. Local procedures
-% get hidden parameters that will make the chance on errors very high
-parser_w_skipped_fields_before=03175_W_Íåêîòîðûå ïîëÿ, íàõîäÿùèåñÿ ïåðåä "$1" íå áûëè èíèöèàëèçèðîâàíû
-% In Delphi mode, not all fields of a typed constant record have to be
-% initialized, but the compiler warns you when it detects such situations.
-parser_e_skipped_fields_before=03176_E_Íåêîòîðûå ïîëÿ, íàõîäÿùèåñÿ ïåðåä "$1" íå áûëè èíèöèàëèçèðîâàíû
-% In all syntax modes but Delphi mode, you can't leave some fields uninitialized
-% in the middle of a typed constant record
-parser_h_skipped_fields_after=03177_H_Íåêîòîðûå ïîëÿ, íàõîäÿùèåñÿ ïåðåä "$1" íå áûëè èíèöèàëèçèðîâàíû
-% You can leave some fields at the end of a type constant record uninitialized
-% (the compiler will initialize them to zero automatically), but the the
-% compiler gives a hint because it can be the source of a problem.
-parser_e_varargs_need_cdecl_and_external=03178_E_VarArgs äèðåêòèâà áåç CDecl è External
-% The varargs directive can only be used with procedures or functions
-% that are declared with CDecl and External directives. The varargs directive
-% is only meant to provide a compatible interface to C functions like printf.
-parser_e_self_call_by_value=03179_E_Self äîëæåí áûòü íîðìàëüíûì (call-by-value) ïàðàìåòðîì
-% You can't declare self as a const or var parameter, it must always be
-% a call-by-value parameter
-parser_e_interface_has_no_guid=03180_E_Èíòåðôåéñ "$1" íå èìååò èäåíòèôèêàòîðà interface
-% When you want to assign an interface to a constant, then the interface
-% must have a GUID value set.
-parser_e_illegal_field_or_method=03181_E_Íåèçâåñòíûé ïîëå êëàññà èëè ìåòîäà "$1"
-% Properties must refer to a field or method in the same class.
-parser_w_proc_overriding_calling=03182_W_Ïåðåîïðåäåëåíèå ñîãëàøåíèÿ î âûçîâàõ ìåæäó "$1" è "$2"
-% There are two directives in the procedure declaration that specify a calling
-% convention. Only the last directive will be used
-parser_e_no_procvarobj_const=03183_E_Òèïèçèðîâàííàÿ êîíñòàíòà (òèï procedure èëè object) ìîæåò áûòü èíèöèàëèçèðîâàííà òîëüêî â NIL
-% You can't assign the address of a method to a typed constant which has a
-% 'procedure of object' type, because such a constant requires two addresses:
-% that of the method (which is known at compile time) and that of the object or
-% class instance it operates on (which can not be known at compile time).
-% \end{description}
-
-#
-# Ïpîâåpêà òèïîâ
-#
-% \section{Type checking errors}
-% This section lists all errors that can occur when type checking is
-% performed.
-% \begin{description}
-type_e_mismatch=04000_E_Håïpàâèëüíûé òèï
-% This can happen in many cases:
-% \begin{itemize}
-% \item The variable you're assigning to is of a different type than the
-% expression in the assignment.
-% \item You are calling a function or procedure with parameters that are
-% incompatible with the parameters in the function or procedure definition.
-% \end{itemize}
-type_e_incompatible_types=04001_E_Håñîâìåñòèìîñòü òèïîâ: ïîëy÷èëè $1, à îæèäàëè $2
-% There is no conversion possible between the two types
-% Another possiblity is that they are declared in different
-% declarations:
-% \begin{verbatim}
-% Var
-% A1 : Array[1..10] Of Integer;
-% A2 : Array[1..10] Of Integer;
-%
-% Begin
-% A1:=A2; { This statement gives also this error, it
-% is due the strict type checking of pascal }
-% End.
-% \end{verbatim}
-type_e_not_equal_types=04002_E_Håñîîòâåòñòâèå òèïîâ ìåæäy $1 è $2
-% The types are not equal
-type_e_type_id_expected=04003_E_Îæèäàåòñÿ âûðàæåíèå òèïà TYPE
-% The identifier is not a type, or you forgot to supply a type identifier.
-type_e_variable_id_expected=04004_E_Îæèäàåòñÿ âûðàæåíèå òèïà VAR
-% This happens when you pass a constant to a \var{Inc} var or \var{Dec}
-% procedure. You can only pass variables as arguments to these functions.
-type_e_integer_expr_expected=04005_E_Îæèäàåòñÿ âûpàæåíèå òèïà INTEGER, íî ïîëó÷èëè "$1"
-% The compiler expects an expression of type integer, but gets a different
-% type.
-type_e_boolean_expr_expected=04006_E_Îæèäàåòñÿ âûðàæåíèå òèïà BOOLEAN, íî ïîëó÷èëè "$1"
-% The expression must be a boolean type, it should be return true or
-% false.
-type_e_ordinal_expr_expected=04007_E_Îæèäàåòñÿ âûpàæåíèå òàêîãî-æå òèïà
-% The expression must be of ordinal type, i.e., maximum a \var{Longint}.
-% This happens, for instance, when you specify a second argument
-% to \var{Inc} or \var{Dec} that doesn't evaluate to an ordinal value.
-type_e_pointer_type_expected=04008_E_Îæèäàåòñÿ òèï POINTER, íî ïîëó÷èëè "$1"
-% The variable or expression isn't of the type \var{pointer}. This
-% happens when you pass a variable that isn't a pointer to \var{New}
-% or \var{Dispose}.
-type_e_class_type_expected=04009_E_Îæèäàåòñÿ òèï CLASS, íî ïîëó÷èëè "$1"
-% The variable of expression isn't of the type \var{class}. This happens
-% typically when
-% \begin{enumerate}
-% \item The parent class in a class declaration isn't a class.
-% \item An exception handler (\var{On}) contains a type identifier that
-% isn't a class.
-% \end{enumerate}
-type_e_varid_or_typeid_expected=04010_E_Îæèäàåòñÿ ïåpåìåííàÿ èëè èäåíòèôèêàòîp
-% The argument to the \var{High} or \var{Low} function is not a variable
-% nor a type identifier.
-type_e_cant_eval_constant_expr=04011_E_Håâîçìîæíî pàñ÷èòàòü çíà÷åíèå êîíñòàíòû
-% No longer in use.
-type_e_set_element_are_not_comp=04012_E_Óñòàíîâêà ýëåìåíòîâ ìàññèâà íåâîçìîæíà
-% You are trying to make an operation on two sets, when the set element types
-% are not the same. The base type of a set must be the same when taking the
-% union
-type_e_set_operation_unknown=04013_E_Îïåpàöèÿ íå påàëèçîâàíà äëÿ íàáîpîâ çíà÷åíèé
-% several binary operations are not defined for sets
-% like div mod ** (also >= <= for now)
-type_w_convert_real_2_comp=04014_W_Àâòîìàòè÷åñêîå ïpåîápàçîâàíèå òèïîâ èç REAL â COMP, êîòîpûé ÿâëÿåòñÿ ÷èñëîì òèïà INTEGER
-% An implicit type conversion from a real type to a \var{comp} is
-% encountered. Since \var{Comp} is a 64 bit integer type, this may indicate
-% an error.
-type_h_use_div_for_int=04015_H_Èñïîëüçyéòå DIV âìåñòî ýòîãî, äëÿ ïîëy÷åíèÿ öåëî÷èñëåííîãî påçyëüòàòà
-% When hints are on, then an integer division with the '/' operator will
-% procuce this message, because the result will then be of type real
-type_e_strict_var_string_violation=04016_E_Ñòpîêîâûå òèïû pàçíûå èç-çà $V+ påæèìà
-% When compiling in \var{\{\$V+\}} mode, the string you pass as a parameter
-% should be of the exact same type as the declared parameter of the procedure.
-type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_SUCC èëè PRED íà ïåpå÷èñëåíèÿõ ñ íàçíà÷åíèÿìè íåâîçìîæíû
-% When you declared an enumeration type which has assignments in it, as in C,
-% like in the following:
-% \begin{verbatim}
-% Tenum = (a,b,e:=5);
-% \end{verbatim}
-% you cannot use the \var{Succ} or \var{Pred} functions on them.
-type_e_cant_read_write_type=04018_E_Håâîçìîæíî ïpî÷åñòü èëè çàïèñàòü ïåpåìåííyþ ýòîãî òèïà
-% You are trying to \var{read} or \var{write} a variable from or to a
-% file of type text, which doesn't support that. Only integer types,
-% booleans, reals, pchars and strings can be read from/written to a text file.
-type_e_no_readln_writeln_for_typed_file=04019_E_Íåâîçìîæíî èñïîëüçîâàòü Readln èëè Writeln íà òèïèçèðîâàííîì ôàéëå
-% \var{readln} and \var{writeln} are only allowed for text files.
-type_e_no_read_write_for_untyped_file=04020_E_Íåâîçìîæíî èñïîëüçîâàòü Read èëè Write íà íåòèïèçèðîâàííîì ôàéëå
-% \var{read} and \var{write} are only allowed for text or typed files.
-type_e_typeconflict_in_set=04021_E_Îøèáêà òèïîâ ìåæäy ýëåìåíòàìè íàáîpà
-% There is at least one set element which is of the wrong type, i.e. not of
-% the set type.
-type_w_maybe_wrong_hi_lo=04022_W_LO/HI (LONGINT/DWORD) âîçâpàùàþò ñòàpøåå/ìëàäøåå ñëîâî
-% \fpc supports an overloaded version of \var{lo/hi} for \var{longint/dword/int64/qword}
-% which returns the lower/upper word/dword of the argument. TP always uses
-% a 16 bit \var{lo/hi} which returns always bits 0..7 for \var{lo} and the
-% bits 8..15 for \var{hi}. If you want the TP behavior you have
-% to type cast the argument to \var{word/integer}
-type_e_integer_or_real_expr_expected=04023_E_Îæèäàåòñÿ âûpàæåíèå òèïà INTEGER èëè REAL
-% The first argument to \var{str} must a real or integer type.
-type_e_wrong_type_in_array_constructor=04024_E_Håâåpíûé òèï "$1" â ìàññèâå êîíñòpyêòîpà
-% You are trying to use a type in an array constructor which is not
-% allowed.
-type_e_wrong_parameter_type=04025_E_Håñîâìåñòèìîñòü òèïîâ â àpãyìåíòå # $1: Ïîëó÷èëè "$2", íî îæèäàåòñÿ "$3"
-% You are trying to pass an invalid type for the specified parameter.
-type_e_no_method_and_procedure_not_compatible=04026_E_Ìåòîä (ïåpåìåííàÿ) è Ïpîöåäypà (ïåpåìåííàÿ) íå ñîâìåñòèìû
-% You can't assign a method to a procedure variable or a procedure to a
-% method pointer.
-type_e_wrong_math_argument=04027_E_Çàïpåùåííàÿ êîíñòàíòà, áûëà ïåpåäàíà ê âíyòpåííåé ìàòåìàòè÷åñêîé ôyíêöèè
-% The constant argument passed to a ln or sqrt function is out of
-% the definition range of these functions.
-type_e_no_addr_of_constant=04028_E_Hå ìîãy ïîëy÷èòü àäpåñ êîíñòàíòû
-% It's not possible to get the address of a constant, because they
-% aren't stored in memory, you can try making it a typed constant.
-type_e_argument_cant_be_assigned=04029_E_Àðãóìåíò íå ìîæåò áûòü ñâÿçàí ñ
-% Only expressions which can be on the left side of an
-% assignment can be passed as call by reference argument
-% Remark: Properties can be only
-% used on the left side of an assignment, but they can't be used as arguments
-type_e_cannot_local_proc_to_procvar=04030_E_Íåìîãó ñâÿçàòü ëîêàëüíóþ ïðîöåäóðó/ôóíêöèþ ñ ïðîöåäóðíîé ïåðåìåííîé
-% It's not allowed to assign a local procedure/function to a
-% procedure variable, because the calling of local procedure/function is
-% different. You can only assign local procedure/function to a void pointer.
-type_e_no_assign_to_addr=04031_E_Hå ìîãy ïîäâÿçàòü çíà÷åíèå ê àäpåñy
-% It's not allowed to assign a value to an address of a variable,constant,
-% procedure or function. You can try compiling with -So if the identifier
-% is a procedure variable.
-type_e_no_assign_to_const=04032_E_Hå ìîãy ïîäâÿçàòü çíà÷åíèå ê êîíñòàíòå
-% It's not allowed to assign a value to a variable which is declared
-% as a const. This is normally a parameter declared as const, to allow
-% changing make the parameter value or var.
-type_e_array_required=04033_E_Òpåáyåòñÿ òèï array
-% If you are accessing a variable using an index '[<x>]' then
-% the type must be an array. In FPC mode also a pointer is allowed.
-type_e_interface_type_expected=04034_E_òðåáóåòñÿ òèï interface, íî ïîëó÷èëè "$1"
-type_w_mixed_signed_unsigned=04035_W_Ñìåøèâàíèå çíàêîâûõ âûðàæåíèé è cardinal òèïà äàåò 64bit ðåçóëüòàò
-% If you divide (or calculate the modulus of) a signed expression by a cardinal (or vice versa),
-% or if you have overflow and/or range checking turned on and use an arithmetical
-% expression (+, -, *, div, mod) in which both signed numbers and cardinals appear,
-% then everything has to be evaluated in 64bit which is slower than normal
-% 32bit arithmetics. You can avoid this by typecasting one operand so it
-% matches the result type of the other one.
-type_w_mixed_signed_unsigned2=04036_W_Ñìåøèâàíèå çíàêîâûõ âûðàæåíèé è cardinal òèïà ìîæåò äàòü îøèáêó âûõîäà çà äèàïàçîí
-% If you use a binary operator (and, or, xor) and one of
-% the operands is a cardinal while the other one is a signed expression, then,
-% if range checking is turned on, you may get a range check error because in
-% such a case both operands are converted to cardinal before the operation is
-% carried out. You can avoid this by typecasting one operand so it
-% matches the result type of the other one.
-type_e_typecast_wrong_size_for_assignment=04037_E_Ïðèâåäåíèå òèïà èç $1 â $2 íåâîçìîæíî ïðè ïðèñâàèâàíèè, òàê êàê îïåðàíäû èìåþò ðàçíûé ðàçìåð
-% Type casting to a type with a different size is not allowed when the variable is
-% used for assigning.
-% \end{description}
-
-#
-# Symtable
-#
-% \section{Symbol handling}
-% This section lists all the messages that concern the handling of symbols.
-% This means all things that have to do with procedure and variable names.
-% \begin{description}
-sym_e_id_not_found=05000_E_Èäåíòèôèêàòîp íå íàéäåí $1
-% The compiler doesn't know this symbol. Usually happens when you misspel
-% the name of a variable or procedure, or when you forgot to declare a
-% variable.
-sym_f_internal_error_in_symtablestack=05001_F_Âíyòpåííÿÿ îøèáêà â SymTableStack()
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-sym_e_duplicate_id=05002_E_Äâîéíîé èäåíòèôèêàòîp $1
-% The identifier was already declared in the current scope.
-sym_h_duplicate_id_where=05003_H_Èäåíòèôèêàòîp yæå îïpåäåëåí â $1 (ñòpîêà $2)
-% The identifier was already declared in a previous scope.
-sym_e_unknown_id=05004_E_Håèçâåñòíûé èäåíòèôèêàòîp $1
-% The identifier encountered hasn't been declared, or is used outside the
-% scope where it's defined.
-sym_e_forward_not_resolved=05005_E_FORWARD íå íàéäåí $1
-% This can happen in two cases:
-% \begin{itemize}
-% \item This happens when you declare a function (in the \var{interface} part, or
-% with a \var{forward} directive, but do not implement it.
-% \item You reference a type which isn't declared in the current \var{type}
-% block.
-% \end{itemize}
-sym_f_id_already_typed=05006_F_Èäåíòèôèêàòîp yæå îïpåäåëåí êàê òèï
-% You are trying to redefine a type.
-sym_e_error_in_type_def=05007_E_Îøèáêà â îïpåäåëåíèè òèïà
-% There is an error in your definition of a new array type:
-% \item One of the range delimiters in an array declaration is erroneous.
-% For example, \var{Array [1..1.25]} will trigger this error.
-sym_e_type_id_not_defined=05008_E_Òèï èäåíòèôèêàòîpà íå îïpåäåëåí
-% The type identifier has not been defined yet.
-sym_e_forward_type_not_resolved=05009_E_FORWARD òèï íå íàéäåí $1
-% A symbol was forward defined, but no declaration was encountered.
-sym_e_only_static_in_static=05010_E_Òîëüêî ñòàòè÷åñêèå ïåðåìåííûå ìîãóò èñïîëüçîâàòüñÿ â ñòàòè÷åñêèõ èëè âíåøíèõ ìåòîäàõ
-% A static method of an object can only access static variables.
-sym_e_invalid_call_tvarsymmangledname=05011_E_Håâåpíûé âûçîâ tvarsym.mangledname()
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-sym_f_type_must_be_rec_or_class=05012_F_Îæèäàåòñÿ òèï RECORD èëè CLASS
-% The variable or expression isn't of the type \var{record} or \var{class}.
-sym_e_no_instance_of_abstract_object=05013_E_Îápàçöû êëàññîâ èëè îáúåêòîâ ñ àáñòpàêòíûì ìåòîäîì íå ïîääåpæèâàþòñÿ
-% You are trying to generate an instance of a class which has an abstract
-% method that wasn't overridden.
-sym_w_label_not_defined=05014_W_Ìåòêà íå îïpåäåëåíà $1
-% A label was declared, but not defined.
-sym_e_label_used_and_not_defined=05015_E_Ìåòêà $1 èñïîëüçóåòñÿ, íî íåîïðåäåëåíà
-% A label was declared and used, but not defined.
-sym_e_ill_label_decl=05016_E_Håâåpíîå îïðåäåëåíèå ìåòêè
-% This error should never happen; it occurs if a label is defined outside a
-% procedure or function.
-sym_e_goto_and_label_not_supported=05017_E_GOTO è LABEL íå ïîääåpæèâàþòñÿ (èñïîëüçyéòå êëþ÷ -Sg)
-% You must compile a program which has \var{label}s and \var{goto} statements
-% with the \var{-Sg} switch. By default, \var{label} and \var{goto} aren't
-% supported.
-sym_e_label_not_found=05018_E_Ìåòêà íå íàéäåíà
-% A \var{goto label} was encountered, but the label isn't declared.
-sym_e_id_is_no_label_id=05019_E_Ýòîò èäåíòèôèêàòîp íå ìåòêà
-% The identifier specified after the \var{goto} isn't of type label.
-sym_e_label_already_defined=05020_E_Ïîâòîpíîå îïpåäåëåíèå ìåòêè
-% You are defining a label twice. You can define a label only once.
-sym_e_ill_type_decl_set=05021_E_Íåâåpíîå îáúÿâëåíèå òèïà ýëåìåíòîâ íàáîðà
-% The declaration of a set contains an invalid type definition.
-sym_e_class_forward_not_resolved=05022_E_FORWARD îïpåäåëåíèå êëàññà íå îáíàpyæåíî $1
-% You declared a class, but you didn't implement it.
-sym_n_unit_not_used=05023_H_Ìîäóëü $1 íå èñïîëüçóåòñÿ â $2
-% The unit referenced in the \var{uses} clause is not used.
-sym_h_para_identifier_not_used=05024_H_Ïàpàìåòp íå èñïîëüçyåòñÿ $1
-% This is a warning. The identifier was declared (locally or globally) but
-% wasn't used (locally or globally).
-sym_n_local_identifier_not_used=05025_N_Ëîêàëüíàÿ ïåpåìåííàÿ íå èñïîëüçyåòñÿ $1
-% You have declared, but not used a variable in a procedure or function
-% implementation.
-sym_h_para_identifier_only_set=05026_H_Çíà÷åíèå ïàðàìåòðà $1 ñâÿçàíà ñ ÷åì-òî, íî íå èñïîëüçóåòñÿ
-% This is a warning. The identifier was declared (locally or globally)
-% set but not used (locally or globally).
-sym_n_local_identifier_only_set=05027_N_Ëîêàëüíàÿ ïåðåìåííàÿ $1 ñâÿçàíà ñ ÷åì-òî, íî íå èñïîëüçóåòñÿ
-% The variable in a procedure or function
-% implementation is declared, set but never used.
-sym_h_local_symbol_not_used=05028_H_Ëîêàëüíûé ñèìâîë $1 $2 íåèñïîëüçóåòñÿ
-% A local symbol is never used.
-sym_n_private_identifier_not_used=05029_N_Private ïîëå $1.$2 íåèñïîëüçóåòñÿ
-sym_n_private_identifier_only_set=05030_N_Private ïîëå $1.$2 ñâÿçàíà ñ ÷åì-òî, íî íå èñïîëüçóåòñÿ
-sym_n_private_method_not_used=05031_N_Private ìåòîä $1.$2 íåèñïîëüçóåòñÿ
-
-
-sym_e_set_expected=05032_E_Îæèäàåòñÿ yñòàíîâêà òèïà
-% The variable or expression isn't of type \var{set}. This happens in an
-% \var{in} statement.
-sym_w_function_result_not_set=05033_W_Ðåçyëüòàò ôyíêöèè êàæåòñÿ íå yñòàíîâëåí
-% You can get this warning if the compiler thinks that a function return
-% value is not set. This will not be displayed for assembler procedures,
-% or procedures that contain assembler blocks.
-sym_w_wrong_C_pack=05034_W_Òèï $1 íåêîððåêòíî âûðîâíåí â òåêóùåé çàïèñè C ÿçûêà
-% Arrays with sizes not multiples of 4 will be wrongly aligned
-% for C structures.
-sym_e_illegal_field=05035_E_Håèçâåñòíîå ïîëå â çàïèñè $1
-% The field doesn't exist in the record definition.
-sym_n_uninitialized_local_variable=05036_W_Ëîêàëüíàÿ ïåpåìåííàÿ $1 êàæåòñÿ íå èíèöèàëèçèpîâàíà
-sym_n_uninitialized_variable=05037_W_Ïåpåìåííàÿ $1 êàæåòñÿ íå èíèöèàëèçèpîâàíà
-% These messages are displayed if the compiler thinks that a variable will
-% be used (i.e. appears in the right-hand-side of an expression) when it
-% wasn't initialized first (i.e. appeared in the left-hand side of an
-% assigment)
-sym_e_id_no_member=05038_E_Èäåíòèôèêàòîp íå yêàçûâàåò íè íà êàêîé ýëåìåíò $1
-% When using the extended syntax of \var{new}, you must specify the constructor
-% method of the class you are trying to create. The procedure you specified
-% does not exist.
-sym_b_param_list=05039_B_Hàéäåíî îïpåäåëåíèå: $1
-% You get this when you use the \var{-vb} switch. In case an overloaded
-% procedure is not found, then all candidate overloaded procedures are
-% listed, with their parameter lists.
-sym_e_segment_too_large=05040_E_Ñåãìåíò äàííûõ ñëèøêîì áîëüøîé (ìàêñ. 2GB)
-% You get this when you declare an array whose size exceeds the 2GB limit.
-% \end{description}
-
-
-#
-# Codegenerator
-#
-% \section{Code generator messages}
-% This section lists all messages that can be displayed if the code
-% generator encounters an error condition.
-% \begin{description}
-cg_e_break_not_allowed=06000_E_BREAK íå pàçpåøåíî
-% You're trying to use \var{break} outside a loop construction.
-cg_e_continue_not_allowed=06001_E_CONTINUE íå pàçpåøåíî
-% You're trying to use \var{continue} outside a loop construction.
-cg_e_too_complex_expr=06002_E_Âûpàæåíèå ñëèøêîì ñëîæíîå - ïåpåïîëíåíèå ñòåêà FPU
-% Your expression is too long for the compiler. You should try dividing the
-% construct over multiple assignments.
-cg_e_illegal_expression=06003_E_Håïpàâèëüíîå âûpàæåíèå
-% This can occur under many circumstances. Mostly when trying to evaluate
-% constant expressions.
-cg_e_invalid_integer=06004_E_Håïpàâèëüíîå öåëî÷èñëåííîå âûpàæåíèå
-% You made an expression which isn't an integer, and the compiler expects the
-% result to be an integer.
-cg_e_invalid_qualifier=06005_E_Håäåéñòâèòåëüíûé ñïåöèôèêàòîp
-% One of the following is happening :
-% \begin{itemize}
-% \item You're trying to access a field of a variable that is not a record.
-% \item You're indexing a variable that is not an array.
-% \item You're dereferencing a variable that is not a pointer.
-% \end{itemize}
-cg_e_upper_lower_than_lower=06006_E_Âåpõíèé ïpåäåë äèàïàçîíà ìåíüøå íèæíåãî ïpåäåëà.
-% You are declaring a subrange, and the lower limit is higher than the high
-% limit of the range.
-cg_e_illegal_count_var=06007_E_Håâåpíàÿ ïåðåìåííàÿ-ñ÷åò÷èê
-% The type of a \var{for} loop variable must be an ordinal type.
-% Loop variables cannot be reals or strings.
-cg_e_cant_choose_overload_function=06008_E_Íå ìîãó îïðåäåëèòü, êòî 'ïåðåãðóæàë' ôóíêöèþ, ÷òîáû åå âûçâàòü
-% You're calling overloaded functions with a parameter that doesn't correspond
-% to any of the declared function parameter lists. e.g. when you have declared
-% a function with parameters \var{word} and \var{longint}, and then you call
-% it with a parameter which is of type \var{integer}.
-cg_e_parasize_too_big=06009_E_Ðàçìåp ñïèñêà ïàpàìåòpîâ ïpåâûñèë äîïyñòèìûé ïpåäåë â 65535 áàéò (64kb)
-% The I386 processor limits the parameter list to 65535 bytes (the \var{RET}
-% instruction causes this)
-cg_e_illegal_type_conversion=06010_E_Håïpàâèëüíîå ïpåîápàçîâàíèå òèïîâ
-% When doing a type-cast, you must take care that the sizes of the variable and
-% the destination type are the same.
-cg_d_pointer_to_longint_conv_not_portable=06011_D_Êîíâåpòàöèÿ ìåæäy ORDINAL è POINTER íåâîçìîæíà èç-çà îòñóòñòâèÿ ïîääåðæêè ó ïëàòôîðìû
-% If you typecast a pointer to a longint, this code will not compile
-% on a machine using 64bit for pointer storage.
-cg_e_file_must_call_by_reference=06012_E_Ôàéëîâûå òèïû äîëæíû áûòü ïåpåìåííûìè
-% You cannot specify files as value parameters, i.e. they must always be
-% declared \var{var} parameters.
-cg_e_cant_use_far_pointer_there=06013_E_Èñïîëüçîâàíèå FAR yêàçàòåëÿ çäåñü íå ïîääåpæèâàåòñÿ
-% Free Pascal doesn't support far pointers, so you cannot take the address of
-% an expression which has a far reference as a result. The \var{mem} construct
-% has a far reference as a result, so the following code will produce this
-% error:
-% \begin{verbatim}
-% var p : pointer;
-% ...
-% p:=@mem[a000:000];
-% \end{verbatim}
-cg_e_var_must_be_reference=06014_E_Håïpàâèëüíûé âûçîâ ïàpàìåòpà ïî ññûëêå
-% You are trying to pass a constant or an expression to a procedure that
-% requires a \var{var} parameter. Only variables can be passed as a \var{var}
-% parameter.
-cg_e_dont_call_exported_direct=06015_E_Èñïîëüçîâàíèå EXPORT îïpåäåëÿåò, ÷òî ýòà ôyíêöèÿ íå ìîæåò çäåñü âûçûâàòüñÿ
-% No longer in use.
-cg_w_member_cd_call_from_method=06016_W_Âîçìîæíî íåïpàâèëüíûé âûçîâ êîíñòpyêòîpà èëè äåñòpyêòîpà (íå ñîîòâåòñòâyåò òåêyùåìy êîíòåêñòy)
-% No longer in use.
-cg_n_inefficient_code=06017_N_Håýôôåêòèâíûé êîä
-% You construction seems dubious to the compiler.
-cg_w_unreachable_code=06018_W_Håäîñòèæèìûé êîä
-% You specified a loop which will never be executed. Example:
-% \begin{verbatim}
-% while false do
-% begin
-% {.. code ...}
-% end;
-% \end{verbatim}
-cg_e_stackframe_with_esp=06019_E_Âûçîâ ïpîöåäypû ñ STACKFRAME ESP/SP
-% The compiler encountered a procedure or function call inside a
-% procedure that uses a \var{ESP/SP} stackframe. Normally, when a call is
-% done the procedure needs a \var{EBP} stackframe.
-cg_e_cant_call_abstract_method=06020_E_Àáñòpàêòíûå ìåòîäû íå ìîãyò âûçûâàòüñÿ íàïpÿìyþ
-% You cannot call an abstract method directy, instead you must call a
-% overriding child method, because an abstract method isn't implemented.
-cg_f_internal_error_in_getfloatreg=06021_F_Âíyòpåííÿÿ îøèáêà â getfloatreg(), pàñïpåäåëåíèå ïpîâàëåíî!
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-cg_f_unknown_float_type=06022_F_Håèçâåñòíûé òèï ïëàâàþùåé çàïÿòîé
-% The compiler cannot determine the kind of float that occurs in an expression.
-cg_f_secondvecn_base_defined_twice=06023_F_SecondVecn() áàçà îïpåäåëåíà äâàæäû
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-cg_f_extended_cg68k_not_supported=06024_F_Ðàñøèpåíèÿ cg68k íå ïîääåpæèâàþòñÿ
-% The \var{extended} type is not supported on the m68k platform.
-cg_f_32bit_not_supported_in_68000=06025_F_Áåççíàêîâûå 32-áèòíûå ÷èñëà íå ïîääåpæèâàþòñÿ â MC680x0 påæèìå
-% The cardinal is not supported on the m68k platform.
-cg_f_internal_error_in_secondinline=06026_F_Âíyòpåííÿÿ îøèáêà â secondinline()
-% An internal error occurred in the compiler; If you encounter such an error,
-% please contact the developers and try to provide an exact description of
-% the circumstances in which the error occurs.
-cg_d_register_weight=06027_D_Ðåãèñòp $1 âåñèò $2 $3
-% Debugging message. Shown when the compiler considers a variable for
-% keeping in the registers.
-cg_e_stacklimit_in_local_routine=06028_E_Ëèìèò ñòåêà â ëîêàëüíîé ïîäïpîãpàììå èñ÷åpïàí
-% Your code requires a too big stack. Some operating systems pose limits
-% on the stack size. You should use less variables or try ro put large
-% variables on the heap.
-cg_d_stackframe_omited=06029_D_STACK FRAME îïyùåíû
-% Some procedure/functions do not need a complete stack-frame, so it is omitted.
-% This message will be displayed when the {-vd} switch is used.
-cg_e_unable_inline_object_methods=06031_E_Â îáúåêòàõ èëè êëàññàõ íåëüçÿ èñïîëüçîâàòü INLINE
-% You cannot have inlined object methods.
-cg_e_unable_inline_procvar=06032_E_Â âûçîâàõ PROCVAR íåëüçÿ èñïîëüçîâàòü INLINE
-% A procedure with a procedural variable call cannot be inlined.
-cg_e_no_code_for_inline_stored=06033_E_Håò êîäà â INLINE
-% The compiler couldn't store code for the inline procedure.
-cg_e_no_call_to_interrupt=06034_E_Ïðÿìîé âûçîâ ïðîöåäóðû-ïðåðûâàíèÿ $1 íåâîçìîæåí
-% You can not call an interrupt procedure directly from FPC code
-cg_e_can_access_element_zero=06035_E_Hyëåâîé ýëåìåíò äëèííîé ñòpîêè íåäîñòyïåí, èñïîëüçyéòå âìåñòî ýòîãî SETLENGTH èëè LENGTH
-% You should use \var{setlength} to set the length of an ansi/wide/longstring
-% and \var{length} to get the length of such kinf of string
-cg_e_include_not_implemented=06036_E_Âêëþ÷åíèÿ è èñêëþ÷åíèÿ íå ïîääåpæèâàþòñÿ â CASE
-% \var{include} and \var{exclude} are only partially
-% implemented for \var{i386} processors
-% and not at all for \var{m68k} processors.
-cg_e_cannot_call_cons_dest_inside_with=06037_E_Êîíñòpyêòîpû èëè äåñòpyêòîpû íå ìîãyò âûçûâàòüñÿ âíyòpè 'WITH' ïpåäëîæåíèé
-% Inside a \var{With} clause you cannot call a constructor or destructor for the
-% object you have in the \var{with} clause.
-cg_e_cannot_call_message_direct=06038_E_Håëüçÿ âûçûâàòü ìåòîä îápàáîò÷èêà ñîáûòèé íåïîñpåäñòâåííî
-% A message method handler method can't be called directly if it contains an
-% explicit self argument
-cg_e_goto_inout_of_exception_block=06039_E_Ïåðåõîä çà âíåøíþþ ñòîðîíó â exception áëîêå
-% It isn't allowed to jump in or outside of an exception block like \var{try..finally..end;}:
-% \begin{verbatim}
-% label 1;
-%
-% ...
-%
-% try
-% if not(final) then
-% goto 1; // this line will cause an error
-% finally
-% ...
-% end;
-% 1:
-% ...
-% \end{verbatim}
-% \end{description}
-cg_e_control_flow_outside_finally=06040_E_Êîíòðîëèðóþùèå âûðàæåíèÿ (break,continue è exit) â áëîêå finally - íåäîïóñòèìû
-% It isn't allowed to use the control flow statements \var{break},
-% \var{continue} and \var{exit}
-% inside a finally statement. The following example shows the problem:
-% \begin{verbatim}
-% ...
-% try
-% p;
-% finally
-% ...
-% exit; // This exit ISN'T allowed
-% end;
-% ...
-%
-% \end{verbatim}
-% If the procedure \var{p} raises an exception the finally block is
-% executed. If the execution reaches the exit, it's unclear what to do:
-% exiting the procedure or searching for another exception handler
-# EndOfTeX
-
-#
-# Assembler reader
-#
-asmr_d_start_reading=07000_D_Hà÷èíàåì ÷èòàòü $1 ñòèëü àññåìáëåpà
-% This informs you that an assembler block is being parsed
-asmr_d_finish_reading=07001_D_Êîíåö ÷òåíèÿ $1 ñòèëÿ àññåìáëåpà
-% This informs you that an assembler block has finished.
-asmr_e_none_label_contain_at=07002_E_×òî-òî, íî íå ìåòêà, ñîäåpæèò @
-% A identifier which isn't a label can't contain a @.
-asmr_w_override_op_not_supported=07003_W_Ïåpåîïpåäåëåííûå îïåpàòîpû íå ïîääåpæèâàþòñÿ
-% The Override operator is not supported
-asmr_e_building_record_offset=07004_E_Îøèáêà ïîñòpîåíèÿ ñìåùåíèÿ â çàïèñè
-% There has an error occured while building the offset of a record/object
-% structure, this can happend when there is no field specified at all or
-% an unknown field identifier is used.
-asmr_e_offset_without_identifier=07005_E_OFFSET èñïîëüçyåòñÿ áåç èäåíòèôèêàòîpà
-% You can only use OFFSET with an identifier. Other syntaxes aren't
-% supported
-asmr_e_type_without_identifier=07006_E_TYPE èñïîëüçyåòñÿ áåç èäåíòèôèêàòîpà
-% You can only use TYPE with an identifier. Other syntaxes aren't
-% supported
-asmr_e_no_local_or_para_allowed=07007_E_Hå ìîãy çäåñü èñïîëüçîâàòü ëîêàëüíûå ïåpåìåííûå èëè ïàpàìåòpû
-% You can't use a local variable or parameter here, mostly because the
-% addressing of locals and parameters is done using the %ebp register so the
-% address can't be get directly.
-asmr_e_need_offset=07008_E_Çäåñü íåîáõîäèìî èñïîëüçîâàòü OFFSET
-% You need to use OFFSET <id> here to get the address of the identifier.
-asmr_e_need_dollar=07009_E_Çäåñü íåîáõîäèìî èñïîëüçîâàòü çíàê äîëëàðà ('$')
-% You need to use $<id> here to get the address of the identifier.
-asmr_e_cant_have_multiple_relocatable_symbols=07010_E_Hå ìîãy èñïîëüçîâàòü ìíîæåñòâåííûå ïåpåìåùàåìûå ñèìâîëû
-% You can't have more than one relocatable symbol (variable/typed constant)
-% in one argument.
-asmr_e_only_add_relocatable_symbol=07011_E_Ïåpåìåùàåìûé ñèìâîë ìîæåò áûòü òîëüêî äîáàâëåí
-% Relocatable symbols (variable/typed constant) can't be used with other
-% operators. Only addition is allowed.
-asmr_e_invalid_constant_expression=07012_E_Håïpàâèëüíîå âûpàæåíèå â êîíñòàíòå
-% There is an error in the constant expression.
-asmr_e_relocatable_symbol_not_allowed=07013_E_Ïåpåìåùàåìûå ñèìâîëû çäåñü íå pàçpåøåíû
-% You can't use a relocatable symbol (variable/typed constant) here.
-asmr_e_invalid_reference_syntax=07014_E_Håâåpíûé ñèíòàêñèñ ññûëêè
-% There is an error in the reference.
-asmr_e_local_para_unreachable=07015_E_Âû íå ìîæåòå äîñòè÷ü $1 èç ýòîãî êîäà
-% You can not read directly the value of local or para
-% of a higher level in assembler code (except for
-% local assembler code without parameter nor locals).
-asmr_e_local_label_not_allowed_as_ref=07016_E_Ëîêàëüíûå ñèìâîëû èëè ìåòêè íåëüçÿ èñïîëüçîâàòü êàê ññûëêè
-% Âû íå ìîæåòå èñïîëüçîâàòü ëîêàëüíûå ñèìâîëû èëè ìåòêè êàê ññûëêè
-asmr_e_wrong_base_index=07017_E_Håâåpíàÿ áàçà è èíäåêñ â èñïîëüçîâàíèè påãèñòpà
-% There is an error with the base and index register
-asmr_w_possible_object_field_bug=07018_W_Âîçìîæíàÿ îøèáêà â óïðàâëåíèè ïîëÿ îáúåêòà
-% Fields of objects or classes can be reached directly in normal or objfpc
-% modes but TP and Delphi modes treat the field name as a simple offset.
-asmr_e_wrong_scale_factor=07019_E_Håâåpíûé ìàøòàá ôàêòîpà (?êîýôôèöèåíò Ëàìå? :-&)
-% The scale factor given is wrong, only 1,2,4 and 8 are allowed
-asmr_e_multiple_index=07020_E_Ìíîæåñòâåííîå èñïîëüçîâàíèå èíäåêñà påãèñòpà
-% You are trying to use more than one index register
-asmr_e_invalid_operand_type=07021_E_Håâåpíûé òèï îïåpàíäà
-% The operand type doesn't match with the opcode used
-asmr_e_invalid_string_as_opcode_operand=07022_E_Håâåpíàÿ ñòpîêà, êàê îïåpàíä êîäà îïåpàöèè: $1
-% The string specified as operand is not correct with this opcode
-asmr_w_CODE_and_DATA_not_supported=07023_W_@CODE è @DATA íå ïîääåpæèâàþòñÿ
-% @CODE and @DATA are unsupported and are ignored.
-asmr_e_null_label_ref_not_allowed=07024_E_Ïyñòûå ññûëêè ìåòîê íå pàçpåøåíû
-asmr_e_expr_zero_divide=07025_E_Äåëåíèå íà íîëü â âûðàæåíèè
-asmr_e_expr_illegal=07026_E_Íåâåðíîå âûðàæåíèå
-asmr_e_escape_seq_ignored=07027_E_Esc-ïîñëåäîâàòåëüíîñòü èãíîpèpyåòñÿ: $1
-asmr_e_invalid_symbol_ref=07028_E_Håâåpíàÿ ññûëêà íà ñèìâîë
-asmr_w_fwait_emu_prob=07029_W_FWAIT ìîæåò âûçâàòü ïpîáëåìû ýìyëÿöèè ñ EMU387
-asmr_w_fadd_to_faddp=07030_W_$1 áåç îïåðàíäà òðàíñëèðóåòñÿ â $1P
-asmr_w_enter_not_supported_by_linux=07031_W_ENTER èíñòðóêöèÿ íå ïîääåðæèâàåòñÿ â Linux kernel
-% ENTER instruction can generate a stack page fault that is not
-% caught correctly by the i386 Linux page handler.
-asmr_w_calling_overload_func=07032_W_Âûçîâ ïåpåãpyæåííîé ôyíêöèè â àññåìáëåpå
-asmr_e_unsupported_symbol_type=07033_E_Hå ïîääåpæèâàåìûé òèï ñèìâîëà â îïåpàíäå
-asmr_e_constant_out_of_bounds=07034_E_Ïîñòîÿííîå çíà÷åíèå âíå ãpàíèö
-asmr_e_error_converting_decimal=07035_E_Îøèáêà ïpè ïpåîápàçîâàíèè äåñÿòè÷íîãî ÷èñëà $1
-asmr_e_error_converting_octal=07036_E_Îøèáêà ïpè ïpåîápàçîâàíèè âîñìåpè÷íîãî ÷èñëà $1
-asmr_e_error_converting_binary=07037_E_Îøèáêà ïpè ïpåîápàçîâàíèè äâîè÷íîãî ÷èñëà $1
-asmr_e_error_converting_hexadecimal=07038_E_Îøèáêà ïpè ïpåîápàçîâàíèè øåñòíàäöàòåpè÷íîãî ÷èñëà $1
-asmr_h_direct_global_to_mangled=07039_H_$1 ïpåîápàçîâàíî â $2
-asmr_w_direct_global_is_overloaded_func=07040_W_$1 ñâÿçàí ñ ïåpåãpyæåííîé ôyíêöèåé
-asmr_e_cannot_use_SELF_outside_a_method=07041_E_Hå ìîãy èñïîëüçîâàòü SELF âíå ìåòîäà
-asmr_e_cannot_use_OLDEBP_outside_nested_procedure=07042_E_Hå ìîãy èñïîëüçîâàòü __OLDEBP âíå âëîæåííîé ïpîöåäypû
-asmr_e_void_function=07043_W_Ôyíêöèÿ êîòîpàÿ îïpåäåëåíà êàê 'íå âîçpàùàþùàÿ çíà÷åíèé' íå ìîæåò èõ âîçâpàùàòü
-asmr_e_SEG_not_supported=07044_E_SEG íå ïîääåpæèâàåòñÿ
-asmr_e_size_suffix_and_dest_dont_match=07045_E_Ñyôôèêñ pàçìåpà è àäpåñàò èëè èñõîäíûé pàçìåp íå ñîîòâåòñòâyþò
-asmr_w_size_suffix_and_dest_dont_match=07046_W_Ñyôôèêñ pàçìåpà è àäpåñàò èëè èñõîäíûé pàçìåp íå ñîîòâåòñòâyþò
-asmr_e_syntax_error=07047_E_Ñèíòàêñè÷åñêàÿ îøèáêà ïðè àññåìáëèðîâàíèè
-asmr_e_invalid_opcode_and_operand=07048_E_Håâåpíàÿ êîìáèíàöèÿ êîäà îïåpàöèè è îïåpàíäîâ
-asmr_e_syn_operand=07049_E_Ñèíòàêñè÷åñêàÿ îøèáêà â îïåpàíäå ïðè àññåìáëèðîâàíèè
-asmr_e_syn_constant=07050_E_Ñèíòàêñè÷åñêàÿ îøèáêà â êîíñòàíòå ïðè àññåìáëèðîâàíèè
-asmr_e_invalid_string_expression=07051_E_Håâåpíîå ñòpîêîâîå âûpàæåíèå
-asmr_w_const32bit_for_address=07052_W_êîíñòàíòà ñ ñèìâîëîì $1 íå äëÿ 32bit àäðåñà
-asmr_e_unknown_opcode=07053_E_Íåèçâåñòíûé opcode $1
-asmr_e_invalid_or_missing_opcode=07054_E_Håâåpíàÿ èëè ïpîïyùåííàÿ êîìàíäà
-asmr_e_invalid_prefix_and_opcode=07055_E_Håâåpíàÿ êîìáèíàöèÿ ïpåôèêñà è êîìàíäû: $1
-asmr_e_invalid_override_and_opcode=07056_E_Håâåpíàÿ êîìáèíàöèÿ ïåpåîïpåäåëåíèÿ è êîìàíäû: $1
-asmr_e_too_many_operands=07057_E_Ñëèøêîì ìíîãî îïåpàíäîâ â ñòpîêå
-asmr_w_near_ignored=07058_W_Äèðåêòèâà NEAR èãíîpèpóåòñÿ
-asmr_w_far_ignored=07059_W_Äèðåêòèâà FAR èãíîpèpóåòñÿ
-asmr_e_dup_local_sym=07060_E_Ïîâòîpíîå îïpåäåëåíèå ëîêàëüíîãî ñèìâîëà $1
-asmr_e_unknown_local_sym=07061_E_Håèçâåñòíûé ëîêàëüíûé ñèìâîë $1
-asmr_e_unknown_label_identifier=07062_E_Håèçâåñòíàÿ ìåòêà èäåíòèôèêàòîpà $1
-asmr_e_invalid_register=07063_E_Íåïðàâèëüíîå èìÿ ðåãèñòðà
-asmr_e_invalid_fpu_register=07064_E_Håïpàâèëüíîå èìÿ påãèñòpà äëÿ îïåpàöèè ñ ïëàâàþùåé çàïÿòîé
-asmr_e_nor_not_supported=07065_E_NOR íå ïîääåpæèâàåòñÿ
-asmr_w_modulo_not_supported=07066_W_MODULO íå ïîääåpæèâàåòñÿ
-asmr_e_invalid_float_const=07067_E_Håâåpíàÿ êîíñòàíòà (ïëàâàþùàÿ çàïÿòàÿ): $1
-asmr_e_invalid_float_expr=07068_E_Håâåpíîå âûpàæåíèå (ïëàâàþùàÿ îïåpàöèÿ)
-asmr_e_wrong_sym_type=07069_E_Håâåpíûé òèï ñèìâîëà
-asmr_e_cannot_index_relative_var=07070_E_Hå ìîãy èíäåêñèpîâàòü ëîêàëüíyþ ïåpåìåííyþ èëè ïàpàìåòp ñ påãèñòpîì
-asmr_e_invalid_seg_override=07071_E_Håâåpíîå âûpàæåíèå ïåpåîïpåäåëåííîãî ñåãìåíòà
-asmr_w_id_supposed_external=07072_W_Èäåíòèôèêàòîp $1, ïpåäïîëîæèì ÷òî îí âíåøíèé
-asmr_e_string_not_allowed_as_const=07073_E_Håëüçÿ èñïîëüçîâàòü ñòpîêè êàê êîíñòàíòû
-asmr_e_no_var_type_specified=07074_Òèï ïåpåìåííîé íå yêàçàí
-asmr_w_assembler_code_not_returned_to_text=07075_E_Àññåìáëåpñêèé êîä íå âîçâpàùàåòñÿ â TEXT ñåãìåíò
-asmr_e_not_directive_or_local_symbol=07076_E_$1 íå äèpåêòèâà è íå ëîêàëüíûé ñèìâîë
-asmr_w_using_defined_as_local=07077_E_Èñïîëüçîâàíèå îïpåäåëåííîãî èìåíè êàê ëîêàëüíàÿ ìåòêà
-asmr_e_dollar_without_identifier=07078_E_Ñèìâîë '$' èñïîëüçyåòñÿ áåç èäåíòèôèêàòîpà
-asmr_w_32bit_const_for_address=07079_W_32-áèòíàÿ êîíñòàíòà ñîçäàåòñÿ äëÿ àäpåñà
-asmr_n_align_is_target_specific=07080_N_.ALIGN èñïîëüçyåòñÿ ñïåöèàëüíî äëÿ yêàçàíèÿ ïëàòôîpìû, èñïîëüçyéòå .BALIGN èëè .P2ALIGN
-asmr_e_cannot_access_field_directly_for_parameters=07081_E_Håò äîñòyïà ê ïîëþ ïàpàìåòpà íàïpÿìyþ, èñïîëüçyéòå påãèñòpû
-% You should load the parameter first into a register and then access the
-% fields using that register.
-asmr_e_cannot_access_object_field_directly=07082_E_Håò äîñòyïà ê ïîëÿì îáúåêòîâ/êëàññîâ íàïpÿìyþ, èñïîëüçyéòå påãèñòpû
-% You should load the self pointer first into a register and then access the
-% fields using the register as base. By default the self pointer is available
-% in the esi register on i386.
-asmr_e_unable_to_determine_reference_size=07083_E_Hå çàäàí pàçìåp è íåâîçìîæíî îïpåäåëèòü pàçìåp îïåpàíäîâ
-% You should specify explicitly a size for the reference, because
-% compiler is unable to determine what size (byte,word,dword,etc.) it
-% should use for the reference.
-asmr_e_cannot_use_RESULT_here=07084_E_Hå ìîãy èñïîëüçîâàòü RESULT â ýòîé ôyíêöèè
-asmr_h_RESULT_is_reg=07085_H_RESULT ýòî påãèñòp $1
-asmr_w_adding_explicit_args_fXX=07086_W_"$1" áåç îïåðàíäà òðàíñëèðóåòñÿ â "$1 %st,%st(1)"
-asmr_w_adding_explicit_first_arg_fXX=07087_W_"$1 %st(n)" òðàíñëèðóåòñÿ â "$1 %st,%st(n)"
-asmr_w_adding_explicit_second_arg_fXX=07088_W_"$1 %st(n)" òðàíñëèðóåòñÿ â "$1 %st(n),%st"
-asmr_e_invalid_char_smaller=07089_E_Ñèìâîë < çäåñü íå ðàçðåøåí
-asmr_e_invalid_char_greater=07090_E_Ñèìâîë > çäåñü íå ðàçðåøåí
-asmr_w_xdef_not_supported=07091_W_XDEF íå ïîääåðæèâàåòñÿ
-asmr_e_invalid_global_def=07092_E_Íåâåðíûé ñèíòàêñèñ XDEF
-asmr_w_align_not_supported=07093_W_ALIGN íå ïîääåðæèâàåòñÿ
-asmr_e_no_inc_and_dec_together=07094_E_Inc è Dec íå ìîãóò áûòü âìåñòå
-asmr_e_invalid_reg_list_in_movem=07095_E_Íåâåðíûé reglist â movem
-asmr_e_invalid_reg_list_for_opcode=07096_E_Íåâåðíûé reglist äëÿ opcode
-asmr_e_68020_mode_required=07097_E_Òðåáóåòñÿ 68020 ðåæèì
-
-#
-# Assembler/binary writers
-#
-asmw_f_too_many_asm_files=08000_F_Ñëèøêîì ìíîãî ôàéëîâ äëÿ àññåìáëèpîâàíèÿ
-asmw_f_assembler_output_not_supported=08001_F_Âûápàííûé òèï àññåìáëåpà íå ïîääåpæèâàåòñÿ
-asmw_f_comp_not_supported=08002_F_COMP íå ïîääåpæèâàåòñÿ
-asmw_f_direct_not_supported=08003_F_Ïðÿìîé àññåìáëåp çäåñü íå ïîääåpæèâàåòñÿ
-asmw_e_alloc_data_only_in_bss=08004_E_Ðàñïpåäåëåíèå äàííûõ â ïàìÿòè âîçìîæíî òîëüêî â BSS ñåêöèè
-asmw_f_no_binary_writer_selected=08005_F_Íå âûáðàí ñòèëü àññåìáëèðîâàíèÿ
-asmw_e_opcode_not_in_table=08006_E_Asm: Êîìàíäû $1 íåò â ñïèñêå êîìàíä
-asmw_e_invalid_opcode_and_operands=08007_E_Asm: $1 íåâåpíàÿ êîìáèíàöèÿ îïåpàíäîâ â êîìàíäå
-asmw_e_16bit_not_supported=08008_E_Asm: 16-áèòíûå ññûëêè íå ïîääåpæèâàþòñÿ
-asmw_e_invalid_effective_address=08009_E_Asm: Håâåpíûé ýôôåêòèâíûé(?) àäpåñ
-asmw_e_immediate_or_reference_expected=08010_E_Asm: Îæèäàåòñÿ IMMEDIATE èëè ññûëêà
-asmw_e_value_exceeds_bounds=08011_E_Asm: $1 çíà÷åíèå âûøëî çà ãpàíèöû $2
-asmw_e_short_jmp_out_of_range=08012_E_Asm: SHORT JUMP âûøåë çà ãpàíèöû äèàïîçîíà $1
-asmw_e_undefined_label=08013_E_Asm: Íåîïðåäåëåííàÿ ìåòêà $1
-asmw_e_comp_not_supported=08014_E_Asm: Òèï Comp íå ïîääåðæèâàåòñÿ ïîä ýòîé ïëàòôîðìîé
-asmw_e_extended_not_supported=08015_E_Asm: Òèï Extend íå ïîääåðæèâàåòñÿ ïîä ýòîé ïëàòôîðìîé
-asmw_e_duplicate_label=08016_E_Asm: Ïîâòîðíàÿ ìåòêà $1
-
-#
-# Executing linker/assembler
-#
-exec_w_source_os_redefined=09000_W_Èñõîäíàÿ îïåpàöèîííàÿ ñèñòåìà ïåpåîïpåäåëåíà
-exec_i_assembling_pipe=09001_I_Àññåìáëèpyåì (pipe) $1
-exec_d_cant_create_asmfile=09002_E_Hå ìîãy ñîçäàòü ôàéë àññìåáëåpà: $1
-% The mentioned file can't be create. Check if you've
-% permission to create this file
-exec_e_cant_create_objectfile=09003_E_Íå ìîãó ñîçäàòü îáúåêòíûé ôàéë: $1
-% The mentioned file can't be create. Check if you've
-% permission to create this file
-exec_e_cant_create_archivefile=09004_E_Íå ìîãó ñîçäàòü àðõèâíûé ôàéë: $1
-% The mentioned file can't be create. Check if you've
-% permission to create this file
-exec_e_assembler_not_found=09005_E_Àññåìáëåp $1 íå íàéäåí, èñïîëüçyåì âìåñòî íåãî âíåøíèé àññåìáëåp
-exec_t_using_assembler=09006_T_Èñïîëüçyåì àññåìáëåp: $1
-exec_e_error_while_assembling=09007_E_Îøèáêà ïpè àññåìáëèpîâàíèè $1
-exec_e_cant_call_assembler=09008_E_Hå ìîãy âûçâàòü àññåìáëåp, îøèáêà $1. Èñïîëüçyåì âìåñòî íåãî âíåøíèé àññåìáëåp
-exec_i_assembling=09009_I_Àññåìáëèpîâàíèå $1
-exec_i_assembling_smart=09010_I_Èíòåëåêòyàëüíîå àññåìáëèpîâàíèå $1
-exec_w_objfile_not_found=09011_W_Îáúåêòíûé ôàéë $1 íå íàéäåí, êîìïîíîâêà ìîæåò áûòü íåyäà÷íîé !
-exec_w_libfile_not_found=09012_W_Áèáëèîòåêà $1 íå íàéäåíà, êîìïîíîâêà ìîæåò áûòü íåyäà÷íîé !
-exec_e_error_while_linking=09013_E_Îøèáêà ïpè êîìïîíîâêå
-exec_e_cant_call_linker=09014_E_Hå ìîãy âûçâàòü êîìïîíîâùèê, èñïîëüçyåì âìåñòî íåãî âíåøíèé êîìïîíîâùèê
-exec_i_linking=09015_I_Êîìïîíîâêà $1
-exec_e_util_not_found=09016_E_Óòèëèòà $1 íå íàéäåíà, ïåpåêëþ÷àåìñÿ íà âíåøíþþ ëèíêîâêy
-exec_t_using_util=09017_T_Èñïîëüçóåì âíåøíþþ óòèëèòó $1
-exec_e_exe_not_supported=09018_E_Ñîçäàíèå èñïîëíÿåìûõ ôàéëîâ íå ïîääåpæèâàåòñÿ
-exec_e_dll_not_supported=09019_E_Ñîçäàíèå äèíàìè÷åñêèõ áèáëèîòåê (DLL) íå ïîääåpæèâàþòñÿ
-exec_i_closing_script=09020_I_Çàêpûâàåì ñêpèïò $1
-exec_e_res_not_found=09021_E_Êîìïèëÿòîp påñypñîâ íå íàéäåí, ïåpåêëþ÷àåìñÿ íà âíåøíèé êîìïèëÿòîð ðåñóðñîâ
-exec_i_compilingresource=09022_I_Êîìïèëèpyåì påñypñ $1
-exec_t_unit_not_static_linkable_switch_to_smart=09023_T_ìîäyëü $1 íå ìîæåò áûòü ñîápàí â påæèìå static, âêëþ÷àåì smart ñáîpêy
-exec_t_unit_not_smart_linkable_switch_to_static=09024_T_ìîäyëü $1 íå ìîæåò áûòü ñîápàí â påæèìå smart, âêëþ÷àåì static ñáîpêy
-exec_t_unit_not_shared_linkable_switch_to_static=09025_T_ìîäyëü $1 íå ìîæåò áûòü ñîápàí â påæèìå shared, âêëþ÷àåì static ñáîpêy
-exec_e_unit_not_smart_or_static_linkable=09026_E_ìîäyëü $1 íå ìîæåò áûòü ñîápàí â påæèìàõ smart èëè static
-exec_e_unit_not_shared_or_static_linkable=09027_E_ìîäyëü $1 íå ìîæåò áûòü ñîápàí â påæèìàõ shared èëè static
-
-
-#
-# Executable information
-#
-execinfo_f_cant_process_executable=09028_F_Hå ìîæåì èñïîëíèòü èñïîëíÿåìûé ìîäyëü $1
-execinfo_f_cant_open_executable=09029_F_Hå ìîãy îòêpûòü èñïîëíÿåìûé ìîäyëü $1
-execinfo_x_codesize=09030_X_Ðàçìåp êîäà: $1 áàéò
-execinfo_x_initdatasize=09031_X_Ðàçìåp èíèöèàëèçèpyþùåé ÷àñòè: $1 áàéò
-execinfo_x_uninitdatasize=09032_X_Ðàçìåp äå-èíèöèàëèçèpyþùåé ÷àñòè: $1 áàéò
-execinfo_x_stackreserve=09033_X_Çàpåçåpâèpîâàííî ñòåêà: $1 áàéò
-execinfo_x_stackcommit=09034_X_Èñïîëüçîâàíî ñòåêà: $1 áàéò
-
-# Unit loading
-#
-# BeginOfTeX
-% \section{Unit loading messages.}
-% This section lists all messages that can occur when the compiler is
-% loading a unit from disk into memory. Many of these mesages are
-% informational messages.
-% \begin{description}
-unit_t_unitsearch=10000_T_Ïîèñê ìîäyëåé: $1
-% When you use the \var{-vt}, the compiler tells you where it tries to find
-% unit files.
-unit_t_ppu_loading=10001_T_PPU çàãpyæàåòñÿ $1
-% When the \var{-vt} switch is used, the compiler tells you
-% what units it loads.
-unit_u_ppu_name=10002_U_PPU èìÿ: $1
-% When you use the \var{-vu} flag, the unit name is shown.
-unit_u_ppu_flags=10003_U_PPU ôëàãè: $1
-% When you use the \var{-vu} flag, the unit flags are shown.
-unit_u_ppu_crc=10004_U_PPU CRC: $1
-% When you use the \var{-vu} flag, the unit CRC check is shown.
-unit_u_ppu_time=10005_U_PPU âpåìÿ: $1
-% When you use the \var{-vu} flag, the time the unit was compiled is shown.
-unit_u_ppu_file_too_short=10006_U_PPU ôàéë ñëèøêîì êîpîòêèé
-% The ppufile is too short, not all declarations are present.
-unit_u_ppu_invalid_header=10007_U_Håâåpíûé çàãîëîâîê PPU (íåò PPU ìåòêè âíà÷àëå)
-% A unit file contains as the first three bytes the ascii codes of \var{PPU}
-unit_u_ppu_invalid_version=10008_U_Håâåpíàÿ âåpñèÿ PPU ôàéëà $1
-% This unit file was compiled with a different version of the compiler, and
-% cannot be read.
-unit_u_ppu_invalid_processor=10009_U_PPU ôàéë îòêîìïèëèpîâàí äëÿ äpyãîãî ïpîöåññîpà
-% This unit file was compiled for a different processor type, and
-% cannot be read
-unit_u_ppu_invalid_target=10010_U_PPU ôàéë îòêîìïèëèpîâàí äëÿ äpyãîé OS
-% This unit file was compiled for a different processor type, and
-% cannot be read
-unit_u_ppu_source=10011_U_PPU èñòî÷íèê: $1
-% When you use the \var{-vu} flag, the unit CRC check is shown.
-unit_u_ppu_write=10012_U_Çàïèñûâàåì $1
-% When you specify the \var{-vu} switch, the compiler will tell you where it
-% writes the unit file.
-unit_f_ppu_cannot_write=10013_F_Hå ìîãy çàïèñàòü PPU-ôàéë
-% An error occurred when writing the unit file.
-unit_f_ppu_read_error=10014_F_×èòàåì PPU-ôàéë
-% This means that the unit file was corrupted, and contains invalid
-% information. Recompilation will be necessary.
-unit_f_ppu_read_unexpected_end=10015_F_Íåîæèäàííûé êîíåö y PPU-ôàéëà
-% Unexpected end of file.
-unit_f_ppu_invalid_entry=10016_F_Håïpàâèëüíûé âõîä â PPU-ôàéë: $1
-% The unit the compiler is trying to read is corrupted, or generated with a
-% newer version of the compiler.
-unit_f_ppu_dbx_count_problem=10017_F_PPU DBX COUNT ïpîáëåìà
-% There is an inconsistency in the debugging information of the unit.
-unit_e_illegal_unit_name=10018_E_Håâåpíîå èìÿ ìîäyëÿ: $1
-% The name of the unit doesn't match the file name.
-unit_f_too_much_units=10019_F_Ñëèøêîì ìíîãî ìîäyëåé
-% \fpc has a limit of 1024 units in a program. You can change this behavior
-% by changing the \var{maxunits} constant in the \file{files.pas} file of the
-% compiler, and recompiling the compiler.
-unit_f_circular_unit_reference=10020_F_Êpyãîâàÿ ññûëêà ìîäyëÿ ìåæäy $1 è $2
-% Two units are using each other in the interface part. This is only allowed
-% in the \var{implementation} part. At least one unit must contain the other one
-% in the \var{implementation} section.
-unit_f_cant_compile_unit=10021_F_Hå ìîãy îòêîìïèëèpîâàòü ìîäyëü $1. Hå ìîãy íàéòè èñõîäíèêîâ.
-% A unit was found that needs to be recompiled, but no sources are
-% available.
-unit_f_cant_find_ppu=10022_F_Hå ìîãy íàéòè PPU ôàéë $1.
-% You tried to use a unit of which the PPU file isn't found by the
-% compiler. Check your config files for the unit pathes
-unit_w_unit_name_error=10023_W_Ìîäóëü $1 íå íàéäåí, íî $2 ñóùåñòâóåò
-unit_f_unit_name_error=10024_F_Ìîäóëü $1 èñêàëè, íî íàøëè ìîäóëü $2
-% Dos truncation of 8 letters for unit PPU files
-% may lead to problems when unit name is longer than 8 letters.
-unit_w_switch_us_missed=10025_W_Òpåáyåòñÿ êîìïèëèpîâàíèå ñèñòåìíîãî ìîäyëÿ. Èñïîëüçyéòå êëþ÷ -Us
-% When recompiling the system unit (it needs special treatment), the
-% \var{-Us} must be specified.
-unit_f_errors_in_unit=10026_F_Îáíàpyæåíî $1 îøèáîê ïpè êîìïèëèpîâàíèè ìîäyëÿ, îñòàíàâëèâàåìñÿ
-% When the compiler encounters a fatal error or too many errors in a module
-% then it stops with this message.
-unit_u_load_unit=10027_U_Çàãpyçêà èç $1 ($2) ìîäyëü $3
-% When you use the \var{-vu} flag, which unit is loaded from which unit is
-% shown.
-unit_u_recompile_crc_change=10028_U_Ïåpåêîìïèëèpîâàíèå $1, êîíòpîëüíàÿ ñyììà y $2 èçìåíåíà
-unit_u_recompile_source_found_alone=10029_U_Ïåpåêîìïèëèpîâàíèå $1, òàê êàê íàéäåíû òîëüêî èñõîäíèêè
-% When you use the \var{-vu} flag, these messages tell you why the current
-% unit is recompiled.
-unit_u_recompile_staticlib_is_older=10030_U_Ïåpåêîìïèëèpîâàíèå ìîäyëÿ, òàê êàê áèáëèîòåêà (static) ñòàpøå ÷åì ppu-ôàéë
-% When you use the \var{-vu} flag, the compiler warns if the static library
-% of the unit are older than the unit file itself.
-unit_u_recompile_sharedlib_is_older=10031_U_Ïåpåêîìïèëèpîâàíèå ìîäyëÿ, òàê êàê áèáëèîòåêà (shared) ñòàpøå ÷åì ppu-ôàéë
-% When you use the \var{-vu} flag, the compiler warns if the shared library
-% of the unit are older than the unit file itself.
-unit_u_recompile_obj_and_asm_older=10032_U_Ïåpåêîìïèëèpîâàíèå ìîäyëÿ, òàê êàê .as è .obj ôàéë ñòàpøå ÷åì ppu-ôàéë
-% When you use the \var{-vu} flag, the compiler warns if the assembler or
-% object file of the unit are older than the unit file itself.
-unit_u_recompile_obj_older_than_asm=10033_U_Ïåpåêîìïèëèpîâàíèå ìîäyëÿ, òàê êàê .obj ôàéë ñòàpøå ÷åì .as ôàéë
-% When you use the \var{-vu} flag, the compiler warns if the assembler
-% file of the unit is older than the object file of the unit.
-unit_u_start_parse_interface=10034_U_Àíàëèçèðóåì èíòåpôåéñíóþ ÷àñòü $1
-% When you use the \var{-vu} flag, the compiler warns that it starts
-% parsing the interface part of the unit
-unit_u_start_parse_implementation=10035_U_Àíàëèçèðóåì påàëèçàöèîííóþ ÷àñòü $1
-% When you use the \var{-vu} flag, the compiler warns that it starts
-% parsing the implementation part of the unit
-unit_u_second_load_unit=10036_U_Âòîpàÿ çàãpyçêà äëÿ ìîäyëÿ $1
-% When you use the \var{-vu} flag, the compiler warns that it starts
-% recompiling a unit for the second time. This can happend with interdepend
-% units.
-unit_u_check_time=10037_U_PPU ïpîâåpêà ôàéëà $1 âpåìÿ $2
-unit_h_cond_not_set_in_last_compile=10038_H_Óñëîâíîå âûpàæåíèå $1 íå áûëî yñòàíîâëåíî ïpè ïîñëåäíåé êîìïèëÿöèè $2
-% when recompilation of an unit is required the compiler will check that
-% the same conditionals are set for the recompiliation. The compiler has
-% found a conditional that currently is defined, but was not used the last
-% time the unit was compiled.
-unit_h_cond_set_in_last_compile=10039_H_Óñëîâíîå âûpàæåíèå $1 áûëî yñòàíîâëåíî ïpè ïîñëåäíåé êîìïèëÿöèè $2
-% when recompilation of an unit is required the compiler will check that
-% the same conditionals are set for the recompiliation. The compiler has
-% found a conditional that was used the last time the unit was compiled, but
-% the conditional is currently not defined.
-unit_w_cant_compile_unit_with_changed_incfile=10040_W_Íàéäåí ìîäóëü $1 òðåáóþùèé ñáîðêè, íî íåêîòîðûå âêëþ÷àåìûå ôàéëû íå íàéäåíû
-% A unit was found to have modified include files, but
-% some source files were not found, so recompilation is impossible.
-unit_h_source_modified=10041_H_Ôàéë $1 íîâåå ÷åì ôàéë $2 ($2 ñ ôëàãîì Release PPU)
-% A modified source file for a unit was found that was compiled with the
-% release flag (-Ur). The unit will not implicitly be recompiled because
-% this release flag is set.
-% \end{description}
-
-#
-# Options
-#
-option_usage=11000_O_$1 [îïöèè] <ôàéë> [îïöèè]
-# BeginOfTeX
-%
-% \section{Command-line handling errors}
-% This section lists errors that occur when the compiler is processing the
-% command line or handling the configuration files.
-% \begin{description}
-option_only_one_source_support=11001_W_Ïîääåpæèâàåòñÿ òîëüêî îäèí ôàéë äëÿ êîìïèëÿöèè
-% You can specify only one source file on the command line. The first
-% one will be compiled, others will be ignored. This may indicate that
-% you forgot a \var{'-'} sign.
-option_def_only_for_os2=11002_W_DEF ôàéë ìîæåò ñîçäàâàòüñÿ òîëüêî ïîä OS/2
-% This option can only be specified when you're compiling for OS/2
-option_no_nested_response_file=11003_E_Âëîæåííûå ôàéëû îòâåòà íå ïîääåpæèâàþòñÿ
-% you cannot nest response files with the \var{@file} command-line option.
-option_no_source_found=11004_F_Èìÿ ôàéëà äëÿ êîìïèëÿöèè â êîìàíäíîé ñòpîêå íå îáíàðóæåíî
-% The compiler expects a source file name on the command line.
-option_no_option_found=11005_N_Îïöèÿ êîìïèëÿòîðà $1 âíóòðè êîíôèãóðàöèîííîãî ôàéëà íå îáíàðóæåíà
-% The compiler didn't find any option in that config file.
-option_illegal_para=11006_E_Håâåpíûé ïàpàìåòp: $1
-% You specified an unknown option.
-option_help_pages_para=11007_H_-? âûâåñòè ñòpàíèöû ïîìîùè
-% When an unknown option is given, this message is diplayed.
-option_too_many_cfg_files=11008_F_Ñëèøêîì ìíîãî âëîæåííûõ êîíôèãypàöèîííûõ ôàéëîâ
-% You can only nest up to 16 config files.
-option_unable_open_file=11009_F_Hå ìîãy îòêpûòü ôàéë $1
-% The option file cannot be found.
-option_reading_further_from=11010_D_×òåíèå äàëüíåéøèõ ïàpàìåòpîâ èç $1
-% Displayed when you have notes turned on, and the compiler switches
-% to another options file.
-option_target_is_already_set=11011_W_TARGET yñòàíîâëåí äâàæäû â: $1
-% Displayed if more than one \var{-T} option is specified.
-option_no_shared_lib_under_dos=11012_W_SHARED áèáëèîòåêè íå ïîääåpæèâàþòñÿ â GO32* ïpèëîæåíèÿõ, äåëàåì èõ STATIC
-% If you specify \var{-CD} for the \dos platform, this message is displayed.
-% The compiler supports only static libraries under \dos
-option_too_many_ifdef=11013_F_Ñëèøêîì ìíîãî $IFDEF èëè $IFNDEF
-% the \var{\#IF(N)DEF} statements in the options file are not balanced with
-% the \var{\#ENDIF} statements.
-option_too_many_endif=11014_F_Ñëèøêîì ìíîãî $ENDIF
-% the \var{\#IF(N)DEF} statements in the options file are not balanced with
-% the \var{\#ENDIF} statements.
-option_too_less_endif=11015_F_Îòêpûòèå yñëîâíîãî âûpàæåíèÿ â êîíöå ôàéëà
-% the \var{\#IF(N)DEF} statements in the options file are not balanced with
-% the \var{\#ENDIF} statements.
-option_no_debug_support=11016_W_Ãåíåpàöèÿ èíôîpìàöèè äëÿ îòëàäêè íå ïîääåpæèâàåòñÿ â ýòîì èñïîëíÿåìîì ôàéëå
-% It is possible to have a compiler executable that doesn't support
-% the generation of debugging info. If you use such an executable with the
-% \var{-g} switch, this warning will be displayed.
-option_no_debug_support_recompile_fpc=11017_H_Ïîïpîáyéòå îòêîìïèëèpîâàòü ñ îïöèåé -dGDB
-% It is possible to have a compiler executable that doesn't support
-% the generation of debugging info. If you use such an executable with the
-% \var{-g} switch, this warning will be displayed.
-option_obsolete_switch=11018_E_Âû èñïîëüçyéòå yñòàpåâøèé êëþ÷ $1
-% this warns you when you use a switch that is not needed/supported anymore.
-% It is recommended that you remove the switch to overcome problems in the
-% future, when the switch meaning may change.
-option_obsolete_switch_use_new=11019_E_Âû èñïîëüçyåòå yñòàpåâøèé êëþ÷ $1, ïîæàëyéñòà èñïîëüçyéòå âìåñòî íåãî êëþ÷ $2
-% Ýòî ïðåäóïðåæäàåò Âàñ, êîãäà Âû èñïîëüçóåòå êëþ÷, êîòîðûé áîëüøå íå
-% ïîääåðæèâàåòñÿ. Âû äîëæíû èñïîëüçîâàòü âòîðîé êëþ÷ âìåñòî ýòîãî.
-% Ðåêîìåíäóåòñÿ, çàìåíèòü êëþ÷, ÷òîáû ïðåîäîëåòü ïðîáëåìû â áóäóùåì,
-% êîãäà êëþ÷, yêàçàííûé âàìè ìîæåò èçìåíÿòüñÿ è èìåòü äpyãîå çíà÷åíèå.
-option_switch_bin_to_src_assembler=11020_N_Ïåpåêëþ÷àåì àññåìáëåp â àññåìáëåp çàäàííûé ïî yìîë÷àíèþ
-% this notifies you that the assembler has been changed because you used the
-% -a switch which can't be used with a binary assembler writer.
-option_incompatible_asm=11021_W_Âèä âûáðàííîãî ñòèëÿ àññåìáëåðà "$1" íå ñîâìåñòèì ñ "$2"
-option_asm_forced=11022_W_Ê ñîæàëåíèþ, èñïîëüçóåì ñòèëü àññåìáëåðà "$1"
-% The assembler output selected can not generate
-% object files with the correct format. Therefore, the
-% default assembler for this target is used instead.
-option_using_file=11026_T_×èòàþ îïöèè èç ôàéëà $1
-% Options are also read from this file
-option_using_env=11027_T_×èòàþ îïöèè èç îêðóæåíèÿ $1
-% Options are also read from this environment string
-option_handling_option=11028_D_Îáðàáîòêà îïöèè "$1"
-% Debug info that an option is found and will be handled
-option_help_press_enter=11029__*** íàæìèòå enter ***
-
-#
-# Ëîãî (îïöèÿ -l)
-#
-option_logo=11023_[
-Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCTARGET [Russian Edition]
-Copyright (c) 1993-2009 by Florian Klaempfl
-]
-
-#
-# Èíôîpìàöèÿ (îïöèÿ -i)
-#
-option_info=11024_[
-Free Pascal Compiler version $FPCVERSION
-
-Compiler Date : $FPCDATE
-Compiler Target: $FPCTARGET
-
-This program comes under the GNU General Public Licence
-For more information read COPYING.FPC
-
-Report bugs, suggestions, etc. to:
- http://bugs.freepascal.org
-or
- bugs@freepascal.org, russia@freepascal.org
-]
-
-#
-# Ñòðàíèöû Ñïðàâêè (îïöèÿ -? È -h)
-#
-# Îáðàòèòü âíèìàíèå: Hyìåpàöèþ íå ìåíÿòü!
-#
-option_help_pages=11025_[
-**0*_äåëàé '+', ÷òîáû âêëþ÷èòü êëþ÷, è '-' ÷òîáû îòêëþ÷èòü åãî
-**1a_êîìïèëÿòîð íå áyäåò óäàëÿòü ñãåíåðèðîâàííûé àññåìáëåðñêèé ôàéë
-**2al_âûâîäèòü íîìåpà ñòðîê â àññåìáëèpîâàíííîì ôàéëå
-**2ar_âûâîäèòü èíôîpìàöèþ î ñïèñêå çàíÿòûõ/îñâîáîæäåííûõ påãèñòpîâ â àññåìáëåpñêèé ôàéë
-**2at_âûâîäèòü èíôîpìàöèþ î ñïèñêå çàíÿòûõ/îñâîáîæäåííûõ âpåìåííûõ ïåpåìåííûõ â àññåìáëåpñêèé ôàéë
-**1b_ãåíåpèpîâàòü èíôîpìàöèþ äëÿ ápàyçåpà (IDE)
-**2bl_òàêæå ãåíåpèpèòü èíôîpìàöèþ î ëîêàëüíûõ ñèìâîëàõ
-**1B_ïåpåêîìïèëèpîâàòü âñå ìîäyëè
-**1C<x>_îïöèè ãåíåpàòîpà êîäà
-3*2CD_òàêæå ñîçäàòü äèíàìè÷åñêyþ áèáëèîòåêy (íå ïîääåpæèâàåòñÿ)
-**2Ch<n>_<n> áàéò êy÷è (ìåæäó 1023 è 67107840)
-**2Ci_ïpîâåpêà ââîäà-âûâîäà
-**2Cn_ïpîïyñòèòü ñòàäèþ ëèíêîâêè ìîäyëÿ
-**2Co_ïpîâåpÿòü ïåðåïîëíåíèå â öåëî÷èñëåííûõ îïåðàöèÿõ
-**2Cr_ïpîâåpêà äèàïàçîíà
-**2Cs<n>_yñòàíîâèòü pàçìåp ñòåêà äî <n>
-**2Ct_ïðîâåðêà ñòåêà
-3*2CX_òàêæå ñîçäàòü smartlink âåpñèþ
-**1d<x>_îïpåäåëèòü ñèìâîë <x>
-*O1D_ñîçäàòü DEF-ôàéë
-*O2Dd<x>_yñòàíîâèòü îïèñàíèå â <x>
-*O2Dw_PM ïðèëîæåíèå
-**1e<x>_yñòàíîâèòü ïyòü äëÿ èñïîëíÿåìûõ ôàéëîâ
-**1E_òîæå, ÷òî è -Cn
-**1F<x>_yñòàíîâèòü èìåíà ôàéëîâ è ïóòè
-**2FD<x>_yñòàíîâèòü ïyòè äî êàòàëîãîâ, ãäå èñêàòü óòèëèòû
-**2Fe<x>_ïåpåíàïpàâèòü âûâîä îøèáîê â <x>
-**2Fi<x>_äîáàâèòü <x> ê ïyòÿì äî âêëþ÷àåìûõ ôàéëîâ
-**2Fl<x>_äîáàâèòü <x> ê ïyòÿì äî ôàéëîâ áèáëèîòåê
-*L2FL<x>_èñïîëüçîâàòü <x> êàê äèíàìè÷åñêèé êîìïîíîâùèê
-**2Fo<x>_äîáàâèòü <x> ê ïyòÿì äî îáúåêòíûõ ôàéëîâ
-**2Fr<x>_çàãpyçèòü ôàéë ñîîáùåíèé îá îøèáêàõ <x>
-**2Fu<x>_äîáàâèòü <x> ê ïóòè äî ìîäóëåé
-**2FU<x>_yñòàíîâèòü ïyòü äî ìîäyëåé êàê <x>, îòìåíÿåò -FE
-*g1g_ñîçäàâàòü èíôîðìàöèþ äëÿ îòëàä÷èêà
-*g2gg_èñïîëüçîâàòü GSYM
-*g2gd_èñïîëüçîâàòü DBX
-*g2gh_èñïîëüçîâàòü ìîäyëü ñëåæåíèÿ çà êó÷åé (äëÿ îòëàäêè yòå÷åê ïàìÿòè)
-*g2gl_èñïîëüçîâàòü ëèíèè â èíôîpìàöèîííîì ìîäyëå äëÿ áîëüøåé èíôîpìàöèè ïpè îòëàäêå
-*g2gc_ãåíåðèðîâàòü ïðîâåðêè äëÿ óêàçàòåëåé
-**1i_èíôîpìàöèÿ
-**2iD_âîçâpàùàåò äàòy êîìïèëÿòîpà
-**2iV_âîçpàùàåò âåpñèþ êîìïèëÿòîðà
-**2iSO_âîçâpàùàåò òèï OS, íà êîòîpîé áûë ñîçäàíà ïpîãpàììà
-**2iSP_âîçâpàùàåò òèï ïpîöåññîpà, íà êîòîpîì áûëà ñîçäàíà ïpîãpàììà
-**2iTO_âîçâpàùàåò òèï OS, äëÿ êîòîpîé áûëà ñîçäàíà ïpîãpàììà
-**2iTP_âîçâpàùàåò òèï ïpîöåññîpà, äëÿ êîòîpîãî áûëà ñîçäàíà ïpîãpàììà
-**1I<x>_äîáàâëÿåò <x> â ïyòè äî âêëþ÷àåìûõ ôàéëîâ
-**1k<x>_ïpîõîä <x> êîìïîíîâùèêy
-**1l_çàïèñûâàòü â ïpîãpàììy ëîãîòèï fpc
-**1n_íå ÷èòàòü ñòàíäàpòíûé ôàéë êîíôèãóðàöèè
-**1o<x>_èçìåíèòü èìÿ ïðîãðàììû, íà <x>
-**1pg_ãåíåpàöèÿ ïðîôèëèðóþùåãî êîäà äëÿ GPROF (îïpåäåëÿåò FPC_PROFILE)
-*L1P_èñïîëüçîâàòü ôàéëû â ïàìÿòè (pipes) âìåñòî âðåìåííûõ ôàéëîâ àññåìáëåðà
-**1S_ñèíòàêñè÷åñêèå îïöèè
-**2S2_êëþ÷ âêëþ÷åíèÿ íåêîòîpûõ pàñøèpåíèé Delphi 2
-**2Sc_ïîääåpæèâàòü îïåðàòîðû, ïîõîæèå íà îïåpàòîpû â C (*=,+=,/= è -=)
-**2sa_âêëþ÷àòü êîíòðîëèðóþùèé êîä
-**2Sd_påæèì Delphi-ñîâìåñòèìîñòè
-**2Se<x>_êîìïèëÿòîp îñòàíàâëèâàåòñÿ ïîñëå <x> îøèáêè (ïî óìîë÷àíèþ ïîñëå 1 îøèáêè)
-**2Sg_ïîääåpæèâàòü LABEL è GOTO
-**2Sh_èñïîëüçîâàòü ANSI ñòpîêè
-**2Si_ïîääåpæèâàòü ñòèëü INLINE ÿçûêà C++
-**2Sm_ïîääåpæèâàòü ìàêðîêîìàíäû ïîäîáíî C (ãëîáàëüíî)
-**2So_påæèì TP/BP 7.0 ñîâìåñòèìîñòè
-**2Sp_påæèì GPC ñîâìåñòèìîñòè
-**2Ss_êîíñòpyêòîp äîëæåí èìåòü èìÿ init (äåñòpyêòîp äîëæåí èìåòü èìÿ done)
-**2St_ïîääåpæêà ñòàòè÷åñêèõ êëþ÷åâûõ ñëîâ â îáúåêòàõ
-**1s_íå âûçûâàòü àññåìáëåð è êîìïîíîâùèê ïpè pàáîòå (òîëüêî ñ -a)
-**1u<x>_yäàëÿåò îïpåäåëåíèå ñèìâîëà <x>
-**1U_îïöèè ìîäyëåé
-**2Un_íå ïpîâåpÿòü ñîîòâåòñòâèå èìåíè ìîäyëÿ è èìåíè ôàéëà ìîäyëÿ
-**2Us_ñêîìïèëèpîâàòü ãëàâíûé ìîäyëü (system)
-**1v<x>_ïîäpîáíîñòü <x> ýòî êîìáèíàöèÿ ñëåäyþùèõ ñèìâîëîâ:
-**2*_e : Âñå îøèáêè (ïî óìîë÷àíèþ) d: Èíôîðìàöèÿ äëÿ îòëàäêè
-**2*_w : Ïðåäóïðåæäåíèÿ u: Èíôîðìàöèþ ìîäóëÿ
-**2*_n : Ïðèìå÷àíèÿ t: Ïðîáîâàííûå/èñïîëüçîâàííûå ôàéëû
-**2*_h : Ïîäñêàçêè m: Îïðåäåëåííûå ìàêðîêîìàíäû
-**2*_i : Îáùàÿ èíôîðìàöèÿ p: Êîìïèëèðóåìûå ïðîöåäóðû
-**2*_l : Hîìåpà ëèíèé c: Óñëîâíûå âûðàæåíèÿ
-**2*_a : Âñå ïîêàçûâàòü 0: Hè÷åãî íå ñîîáùàòü, êpîìå îøèáîê
-**2*_b : Ïîêàçàòü âñþ ïpîöåäypy, r: Rhide/GCC ðåæèì ñîâìåñòèìîñòè
-**2*_ åñëè îøèáêà ïpîèñõîäèò x: Èíôîðìàöèÿ î ôàéëå (òîëüêî Win32)
-**2*_ èìåííî â íåé
-**1X_îïöèè âûïîëíåíèÿ
-*L2Xc_ëèíêîâàòü ñ áèáëèîòåêîé ÿçûêà C
-**2Xs_î÷èñòèòü âñå ñèìâîëüíûå èìåíà èç ïpîãpàììû
-**2XD_ëèíêîâàòü äèíàìè÷åñêèå áèáëèîòåêè (îïpåäåëÿåò FPC_LINK_DYNAMIC)
-**2XS_ëèíêîâàòü ñòàòè÷åñêèå áèáëèîòåêè (îïpåäåëÿåò FPC_LINK_STATIC)
-**2XX_ëèíêîâàòü smart-áèáëèîòåêè (îïpåäåëÿåò FPC_LINK_SMART)
-**0*_Îïöèè ñïåöèôè÷íûå äëÿ ïpîöåññîpîâ:
-3*1A<x>_ôîðìàò âûâîäà
-3*2Aas_ôàéë, èñïîëüçóþùèé GNU
-3*2Aasaout_ôàéë, èñïîëüçóþùèé GNU for aout (Go32v1)
-3*2Anasmcoff_coff (Go32v2) ôàéë, èñïîëüçóþùèé Nasm
-3*2Anasmelf_elf32 (Linux) ôàéë, èñïîëüçóþùèé Nasm
-3*2Anasmobj_obj ôàéë, èñïîëüçóþùèé Nasm
-3*2Amasm_obj èñïîëüçyþùèé Masm (Microsoft)
-3*2Atasm_obj èñïîëüçyþùèé Tasm (Borland)
-3*2Acoff_coff (Go32v2) èñïîëüçóÿ âñòðîåííûé àññåìáëåð
-3*2Apecoff_pecoff (Win32) èñïîëüçóÿ âñòðîåííûé àññåìáëåð
-3*1R<x>_ñòèëü ÷òåíèÿ àññåìáëåpà
-3*2Ratt_÷èòàòü êàê àññåìáëåð â ñòèëå AT&T
-3*2Rintel_÷èòàòü êàê àññåìáëåð â ñòèëå Intel
-3*2Rdirect_òåêñò àññåìáëåðà ïåpåäàâàòü íåïîñðåäñòâåííî àññåìáëåðy
-3*1O<x>_òèïû îïòèìèçàöèé
-3*2Og_ãåíåpèpîâàòü ìåíüøèé êîä
-3*2OG_ãåíåpèpîâàòü áûñòpûé êîä (ïî yìîë÷àíèþ)
-3*2Or_ñîõpàíÿòü íåêîòîðûå ïåðåìåííûå â ðåãèñòpàõ
-3*2Ou_âêëþ÷èòü íåîïðåäåëåííûå îïòèìèçàöèè (ñì. äîêóìåíòàöèþ)
-3*2O1_ypîâåíü 1 îïòèìèçàöèè (áûñòðûå îïòèìèçàöèè)
-3*2O2_ypîâåíü 2 îïòèìèçàöèè (-O1 + áîëåå ìåäëåííûå îïòèìèçàöèè)
-3*2O3_ypîâåíü 3 îïòèìèçàöèè (òîò æå ñàìûé êàê -O2u)
-3*2Op_òèï ïðîöåññîðà, äëÿ êîòîpîãî ïpîèñõîäèò êîìïèëÿöèÿ:
-3*3Op1_äëÿ ïðîöåññîðà 386/486
-3*3Op2_äëÿ ïðîöåññîð Pentium/PentiumMMX (tm)
-3*3Op3_ïðîöåññîð Pentium PRO/Pentium II/Cyrix 6X86/AMD K6 (tm)
-3*1T<x>_òèï îïåðàöèîííàÿ ñèñòåìû, äëÿ êîòîpîé ïpîèñõîäèò êîìïèëÿöèÿ:
-3*2TGO32V2_version 2 (DJ Delorie ðàñøèðèòåëü DOS)
-3*2TLINUX_Linux
-3*2TOS2_OS/2 / eComStation
-3*2TWIN32_Windows 32 Bit
-3*1W<x>_Win32 îïöèè
-3*1WB<x>_ Óñòàíîâêà Image áàçû â øåñòíàäöåòèðè÷íîå <x> çíà÷åíèå
-3*1WC_ Îïðåäåëèòü, ÷òî ýòî áóäåò êîíñîëüíîå ïðèëîæåíèå
-3*1WD_ Èñïîëüçîâàòü DEFFILE äëÿ ýêñïîðòèðîâàííûõ ôóíêöèé DLL èëè EXE
-3*1WG_ Îïðåäåëèòü, ÷òî ýòî áóäåò GUI ïðèëîæåíèå
-3*1WN_ Íå ãåíåðèðîâàòü ïåðåìåùàåìûé êîä (íåîáõîäèìî äëÿ îòëàäêè)
-3*1WR_ Ãåíåðèðîâàòü ïåðåìåùàåìûé êîä
-6*1A<x>_ôîðìàò àññåìáëåpà
-6*2Ao_Unix o-ôàéë, èñïîëüçóþùèé GNU àññåìáëåp
-6*2Agas_GNU àññåìáëåð ôèðìû Motorola
-6*2Amit_MIT ñèíòàêñèñ (ñòàðûé GAS)
-6*2Amot_ñòàíäàpòíûé àññåìáëåp ôèðìû Motorola
-6*1O_îïòèìèçàöèè
-6*2Oa_âêëþ÷àåò îïòèìèçàòîp
-6*2Og_ãåíåpèpîâàòü ìåíüøèé êîä
-6*2OG_ãåíåpèpîâàòü áûñòpûé êîä (ïî óìîë÷àíèþ)
-6*2Ox_ìàêñèìàëüíàÿ îïòèìèçàöèÿ (åñòü îøèáêè!)
-6*2O2_äëÿ ïðîöåññîðà MC68020+
-6*1R<x>_ñòèëü ÷òåíèÿ àññåìáëåpà
-6*2RMOT_÷èòàòü êàê Motorola-àññåìáëåp
-6*1T<x>_îïåðàöèîííàÿ ñèñòåìà äëÿ êîòîpîé êîìïèëèpyåòñÿ ôàéë
-6*2TAMIGA_Commodore ÏÝÂÌ ôèðìû Commodore
-6*2TATARI_Atari ST/STe/TT
-6*2TMACOS_Macintosh m68k
-6*2TLINUX_Linux-68k
-**1*_
-**1?_ïîêàçàòü ýòy ñïðàâêy
-**1h_ïîêàçàòü ýòy ñïðàâêy, áåç îæèäàíèÿ <enter>
-]
-#
-# The End
diff --git a/compiler/msgidx.inc b/compiler/msgidx.inc
index 6a617389a8..266bd1739d 100644
--- a/compiler/msgidx.inc
+++ b/compiler/msgidx.inc
@@ -340,17 +340,29 @@ const
parser_n_ignore_lower_visibility=03250;
parser_e_field_not_allowed_here=03251;
parser_e_no_local_para_def=03252;
- parser_e_objc_requires_msgstr=03253;
- parser_e_objc_no_constructor_destructor=03254;
- parser_e_message_string_too_long=03255;
- parser_e_objc_message_name_too_long=03256;
- parser_h_no_objc_parent=03257;
- parser_e_no_objc_published=03258;
- parser_f_need_objc=03259;
- parser_e_must_use_override_objc=03260;
- parser_h_should_use_override_objc=03261;
- parser_e_objc_message_name_changed=03262;
- parser_e_no_objc_unique=03263;
+ parser_e_abstract_and_sealed_conflict=03253;
+ parser_e_sealed_descendant=03254;
+ parser_e_sealed_class_cannot_have_abstract_methods=03255;
+ parser_e_only_virtual_methods_final=03256;
+ parser_e_final_can_no_be_overridden=03257;
+ parser_e_multiple_messages=03258;
+ parser_e_invalid_enumerator_identifier=03259;
+ parser_e_enumerator_identifier_required=03260;
+ parser_e_enumerator_movenext_is_not_valid=03261;
+ parser_e_enumerator_current_is_not_valid=03262;
+ parser_e_only_one_enumerator_movenext=03263;
+ parser_e_only_one_enumerator_current=03264;
+ parser_e_objc_requires_msgstr=03265;
+ parser_e_objc_no_constructor_destructor=03266;
+ parser_e_message_string_too_long=03267;
+ parser_e_objc_message_name_too_long=03268;
+ parser_h_no_objc_parent=03269;
+ parser_e_no_objc_published=03270;
+ parser_f_need_objc=03271;
+ parser_e_must_use_override_objc=03272;
+ parser_h_should_use_override_objc=03273;
+ parser_e_objc_message_name_changed=03274;
+ parser_e_no_objc_unique=03275;
type_e_mismatch=04000;
type_e_incompatible_types=04001;
type_e_not_equal_types=04002;
@@ -431,9 +443,10 @@ const
type_e_no_type_info=04087;
type_e_ordinal_or_string_expr_expected=04088;
type_e_string_expr_expected=04089;
- type_e_protocol_type_expected=04090;
- type_e_objc_type_unsupported=04091;
- type_e_class_or_objcclass_type_expected=04092;
+ type_w_zero_to_nil=04090;
+ type_e_protocol_type_expected=04091;
+ type_e_objc_type_unsupported=04092;
+ type_e_class_or_objcclass_type_expected=04093;
sym_e_id_not_found=05000;
sym_f_internal_error_in_symtablestack=05001;
sym_e_duplicate_id=05002;
@@ -485,7 +498,12 @@ const
sym_h_abstract_method_list=05062;
sym_w_experimental_symbol=05063;
sym_w_forward_not_resolved=05064;
- sym_e_objc_para_mismatch=05065;
+ sym_w_library_symbol=05065;
+ sym_w_deprecated_symbol_with_msg=05066;
+ sym_e_no_enumerator=05067;
+ sym_e_no_enumerator_move=05068;
+ sym_e_no_enumerator_current=05069;
+ sym_e_objc_para_mismatch=05070;
cg_e_parasize_too_big=06009;
cg_e_file_must_call_by_reference=06012;
cg_e_cant_use_far_pointer_there=06013;
@@ -808,9 +826,9 @@ const
option_info=11024;
option_help_pages=11025;
- MsgTxtSize = 53113;
+ MsgTxtSize = 54143;
MsgIdxMax : array[1..20] of longint=(
- 24,87,264,93,66,51,108,22,202,62,
+ 24,87,276,94,71,51,108,22,202,62,
48,20,1,1,1,1,1,1,1,1
);
diff --git a/compiler/msgtxt.inc b/compiler/msgtxt.inc
index 2e1cdb6a08..8bd609c9d5 100644
--- a/compiler/msgtxt.inc
+++ b/compiler/msgtxt.inc
@@ -1,7 +1,7 @@
{$ifdef Delphi}
-const msgtxt : array[0..000221] of string[240]=(
+const msgtxt : array[0..000225] of string[240]=(
{$else Delphi}
-const msgtxt : array[0..000221,1..240] of char=(
+const msgtxt : array[0..000225,1..240] of char=(
{$endif Delphi}
'01000_T_Compiler: $1'#000+
'01001_D_Compiler OS: $1'#000+
@@ -393,563 +393,583 @@ const msgtxt : array[0..000221,1..240] of char=(
'start a new visibility section first'#000+
'03252_E_Parameters cannot contain local type definitions. Use a separa'+
'te type definition in a type block.'#000+
- '03253_E_Objective-C messages requi','re their Objective-C selector name'+
+ '03253_E_ABSTRACT and SEALED confli','ct'#000+
+ '03254_E_Can not create a descendant of the sealed class "$1"'#000+
+ '03255_E_SEALED class can not have an ABSTRACT method'#000+
+ '03256_E_Only virtual methods can be final'#000+
+ '03257_E_Final method can not be overridden: "$1"'#000+
+ '03258_E_Only one message can be ','used per method.'#000+
+ '03259_E_Invalid enumerator identifier: "$1"'#000+
+ '03260_E_Enumerator identifier required'#000+
+ '03261_E_Enumerator MoveNext pattern method is not valid. Method must b'+
+ 'e a function with the Boolean return type and no required arguments.'#000+
+ '0','3262_E_Enumerator Current pattern property is not valid. Property m'+
+ 'ust have a getter.'#000+
+ '03263_E_Only one enumerator MoveNext method is allowed per class/objec'+
+ 't'#000+
+ '03264_E_Only one enumerator Current property is allowed per class/obje'+
+ 'ct'#000+
+ '03265_E_O','bjective-C messages require their Objective-C selector name'+
' to be specified using the "message" directive.'#000+
- '03254_E_Objective-C does not have formal constructors nor destructors.'+
+ '03266_E_Objective-C does not have formal constructors nor destructors.'+
' Use the alloc, initXXX and dealloc messages.'#000+
- '03255_E_Message name is too long (max. 255',' characters)'#000+
- '03256_E_Objective-C message symbol name for "$1" is too long'#000+
- '03257_H_Defining a new Objective-C root class. To derive from another '+
+ '03267_E_Message n','ame is too long (max. 255 characters)'#000+
+ '03268_E_Objective-C message symbol name for "$1" is too long'#000+
+ '03269_H_Defining a new Objective-C root class. To derive from another '+
'root class (e.g., NSObject), specify it as the parent class.'#000+
- '03258_E_Objective-C classes cannot ','have published sections.'#000+
- '03259_F_This module requires an Objective-C mode switch to be compiled'+
+ '03270_E_Ob','jective-C classes cannot have published sections.'#000+
+ '03271_F_This module requires an Objective-C mode switch to be compiled'+
#000+
- '03260_E_Inherited methods can only be overridden in Objective-C, add `'+
+ '03272_E_Inherited methods can only be overridden in Objective-C, add `'+
'`override'#039#039'.'#000+
- '03261_H_Inherited methods can only be overridden in Objective','-C, add'+
+ '03273_H_Inherited methods can only b','e overridden in Objective-C, add'+
' ``override'#039#039'.'#000+
- '03262_E_Message name "$1" in inherited class is different from message'+
+ '03274_E_Message name "$1" in inherited class is different from message'+
' name "$2" in current class.'#000+
- '03263_E_It is not yet possible to make unique copies of Objective-C ty'+
+ '03275_E_It is not yet possible to make unique copies of Objective-C ty'+
'pes'#000+
- '04000_E_Type mismatch'#000+
- '04001_E_Incompatible ty','pes: got "$1" expected "$2"'#000+
+ '04000_E_Type mismatc','h'#000+
+ '04001_E_Incompatible types: got "$1" expected "$2"'#000+
'04002_E_Type mismatch between "$1" and "$2"'#000+
'04003_E_Type identifier expected'#000+
'04004_E_Variable identifier expected'#000+
'04005_E_Integer expression expected, but got "$1"'#000+
- '04006_E_Boolean expression expected, but got "$1','"'#000+
+ '04006_E_Boolean express','ion expected, but got "$1"'#000+
'04007_E_Ordinal expression expected'#000+
'04008_E_pointer type expected, but got "$1"'#000+
'04009_E_class type expected, but got "$1"'#000+
'04011_E_Can'#039't evaluate constant expression'#000+
'04012_E_Set elements are not compatible'#000+
- '04013_E_Operation not implemented',' for sets'#000+
+ '04013_E_','Operation not implemented for sets'#000+
'04014_W_Automatic type conversion from floating type to COMP which is '+
'an integer type'#000+
'04015_H_use DIV instead to get an integer result'#000+
- '04016_E_string types doesn'#039't match, because of $V+ mode'#000+
- '04017_E_succ or pred on enums with assi','gnments not possible'#000+
+ '04016_E_String types have to match exactly in $V+ mode'#000+
+ '04017_E_succ or',' pred on enums with assignments not possible'#000+
'04018_E_Can'#039't read or write variables of this type'#000+
'04019_E_Can'#039't use readln or writeln on typed file'#000+
'04020_E_Can'#039't use read or write on untyped file.'#000+
'04021_E_Type conflict between set elements'#000+
- '04022_W_lo/hi(dword/qword)',' returns the upper/lower word/dword'#000+
+ '04','022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
'04023_E_Integer or real expression expected'#000+
'04024_E_Wrong type "$1" in array constructor'#000+
'04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
- '04026_E_Method (variable) and Procedure (variable',') are not compatibl'+
+ '04026_E_Method (variable)',' and Procedure (variable) are not compatibl'+
'e'#000+
'04027_E_Illegal constant passed to internal math function'#000+
'04028_E_Can'#039't take the address of constant expressions'#000+
'04029_E_Argument can'#039't be assigned to'#000+
- '04030_E_Can'#039't assign local procedure/function to procedure variabl'+
- 'e'#000,
+ '04030_E_Can'#039't assign local procedure/functio','n to procedure varia'+
+ 'ble'#000+
'04031_E_Can'#039't assign values to an address'#000+
'04032_E_Can'#039't assign values to const variable'#000+
'04033_E_Array type required'#000+
'04034_E_interface type expected, but got "$1"'#000+
- '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+
- '04036_W_M','ixing signed expressions and cardinals here may cause a ran'+
- 'ge check error'#000+
+ '04035_H_Mixing signed expressions and longwords gives ','a 64bit result'+
+ #000+
+ '04036_W_Mixing signed expressions and cardinals here may cause a range'+
+ ' check error'#000+
'04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
'04038_E_enums with assignments can'#039't be used as array index'#000+
- '04039_E_Class or Object types "$1" and "$2" a','re not related'#000+
+ '04039_E_Class or Obje','ct types "$1" and "$2" are not related'#000+
'04040_W_Class types "$1" and "$2" are not related'#000+
'04041_E_Class or interface type expected, but got "$1"'#000+
'04042_E_Type "$1" is not completely defined'#000+
- '04043_W_String literal has more characters than short string length'#000+
- '04044_W_','Comparison is always false due to range of values'#000+
+ '04043_W_String literal has more characters than shor','t string length'#000+
+ '04044_W_Comparison is always false due to range of values'#000+
'04045_W_Comparison is always true due to range of values'#000+
'04046_W_Constructing a class "$1" with abstract method "$2"'#000+
- '04047_H_The left operand of the IN operator should be byte sized'#000+
- '04048_W_','Type size mismatch, possible loss of data / range check erro'+
- 'r'#000+
+ '04047_H_The left operand of the IN operator shoul','d be byte sized'#000+
+ '04048_W_Type size mismatch, possible loss of data / range check error'#000+
'04049_H_Type size mismatch, possible loss of data / range check error'#000+
'04050_E_The address of an abstract method can'#039't be taken'#000+
- '04051_E_Assignments to formal parameters and open a','rrays are not pos'+
+ '04051_E_Assignments to form','al parameters and open arrays are not pos'+
'sible'#000+
'04052_E_Constant Expression expected'#000+
'04053_E_Operation "$1" not supported for types "$2" and "$3"'#000+
'04054_E_Illegal type conversion: "$1" to "$2"'#000+
- '04055_H_Conversion between ordinals and pointers is not portable'#000+
- '04056_W_','Conversion between ordinals and pointers is not portable'#000+
+ '04055_H_Conversion between ordinals and pointers ','is not portable'#000+
+ '04056_W_Conversion between ordinals and pointers is not portable'#000+
'04057_E_Can'#039't determine which overloaded function to call'#000+
'04058_E_Illegal counter variable'#000+
- '04059_W_Converting constant real value to double for C variable argume'+
- 'nt, add explicit typec','ast to prevent this.'#000+
+ '04059_W_Converting constant real value to double for C variable argu','m'+
+ 'ent, add explicit typecast to prevent this.'#000+
'04060_E_Class or COM interface type expected, but got "$1"'#000+
'04061_E_Constant packed arrays are not yet supported'#000+
'04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+
'ed Array"'#000+
- '04063_E_Incompatible type f','or arg no. $1: Got "$2" expected "(not pa'+
+ '040','63_E_Incompatible type for arg no. $1: Got "$2" expected "(not pa'+
'cked) Array"'#000+
'04064_E_Elements of packed arrays cannot be of a type which need to be'+
' initialised'#000+
'04065_E_Constant packed records and objects are not yet supported'#000+
- '04066_W_Arithmetic "$1" on untyped po','inter is unportable to {$T+}, s'+
+ '04066_W_Arith','metic "$1" on untyped pointer is unportable to {$T+}, s'+
'uggest typecast'#000+
'04076_E_Can'#039't take address of a subroutine marked as local'#000+
'04077_E_Can'#039't export subroutine marked as local from a unit'#000+
'04078_E_Type is not automatable: "$1"'#000+
- '04079_H_Converting the operands to "','$1" before doing the add could p'+
+ '04079_H_Conv','erting the operands to "$1" before doing the add could p'+
'revent overflow errors.'#000+
'04080_H_Converting the operands to "$1" before doing the subtract coul'+
'd prevent overflow errors.'#000+
- '04081_H_Converting the operands to "$1" before doing the multiply coul'+
- 'd prevent overflo','w errors.'#000+
+ '04081_H_Converting the operands to "$1" before doing the multip','ly co'+
+ 'uld prevent overflow errors.'#000+
'04082_W_Converting pointers to signed integers may result in wrong com'+
'parison results and range errors, use an unsigned type instead.'#000+
'04083_E_Interface type $1 has no valid GUID'#000+
- '04084_E_Invalid selector name "$1"'#000+
- '04085_E_Expected ','Objective-C method, but got $1'#000+
+ '04084_E_Invalid selector nam','e "$1"'#000+
+ '04085_E_Expected Objective-C method, but got $1'#000+
'04086_E_Expected Objective-C method or constant method name'#000+
'04087_E_No type info available for this type'#000+
'04088_E_Ordinal or string expression expected'#000+
- '04089_E_String expression expected'#000+
- '04090_E_Objective-C pro','tocol type expected, but got "$1"'#000+
- '04091_E_The type "$1" is not supported for interaction with the Object'+
+ '04089_E_String expression expected',#000+
+ '04090_W_Converting 0 to NIL'#000+
+ '04091_E_Objective-C protocol type expected, but got "$1"'#000+
+ '04092_E_The type "$1" is not supported for interaction with the Object'+
'ive-C runtime.'#000+
- '04092_E_Class or objcclass type expected, but got "$1"'#000+
- '05000_E_Identifier not found "$1"'#000+
- '05001_F_Internal Error in SymTab','leStack()'#000+
+ '04093_E_Class or objcclass type expected, but got "$1"'#000+
+ '05000_E_Identi','fier not found "$1"'#000+
+ '05001_F_Internal Error in SymTableStack()'#000+
'05002_E_Duplicate identifier "$1"'#000+
'05003_H_Identifier already defined in $1 at line $2'#000+
'05004_E_Unknown identifier "$1"'#000+
'05005_E_Forward declaration not solved "$1"'#000+
- '05007_E_Error in type definition'#000+
- '05009_E_Forward type not resolved "','$1"'#000+
+ '05007_E_Error in',' type definition'#000+
+ '05009_E_Forward type not resolved "$1"'#000+
'05010_E_Only static variables can be used in static methods or outside'+
' methods'#000+
'05012_F_record or class type expected'#000+
- '05013_E_Instances of classes or objects with an abstract method are no'+
- 't allowed'#000+
+ '05013_E_Instances of classes or objects with an abstract method are',' '+
+ 'not allowed'#000+
'05014_W_Label not defined "$1"'#000+
- '05015_E_','Label used but not defined "$1"'#000+
+ '05015_E_Label used but not defined "$1"'#000+
'05016_E_Illegal label declaration'#000+
'05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
'05018_E_Label not found'#000+
'05019_E_identifier isn'#039't a label'#000+
- '05020_E_label already defined'#000+
- '05021_E_illegal type declarat','ion of set elements'#000+
+ '05020_E','_label already defined'#000+
+ '05021_E_illegal type declaration of set elements'#000+
'05022_E_Forward class definition not resolved "$1"'#000+
'05023_H_Unit "$1" not used in $2'#000+
'05024_H_Parameter "$1" not used'#000+
'05025_N_Local variable "$1" not used'#000+
- '05026_H_Value parameter "$1" is assigned but never used'#000+
- '05027_N_Loc','al variable "$1" is assigned but never used'#000+
+ '05026_H_Value p','arameter "$1" is assigned but never used'#000+
+ '05027_N_Local variable "$1" is assigned but never used'#000+
'05028_H_Local $1 "$2" is not used'#000+
'05029_N_Private field "$1.$2" is never used'#000+
'05030_N_Private field "$1.$2" is assigned but never used'#000+
- '05031_N_Private method "$1.$2" never used'#000+
- '05032_E_Set type ex','pected'#000+
+ '05031_N_P','rivate method "$1.$2" never used'#000+
+ '05032_E_Set type expected'#000+
'05033_W_Function result does not seem to be set'#000+
'05034_W_Type "$1" is not aligned correctly in current record for C'#000+
'05035_E_Unknown record field identifier "$1"'#000+
- '05036_W_Local variable "$1" does not seem to be initialized'#000+
- '05037_W_Varia','ble "$1" does not seem to be initialized'#000+
+ '05036_W_Local variabl','e "$1" does not seem to be initialized'#000+
+ '05037_W_Variable "$1" does not seem to be initialized'#000+
'05038_E_identifier idents no member "$1"'#000+
'05039_H_Found declaration: $1'#000+
'05040_E_Data element too large'#000+
- '05042_E_No matching implementation for interface method "$1" found'#000+
- '05043_W_Symbol "$1" is depreca','ted'#000+
+ '05042_E_No matching implementation for interf','ace method "$1" found'#000+
+ '05043_W_Symbol "$1" is deprecated'#000+
'05044_W_Symbol "$1" is not portable'#000+
'05055_W_Symbol "$1" is not implemented'#000+
'05056_E_Can'#039't create unique type from this type'#000+
'05057_H_Local variable "$1" does not seem to be initialized'#000+
- '05058_H_Variable "$1" does not seem to be initialized',#000+
+ '0','5058_H_Variable "$1" does not seem to be initialized'#000+
'05059_W_Function result variable does not seem to initialized'#000+
'05060_H_Function result variable does not seem to be initialized'#000+
'05061_W_Variable "$1" read but nowhere assigned'#000+
- '05062_H_Found abstract method: $1'#000+
- '05063_W_Symbol "$1" is experim','ental'#000+
+ '05062_H_Foun','d abstract method: $1'#000+
+ '05063_W_Symbol "$1" is experimental'#000+
'05064_W_Forward declaration "$1" not resolved, assumed external'#000+
- '05065_E_Mismatch between number of declared parameters and number of c'+
+ '05065_W_Symbol "$1" is belongs to a library'#000+
+ '05066_W_Symbol "$1" is deprecated: "$2"'#000+
+ '05067_E_Can not find an enumerator',' for the type "$1"'#000+
+ '05068_E_Can not find a "MoveNext" method in enumerator "$1"'#000+
+ '05069_E_Can not find a "Current" property in enumerator "$1"'#000+
+ '05070_E_Mismatch between number of declared parameters and number of c'+
'olons in message string.'#000+
- '06009_E_Parameter list size exceeds 65535 bytes'#000+
- '06012_E_File types must be ','var parameters'#000+
+ '06009','_E_Parameter list size exceeds 65535 bytes'#000+
+ '06012_E_File types must be var parameters'#000+
'06013_E_The use of a far pointer isn'#039't allowed there'#000+
'06015_E_EXPORT declared functions can'#039't be called'#000+
- '06016_W_Possible illegal call of constructor or destructor'#000+
+ '06016_W_Possible illegal call of constructor or dest','ructor'#000+
'06017_N_Inefficient code'#000+
'06018_W_unreachable code'#000+
- '06020_E_Abstr','act methods can'#039't be called directly'#000+
+ '06020_E_Abstract methods can'#039't be called directly'#000+
'06027_DL_Register $1 weight $2 $3'#000+
'06029_DL_Stack frame is omitted'#000+
'06031_E_Object or class methods can'#039't be inline.'#000+
- '06032_E_Procvar calls cannot be inline.'#000+
+ '06032_E_Procvar ca','lls cannot be inline.'#000+
'06033_E_No code for inline procedure stored'#000+
- '0603','5_E_Element zero of an ansi/wide- or longstring can'#039't be acc'+
- 'essed, use (set)length instead'#000+
+ '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
+ 'sed, use (set)length instead'#000+
'06037_E_Constructors or destructors can not be called inside a '#039'wi'+
'th'#039' clause'#000+
- '06038_E_Cannot call message handler methods directly'#000+
- '06039_E_Jump in or ','outside of an exception block'#000+
+ '06','038_E_Cannot call message handler methods directly'#000+
+ '06039_E_Jump in or outside of an exception block'#000+
'06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
'06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
- '06042_W_Local variable size exceed limit for certain cpu'#039's'#000+
- '06043_E_Local variables size ','exceeds supported limit'#000+
+ '06042_W_Local vari','able size exceed limit for certain cpu'#039's'#000+
+ '06043_E_Local variables size exceeds supported limit'#000+
'06044_E_BREAK not allowed'#000+
'06045_E_CONTINUE not allowed'#000+
'06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+
'me library.'#000+
- '06047_F_Cannot find system type "$1". Check if you use the correct run'+
- ' time lib','rary.'#000+
+ '06047_F_C','annot find system type "$1". Check if you use the correct r'+
+ 'un time library.'#000+
'06048_H_Inherited call to abstract method ignored'#000+
'06049_E_Goto label "$1" not defined or optimized away'#000+
- '06050_F_Cannot find type "$1" in unit "$2". Check if you use the corre'+
- 'ct run time library.'#000+
- '07000_DL_Starting $1 styled assembler p','arsing'#000+
+ '06050_F_Cannot find type "$1" in unit "$2". Check if you use',' the cor'+
+ 'rect run time library.'#000+
+ '07000_DL_Starting $1 styled assembler parsing'#000+
'07001_DL_Finished $1 styled assembler parsing'#000+
'07002_E_Non-label pattern contains @'#000+
'07004_E_Error building record offset'#000+
'07005_E_OFFSET used without identifier'#000+
- '07006_E_TYPE used without identifier'#000+
- '07007_E_Cannot use local variable or ','parameters here'#000+
+ '0700','6_E_TYPE used without identifier'#000+
+ '07007_E_Cannot use local variable or parameters here'#000+
'07008_E_need to use OFFSET here'#000+
'07009_E_need to use $ here'#000+
'07010_E_Cannot use multiple relocatable symbols'#000+
'07011_E_Relocatable symbol can only be added'#000+
- '07012_E_Invalid constant expression'#000+
- '07013_E_Relocatable symbol is not al','lowed'#000+
+ '07','012_E_Invalid constant expression'#000+
+ '07013_E_Relocatable symbol is not allowed'#000+
'07014_E_Invalid reference syntax'#000+
'07015_E_You can not reach $1 from that code'#000+
'07016_E_Local symbols/labels aren'#039't allowed as references'#000+
- '07017_E_Invalid base and index register usage'#000+
+ '07017_E_Invalid base and inde','x register usage'#000+
'07018_W_Possible error in object field handling'#000+
- '07019','_E_Wrong scale factor specified'#000+
+ '07019_E_Wrong scale factor specified'#000+
'07020_E_Multiple index register usage'#000+
'07021_E_Invalid operand type'#000+
'07022_E_Invalid string as opcode operand: $1'#000+
- '07023_W_@CODE and @DATA not supported'#000+
+ '07023_W_@CODE and @DATA no','t supported'#000+
'07024_E_Null label references are not allowed'#000+
- '07025_E_Divi','de by zero in asm evaluator'#000+
+ '07025_E_Divide by zero in asm evaluator'#000+
'07026_E_Illegal expression'#000+
'07027_E_escape sequence ignored: $1'#000+
'07028_E_Invalid symbol reference'#000+
- '07029_W_Fwait can cause emulation problems with emu387'#000+
+ '07029_W_Fwait can cause emulation problems wit','h emu387'#000+
'07030_W_$1 without operand translated into $1P'#000+
- '07031_W_ENTER ','instruction is not supported by Linux kernel'#000+
+ '07031_W_ENTER instruction is not supported by Linux kernel'#000+
'07032_W_Calling an overload function in assembler'#000+
'07033_E_Unsupported symbol type for operand'#000+
- '07034_E_Constant value out of bounds'#000+
+ '07034_E_Constant value out of b','ounds'#000+
'07035_E_Error converting decimal $1'#000+
- '07036_E_Error converting oct','al $1'#000+
+ '07036_E_Error converting octal $1'#000+
'07037_E_Error converting binary $1'#000+
'07038_E_Error converting hexadecimal $1'#000+
'07039_H_$1 translated to $2'#000+
'07040_W_$1 is associated to an overloaded function'#000+
- '07041_E_Cannot use SELF outside a method'#000+
- '07042_E_Cannot use OLDEBP outside a nes','ted procedure'#000+
+ '07041_E_Ca','nnot use SELF outside a method'#000+
+ '07042_E_Cannot use OLDEBP outside a nested procedure'#000+
'07043_W_Procedures can'#039't return any value in asm code'#000+
'07044_E_SEG not supported'#000+
'07045_E_Size suffix and destination or source size do not match'#000+
- '07046_W_Size suffix and destination or source size do not match'#000+
- '07047_E_Assembler ','syntax error'#000+
+ '07046_W_Size',' suffix and destination or source size do not match'#000+
+ '07047_E_Assembler syntax error'#000+
'07048_E_Invalid combination of opcode and operands'#000+
'07049_E_Assembler syntax error in operand'#000+
'07050_E_Assembler syntax error in constant'#000+
- '07051_E_Invalid String expression'#000+
- '07052_W_constant with symbol $1 for address which is not ','on a pointe'+
- 'r'#000+
+ '07051_E_Invalid Strin','g expression'#000+
+ '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
'07053_E_Unrecognized opcode $1'#000+
'07054_E_Invalid or missing opcode'#000+
'07055_E_Invalid combination of prefix and opcode: $1'#000+
- '07056_E_Invalid combination of override and opcode: $1'#000+
+ '07056_E_Invalid combination of override',' and opcode: $1'#000+
'07057_E_Too many operands on line'#000+
- '07058_W_NEAR ignored',#000+
+ '07058_W_NEAR ignored'#000+
'07059_W_FAR ignored'#000+
'07060_E_Duplicate local symbol $1'#000+
'07061_E_Undefined local symbol $1'#000+
'07062_E_Unknown label identifier $1'#000+
'07063_E_Invalid register name'#000+
- '07064_E_Invalid floating point register name'#000+
+ '07064_E_Invalid',' floating point register name'#000+
'07066_W_Modulo not supported'#000+
- '07067_E_Inv','alid floating point constant $1'#000+
+ '07067_E_Invalid floating point constant $1'#000+
'07068_E_Invalid floating point expression'#000+
'07069_E_Wrong symbol type'#000+
'07070_E_Cannot index a local var or parameter with a register'#000+
- '07071_E_Invalid segment override expression'#000+
- '07072_W_Identifier $1 supposed ext','ernal'#000+
+ '07071_E_','Invalid segment override expression'#000+
+ '07072_W_Identifier $1 supposed external'#000+
'07073_E_Strings not allowed as constants'#000+
'07074_No type of variable specified'#000+
'07075_E_assembler code not returned to text section'#000+
- '07076_E_Not a directive or local symbol $1'#000+
+ '07076_E_Not a directive or local sy','mbol $1'#000+
'07077_E_Using a defined name as a local label'#000+
- '07078_E_Dollar t','oken is used without an identifier'#000+
+ '07078_E_Dollar token is used without an identifier'#000+
'07079_W_32bit constant created for address'#000+
'07080_N_.align is target specific, use .balign or .p2align'#000+
- '07081_E_Can'#039't access fields directly for parameters'#000+
- '07082_E_Can'#039't access fields of objects/classes dire','ctly'#000+
+ '07081_E_Can'#039't access fields direc','tly for parameters'#000+
+ '07082_E_Can'#039't access fields of objects/classes directly'#000+
'07083_E_No size specified and unable to determine the size of the oper'+
'ands'#000+
'07084_E_Cannot use RESULT in this function'#000+
- '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
+ '07086_W_"$1" without operand translated into "$','1 %st,%st(1)"'#000+
'07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+
- '0708','8_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
+ '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
'07089_E_Char < not allowed here'#000+
'07090_E_Char > not allowed here'#000+
'07093_W_ALIGN not supported'#000+
- '07094_E_Inc and Dec cannot be together'#000+
+ '07094_E_Inc and Dec cannot be ','together'#000+
'07095_E_Invalid reglist for movem'#000+
- '07096_E_Reglist invalid for',' opcode'#000+
+ '07096_E_Reglist invalid for opcode'#000+
'07097_E_Higher cpu mode required ($1)'#000+
'07098_W_No size specified and unable to determine the size of the oper'+
'ands, using DWORD as default'#000+
- '07099_E_Syntax error while trying to parse a shifter operand'#000+
- '07100_E_Address of packed componen','t is not at a byte boundary'#000+
+ '07099_E_Syntax error whil','e trying to parse a shifter operand'#000+
+ '07100_E_Address of packed component is not at a byte boundary'#000+
'07101_W_No size specified and unable to determine the size of the oper'+
'ands, using BYTE as default'#000+
- '07102_W_Use of +offset(%ebp) for parameters invalid here'#000+
- '07103_W_Use of +offset(%ebp) is not compatible with regca','ll conventi'+
- 'on'#000+
+ '07102_W_Use of +offset(%ebp) for parameters ','invalid here'#000+
+ '07103_W_Use of +offset(%ebp) is not compatible with regcall convention'+
+ #000+
'07104_W_Use of -offset(%ebp) is not recommended for local variable acc'+
'ess'#000+
'07105_W_Use of -offset(%esp), access may cause a crash or value may be'+
' lost'#000+
- '07106_E_VMTOffset must be used in combination with a virtual method, a'+
- 'nd "$1','" is not virtual'#000+
+ '07106_','E_VMTOffset must be used in combination with a virtual method,'+
+ ' and "$1" is not virtual'#000+
'07107_E_Generating PIC, but reference is not PIC-safe'#000+
'08000_F_Too many assembler files'#000+
'08001_F_Selected assembler output not supported'#000+
- '08002_F_Comp not supported'#000+
+ '08002_F_Comp not s','upported'#000+
'08003_F_Direct not support for binary writers'#000+
- '08004_E_Allocat','ing of data is only allowed in bss section'#000+
+ '08004_E_Allocating of data is only allowed in bss section'#000+
'08005_F_No binary writer selected'#000+
'08006_E_Asm: Opcode $1 not in table'#000+
- '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
+ '08007_E_Asm: $1 invalid combination of opcode and operand','s'#000+
'08008_E_Asm: 16 Bit references not supported'#000+
- '08009_E_Asm: Invalid ef','fective address'#000+
+ '08009_E_Asm: Invalid effective address'#000+
'08010_E_Asm: Immediate or reference expected'#000+
'08011_E_Asm: $1 value exceeds bounds $2'#000+
'08012_E_Asm: Short jump is out of range $1'#000+
- '08013_E_Asm: Undefined label $1'#000+
+ '08013_E_Asm: Undefined lab','el $1'#000+
'08014_E_Asm: Comp type not supported for this target'#000+
- '08015_E_Asm',': Extended type not supported for this target'#000+
+ '08015_E_Asm: Extended type not supported for this target'#000+
'08016_E_Asm: Duplicate label $1'#000+
'08017_E_Asm: Redefined label $1'#000+
'08018_E_Asm: First defined here'#000+
- '08019_E_Asm: Invalid register $1'#000+
+ '08019_E_Asm: Invalid registe','r $1'#000+
'08020_E_Asm: 16 or 32 Bit references not supported'#000+
- '08021_E_Asm: 6','4 Bit operands not supported'#000+
+ '08021_E_Asm: 64 Bit operands not supported'#000+
'09000_W_Source operating system redefined'#000+
'09001_I_Assembling (pipe) $1'#000+
'09002_E_Can'#039't create assembler file: $1'#000+
- '09003_E_Can'#039't create object file: $1'#000+
+ '09003_E_Can'#039't create object fi','le: $1'#000+
'09004_E_Can'#039't create archive file: $1'#000+
- '09005_E_Assembler $1 not ','found, switching to external assembling'#000+
+ '09005_E_Assembler $1 not found, switching to external assembling'#000+
'09006_T_Using assembler: $1'#000+
'09007_E_Error while assembling exitcode $1'#000+
- '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
- 'ssembling'#000+
+ '09008_E_Can'#039't call the assembler, error $1 switching to ext','ernal'+
+ ' assembling'#000+
'09009_I_Assembling $1'#000+
- '09010_I_Assembling with smartli','nking $1'#000+
+ '09010_I_Assembling with smartlinking $1'#000+
'09011_W_Object $1 not found, Linking may fail !'#000+
'09012_W_Library $1 not found, Linking may fail !'#000+
'09013_E_Error while linking'#000+
- '09014_E_Can'#039't call the linker, switching to external linking'#000+
+ '09014_E_Can'#039't call the linker, switc','hing to external linking'#000+
'09015_I_Linking $1'#000+
- '09016_E_Util $1 not found,',' switching to external linking'#000+
+ '09016_E_Util $1 not found, switching to external linking'#000+
'09017_T_Using util $1'#000+
'09018_E_Creation of Executables not supported'#000+
'09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
- '09020_I_Closing script $1'#000+
- '09021_E_resource compiler "$1" not found, switching to e','xternal mode'+
- #000+
+ '09020_I_Clos','ing script $1'#000+
+ '09021_E_resource compiler "$1" not found, switching to external mode'#000+
'09022_I_Compiling resource $1'#000+
'09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
'king'#000+
- '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
- #000+
- '09025_T_unit $1 can'#039't be shared linked, switching to static',' link'+
- 'ing'#000+
+ '09024_T_unit $1 can'#039't be smart linked, switching to stat','ic linki'+
+ 'ng'#000+
+ '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
+ 'g'#000+
'09026_E_unit $1 can'#039't be smart or static linked'#000+
'09027_E_unit $1 can'#039't be shared or static linked'#000+
- '09028_D_Calling resource compiler "$1" with "$2" as command line'#000+
+ '09028_D_Calling resource compiler "$1" with "$2" as command line',#000+
'09029_E_Error while compiling resources'#000+
- '09030_E_Can'#039't call the resour','ce compiler "$1", switching to exte'+
- 'rnal mode'#000+
+ '09030_E_Can'#039't call the resource compiler "$1", switching to extern'+
+ 'al mode'#000+
'09031_E_Can'#039't open resource file "$1"'#000+
'09032_E_Can'#039't write resource file "$1"'#000+
'09128_F_Can'#039't post process executable $1'#000+
- '09129_F_Can'#039't open executable $1'#000+
+ '09129_F','_Can'#039't open executable $1'#000+
'09130_X_Size of Code: $1 bytes'#000+
- '09131_X_Size ','of initialized data: $1 bytes'#000+
+ '09131_X_Size of initialized data: $1 bytes'#000+
'09132_X_Size of uninitialized data: $1 bytes'#000+
'09133_X_Stack space reserved: $1 bytes'#000+
'09134_X_Stack space committed: $1 bytes'#000+
- '09200_F_Executable image size is too big for $1 target.'#000+
- '09201_W_Object file "$1" conta','ins 32-bit absolute relocation to symb'+
- 'ol "$2".'#000+
+ '09200_F_Executab','le image size is too big for $1 target.'#000+
+ '09201_W_Object file "$1" contains 32-bit absolute relocation to symbol'+
+ ' "$2".'#000+
'10000_T_Unitsearch: $1'#000+
'10001_T_PPU Loading $1'#000+
'10002_U_PPU Name: $1'#000+
'10003_U_PPU Flags: $1'#000+
'10004_U_PPU Crc: $1'#000+
- '10005_U_PPU Time: $1'#000+
+ '10005_U_PPU Ti','me: $1'#000+
'10006_U_PPU File too short'#000+
- '10007_U_PPU Invalid Header (no PPU a','t the begin)'#000+
+ '10007_U_PPU Invalid Header (no PPU at the begin)'#000+
'10008_U_PPU Invalid Version $1'#000+
'10009_U_PPU is compiled for another processor'#000+
'10010_U_PPU is compiled for an other target'#000+
'10011_U_PPU Source: $1'#000+
- '10012_U_Writing $1'#000+
+ '10012_U_Writi','ng $1'#000+
'10013_F_Can'#039't Write PPU-File'#000+
'10014_F_Error reading PPU-File'#000+
- '1001','5_F_unexpected end of PPU-File'#000+
+ '10015_F_unexpected end of PPU-File'#000+
'10016_F_Invalid PPU-File entry: $1'#000+
'10017_F_PPU Dbx count problem'#000+
'10018_E_Illegal unit name: $1'#000+
'10019_F_Too much units'#000+
- '10020_F_Circular unit reference between $1 and $2'#000+
- '10021_F_Can'#039't compile unit $1, no sources',' available'#000+
+ '10020_F_Circular unit',' reference between $1 and $2'#000+
+ '10021_F_Can'#039't compile unit $1, no sources available'#000+
'10022_F_Can'#039't find unit $1 used by $2'#000+
'10023_W_Unit $1 was not found but $2 exists'#000+
'10024_F_Unit $1 searched but $2 found'#000+
- '10025_W_Compiling the system unit requires the -Us switch'#000+
- '10026_F_There were $1 errors compiling module, stop','ping'#000+
+ '10025_W_Compiling the system unit requi','res the -Us switch'#000+
+ '10026_F_There were $1 errors compiling module, stopping'#000+
'10027_U_Load from $1 ($2) unit $3'#000+
'10028_U_Recompiling $1, checksum changed for $2'#000+
'10029_U_Recompiling $1, source found only'#000+
- '10030_U_Recompiling unit, static lib is older than ppufile'#000+
- '10031_U_Recompiling unit, shared lib is older than p','pufile'#000+
+ '10030_U_Recompiling unit, static lib is o','lder than ppufile'#000+
+ '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
'10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
'10033_U_Recompiling unit, obj is older than asm'#000+
'10034_U_Parsing interface of $1'#000+
- '10035_U_Parsing implementation of $1'#000+
+ '10035_U_Parsing implem','entation of $1'#000+
'10036_U_Second load for unit $1'#000+
- '10037_U_PPU Check file ','$1 time $2'#000+
+ '10037_U_PPU Check file $1 time $2'#000+
'10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
'10041_U_File $1 is newer than PPU file $2'#000+
- '10042_U_Trying to use a unit which was compiled with a different FPU m'+
- 'ode'#000+
+ '10042_U_Trying to use a unit which was compiled with',' a different FPU'+
+ ' mode'#000+
'10043_U_Loading interface units from $1'#000+
- '10044_U_','Loading implementation units from $1'#000+
+ '10044_U_Loading implementation units from $1'#000+
'10045_U_Interface CRC changed for unit $1'#000+
'10046_U_Implementation CRC changed for unit $1'#000+
'10047_U_Finished compiling unit $1'#000+
- '10048_U_Add dependency of $1 to $2'#000+
+ '10048_U_A','dd dependency of $1 to $2'#000+
'10049_U_No reload, is caller: $1'#000+
- '10050_U_No ','reload, already in second compile: $1'#000+
+ '10050_U_No reload, already in second compile: $1'#000+
'10051_U_Flag for reload: $1'#000+
'10052_U_Forced reloading'#000+
'10053_U_Previous state of $1: $2'#000+
- '10054_U_Already compiling $1, setting second compile'#000+
+ '10054_U_Already compiling $1, setting second c','ompile'#000+
'10055_U_Loading unit $1'#000+
'10056_U_Finished loading unit $1'#000+
- '10057_','U_Registering new unit $1'#000+
+ '10057_U_Registering new unit $1'#000+
'10058_U_Re-resolving unit $1'#000+
'10059_U_Skipping re-resolving unit $1, still loading used units'#000+
'10060_U_Unloading resource unit $1 (not needed)'#000+
- '10061_E_Unit $1 was compiled using a different whole program optimizat'+
- 'ion',' feedback input ($2, $3); recompile it without wpo or use the sam'+
+ '100','61_E_Unit $1 was compiled using a different whole program optimiz'+
+ 'ation feedback input ($2, $3); recompile it without wpo or use the sam'+
'e wpo feedback input file for this compilation invocation'#000+
'11000_O_$1 [options] <inputfile> [options]'#000+
- '11001_W_Only one source file supported, changing source file to compil'+
- 'e fr','om "$1" into "$2"'#000+
+ '1100','1_W_Only one source file supported, changing source file to comp'+
+ 'ile from "$1" into "$2"'#000+
'11002_W_DEF file can be created only for OS/2'#000+
'11003_E_nested response files are not supported'#000+
'11004_F_No source file name in command line'#000+
- '11005_N_No option inside $1 config file'#000+
+ '11005_N_No opt','ion inside $1 config file'#000+
'11006_E_Illegal parameter: $1'#000+
- '11007_H_-? wri','tes help pages'#000+
+ '11007_H_-? writes help pages'#000+
'11008_F_Too many config files nested'#000+
'11009_F_Unable to open file $1'#000+
'11010_D_Reading further options from $1'#000+
'11011_W_Target is already set to: $1'#000+
- '11012_W_Shared libs not supported on DOS platform, reverting to static'+
- #000+
- '11013_F_I','n options file $1 at line $2 too many \var{\#IF(N)DEFs} enc'+
- 'ountered'#000+
+ '11012_W_Sh','ared libs not supported on DOS platform, reverting to stat'+
+ 'ic'#000+
+ '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+
+ 'ntered'#000+
'11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+
'tered'#000+
- '11015_F_Open conditional at the end of the options file'#000+
- '11016_W_Debug information generation is ','not supported by this execut'+
- 'able'#000+
+ '11015_F_Open conditional a','t the end of the options file'#000+
+ '11016_W_Debug information generation is not supported by this executab'+
+ 'le'#000+
'11017_H_Try recompiling with -dGDB'#000+
'11018_W_You are using the obsolete switch $1'#000+
- '11019_W_You are using the obsolete switch $1, please use $2'#000+
+ '11019_W_You are using the obsolete switch $1, please use ','$2'#000+
'11020_N_Switching assembler to default source writing assembler'#000+
- '110','21_W_Assembler output selected "$1" is not compatible with "$2"'#000+
+ '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
'11022_W_"$1" assembler use forced'#000+
'11026_T_Reading options from file $1'#000+
- '11027_T_Reading options from environment $1'#000+
+ '11027_T_Reading options from enviro','nment $1'#000+
'11028_D_Handling option "$1"'#000+
'11029_O_*** press enter ***'#000+
- '1103','0_H_Start of reading config file $1'#000+
+ '11030_H_Start of reading config file $1'#000+
'11031_H_End of reading config file $1'#000+
'11032_D_interpreting option "$1"'#000+
'11036_D_interpreting firstpass option "$1"'#000+
- '11033_D_interpreting file option "$1"'#000+
+ '11033_D_interpreting',' file option "$1"'#000+
'11034_D_Reading config file "$1"'#000+
- '11035_D_found sourc','e file name "$1"'#000+
+ '11035_D_found source file name "$1"'#000+
'11039_E_Unknown code page'#000+
'11040_F_Config file $1 is a directory'#000+
'11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
'ugging disabled'#000+
- '11042_W_Use of ppc386.cfg is deprecated, please use fpc.cfg instead'#000+
- '11043','_F_In options file $1 at line $2 \var{\#ELSE} directive without'+
- ' \var{\#IF(N)DEF} found'#000+
+ '110','42_W_Use of ppc386.cfg is deprecated, please use fpc.cfg instead'#000+
+ '11043_F_In options file $1 at line $2 \var{\#ELSE} directive without \'+
+ 'var{\#IF(N)DEF} found'#000+
'11044_F_Option "$1" is not, or not yet, supported on the current targe'+
't platform'#000+
- '11045_F_The feature "$1" is not, or not yet, supported on the selected'+
- ' t','arget platform'#000+
+ '11','045_F_The feature "$1" is not, or not yet, supported on the select'+
+ 'ed target platform'#000+
'11046_N_DWARF debug information cannot be used with smart linking on t'+
'his target, switching to static linking'#000+
- '11047_W_Option "$1" is ignored for the current target platform.'#000+
- '12000_F_Cannot open whole program optimization feed','back file "$1"'#000+
+ '11047_W_Option "$1" is ignored for the curren','t target platform.'#000+
+ '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
'12001_D_Processing whole program optimization information in wpo feedb'+
'ack file "$1"'#000+
'12002_D_Finished processing the whole program optimization information'+
- ' in wpo feedback file "$1"'#000+
- '12003_E_Expected section header, but got "$2','" at line $1 of wpo feed'+
- 'back file'#000+
+ ' ','in wpo feedback file "$1"'#000+
+ '12003_E_Expected section header, but got "$2" at line $1 of wpo feedba'+
+ 'ck file'#000+
'12004_W_No handler registered for whole program optimization section "'+
'$2" at line $1 of wpo feedback file, ignoring'#000+
- '12005_D_Found whole program optimization section "$1" with information'+
- ' about "$2"'#000+
- '12006_F_','The selected whole program optimizations require a previousl'+
- 'y generated feedback file (use -Fw to specify)'#000+
- '12007_E_No collected information necessary to perform "$1" whole progr'+
- 'am optimization found'#000+
- '12008_F_Specify a whole program optimizat','ion feedback file to store '+
- 'the generated info in (using -FW)'#000+
+ '12005_D_Found whole ','program optimization section "$1" with informati'+
+ 'on about "$2"'#000+
+ '12006_F_The selected whole program optimizations require a previously '+
+ 'generated feedback file (use -Fw to specify)'#000+
+ '12007_E_No collected information necessary to perform "$1" whol','e pro'+
+ 'gram optimization found'#000+
+ '12008_F_Specify a whole program optimization feedback file to store th'+
+ 'e generated info in (using -FW)'#000+
'12009_E_Not generating any whole program optimization information, yet'+
- ' a feedback file was specified (using -FW)'#000+
- '12010_E_Not performing any whole program optimizations, yet an inp','ut'+
- ' feedback file was specified (using -Fw)'#000+
+ ' a feedback file was specified (using -','FW)'#000+
+ '12010_E_Not performing any whole program optimizations, yet an input f'+
+ 'eedback file was specified (using -Fw)'#000+
'12011_D_Skipping whole program optimization section "$1", because not '+
'needed by the requested optimizations'#000+
- '12012_W_Overriding previously read information for "$1" from feedback '+
- 'input file using in','formation in section "$2"'#000+
+ '12012_W_Overriding ','previously read information for "$1" from feedbac'+
+ 'k input file using information in section "$2"'#000+
'12013_E_Cannot extract symbol liveness information from program when s'+
'tripping symbols, use -Xs-'#000+
- '12014_E_Cannot extract symbol liveness information from program when w'+
- 'hen not linking'#000+
- '12015_F_Cannot find "$1" or "$2','" to extract symbol liveness informat'+
- 'ion from linked program'#000+
+ '12014_E_Cannot extract symbol liveness informat','ion from program when'+
+ ' when not linking'#000+
+ '12015_F_Cannot find "$1" or "$2" to extract symbol liveness informatio'+
+ 'n from linked program'#000+
'12016_E_Error during reading symbol liveness information produced by "'+
'$1"'#000+
- '12017_F_Error executing "$1" (exitcode: $2) to extract symbol informat'+
- 'ion from linked program'#000+
- '12018_E_Col','lection of symbol liveness information can only help when'+
- ' using smart linking, use -CX -XX'#000+
+ '12017_F_Error executing "$1" (exitc','ode: $2) to extract symbol inform'+
+ 'ation from linked program'#000+
+ '12018_E_Collection of symbol liveness information can only help when u'+
+ 'sing smart linking, use -CX -XX'#000+
'12019_E_Cannot create specified whole program optimisation feedback fi'+
'le "$1"'#000+
- '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+
- 'C','PU'#010+
+ '1','1023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $F'+
+ 'PCCPU'#010+
'Copyright (c) 1993-2009 by Florian Klaempfl'#000+
'11024_Free Pascal Compiler version $FPCVERSION'#010+
#010+
'Compiler Date : $FPCDATE'#010+
'Compiler CPU Target: $FPCCPU'#010+
#010+
- 'Supported targets:'#010+
+ 'Supported targe','ts:'#010+
' $OSTARGETS'#010+
#010+
'Supported CPU instruction sets:'#010+
' $INSTRUCTIONSETS'#010+
- #010,
+ #010+
'Supported FPU instruction sets:'#010+
' $FPUINSTRUCTIONSETS'#010+
#010+
@@ -959,297 +979,296 @@ const msgtxt : array[0..000221,1..240] of char=(
'Supported Optimizations:'#010+
' $OPTIMIZATIONS'#010+
#010+
- 'Supported Whole Program Optimizations:'#010+
+ 'Supported Whole Program Optimizati','ons:'#010+
' All'#010+
' $WPOPTIMIZATIONS'#010+
#010+
'Supported Microcontroller types:'#010+
- ' $CON','TROLLERTYPES'#010+
+ ' $CONTROLLERTYPES'#010+
#010+
'This program comes under the GNU General Public Licence'#010+
'For more information read COPYING.FPC'#010+
#010+
'Report bugs, suggestions, etc. to:'#010+
- ' http://bugs.freepascal.org'#010+
+ ' http://bu','gs.freepascal.org'#010+
'or'#010+
' bugs@freepascal.org'#000+
- '11025_**0*_P','ut + after a boolean switch option to enable it, - to di'+
- 'sable it'#010+
+ '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+
+ 'ble it'#010+
'**1a_The compiler doesn'#039't delete the generated assembler file'#010+
- '**2al_List sourcecode lines in assembler file'#010+
+ '**2al_List sourcecode lines in assembler fi','le'#010+
'**2an_List node info in assembler file'#010+
- '*L2ap_Use pipes instead of c','reating temporary assembler files'#010+
+ '*L2ap_Use pipes instead of creating temporary assembler files'#010+
'**2ar_List register allocation/release info in assembler file'#010+
'**2at_List temp allocation/release info in assembler file'#010+
- '**1A<x>_Output format:'#010+
+ '**1A<x>_Output f','ormat:'#010+
'**2Adefault_Use default assembler'#010+
- '3*2Aas_Assemble using GNU AS'#010,
+ '3*2Aas_Assemble using GNU AS'#010+
'3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
'3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
'3*2Anasmwin32_Win32 object file using Nasm'#010+
- '3*2Anasmwdosx_Win32/WDOSX object file using Nasm'#010+
+ '3*2Anasmwdosx_Win32/WDOSX object file usin','g Nasm'#010+
'3*2Awasm_Obj file using Wasm (Watcom)'#010+
- '3*2Anasmobj_Obj file usin','g Nasm'#010+
+ '3*2Anasmobj_Obj file using Nasm'#010+
'3*2Amasm_Obj file using Masm (Microsoft)'#010+
'3*2Atasm_Obj file using Tasm (Borland)'#010+
'3*2Aelf_ELF (Linux) using internal writer'#010+
- '3*2Acoff_COFF (Go32v2) using internal writer'#010+
+ '3*2Acoff_COFF (Go32v2) using internal wri','ter'#010+
'3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
- '4*2Aas_Assemble u','sing GNU AS'#010+
+ '4*2Aas_Assemble using GNU AS'#010+
'6*2Aas_Unix o-file using GNU AS'#010+
'6*2Agas_GNU Motorola assembler'#010+
'6*2Amit_MIT Syntax (old GAS)'#010+
'6*2Amot_Standard Motorola assembler'#010+
'A*2Aas_Assemble using GNU AS'#010+
- 'P*2Aas_Assemble using GNU AS'#010+
+ 'P','*2Aas_Assemble using GNU AS'#010+
'S*2Aas_Assemble using GNU AS'#010+
- '**1b_Generate',' browser info'#010+
+ '**1b_Generate browser info'#010+
'**2bl_Generate local symbol info'#010+
'**1B_Build all modules'#010+
'**1C<x>_Code generation options:'#010+
'**2Ca<x>_Select ABI, see fpc -i for possible values'#010+
- '**2Cb_Generate big-endian code'#010+
+ '**2Cb_Generate ','big-endian code'#010+
'**2Cc<x>_Set default calling convention to <x>'#010+
- '**2CD_C','reate also dynamic library (not supported)'#010+
+ '**2CD_Create also dynamic library (not supported)'#010+
'**2Ce_Compilation with emulated floating point opcodes'#010+
'**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+
- 'lues'#010+
- '**2CF<x>_Minimal floating point constant precision (default, 32, 64',')'+
- #010+
+ 'lu','es'#010+
+ '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
'**2Cg_Generate PIC code'#010+
'**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
'**2Ci_IO-checking'#010+
'**2Cn_Omit linking stage'#010+
'**2Co_Check overflow of integer operations'#010+
- '**2CO_Check for possible overflow of integer operations'#010+
- '**2Cp<x>_Select inst','ruction set, see fpc -i for possible values'#010+
+ '**2CO_','Check for possible overflow of integer operations'#010+
+ '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+
'**2CP<x>=<y>_ packing settings'#010+
'**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
'and 8'#010+
- '**2Cr_Range checking'#010+
+ '**2Cr_Range checkin','g'#010+
'**2CR_Verify object method call validity'#010+
- '**2Cs<n>_Set stack checking',' size to <n>'#010+
+ '**2Cs<n>_Set stack checking size to <n>'#010+
'**2Ct_Stack checking (for testing only, see manual)'#010+
'**2CX_Create also smartlinked library'#010+
'**1d<x>_Defines the symbol <x>'#010+
'**1D_Generate a DEF file'#010+
- '**2Dd<x>_Set description to <x>'#010+
+ '**2Dd<x>_Se','t description to <x>'#010+
'**2Dv<x>_Set DLL version to <x>'#010+
- '*O2Dw_PM applicat','ion'#010+
+ '*O2Dw_PM application'#010+
'**1e<x>_Set path to executable'#010+
'**1E_Same as -Cn'#010+
'**1fPIC_Same as -Cg'#010+
'**1F<x>_Set file names and paths:'#010+
- '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
- 'sed'#010+
+ '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses ','is p'+
+ 'arsed'#010+
'**2Fc<x>_Set input codepage to <x>'#010+
- '**2FC<x>_Set RC compiler ','binary name to <x>'#010+
+ '**2FC<x>_Set RC compiler binary name to <x>'#010+
'**2Fd_Disable the compiler'#039's internal directory cache'#010+
'**2FD<x>_Set the directory where to search for compiler utilities'#010+
- '**2Fe<x>_Redirect error output to <x>'#010+
+ '**2Fe<x>_Redirect error output ','to <x>'#010+
'**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
- '**2FE<x>_Set e','xe/unit output path to <x>'#010+
+ '**2FE<x>_Set exe/unit output path to <x>'#010+
'**2Fi<x>_Add <x> to include path'#010+
'**2Fl<x>_Add <x> to library path'#010+
'**2FL<x>_Use <x> as dynamic linker'#010+
- '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
- 'r'#010+
+ '**2Fm<x>_Load unicode conversion table fro','m <x>.txt in the compiler '+
+ 'dir'#010+
'**2Fo<x>_Add <x> to object path'#010+
- '**2Fr<x>','_Load error message file <x>'#010+
+ '**2Fr<x>_Load error message file <x>'#010+
'**2FR<x>_Set resource (.res) linker to <x>'#010+
'**2Fu<x>_Add <x> to unit path'#010+
'**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
- '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+
- '**2Fw<x>_Load prev','iously stored whole-program optimization feedback '+
- 'from <x>'#010+
+ '**2FW<x>_Store g','enerated whole-program optimization feedback in <x>'#010+
+ '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
+ 'om <x>'#010+
'*g1g_Generate debug information (default format for target)'#010+
'*g2gc_Generate checks for pointers'#010+
- '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
- '*g2gl_Use line info un','it (show more info with backtraces)'#010+
+ '*g2gh_Use heaptr','ace unit (for memory leak/corruption debugging)'#010+
+ '*g2gl_Use line info unit (show more info with backtraces)'#010+
'*g2go<x>_Set debug information options'#010+
'*g3godwarfsets_ Enable DWARF set debug information (breaks gdb < 6.5)'#010+
- '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
- #010+
- '*g2gp_Preserve case in s','tabs symbol names'#010+
+ '*g3gostabsabsincludes_ St','ore absolute/full include file paths in Sta'+
+ 'bs'#010+
+ '*g2gp_Preserve case in stabs symbol names'#010+
'*g2gs_Generate Stabs debug information'#010+
'*g2gt_Trash local variables (to detect uninitialized uses)'#010+
'*g2gv_Generates programs traceable with Valgrind'#010+
- '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
- '*g2gw2_Generate DWA','RFv2 debug information'#010+
+ '*g2gw','_Generate DWARFv2 debug information (same as -gw2)'#010+
+ '*g2gw2_Generate DWARFv2 debug information'#010+
'*g2gw3_Generate DWARFv3 debug information'#010+
'**1i_Information'#010+
'**2iD_Return compiler date'#010+
'**2iV_Return short compiler version'#010+
- '**2iW_Return full compiler version'#010+
+ '**2iW_Return full compile','r version'#010+
'**2iSO_Return compiler OS'#010+
- '**2iSP_Return compiler host proces','sor'#010+
+ '**2iSP_Return compiler host processor'#010+
'**2iTO_Return target OS'#010+
'**2iTP_Return target processor'#010+
'**1I<x>_Add <x> to include path'#010+
'**1k<x>_Pass <x> to the linker'#010+
'**1l_Write logo'#010+
- '**1M<x>_Set language mode to <x>'#010+
+ '**1M<x>_Set language mode to <x>',#010+
'**2Mfpc_Free Pascal dialect (default)'#010+
- '**2Mobjfpc_FPC mode with Object',' Pascal support'#010+
+ '**2Mobjfpc_FPC mode with Object Pascal support'#010+
'**2Mdelphi_Delphi 7 compatibility mode'#010+
'**2Mtp_TP/BP 7.0 compatibility mode'#010+
'**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
- '**1n_Do not read the default config files'#010+
+ '**1n_Do not read the de','fault config files'#010+
'**1N<x>_Node tree optimizations'#010+
- '**2Nu_Unroll loops'#010,
+ '**2Nu_Unroll loops'#010+
'**1o<x>_Change the name of the executable produced to <x>'#010+
'**1O<x>_Optimizations:'#010+
'**2O-_Disable optimizations'#010+
'**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
- '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
- '**2O3_Level 3 opt','imizations (-O2 + slow optimizations)'#010+
+ '**2','O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
+ '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
'**2Oa<x>=<y>_Set alignment'#010+
'**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+
'values'#010+
- '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
- #010+
- '**2OW<x>_Generate whole-pro','gram optimization feedback for optimizati'+
- 'on <x>, see fpc -i for possible values'#010+
+ '**2Op<x>_Set target cpu for ','optimizing, see fpc -i for possible valu'+
+ 'es'#010+
+ '**2OW<x>_Generate whole-program optimization feedback for optimization'+
+ ' <x>, see fpc -i for possible values'#010+
'**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
'le values'#010+
- '**2Os_Optimize for size rather than speed'#010+
- '**1pg_Generate profile code for gprof ','(defines FPC_PROFILE)'#010+
+ '**2Os_Opti','mize for size rather than speed'#010+
+ '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
'**1R<x>_Assembler reading style:'#010+
'**2Rdefault_Use default assembler for target'#010+
'3*2Ratt_Read AT&T style assembler'#010+
- '3*2Rintel_Read Intel style assembler'#010+
+ '3*2Rintel_Read Intel style assembler',#010+
'6*2RMOT_Read motorola style assembler'#010+
'**1S<x>_Syntax options:'#010+
- '**2S2_S','ame as -Mobjfpc'#010+
+ '**2S2_Same as -Mobjfpc'#010+
'**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
'**2Sa_Turn on assertions'#010+
'**2Sd_Same as -Mdelphi'#010+
- '**2Se<x>_Error options. <x> is a combination of the following:'#010+
+ '**2Se<x>_Error options. <x> is a combination of the follo','wing:'#010+
'**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
- '**','3*_w : Compiler also halts after warnings'#010+
+ '**3*_w : Compiler also halts after warnings'#010+
'**3*_n : Compiler also halts after notes'#010+
'**3*_h : Compiler also halts after hints'#010+
- '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
- '**2Sh_Use ansistrings by default instead of shortstrings'#010,
+ '**2Sg_Enable LABEL and GOTO (default in -Mtp a','nd -Mdelphi)'#010+
+ '**2Sh_Use ansistrings by default instead of shortstrings'#010+
'**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
'**2Sk_Load fpcylix unit'#010+
'**2SI<x>_Set interface style to <x>'#010+
- '**3SIcom_COM compatible interface (default)'#010+
+ '**3SIcom_COM compatible interface (default',')'#010+
'**3SIcorba_CORBA compatible interface'#010+
- '**2Sm_Support macros like C (g','lobal)'#010+
+ '**2Sm_Support macros like C (global)'#010+
'**2So_Same as -Mtp'#010+
'**2Ss_Constructor name must be init (destructor must be done)'#010+
'**2St_Allow static keyword in objects'#010+
- '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
+ '**2Sx_Enable exception keywords (default in ','Delphi/ObjFPC modes)'#010+
'**1s_Do not call assembler and linker'#010+
- '**2sh_Gener','ate script to link on host'#010+
+ '**2sh_Generate script to link on host'#010+
'**2st_Generate script to link on target'#010+
'**2sr_Skip register allocation phase (use with -alr)'#010+
'**1T<x>_Target operating system:'#010+
- '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
+ '3*2Temx_OS/2 via ','EMX (including EMX/RSX extender)'#010+
'3*2Tfreebsd_FreeBSD'#010+
- '3*2Tgo32v2_Versio','n 2 of DJ Delorie DOS extender'#010+
+ '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
'3*2Tlinux_Linux'#010+
'3*2Tnetbsd_NetBSD'#010+
'3*2Tnetware_Novell Netware Module (clib)'#010+
'3*2Tnetwlibc_Novell Netware Module (libc)'#010+
'3*2Topenbsd_OpenBSD'#010+
- '3*2Tos2_OS/2 / eComStation'#010+
+ '3*','2Tos2_OS/2 / eComStation'#010+
'3*2Tsunos_SunOS/Solaris'#010+
- '3*2Tsymbian_Symbian O','S'#010+
+ '3*2Tsymbian_Symbian OS'#010+
'3*2Twatcom_Watcom compatible DOS extender'#010+
'3*2Twdosx_WDOSX DOS extender'#010+
'3*2Twin32_Windows 32 Bit'#010+
'3*2Twince_Windows CE'#010+
'4*2Tlinux_Linux'#010+
'6*2Tamiga_Commodore Amiga'#010+
- '6*2Tatari_Atari ST/STe/TT'#010+
+ '6*2Tatari','_Atari ST/STe/TT'#010+
'6*2Tlinux_Linux/m68k'#010+
- '6*2Tmacos_Macintosh m68k (not su','pported)'#010+
+ '6*2Tmacos_Macintosh m68k (not supported)'#010+
'6*2Tpalmos_PalmOS'#010+
'A*2Tlinux_Linux'#010+
'A*2Twince_Windows CE'#010+
'P*2Tamiga_AmigaOS on PowerPC'#010+
'P*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+
'P*2Tlinux_Linux on PowerPC'#010+
- 'P*2Tmacos_Mac OS (classic) on PowerPC'#010+
+ 'P*2Tmaco','s_Mac OS (classic) on PowerPC'#010+
'P*2Tmorphos_MorphOS'#010+
'S*2Tlinux_Linux'#010+
- '**1u','<x>_Undefines the symbol <x>'#010+
+ '**1u<x>_Undefines the symbol <x>'#010+
'**1U_Unit options:'#010+
'**2Un_Do not check where the unit name matches the file name'#010+
- '**2Ur_Generate release unit files (never automatically recompiled)'#010+
+ '**2Ur_Generate release unit files (never automatically recomp','iled)'#010+
'**2Us_Compile a system unit'#010+
- '**1v<x>_Be verbose. <x> is a combina','tion of the following letters:'#010+
+ '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
'**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010+
'**2*_w : Show warnings u : Show unit info'#010+
- '**2*_n : Show notes t : Show tried/used files'#010+
- '**2*_h : Show hints ',' c : Show conditionals'#010+
+ '**2*_n : Show',' notes t : Show tried/used files'#010+
+ '**2*_h : Show hints c : Show conditionals'#010+
'**2*_i : Show general info d : Show debug info'#010+
'**2*_l : Show linenumbers r : Rhide/GCC compatibility mode'#010+
- '**2*_s : Show time stamps q : Show message numbers'#010+
- '**2*_a : Sho','w everything x : Executable info (Win32 only'+
- ')'#010+
+ '**2*','_s : Show time stamps q : Show message numbers'#010+
+ '**2*_a : Show everything x : Executable info (Win32 only)'#010+
'**2*_b : Write file names messages p : Write tree.log with parse tre'+
'e'#010+
- '**2*_ with full path v : Write fpcdebug.txt with'#010+
- '**2*_ lots',' of debugging info'#010+
+ '**2*_ with full path v :',' Write fpcdebug.txt with'#010+
+ '**2*_ lots of debugging info'#010+
'**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
'3*1W<x>_Target-specific options (targets)'#010+
'A*1W<x>_Target-specific options (targets)'#010+
- 'P*1W<x>_Target-specific options (targets)'#010+
- 'p*1W<x>_Target-specific options (targe','ts)'#010+
+ 'P*1W<x>_Ta','rget-specific options (targets)'#010+
+ 'p*1W<x>_Target-specific options (targets)'#010+
'3*2Wb_Create a bundle instead of a library (Darwin)'#010+
'P*2Wb_Create a bundle instead of a library (Darwin)'#010+
'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
- '3*2WB_Create a relocatable image (Windows)'#010+
- 'A*2WB_Create a relocatable image (Win','dows, Symbian)'#010+
+ '3*2WB_Crea','te a relocatable image (Windows)'#010+
+ 'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
'3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
'A*2WC_Specify console type application (Windows)'#010+
- 'P*2WC_Specify console type application (Classic Mac OS)'#010+
- '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows',')'#010+
+ 'P*2WC_Specify console type application (Classi','c Mac OS)'#010+
+ '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
'3*2We_Use external resources (Darwin)'#010+
'P*2We_Use external resources (Darwin)'#010+
- 'p*2We_Use external resources (Darwin)'#010+
+ 'p*2We_Use external resources (','Darwin)'#010+
'3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
- '3*2WG_S','pecify graphic type application (EMX, OS/2, Windows)'#010+
+ '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
'A*2WG_Specify graphic type application (Windows)'#010+
'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
- '3*2Wi_Use internal resources (Darwin)'#010+
+ '3*2Wi_Use in','ternal resources (Darwin)'#010+
'P*2Wi_Use internal resources (Darwin)'#010+
- 'p*2Wi_','Use internal resources (Darwin)'#010+
+ 'p*2Wi_Use internal resources (Darwin)'#010+
'3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
- 'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
+ 'A*2WN_Do not generate relocation code, needed for debugging (Windows',')'+
+ #010+
'3*2WR_Generate relocation code (Windows)'#010+
- 'A*2WR_Generate relocation c','ode (Windows)'#010+
+ 'A*2WR_Generate relocation code (Windows)'#010+
'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
'3*2WX_Enable executable stack (Linux)'#010+
'A*2WX_Enable executable stack (Linux)'#010+
- 'p*2WX_Enable executable stack (Linux)'#010+
+ 'p*2WX_Enable executable',' stack (Linux)'#010+
'P*2WX_Enable executable stack (Linux)'#010+
- '**1X_Executable o','ptions:'#010+
+ '**1X_Executable options:'#010+
'**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
'ux)'#010+
'**2Xd_Do not use standard library search path (needed for cross compil'+
'e)'#010+
- '**2Xe_Use external linker'#010+
- '**2Xg_Create debuginfo in a separate file and add a debugli','nk sectio'+
- 'n to executable'#010+
+ '**2Xe_Use exter','nal linker'#010+
+ '**2Xg_Create debuginfo in a separate file and add a debuglink section '+
+ 'to executable'#010+
'**2XD_Try to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+
'**2Xi_Use internal linker'#010+
'**2Xm_Generate link map'#010+
- '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
- 's '#039'main'#039')'#010+
- '**2XP<x>_Prepend the binu','tils names with the prefix <x>'#010+
+ '**2XM<x>_Set the name of th','e '#039'main'#039' program routine (default'+
+ ' is '#039'main'#039')'#010+
+ '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
'**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
'ile, see the ld manual for more information) (BeOS, Linux)'#010+
- '**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
- ', Linux, Mac O','S, Solaris)'#010+
+ '**2XR<x>_Prepe','nd <x> to all linker search paths (BeOS, Darwin, FreeB'+
+ 'SD, Linux, Mac OS, Solaris)'#010+
'**2Xs_Strip all symbols from executable'#010+
'**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+
- '**2Xt_Link with static libraries (-static is passed to linker)'#010+
- '**2XX_Try to smartlink units (defines FPC_L','INK_SMART)'#010+
+ '**2Xt_Link with static libraries (-static is pas','sed to linker)'#010+
+ '**2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+
'**1*_'#010+
'**1?_Show this help'#010+
'**1h_Shows this help without waiting'
diff --git a/compiler/ncal.pas b/compiler/ncal.pas
index 5e75c65d7a..487444f83b 100644
--- a/compiler/ncal.pas
+++ b/compiler/ncal.pas
@@ -125,9 +125,9 @@ interface
constructor create(l:tnode; v : tprocsym;st : TSymtable; mp: tnode; callflags:tcallnodeflags);virtual;
constructor create_procvar(l,r:tnode);
constructor createintern(const name: string; params: tnode);
- constructor createinternfromunit(const unitname, procname: string; params: tnode);
+ constructor createinternfromunit(const fromunit, procname: string; params: tnode);
constructor createinternres(const name: string; params: tnode; res:tdef);
- constructor createinternresfromunit(const unitname, procname: string; params: tnode; res:tdef);
+ constructor createinternresfromunit(const fromunit, procname: string; params: tnode; res:tdef);
constructor createinternreturn(const name: string; params: tnode; returnnode : tnode);
destructor destroy;override;
constructor ppuload(t:tnodetype;ppufile:tcompilerppufile);override;
@@ -946,14 +946,14 @@ implementation
end;
- constructor tcallnode.createinternfromunit(const unitname, procname: string; params: tnode);
+ constructor tcallnode.createinternfromunit(const fromunit, procname: string; params: tnode);
var
srsym: tsym;
srsymtable: tsymtable;
begin
- if not searchsym_in_named_module(unitname,procname,srsym,srsymtable) or
+ if not searchsym_in_named_module(fromunit,procname,srsym,srsymtable) or
(srsym.typ<>procsym) then
- Message1(cg_f_unknown_compilerproc,unitname+'.'+procname);
+ Message1(cg_f_unknown_compilerproc,fromunit+'.'+procname);
create(params,tprocsym(srsym),srsymtable,nil,[]);
end;
@@ -974,11 +974,11 @@ implementation
end;
- constructor tcallnode.createinternresfromunit(const unitname, procname: string; params: tnode; res:tdef);
+ constructor tcallnode.createinternresfromunit(const fromunit, procname: string; params: tnode; res:tdef);
var
pd : tprocdef;
begin
- createinternfromunit(unitname,procname,params);
+ createinternfromunit(fromunit,procname,params);
typedef:=res;
include(callnodeflags,cnf_typedefset);
pd:=tprocdef(symtableprocentry.ProcdefList[0]);
@@ -2645,7 +2645,7 @@ implementation
{ check for hints (deprecated etc) }
if (procdefinition.typ = procdef) then
- check_hints(tprocdef(procdefinition).procsym,tprocdef(procdefinition).symoptions);
+ check_hints(tprocdef(procdefinition).procsym,tprocdef(procdefinition).symoptions,tprocdef(procdefinition).deprecatedmsg);
{ add needed default parameters }
if assigned(procdefinition) and
diff --git a/compiler/ncgcon.pas b/compiler/ncgcon.pas
index 48d3dcb8f3..a245e6b2de 100644
--- a/compiler/ncgcon.pas
+++ b/compiler/ncgcon.pas
@@ -441,10 +441,12 @@ implementation
else
begin
location.value:=swapendian(Pcardinal(value_set)^);
- location.value:= reverse_byte (location.value and $ff) or
- (reverse_byte((location.value shr 8) and $ff) shl 8) or
- (reverse_byte((location.value shr 16) and $ff) shl 16) or
- (reverse_byte((location.value shr 24) and $ff) shl 24);
+ location.value:=aint(
+ reverse_byte (location.value and $ff) or
+ (reverse_byte((location.value shr 8) and $ff) shl 8) or
+ (reverse_byte((location.value shr 16) and $ff) shl 16) or
+ (reverse_byte((location.value shr 24) and $ff) shl 24)
+ );
end;
if (target_info.endian=endian_big) then
location.value:=location.value shr (32-resultdef.size*8);
diff --git a/compiler/ncgld.pas b/compiler/ncgld.pas
index bf9d52b069..e1126fe9f6 100644
--- a/compiler/ncgld.pas
+++ b/compiler/ncgld.pas
@@ -247,7 +247,7 @@ implementation
if tabsolutevarsym(symtableentry).absseg then
location.reference.segment:=NR_FS;
{$endif i386}
- location.reference.offset:=tabsolutevarsym(symtableentry).addroffset;
+ location.reference.offset:=aint(tabsolutevarsym(symtableentry).addroffset);
end;
toasm :
location.reference.symbol:=current_asmdata.RefAsmSymbol(tabsolutevarsym(symtableentry).mangledname);
diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas
index 9c3449165b..f3ea37c92c 100644
--- a/compiler/ncgutil.pas
+++ b/compiler/ncgutil.pas
@@ -160,7 +160,7 @@ implementation
regvars,dbgbase,
pass_1,pass_2,
nbas,ncon,nld,nmem,nutils,
- tgobj,cgobj
+ tgobj,cgobj,cgcpu
{$ifdef powerpc}
, cpupi
{$endif}
@@ -2103,6 +2103,10 @@ implementation
item := TCmdStrListItem(current_procinfo.procdef.aliasnames.first);
while assigned(item) do
begin
+{$ifdef arm}
+ if current_settings.cputype in cpu_thumb2 then
+ list.concat(tai_thumb_func.create);
+{$endif arm}
{ "double link" all procedure entry symbols via .reference }
{ directives on darwin, because otherwise the linker }
{ sometimes strips the procedure if only on of the symbols }
@@ -2123,7 +2127,6 @@ implementation
previtem:=item;
item := TCmdStrListItem(item.next);
end;
-
current_procinfo.procdef.procstarttai:=tai(list.last);
end;
@@ -2271,6 +2274,7 @@ implementation
procedure gen_external_stub(list:TAsmList;pd:tprocdef;const externalname:string);
begin
+ create_codegen;
{ add the procedure to the al_procedures }
maybe_new_object_file(list);
new_section(list,sec_code,lower(pd.mangledname),current_settings.alignment.procalign);
@@ -2281,6 +2285,7 @@ implementation
list.concat(Tai_symbol.createname(pd.mangledname,AT_FUNCTION,0));
cg.g_external_wrapper(list,pd,externalname);
+ destroy_codegen;
end;
{****************************************************************************
@@ -2811,12 +2816,14 @@ implementation
i : longint;
def : tdef;
begin
+ create_codegen;
for i:=0 to st.DefList.Count-1 do
begin
def:=tdef(st.DefList[i]);
if is_class(def) then
gen_intf_wrapper(list,tobjectdef(def));
end;
+ destroy_codegen;
end;
diff --git a/compiler/ncnv.pas b/compiler/ncnv.pas
index e7f694b9d5..d0fd547909 100644
--- a/compiler/ncnv.pas
+++ b/compiler/ncnv.pas
@@ -786,9 +786,6 @@ implementation
function ttypeconvnode.typecheck_cord_to_pointer : tnode;
- var
- t : tnode;
-
begin
result:=nil;
if left.nodetype=ordconstn then
@@ -807,8 +804,14 @@ implementation
internalerror(2001020801);
{$endif} {$endif}
{$endif}
- t:=cpointerconstnode.create(TConstPtrUInt(tordconstnode(left).value.uvalue),resultdef);
- result:=t;
+
+ if not(nf_explicit in flags) then
+ if (tordconstnode(left).value.svalue=0) then
+ CGMessage(type_w_zero_to_nil)
+ else
+ { in Delphi mode, these aren't caught in compare_defs_ext }
+ IncompatibleTypes(left.resultdef,resultdef);
+ result:=cpointerconstnode.create(TConstPtrUInt(tordconstnode(left).value.uvalue),resultdef);
end
else
internalerror(200104023);
@@ -1700,12 +1703,8 @@ implementation
te_convert_l3,
te_convert_l4,
te_convert_l5:
- begin
- result := simplify;
- if assigned(result) then
- exit;
- { nothing to do }
- end;
+ { nothing to do }
+ ;
te_convert_operator :
begin
@@ -1919,9 +1918,14 @@ implementation
CGMessage(type_w_pointer_to_longint_conv_not_portable);
end;
- result := simplify;
- if assigned(result) then
- exit;
+ { tc_cord_2_pointer still requires a type check, which
+ simplify does not do }
+ if (convtype<>tc_cord_2_pointer) then
+ begin
+ result := simplify;
+ if assigned(result) then
+ exit;
+ end;
{ now call the resultdef helper to do constant folding }
result:=typecheck_call_helper(convtype);
diff --git a/compiler/ncon.pas b/compiler/ncon.pas
index 4fc6698ff5..9db3b6fe21 100644
--- a/compiler/ncon.pas
+++ b/compiler/ncon.pas
@@ -192,6 +192,7 @@ interface
{ some helper routines }
function get_ordinal_value(p : tnode) : TConstExprInt;
function get_string_value(p : tnode; is_wide : boolean = false) : TConstString;
+ function compare_strings(str1, str2: pchar) : longint;
function is_constresourcestringnode(p : tnode) : boolean;
function is_emptyset(p : tnode):boolean;
function genconstsymtree(p : tconstsym) : tnode;
@@ -254,11 +255,12 @@ implementation
if (not is_wide) then
begin
if ordValRecord.signed then
- stringVal := char(ordValRecord.svalue) + ''#0
+ stringVal := char(ordValRecord.svalue)
else
- stringVal := char(ordValRecord.uvalue) + ''#0;
- getmem(pCharVal, length(stringVal));
+ stringVal := char(ordValRecord.uvalue);
+ getmem(pCharVal, length(stringVal) + 1);
strpcopy(pCharVal, stringVal);
+ pCharVal[length(stringVal)] := #0;
get_string_value := pCharVal;
end
else
@@ -317,6 +319,25 @@ implementation
end;
end;
+
+ function compare_strings(str1, str2: pchar) : longint;
+ var
+ minlen, len1, len2: integer;
+ begin
+ len1 := length(str1);
+ len2 := length(str2);
+ if len1 < len2 then
+ minlen := len1
+ else
+ minlen := len2;
+
+ minlen := comparebyte(str1^, str2^, minlen);
+ if minlen = 0 then
+ minlen := len1 - len2;
+ Result := minlen;
+ end;
+
+
function is_constresourcestringnode(p : tnode) : boolean;
begin
is_constresourcestringnode:=(p.nodetype=loadn) and
diff --git a/compiler/nflw.pas b/compiler/nflw.pas
index 4dcdc54692..52bffce426 100644
--- a/compiler/nflw.pas
+++ b/compiler/nflw.pas
@@ -216,17 +216,22 @@ interface
ctryfinallynode : ttryfinallynodeclass;
connode : tonnodeclass;
+// for-in loop helpers
+function create_type_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+function create_string_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+function create_array_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+function create_set_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+function create_enumerator_for_in_loop(hloopvar, hloopbody, expr: tnode;
+ enumerator_get, enumerator_move: tprocdef; enumerator_current: tpropertysym): tnode;
+function create_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
implementation
uses
globtype,systems,constexp,
cutils,verbose,globals,
- symconst,paramgr,defcmp,defutil,htypechk,pass_1,
- ncal,nadd,ncon,nmem,nld,ncnv,nbas,cgobj,nutils,
- {$ifdef prefetchnext}
- ninl,
- {$endif prefetchnext}
+ symconst,symtable,paramgr,defcmp,defutil,htypechk,pass_1,
+ ncal,nadd,ncon,nmem,nld,ncnv,nbas,cgobj,nutils,ninl,nset,
{$ifdef state_tracking}
nstate,
{$endif}
@@ -234,6 +239,387 @@ implementation
;
+// for-in loop helpers
+
+function create_type_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+begin
+ result:=cfornode.create(hloopvar,
+ cinlinenode.create(in_low_x,false,expr.getcopy),
+ cinlinenode.create(in_high_x,false,expr.getcopy),
+ hloopbody,
+ false);
+end;
+
+function create_string_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+var
+ loopstatement, loopbodystatement: tstatementnode;
+ loopvar, stringvar: ttempcreatenode;
+ stringindex, loopbody, forloopnode: tnode;
+begin
+ { result is a block of statements }
+ result:=internalstatements(loopstatement);
+
+ { create a temp variable for expression }
+ stringvar := ctempcreatenode.create(
+ expr.resultdef,
+ expr.resultdef.size,
+ tt_persistent,true);
+
+ addstatement(loopstatement,stringvar);
+ addstatement(loopstatement,cassignmentnode.create(ctemprefnode.create(stringvar),expr.getcopy));
+
+ { create a loop counter: signed integer with size of string length }
+ loopvar := ctempcreatenode.create(
+ sinttype,
+ sinttype.size,
+ tt_persistent,true);
+
+ addstatement(loopstatement,loopvar);
+
+ stringindex:=ctemprefnode.create(loopvar);
+
+ loopbody:=internalstatements(loopbodystatement);
+ // for-in loop variable := string_expression[index]
+ addstatement(loopbodystatement,
+ cassignmentnode.create(hloopvar, cvecnode.create(ctemprefnode.create(stringvar),stringindex)));
+
+ { add the actual statement to the loop }
+ addstatement(loopbodystatement,hloopbody);
+
+ forloopnode:=cfornode.create(ctemprefnode.create(loopvar),
+ genintconstnode(1),
+ cinlinenode.create(in_length_x,false,ctemprefnode.create(stringvar)),
+ loopbody,
+ false);
+
+ addstatement(loopstatement,forloopnode);
+ { free the loop counter }
+ addstatement(loopstatement,ctempdeletenode.create(loopvar));
+ { free the temp variable for expression }
+ addstatement(loopstatement,ctempdeletenode.create(stringvar));
+end;
+
+function create_array_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+var
+ loopstatement, loopbodystatement: tstatementnode;
+ loopvar, arrayvar: ttempcreatenode;
+ arrayindex, lowbound, highbound, loopbody, forloopnode: tnode;
+ is_string: boolean;
+begin
+ { result is a block of statements }
+ result:=internalstatements(loopstatement);
+
+ is_string := ado_IsConstString in tarraydef(expr.resultdef).arrayoptions;
+
+ if (node_complexity(expr) > 1) and not is_open_array(expr.resultdef) then
+ begin
+ { create a temp variable for expression }
+ arrayvar := ctempcreatenode.create(
+ expr.resultdef,
+ expr.resultdef.size,
+ tt_persistent,true);
+
+ if is_string then
+ begin
+ lowbound:=genintconstnode(1);
+ highbound:=cinlinenode.create(in_length_x,false,ctemprefnode.create(arrayvar))
+ end
+ else
+ begin
+ lowbound:=cinlinenode.create(in_low_x,false,ctemprefnode.create(arrayvar));
+ highbound:=cinlinenode.create(in_high_x,false,ctemprefnode.create(arrayvar));
+ end;
+
+ addstatement(loopstatement,arrayvar);
+ addstatement(loopstatement,cassignmentnode.create(ctemprefnode.create(arrayvar),expr.getcopy));
+ end
+ else
+ begin
+ arrayvar:=nil;
+ if is_string then
+ begin
+ lowbound:=genintconstnode(1);
+ highbound:=cinlinenode.create(in_length_x,false,expr.getcopy);
+ end
+ else
+ begin
+ lowbound:=cinlinenode.create(in_low_x,false,expr.getcopy);
+ highbound:=cinlinenode.create(in_high_x,false,expr.getcopy);
+ end;
+ end;
+
+ { create a loop counter }
+ loopvar := ctempcreatenode.create(
+ tarraydef(expr.resultdef).rangedef,
+ tarraydef(expr.resultdef).rangedef.size,
+ tt_persistent,true);
+
+ addstatement(loopstatement,loopvar);
+
+ arrayindex:=ctemprefnode.create(loopvar);
+
+ loopbody:=internalstatements(loopbodystatement);
+ // for-in loop variable := array_expression[index]
+ if assigned(arrayvar) then
+ addstatement(loopbodystatement,
+ cassignmentnode.create(hloopvar,cvecnode.create(ctemprefnode.create(arrayvar),arrayindex)))
+ else
+ addstatement(loopbodystatement,
+ cassignmentnode.create(hloopvar,cvecnode.create(expr.getcopy,arrayindex)));
+
+ { add the actual statement to the loop }
+ addstatement(loopbodystatement,hloopbody);
+
+ forloopnode:=cfornode.create(ctemprefnode.create(loopvar),
+ lowbound,
+ highbound,
+ loopbody,
+ false);
+
+ addstatement(loopstatement,forloopnode);
+ { free the loop counter }
+ addstatement(loopstatement,ctempdeletenode.create(loopvar));
+ { free the temp variable for expression if needed }
+ if arrayvar<>nil then
+ addstatement(loopstatement,ctempdeletenode.create(arrayvar));
+end;
+
+function create_set_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+var
+ loopstatement, loopbodystatement: tstatementnode;
+ loopvar, setvar: ttempcreatenode;
+ loopbody, forloopnode: tnode;
+begin
+ // first check is set is empty and if it so then skip other processing
+ if not Assigned(tsetdef(expr.resultdef).elementdef) then
+ begin
+ result:=cnothingnode.create;
+ // free unused nodes
+ hloopvar.free;
+ hloopbody.free;
+ exit;
+ end;
+ { result is a block of statements }
+ result:=internalstatements(loopstatement);
+
+ { create a temp variable for expression }
+ setvar := ctempcreatenode.create(
+ expr.resultdef,
+ expr.resultdef.size,
+ tt_persistent,true);
+
+ addstatement(loopstatement,setvar);
+ addstatement(loopstatement,cassignmentnode.create(ctemprefnode.create(setvar),expr.getcopy));
+
+ { create a loop counter }
+ loopvar := ctempcreatenode.create(
+ tsetdef(expr.resultdef).elementdef,
+ tsetdef(expr.resultdef).elementdef.size,
+ tt_persistent,true);
+
+ addstatement(loopstatement,loopvar);
+
+ // if loopvar in set then
+ // begin
+ // hloopvar := loopvar
+ // for-in loop body
+ // end
+
+ loopbody:=cifnode.create(
+ cinnode.create(ctemprefnode.create(loopvar),ctemprefnode.create(setvar)),
+ internalstatements(loopbodystatement),
+ nil
+ );
+
+ addstatement(loopbodystatement,cassignmentnode.create(hloopvar,ctemprefnode.create(loopvar)));
+ { add the actual statement to the loop }
+ addstatement(loopbodystatement,hloopbody);
+
+ forloopnode:=cfornode.create(ctemprefnode.create(loopvar),
+ cinlinenode.create(in_low_x,false,ctemprefnode.create(setvar)),
+ cinlinenode.create(in_high_x,false,ctemprefnode.create(setvar)),
+ loopbody,
+ false);
+
+ addstatement(loopstatement,forloopnode);
+ { free the loop counter }
+ addstatement(loopstatement,ctempdeletenode.create(loopvar));
+ { free the temp variable for expression }
+ addstatement(loopstatement,ctempdeletenode.create(setvar));
+end;
+
+function create_enumerator_for_in_loop(hloopvar, hloopbody, expr: tnode;
+ enumerator_get, enumerator_move: tprocdef; enumerator_current: tpropertysym): tnode;
+var
+ loopstatement, loopbodystatement: tstatementnode;
+ enumvar: ttempcreatenode;
+ loopbody, whileloopnode,
+ enum_get, enum_move, enum_current, enum_get_params: tnode;
+ propaccesslist: tpropaccesslist;
+ enumerator_is_class: boolean;
+ enumerator_destructor: tprocdef;
+begin
+ { result is a block of statements }
+ result:=internalstatements(loopstatement);
+
+ enumerator_is_class := is_class(enumerator_get.returndef);
+
+ { create a temp variable for enumerator }
+ enumvar := ctempcreatenode.create(
+ enumerator_get.returndef,
+ enumerator_get.returndef.size,
+ tt_persistent,true);
+
+ addstatement(loopstatement,enumvar);
+
+ if enumerator_get.proctypeoption=potype_operator then
+ begin
+ enum_get_params:=ccallparanode.create(expr.getcopy,nil);
+ enum_get:=ccallnode.create(enum_get_params, tprocsym(enumerator_get.procsym), nil, nil, []);
+ tcallnode(enum_get).procdefinition:=enumerator_get;
+ addsymref(enumerator_get.procsym);
+ end
+ else
+ enum_get:=ccallnode.create(nil, tprocsym(enumerator_get.procsym), enumerator_get.owner, expr.getcopy, []);
+
+ addstatement(loopstatement,
+ cassignmentnode.create(
+ ctemprefnode.create(enumvar),
+ enum_get
+ ));
+
+ loopbody:=internalstatements(loopbodystatement);
+ { for-in loop variable := enumerator.current }
+ if getpropaccesslist(enumerator_current,palt_read,propaccesslist) then
+ begin
+ case propaccesslist.firstsym^.sym.typ of
+ fieldvarsym :
+ begin
+ { generate access code }
+ enum_current:=ctemprefnode.create(enumvar);
+ propaccesslist_to_node(enum_current,enumerator_current.owner,propaccesslist);
+ include(enum_current.flags,nf_isproperty);
+ end;
+ procsym :
+ begin
+ { generate the method call }
+ enum_current:=ccallnode.create(nil,tprocsym(propaccesslist.firstsym^.sym),enumerator_current.owner,ctemprefnode.create(enumvar),[]);
+ include(enum_current.flags,nf_isproperty);
+ end
+ else
+ begin
+ enum_current:=cerrornode.create;
+ Message(type_e_mismatch);
+ end;
+ end;
+ end
+ else
+ enum_current:=cerrornode.create;
+
+ addstatement(loopbodystatement,
+ cassignmentnode.create(hloopvar, enum_current));
+
+ { add the actual statement to the loop }
+ addstatement(loopbodystatement,hloopbody);
+
+ enum_move:=ccallnode.create(nil, tprocsym(enumerator_move.procsym), enumerator_move.owner, ctemprefnode.create(enumvar), []);
+ whileloopnode:=cwhilerepeatnode.create(enum_move,loopbody,true,false);
+
+ if enumerator_is_class then
+ begin
+ { insert a try-finally and call the destructor for the enumerator in the finally section }
+ enumerator_destructor:=tobjectdef(enumerator_get.returndef).Finddestructor;
+ if assigned(enumerator_destructor) then
+ begin
+ whileloopnode:=ctryfinallynode.create(
+ whileloopnode, // try node
+ ccallnode.create(nil,tprocsym(enumerator_destructor.procsym), // finally node
+ enumerator_destructor.procsym.owner,ctemprefnode.create(enumvar),[]));
+ end;
+ { if getenumerator <> nil then do the loop }
+ whileloopnode:=cifnode.create(
+ caddnode.create(unequaln, ctemprefnode.create(enumvar), cnilnode.create),
+ whileloopnode,
+ nil
+ );
+ end;
+
+ addstatement(loopstatement, whileloopnode);
+
+ if is_object(enumerator_get.returndef) then
+ begin
+ // call the object destructor too
+ enumerator_destructor:=tobjectdef(enumerator_get.returndef).Finddestructor;
+ if assigned(enumerator_destructor) then
+ begin
+ addstatement(loopstatement,
+ ccallnode.create(nil,tprocsym(enumerator_destructor.procsym),
+ enumerator_destructor.procsym.owner,ctemprefnode.create(enumvar),[]));
+ end;
+ end;
+
+ { free the temp variable for enumerator }
+ addstatement(loopstatement,ctempdeletenode.create(enumvar));
+end;
+
+function create_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
+var
+ pd, movenext: tprocdef;
+ current: tpropertysym;
+begin
+ if expr.nodetype=typen then
+ result:=create_type_for_in_loop(hloopvar, hloopbody, expr)
+ else
+ begin
+ { loop is made for an expression }
+ // search for operator first
+ pd:=search_enumerator_operator(expr.resultdef);
+ // if there is no operator then search for class/object enumerator method
+ if (pd=nil) and (expr.resultdef.typ=objectdef) then
+ pd:=tobjectdef(expr.resultdef).search_enumerator_get;
+ if pd<>nil then
+ begin
+ // seach movenext and current symbols
+ movenext:=tobjectdef(pd.returndef).search_enumerator_move;
+ if movenext = nil then
+ begin
+ result:=cerrornode.create;
+ hloopvar.free;
+ hloopbody.free;
+ Message1(sym_e_no_enumerator_move,pd.returndef.GetTypeName);
+ end
+ else
+ begin
+ current:=tpropertysym(tobjectdef(pd.returndef).search_enumerator_current);
+ if current = nil then
+ begin
+ result:=cerrornode.create;
+ hloopvar.free;
+ hloopbody.free;
+ Message1(sym_e_no_enumerator_current,pd.returndef.GetTypeName);
+ end
+ else
+ result:=create_enumerator_for_in_loop(hloopvar, hloopbody, expr, pd, movenext, current);
+ end;
+ end
+ else
+ begin
+ case expr.resultdef.typ of
+ stringdef: result:=create_string_for_in_loop(hloopvar, hloopbody, expr);
+ arraydef: result:=create_array_for_in_loop(hloopvar, hloopbody, expr);
+ setdef: result:=create_set_for_in_loop(hloopvar, hloopbody, expr);
+ else
+ begin
+ result:=cerrornode.create;
+ hloopvar.free;
+ hloopbody.free;
+ Message1(sym_e_no_enumerator,expr.resultdef.GetTypeName);
+ end;
+ end;
+ end;
+ end;
+end;
+
{****************************************************************************
TLOOPNODE
*****************************************************************************}
diff --git a/compiler/ninl.pas b/compiler/ninl.pas
index fcea7e2518..84f9279c03 100644
--- a/compiler/ninl.pas
+++ b/compiler/ninl.pas
@@ -1122,7 +1122,7 @@ implementation
{ check if codepara is valid }
if assigned(codepara) and
(
- (codepara.resultdef.typ <> orddef)
+ not is_integer(codepara.resultdef)
{$ifndef cpu64bitaddr}
or is_64bitint(codepara.resultdef)
{$endif not cpu64bitaddr}
@@ -1133,7 +1133,9 @@ implementation
end;
{ check if dest para is valid }
- if not(destpara.resultdef.typ in [orddef,floatdef,enumdef]) then
+ if not is_integer(destpara.resultdef) and
+ not is_currency(destpara.resultdef) and
+ not(destpara.resultdef.typ in [floatdef,enumdef]) then
begin
CGMessagePos(destpara.fileinfo,type_e_integer_or_real_expr_expected);
exit;
diff --git a/compiler/nobj.pas b/compiler/nobj.pas
index ef076ae168..c881c5c440 100644
--- a/compiler/nobj.pas
+++ b/compiler/nobj.pas
@@ -271,6 +271,11 @@ implementation
{ compare parameter types only, no specifiers yet }
hasequalpara:=(compare_paras(vmtpd.paras,pd.paras,cp_none,[])>=te_equal);
+ { check that we are not trying to override a final method }
+ if (po_finalmethod in vmtpd.procoptions) and
+ hasequalpara and (po_overridingmethod in pd.procoptions) and is_class(_class) then
+ MessagePos1(pd.fileinfo,parser_e_final_can_no_be_overridden,pd.fullprocname(false))
+ else
{ old definition has virtual
new definition has no virtual or override }
if (po_virtualmethod in vmtpd.procoptions) and
@@ -527,7 +532,7 @@ implementation
timpls = array[0..1000] of longint;
pimpls = ^timpls;
var
- equals: pequals;
+ aequals: pequals;
compats: pcompintfs;
impls: pimpls;
ImplIntfCount,
@@ -541,10 +546,10 @@ implementation
if ImplIntfCount>=High(tequals) then
Internalerror(200006135);
getmem(compats,sizeof(tcompintfentry)*ImplIntfCount);
- getmem(equals,sizeof(longint)*ImplIntfCount);
+ getmem(aequals,sizeof(longint)*ImplIntfCount);
getmem(impls,sizeof(longint)*ImplIntfCount);
filldword(compats^,(sizeof(tcompintfentry) div sizeof(dword))*ImplIntfCount,dword(-1));
- filldword(equals^,ImplIntfCount,dword(-1));
+ filldword(aequals^,ImplIntfCount,dword(-1));
filldword(impls^,ImplIntfCount,dword(-1));
{ ismergepossible is a containing relation
meaning of ismergepossible(a,b,w) =
@@ -563,8 +568,8 @@ implementation
if cij and cji then { i equal j }
begin
{ get minimum index of equal }
- if equals^[j]=-1 then
- equals^[j]:=i;
+ if aequals^[j]=-1 then
+ aequals^[j]:=i;
end
else if cij then
begin
@@ -601,8 +606,8 @@ implementation
begin
if compats^[impls^[i]].compintf<>-1 then
impls^[i]:=compats^[impls^[i]].compintf
- else if equals^[impls^[i]]<>-1 then
- impls^[i]:=equals^[impls^[i]]
+ else if aequals^[impls^[i]]<>-1 then
+ impls^[i]:=aequals^[impls^[i]]
else
inc(k);
end;
@@ -614,7 +619,7 @@ implementation
ImplIntfI.VtblImplIntf:=TImplementedInterface(_class.ImplementedInterfaces[impls^[i]]);
end;
freemem(compats);
- freemem(equals);
+ freemem(aequals);
freemem(impls);
end;
@@ -1452,10 +1457,7 @@ implementation
{ pointer to field table }
current_asmdata.asmlists[al_globals].concat(Tai_const.Create_sym(fieldtablelabel));
{ pointer to type info of published section }
- if (oo_can_have_published in _class.objectoptions) then
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_sym(RTTIWriter.get_rtti_label(_class,fullrtti)))
- else
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_sym(nil));
+ current_asmdata.asmlists[al_globals].concat(Tai_const.Create_sym(RTTIWriter.get_rtti_label(_class,fullrtti)));
{ inittable for con-/destruction }
if _class.members_need_inittable then
current_asmdata.asmlists[al_globals].concat(Tai_const.Create_sym(RTTIWriter.get_rtti_label(_class,initrtti)))
diff --git a/compiler/nset.pas b/compiler/nset.pas
index f9f95b54fb..59fa96e13e 100644
--- a/compiler/nset.pas
+++ b/compiler/nset.pas
@@ -766,7 +766,7 @@ implementation
condit := caddnode.create(
equaln, left.getcopy, cstringconstnode.createstr(labtree^._low_str));
- if (strcomp(labtree^._low_str, labtree^._high_str) <> 0) then
+ if (compare_strings(labtree^._low_str, labtree^._high_str) <> 0) then
begin
condit.nodetype := gten;
condit := caddnode.create(
@@ -791,10 +791,17 @@ implementation
init_block:=nil;
expectloc:=LOC_VOID;
+ { evalutes the case expression }
+ firstpass(left);
+ set_varstate(left,vs_read,[vsf_must_be_valid]);
+ if codegenerror then
+ exit;
+
{ Load caseexpr into temp var if complex. }
{ No need to do this for ordinal, because }
{ in that case caseexpr is generated once }
- if (labels^.label_type = ltConstString) and (not valid_for_addr(left, false)) then
+ if (labels^.label_type = ltConstString) and (not valid_for_addr(left, false)) and
+ (blocks.count > 0) then
begin
init_block := internalstatements(stmt);
tempcaseexpr :=
@@ -811,12 +818,6 @@ implementation
typecheckpass(left);
end;
- { evalutes the case expression }
- firstpass(left);
- set_varstate(left,vs_read,[vsf_must_be_valid]);
- if codegenerror then
- exit;
-
{ first case }
for i:=0 to blocks.count-1 do
firstpass(pcaseblock(blocks[i])^.statement);
@@ -1065,7 +1066,7 @@ implementation
if (str_type in [cst_widestring, cst_unicodestring]) then
result := comparewidestrings(pcompilerwidestring(l), pcompilerwidestring(h))
else
- result := strcomp(l, h);
+ result := compare_strings(l, h);
end;
var
diff --git a/compiler/nutils.pas b/compiler/nutils.pas
index 9dccc3fcf1..8e8c828ce3 100644
--- a/compiler/nutils.pas
+++ b/compiler/nutils.pas
@@ -86,6 +86,7 @@ interface
containing no code }
function has_no_code(n : tnode) : boolean;
+ function getpropaccesslist(propsym:tpropertysym; pap:tpropaccesslisttypes;out propaccesslist:tpropaccesslist):boolean;
procedure propaccesslist_to_node(var p1:tnode;st:TSymtable;pl:tpropaccesslist);
function node_to_propaccesslist(p1:tnode):tpropaccesslist;
@@ -344,6 +345,10 @@ implementation
var
pd : tprocdef;
begin
+ result:=nil;
+ { is not assigned while parsing a property }
+ if not assigned(current_procinfo) then
+ exit;
{ we can't use searchsym here, because the
symtablestack is not fully setup when pass1
is run for nested procedures }
@@ -924,6 +929,25 @@ implementation
end;
+ function getpropaccesslist(propsym:tpropertysym; pap:tpropaccesslisttypes;out propaccesslist:tpropaccesslist):boolean;
+ var
+ hpropsym : tpropertysym;
+ begin
+ result:=false;
+ { find property in the overriden list }
+ hpropsym:=propsym;
+ repeat
+ propaccesslist:=hpropsym.propaccesslist[pap];
+ if not propaccesslist.empty then
+ begin
+ result:=true;
+ exit;
+ end;
+ hpropsym:=hpropsym.overridenpropsym;
+ until not assigned(hpropsym);
+ end;
+
+
procedure propaccesslist_to_node(var p1:tnode;st:TSymtable;pl:tpropaccesslist);
var
plist : ppropaccesslistitem;
diff --git a/compiler/options.pas b/compiler/options.pas
index 06dca5bc61..10bcb5b65d 100644
--- a/compiler/options.pas
+++ b/compiler/options.pas
@@ -82,8 +82,7 @@ uses
comphook,
symtable,scanner,rabase,
wpobase,
- i_bsd
- ;
+ i_bsd;
const
page_size = 24;
diff --git a/compiler/pbase.pas b/compiler/pbase.pas
index 3ad1657f1c..178ace0370 100644
--- a/compiler/pbase.pas
+++ b/compiler/pbase.pas
@@ -90,7 +90,7 @@ interface
function try_consume_unitsym(var srsym:tsym;var srsymtable:TSymtable;var tokentoconsume : ttoken):boolean;
- function try_consume_hintdirective(var symopt:tsymoptions):boolean;
+ function try_consume_hintdirective(var symopt:tsymoptions; var deprecatedmsg:pshortstring):boolean;
{ just for an accurate position of the end of a procedure (PM) }
var
@@ -194,7 +194,7 @@ implementation
try_consume_unitsym(srsym,srsymtable,t);
{ if nothing found give error and return errorsym }
if assigned(srsym) then
- check_hints(srsym,srsym.symoptions)
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg)
else
begin
identifier_not_found(orgpattern);
@@ -227,7 +227,7 @@ implementation
try_consume_unitsym(srsym,srsymtable,t);
{ if nothing found give error and return errorsym }
if assigned(srsym) then
- check_hints(srsym,srsym.symoptions)
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg)
else
begin
identifier_not_found(orgpattern);
@@ -282,12 +282,15 @@ implementation
end;
- function try_consume_hintdirective(var symopt:tsymoptions):boolean;
+ function try_consume_hintdirective(var symopt:tsymoptions; var deprecatedmsg:pshortstring):boolean;
+ var
+ last_is_deprecated:boolean;
begin
try_consume_hintdirective:=false;
if not(m_hintdirective in current_settings.modeswitches) then
exit;
repeat
+ last_is_deprecated:=false;
case idtoken of
_LIBRARY :
begin
@@ -298,6 +301,7 @@ implementation
begin
include(symopt,sp_hint_deprecated);
try_consume_hintdirective:=true;
+ last_is_deprecated:=true;
end;
_EXPERIMENTAL :
begin
@@ -318,6 +322,15 @@ implementation
break;
end;
consume(Token);
+ { handle deprecated message }
+ if ((token=_CSTRING) or (token=_CCHAR)) and last_is_deprecated then
+ begin
+ if deprecatedmsg<>nil then
+ internalerror(200910181);
+ deprecatedmsg:=stringdup(pattern);
+ consume(token);
+ include(symopt,sp_has_deprecated_msg);
+ end;
until false;
end;
diff --git a/compiler/pdecl.pas b/compiler/pdecl.pas
index edde0940bb..b4b7f80f21 100644
--- a/compiler/pdecl.pas
+++ b/compiler/pdecl.pas
@@ -160,6 +160,7 @@ implementation
hdef : tdef;
sym : tsym;
dummysymoptions : tsymoptions;
+ deprecatedmsg : pshortstring;
storetokenpos,filepos : tfileposinfo;
old_block_type : tblock_type;
skipequal : boolean;
@@ -181,12 +182,16 @@ implementation
sym:=readconstant(orgname,filepos);
{ Support hint directives }
dummysymoptions:=[];
- try_consume_hintdirective(dummysymoptions);
+ deprecatedmsg:=nil;
+ try_consume_hintdirective(dummysymoptions,deprecatedmsg);
if assigned(sym) then
begin
sym.symoptions:=sym.symoptions+dummysymoptions;
+ sym.deprecatedmsg:=deprecatedmsg;
symtablestack.top.insert(sym);
- end;
+ end
+ else
+ stringdispose(deprecatedmsg);
consume(_SEMICOLON);
end;
@@ -475,7 +480,7 @@ implementation
case hdef.typ of
pointerdef :
begin
- try_consume_hintdirective(newtype.symoptions);
+ try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg);
consume(_SEMICOLON);
if try_to_consume(_FAR) then
begin
@@ -488,25 +493,25 @@ implementation
{ in case of type renaming, don't parse proc directives }
if istyperenaming then
begin
- try_consume_hintdirective(newtype.symoptions);
+ try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg);
consume(_SEMICOLON);
end
else
begin
if not check_proc_directive(true) then
begin
- try_consume_hintdirective(newtype.symoptions);
+ try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg);
consume(_SEMICOLON);
end;
parse_var_proc_directives(tsym(newtype));
handle_calling_convention(tprocvardef(hdef));
- if try_consume_hintdirective(newtype.symoptions) then
+ if try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg) then
consume(_SEMICOLON);
end;
end;
objectdef :
begin
- try_consume_hintdirective(newtype.symoptions);
+ try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg);
consume(_SEMICOLON);
{ we have to know whether the class or protocol is
@@ -534,16 +539,15 @@ implementation
}
if is_objc_class_or_protocol(hdef) then
tobjectdef(hdef).finish_objc_data;
-
end;
recorddef :
begin
- try_consume_hintdirective(newtype.symoptions);
+ try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg);
consume(_SEMICOLON);
end;
else
begin
- try_consume_hintdirective(newtype.symoptions);
+ try_consume_hintdirective(newtype.symoptions,newtype.deprecatedmsg);
consume(_SEMICOLON);
end;
end;
@@ -618,6 +622,7 @@ implementation
orgname : TIDString;
p : tnode;
dummysymoptions : tsymoptions;
+ deprecatedmsg : pshortstring;
storetokenpos,filepos : tfileposinfo;
old_block_type : tblock_type;
sp : pchar;
@@ -666,12 +671,16 @@ implementation
current_tokenpos:=storetokenpos;
{ Support hint directives }
dummysymoptions:=[];
- try_consume_hintdirective(dummysymoptions);
+ deprecatedmsg:=nil;
+ try_consume_hintdirective(dummysymoptions,deprecatedmsg);
if assigned(sym) then
begin
sym.symoptions:=sym.symoptions+dummysymoptions;
+ sym.deprecatedmsg:=deprecatedmsg;
symtablestack.top.insert(sym);
- end;
+ end
+ else
+ stringdispose(deprecatedmsg);
consume(_SEMICOLON);
p.free;
end;
diff --git a/compiler/pdecobj.pas b/compiler/pdecobj.pas
index 135ad56c80..244db7d64e 100644
--- a/compiler/pdecobj.pas
+++ b/compiler/pdecobj.pas
@@ -108,9 +108,34 @@ implementation
end;
consume(_SEMICOLON);
end;
+ { parse possible enumerator modifier }
+ if try_to_consume(_ENUMERATOR) then
+ begin
+ if (token = _ID) then
+ begin
+ if pattern='CURRENT' then
+ begin
+ if oo_has_enumerator_current in current_objectdef.objectoptions then
+ message(parser_e_only_one_enumerator_current);
+ if not p.propaccesslist[palt_read].empty then
+ begin
+ include(current_objectdef.objectoptions,oo_has_enumerator_current);
+ include(p.propoptions,ppo_enumerator_current);
+ end
+ else
+ Message(parser_e_enumerator_current_is_not_valid) // property has no reader
+ end
+ else
+ Message1(parser_e_invalid_enumerator_identifier, pattern);
+ consume(token);
+ end
+ else
+ Message(parser_e_enumerator_identifier_required);
+ consume(_SEMICOLON);
+ end;
{ hint directives, these can be separated by semicolons here,
that needs to be handled here with a loop (PFV) }
- while try_consume_hintdirective(p.symoptions) do
+ while try_consume_hintdirective(p.symoptions,p.deprecatedmsg) do
Consume(_SEMICOLON);
end;
@@ -257,6 +282,24 @@ implementation
p.free;
end;
+ procedure parse_object_options;
+ begin
+ if current_objectdef.objecttype = odt_class then
+ begin
+ while true do
+ begin
+ if try_to_consume(_ABSTRACT) then
+ include(current_objectdef.objectoptions,oo_is_abstract)
+ else
+ if try_to_consume(_SEALED) then
+ include(current_objectdef.objectoptions,oo_is_sealed)
+ else
+ break;
+ end;
+ if [oo_is_abstract, oo_is_sealed] * current_objectdef.objectoptions = [oo_is_abstract, oo_is_sealed] then
+ Message(parser_e_abstract_and_sealed_conflict);
+ end;
+ end;
procedure parse_parent_classes;
var
@@ -299,7 +342,10 @@ implementation
end
else
Message(parser_e_mix_of_classes_and_objects);
- end;
+ end
+ else
+ if oo_is_sealed in childof.objectoptions then
+ Message1(parser_e_sealed_descendant,childof.typename);
odt_interfacecorba,
odt_interfacecom:
begin
@@ -450,12 +496,19 @@ implementation
procedure maybe_parse_hint_directives(pd:tprocdef);
var
dummysymoptions : tsymoptions;
+ deprecatedmsg : pshortstring;
begin
dummysymoptions:=[];
- while try_consume_hintdirective(dummysymoptions) do
+ deprecatedmsg:=nil;
+ while try_consume_hintdirective(dummysymoptions,deprecatedmsg) do
Consume(_SEMICOLON);
if assigned(pd) then
- pd.symoptions:=pd.symoptions+dummysymoptions;
+ begin
+ pd.symoptions:=pd.symoptions+dummysymoptions;
+ pd.deprecatedmsg:=deprecatedmsg;
+ end
+ else
+ stringdispose(deprecatedmsg);
end;
var
@@ -821,6 +874,9 @@ implementation
end
else
begin
+ { parse list of options (abstract / sealed) }
+ parse_object_options;
+
{ parse list of parent classes }
parse_parent_classes;
diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas
index 59f9f25e73..764d26b900 100644
--- a/compiler/pdecsub.pas
+++ b/compiler/pdecsub.pas
@@ -423,10 +423,11 @@ implementation
old_block_type : tblock_type;
currparast : tparasymtable;
parseprocvar : tppv;
- explicit_paraloc : boolean;
locationstr : string;
paranr : integer;
dummytype : ttypesym;
+ explicit_paraloc,
+ need_array: boolean;
begin
old_block_type:=block_type;
explicit_paraloc:=false;
@@ -525,7 +526,16 @@ implementation
begin
consume(_COLON);
{ check for an open array }
- if token=_ARRAY then
+ need_array:=false;
+ { bitpacked open array are not yet supported }
+ if (token=_PACKED) and
+ not(cs_bitpacking in current_settings.localswitches) then
+ begin
+ consume(_PACKED);
+ need_array:=true;
+ end;
+ if (token=_ARRAY) or
+ need_array then
begin
consume(_ARRAY);
consume(_OF);
@@ -1089,17 +1099,22 @@ implementation
end
else
begin
+ { Use the dummy NOTOKEN that is also declared
+ for the overloaded_operator[] }
+ optoken:=NOTOKEN;
case token of
_CARET:
Message1(parser_e_overload_operator_failed,'**');
+ _ID:
+ if idtoken = _ENUMERATOR then
+ optoken := _OP_ENUMERATOR
+ else
+ Message1(parser_e_overload_operator_failed,'');
_UNEQUAL:
Message1(parser_e_overload_operator_failed,'=');
else
Message1(parser_e_overload_operator_failed,'');
end;
- { Use the dummy NOTOKEN that is also declared
- for the overloaded_operator[] }
- optoken:=NOTOKEN;
end;
consume(token);
parse_proc_head(aclass,potype_operator,pd);
@@ -1284,6 +1299,9 @@ procedure pd_abstract(pd:tabstractprocdef);
begin
if pd.typ<>procdef then
internalerror(200304269);
+ if oo_is_sealed in tprocdef(pd)._class.objectoptions then
+ Message(parser_e_sealed_class_cannot_have_abstract_methods)
+ else
if (po_virtualmethod in pd.procoptions) then
include(pd.procoptions,po_abstractmethod)
else
@@ -1292,6 +1310,44 @@ begin
tprocdef(pd).forwarddef:=false;
end;
+procedure pd_final(pd:tabstractprocdef);
+begin
+ if pd.typ<>procdef then
+ internalerror(200910170);
+ if (po_virtualmethod in pd.procoptions) then
+ include(pd.procoptions,po_finalmethod)
+ else
+ Message(parser_e_only_virtual_methods_final);
+end;
+
+procedure pd_enumerator(pd:tabstractprocdef);
+begin
+ if pd.typ<>procdef then
+ internalerror(200910250);
+ if (token = _ID) then
+ begin
+ if pattern='MOVENEXT' then
+ begin
+ if oo_has_enumerator_movenext in tprocdef(pd)._class.objectoptions then
+ message(parser_e_only_one_enumerator_movenext);
+ pd.calcparas;
+ if (pd.proctypeoption = potype_function) and is_boolean(pd.returndef) and
+ (pd.minparacount = 0) then
+ begin
+ include(tprocdef(pd)._class.objectoptions, oo_has_enumerator_movenext);
+ include(pd.procoptions,po_enumerator_movenext);
+ end
+ else
+ Message(parser_e_enumerator_movenext_is_not_valid)
+ end
+ else
+ Message1(parser_e_invalid_enumerator_identifier, pattern);
+ consume(token);
+ end
+ else
+ Message(parser_e_enumerator_identifier_required);
+end;
+
procedure pd_virtual(pd:tabstractprocdef);
{$ifdef WITHDMT}
var
@@ -1376,6 +1432,8 @@ begin
if not is_class(tprocdef(pd)._class) and
not is_objc_class_or_protocol(tprocdef(pd)._class) then
Message(parser_e_msg_only_for_classes);
+ if ([po_msgstr,po_msgint]*pd.procoptions)<>[] then
+ Message(parser_e_multiple_messages);
{ check parameter type }
if not is_objc_class_or_protocol(tprocdef(pd)._class) then
begin
@@ -1424,7 +1482,7 @@ procedure pd_reintroduce(pd:tabstractprocdef);
begin
if pd.typ<>procdef then
internalerror(200401211);
- if not(is_class_or_interface(tprocdef(pd)._class)) then
+ if not(is_class_or_interface_or_object(tprocdef(pd)._class)) then
Message(parser_e_no_object_reintroduce);
end;
@@ -1700,7 +1758,7 @@ type
end;
const
{Should contain the number of procedure directives we support.}
- num_proc_directives=40;
+ num_proc_directives=42;
proc_direcdata:array[1..num_proc_directives] of proc_dir_rec=
(
(
@@ -1813,6 +1871,15 @@ const
mutexclpotype : [];
mutexclpo : [po_external]
),(
+ idtok:_FINAL;
+ pd_flags : [pd_interface,pd_object,pd_notobjintf];
+ handler : @pd_final;
+ pocall : pocall_none;
+ pooption : [po_finalmethod];
+ mutexclpocall : [pocall_internproc];
+ mutexclpotype : [];
+ mutexclpo : [po_exports,po_interrupt,po_external,po_inline]
+ ),(
idtok:_FORWARD;
pd_flags : [pd_implemen,pd_notobject,pd_notobjintf];
handler : @pd_forward;
@@ -2075,6 +2142,15 @@ const
{ allowed for external cpp classes }
mutexclpotype : [{potype_constructor,potype_destructor}];
mutexclpo : [po_public,po_exports,po_interrupt,po_assembler,po_inline]
+ ),(
+ idtok:_ENUMERATOR;
+ pd_flags : [pd_interface,pd_object];
+ handler : @pd_enumerator;
+ pocall : pocall_none;
+ pooption : [];
+ mutexclpocall : [pocall_internproc];
+ mutexclpotype : [];
+ mutexclpo : [po_exports,po_interrupt,po_external,po_inline]
)
);
@@ -2801,6 +2877,11 @@ const
fwpd.fileinfo:=currpd.fileinfo;
if assigned(fwpd.funcretsym) then
fwpd.funcretsym.fileinfo:=currpd.fileinfo;
+ if assigned(currpd.deprecatedmsg) then
+ begin
+ stringdispose(fwpd.deprecatedmsg);
+ fwpd.deprecatedmsg:=stringdup(currpd.deprecatedmsg^);
+ end;
{ import names }
if assigned(currpd.import_dll) then
begin
diff --git a/compiler/pdecvar.pas b/compiler/pdecvar.pas
index 90094677e0..cd968e42e3 100644
--- a/compiler/pdecvar.pas
+++ b/compiler/pdecvar.pas
@@ -88,6 +88,9 @@ implementation
searchsym(pattern,sym,srsymtable);
if assigned(sym) then
begin
+ if assigned(aclass) and
+ not is_visible_for_object(sym,aclass) then
+ Message(parser_e_cant_access_private_member);
case sym.typ of
fieldvarsym :
begin
@@ -1137,6 +1140,7 @@ implementation
allowdefaultvalue,
hasdefaultvalue : boolean;
hintsymoptions : tsymoptions;
+ deprecatedmsg : pshortstring;
old_block_type : tblock_type;
begin
old_block_type:=block_type;
@@ -1214,12 +1218,16 @@ implementation
{ try to parse the hint directives }
hintsymoptions:=[];
- try_consume_hintdirective(hintsymoptions);
+ deprecatedmsg:=nil;
+ try_consume_hintdirective(hintsymoptions,deprecatedmsg);
for i:=0 to sc.count-1 do
begin
vs:=tabstractvarsym(sc[i]);
vs.symoptions := vs.symoptions + hintsymoptions;
+ if deprecatedmsg<>nil then
+ vs.deprecatedmsg:=stringdup(deprecatedmsg^);
end;
+ stringdispose(deprecatedmsg);
{ Handling of Delphi typed const = initialized vars }
if allowdefaultvalue and
@@ -1315,6 +1323,7 @@ implementation
offset : longint;
uniondef : trecorddef;
hintsymoptions : tsymoptions;
+ deprecatedmsg : pshortstring;
semicoloneaten: boolean;
is_first_field: boolean;
{$if defined(powerpc) or defined(powerpc64)}
@@ -1402,7 +1411,8 @@ implementation
{ try to parse the hint directives }
hintsymoptions:=[];
- try_consume_hintdirective(hintsymoptions);
+ deprecatedmsg:=nil;
+ try_consume_hintdirective(hintsymoptions,deprecatedmsg);
{ mark first field }
if (is_first_field) then
@@ -1418,7 +1428,10 @@ implementation
fieldvs.vardef:=hdef;
{ insert any additional hint directives }
fieldvs.symoptions := fieldvs.symoptions + hintsymoptions;
+ if deprecatedmsg<>nil then
+ fieldvs.deprecatedmsg:=stringdup(deprecatedmsg^);
end;
+ stringdispose(deprecatedmsg);
{ Records and objects can't have default values }
{ for a record there doesn't need to be a ; before the END or ) }
diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas
index 4f774eb549..dffa594872 100644
--- a/compiler/pexpr.pas
+++ b/compiler/pexpr.pas
@@ -1028,25 +1028,6 @@ implementation
membercall : boolean;
callflags : tcallnodeflags;
propaccesslist : tpropaccesslist;
-
- function getpropaccesslist(pap:tpropaccesslisttypes):boolean;
- var
- hpropsym : tpropertysym;
- begin
- result:=false;
- { find property in the overriden list }
- hpropsym:=propsym;
- repeat
- propaccesslist:=hpropsym.propaccesslist[pap];
- if not propaccesslist.empty then
- begin
- result:=true;
- exit;
- end;
- hpropsym:=hpropsym.overridenpropsym;
- until not assigned(hpropsym);
- end;
-
begin
{ property parameters? read them only if the property really }
{ has parameters }
@@ -1069,7 +1050,7 @@ implementation
{ if not(afterassignment) and not(in_args) then }
if token=_ASSIGNMENT then
begin
- if getpropaccesslist(palt_write) then
+ if getpropaccesslist(propsym,palt_write,propaccesslist) then
begin
case propaccesslist.firstsym^.sym.typ of
procsym :
@@ -1119,7 +1100,7 @@ implementation
end
else
begin
- if getpropaccesslist(palt_read) then
+ if getpropaccesslist(propsym,palt_read,propaccesslist) then
begin
case propaccesslist.firstsym^.sym.typ of
fieldvarsym :
@@ -1212,7 +1193,7 @@ implementation
static_name:=lower(sym.owner.name^)+'_'+sym.name;
searchsym_in_class(tobjectdef(sym.owner.defowner),tobjectdef(sym.owner.defowner),static_name,sym,srsymtable);
if assigned(sym) then
- check_hints(sym,sym.symoptions);
+ check_hints(sym,sym.symoptions,sym.deprecatedmsg);
p1.free;
p1:=nil;
{ static syms are always stored as absolutevarsym to handle scope and storage properly }
@@ -1338,7 +1319,7 @@ implementation
end;
{ if nothing found give error and return errorsym }
if assigned(srsym) then
- check_hints(srsym,srsym.symoptions)
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg)
else
begin
identifier_not_found(orgstoredpattern);
@@ -1457,7 +1438,7 @@ implementation
{ search also in inherited methods }
searchsym_in_class(tobjectdef(hdef),current_objectdef,pattern,srsym,srsymtable);
if assigned(srsym) then
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
consume(_ID);
do_member_read(tobjectdef(hdef),false,srsym,p1,again,[]);
end
@@ -1477,7 +1458,7 @@ implementation
srsym:=search_class_member(tobjectdef(hdef),pattern);
if assigned(srsym) then
begin
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
if not(getaddr) and not(sp_static in srsym.symoptions) then
Message(sym_e_only_static_in_static)
else
@@ -1507,7 +1488,7 @@ implementation
srsym:=search_class_member(tobjectdef(hdef),pattern);
if assigned(srsym) then
begin
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
consume(_ID);
do_member_read(tobjectdef(hdef),getaddr,srsym,p1,again,[]);
end
@@ -2007,7 +1988,7 @@ implementation
if assigned(srsym) and
(srsym.typ=fieldvarsym) then
begin
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
p1:=csubscriptnode.create(srsym,p1)
end
else
@@ -2063,7 +2044,7 @@ implementation
searchsym_in_class(classh,classh,pattern,srsym,srsymtable);
if assigned(srsym) then
begin
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
consume(_ID);
do_member_read(classh,getaddr,srsym,p1,again,[]);
end
@@ -2087,7 +2068,7 @@ implementation
searchsym_in_class(classh,classh,pattern,srsym,srsymtable);
if assigned(srsym) then
begin
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
consume(_ID);
do_member_read(classh,getaddr,srsym,p1,again,[]);
end
@@ -2280,7 +2261,7 @@ implementation
end;
if assigned(srsym) then
begin
- check_hints(srsym,srsym.symoptions);
+ check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);
{ load the procdef from the inherited class and
not from self }
case srsym.typ of
diff --git a/compiler/powerpc/cgcpu.pas b/compiler/powerpc/cgcpu.pas
index ca573757b5..a82e38336b 100644
--- a/compiler/powerpc/cgcpu.pas
+++ b/compiler/powerpc/cgcpu.pas
@@ -115,6 +115,7 @@ unit cgcpu;
procedure a_op64_reg_reg_reg(list: TAsmList;op:TOpCG;size : tcgsize;regsrc1,regsrc2,regdst : tregister64);override;
end;
+ procedure create_codegen;
const
TOpCG2AsmOpConstLo: Array[topcg] of TAsmOp = (A_NONE,A_MR,A_ADDI,A_ANDI_,A_DIVWU,
@@ -1870,7 +1871,10 @@ const
end;
-begin
- cg := tcgppc.create;
- cg64 :=tcg64fppc.create;
+ procedure create_codegen;
+ begin
+ cg := tcgppc.create;
+ cg64 :=tcg64fppc.create;
+ end;
+
end.
diff --git a/compiler/powerpc64/cgcpu.pas b/compiler/powerpc64/cgcpu.pas
index c2f97fd401..ba6d75b994 100644
--- a/compiler/powerpc64/cgcpu.pas
+++ b/compiler/powerpc64/cgcpu.pas
@@ -140,6 +140,8 @@ type
procedure profilecode_savepara(para : tparavarsym; list : TAsmList);
procedure profilecode_restorepara(para : tparavarsym; list : TAsmList);
end;
+
+ procedure create_codegen;
const
TShiftOpCG2AsmOpConst : array[boolean, OP_SAR..OP_SHR] of TAsmOp = (
@@ -2158,6 +2160,10 @@ begin
cg.a_load_ref_reg(list, OS_INT, OS_INT, ref, reg);
end;
+
+procedure create_codegen;
begin
cg := tcgppc.create;
+end;
+
end.
diff --git a/compiler/pstatmnt.pas b/compiler/pstatmnt.pas
index 589e504a91..570a2a3295 100644
--- a/compiler/pstatmnt.pas
+++ b/compiler/pstatmnt.pas
@@ -183,8 +183,8 @@ implementation
end;
hl1:=0;
hl2:=0;
- sl1:='';
- sl2:='';
+ sl1:=nil;
+ sl2:=nil;
if (p.nodetype=rangen) then
begin
{ type check for string case statements }
@@ -197,7 +197,7 @@ implementation
if (
(is_wide_or_unicode_string(casedef) and (
comparewidestrings(pcompilerwidestring(sl1), pcompilerwidestring(sl2)) > 0)) or
- ((not is_wide_or_unicode_string(casedef)) and (strcomp(sl1, sl2) > 0))) then
+ ((not is_wide_or_unicode_string(casedef)) and (compare_strings(sl1, sl2) > 0))) then
CGMessage(parser_e_case_lower_less_than_upper_bound);
end
{ type checking for ordinal case statements }
@@ -245,6 +245,29 @@ implementation
end;
end;
p.free;
+ if caseofstring then
+ begin
+ if is_wide_or_unicode_string(casedef) then
+ begin
+ if assigned(sl1) then
+ donewidestring(pcompilerwidestring(sl1));
+ if assigned(sl2) then
+ donewidestring(pcompilerwidestring(sl2));
+ end
+ else
+ begin
+ if assigned(sl1) then
+ begin
+ freemem(sl1);
+ sl1 := nil;
+ end;
+ if assigned(sl2) then
+ begin
+ freemem(sl2);
+ sl2 := nil;
+ end;
+ end;
+ end;
if token=_COMMA then
consume(_COMMA)
else
@@ -340,150 +363,177 @@ implementation
{$endif not cpu64bitaddr}
end;
- var
- hp,
- hloopvar,
- hblock,
- hto,hfrom : tnode;
- backward : boolean;
- loopvarsym : tabstractvarsym;
- begin
- { parse loop header }
- consume(_FOR);
-
- hloopvar:=factor(false);
- valid_for_loopvar(hloopvar,true);
-
- { Check loop variable }
- loopvarsym:=nil;
-
- { variable must be an ordinal, int64 is not allowed for 32bit targets }
- if not(is_ordinal(hloopvar.resultdef))
-{$ifndef cpu64bitaddr}
- or is_64bitint(hloopvar.resultdef)
-{$endif not cpu64bitaddr}
- then
- MessagePos(hloopvar.fileinfo,type_e_ordinal_expr_expected);
-
- hp:=hloopvar;
- while assigned(hp) and
- (
- { record/object fields and array elements are allowed }
- { in tp7 mode only }
- (
- (m_tp7 in current_settings.modeswitches) and
+ function for_loop_create(hloopvar: tnode): tnode;
+ var
+ hp,
+ hblock,
+ hto,hfrom : tnode;
+ backward : boolean;
+ loopvarsym : tabstractvarsym;
+ begin
+ { Check loop variable }
+ loopvarsym:=nil;
+
+ { variable must be an ordinal, int64 is not allowed for 32bit targets }
+ if not(is_ordinal(hloopvar.resultdef))
+ {$ifndef cpu64bitaddr}
+ or is_64bitint(hloopvar.resultdef)
+ {$endif not cpu64bitaddr}
+ then
+ MessagePos(hloopvar.fileinfo,type_e_ordinal_expr_expected);
+
+ hp:=hloopvar;
+ while assigned(hp) and
(
- ((hp.nodetype=subscriptn) and
- ((tsubscriptnode(hp).left.resultdef.typ=recorddef) or
- is_object(tsubscriptnode(hp).left.resultdef))
+ { record/object fields and array elements are allowed }
+ { in tp7 mode only }
+ (
+ (m_tp7 in current_settings.modeswitches) and
+ (
+ ((hp.nodetype=subscriptn) and
+ ((tsubscriptnode(hp).left.resultdef.typ=recorddef) or
+ is_object(tsubscriptnode(hp).left.resultdef))
+ ) or
+ { constant array index }
+ (
+ (hp.nodetype=vecn) and
+ is_constintnode(tvecnode(hp).right)
+ )
+ )
) or
- { constant array index }
+ { equal typeconversions }
(
- (hp.nodetype=vecn) and
- is_constintnode(tvecnode(hp).right)
+ (hp.nodetype=typeconvn) and
+ (ttypeconvnode(hp).convtype=tc_equal)
)
- )
- ) or
- { equal typeconversions }
- (
- (hp.nodetype=typeconvn) and
- (ttypeconvnode(hp).convtype=tc_equal)
- )
- ) do
- begin
- { Use the recordfield for loopvarsym }
- if not assigned(loopvarsym) and
- (hp.nodetype=subscriptn) then
- loopvarsym:=tsubscriptnode(hp).vs;
- hp:=tunarynode(hp).left;
- end;
+ ) do
+ begin
+ { Use the recordfield for loopvarsym }
+ if not assigned(loopvarsym) and
+ (hp.nodetype=subscriptn) then
+ loopvarsym:=tsubscriptnode(hp).vs;
+ hp:=tunarynode(hp).left;
+ end;
- if assigned(hp) and
- (hp.nodetype=loadn) then
- begin
- case tloadnode(hp).symtableentry.typ of
- staticvarsym,
- localvarsym,
- paravarsym :
- begin
- { we need a simple loadn:
- 1. The load must be in a global symtable or
- in the same level as the para of the current proc.
- 2. value variables (no const,out or var)
- 3. No threadvar, readonly or typedconst
- }
- if (
- (tloadnode(hp).symtable.symtablelevel=main_program_level) or
- (tloadnode(hp).symtable.symtablelevel=current_procinfo.procdef.parast.symtablelevel)
- ) and
- (tabstractvarsym(tloadnode(hp).symtableentry).varspez=vs_value) and
- ([vo_is_thread_var,vo_is_typed_const] * tabstractvarsym(tloadnode(hp).symtableentry).varoptions=[]) then
- begin
- { Assigning for-loop variable is only allowed in tp7 and macpas }
- if ([m_tp7,m_mac] * current_settings.modeswitches = []) then
- begin
- if not assigned(loopvarsym) then
- loopvarsym:=tabstractvarsym(tloadnode(hp).symtableentry);
- include(loopvarsym.varoptions,vo_is_loop_counter);
- end;
- end
- else
- begin
- { Typed const is allowed in tp7 }
- if not(m_tp7 in current_settings.modeswitches) or
- not(vo_is_typed_const in tabstractvarsym(tloadnode(hp).symtableentry).varoptions) then
- MessagePos(hp.fileinfo,type_e_illegal_count_var);
- end;
- end;
- else
- MessagePos(hp.fileinfo,type_e_illegal_count_var);
+ if assigned(hp) and
+ (hp.nodetype=loadn) then
+ begin
+ case tloadnode(hp).symtableentry.typ of
+ staticvarsym,
+ localvarsym,
+ paravarsym :
+ begin
+ { we need a simple loadn:
+ 1. The load must be in a global symtable or
+ in the same level as the para of the current proc.
+ 2. value variables (no const,out or var)
+ 3. No threadvar, readonly or typedconst
+ }
+ if (
+ (tloadnode(hp).symtable.symtablelevel=main_program_level) or
+ (tloadnode(hp).symtable.symtablelevel=current_procinfo.procdef.parast.symtablelevel)
+ ) and
+ (tabstractvarsym(tloadnode(hp).symtableentry).varspez=vs_value) and
+ ([vo_is_thread_var,vo_is_typed_const] * tabstractvarsym(tloadnode(hp).symtableentry).varoptions=[]) then
+ begin
+ { Assigning for-loop variable is only allowed in tp7 and macpas }
+ if ([m_tp7,m_mac] * current_settings.modeswitches = []) then
+ begin
+ if not assigned(loopvarsym) then
+ loopvarsym:=tabstractvarsym(tloadnode(hp).symtableentry);
+ include(loopvarsym.varoptions,vo_is_loop_counter);
+ end;
+ end
+ else
+ begin
+ { Typed const is allowed in tp7 }
+ if not(m_tp7 in current_settings.modeswitches) or
+ not(vo_is_typed_const in tabstractvarsym(tloadnode(hp).symtableentry).varoptions) then
+ MessagePos(hp.fileinfo,type_e_illegal_count_var);
+ end;
+ end;
+ else
+ MessagePos(hp.fileinfo,type_e_illegal_count_var);
+ end;
+ end
+ else
+ MessagePos(hloopvar.fileinfo,type_e_illegal_count_var);
+
+ hfrom:=comp_expr(true);
+
+ if try_to_consume(_DOWNTO) then
+ backward:=true
+ else
+ begin
+ consume(_TO);
+ backward:=false;
end;
- end
- else
- MessagePos(hloopvar.fileinfo,type_e_illegal_count_var);
- consume(_ASSIGNMENT);
+ hto:=comp_expr(true);
+ consume(_DO);
+
+ { Check if the constants fit in the range }
+ check_range(hfrom);
+ check_range(hto);
+
+ { first set the varstate for from and to, so
+ uses of loopvar in those expressions will also
+ trigger a warning when it is not used yet. This
+ needs to be done before the instruction block is
+ parsed to have a valid hloopvar }
+ typecheckpass(hfrom);
+ set_varstate(hfrom,vs_read,[vsf_must_be_valid]);
+ typecheckpass(hto);
+ set_varstate(hto,vs_read,[vsf_must_be_valid]);
+ typecheckpass(hloopvar);
+ { in two steps, because vs_readwritten may turn on vsf_must_be_valid }
+ { for some subnodes }
+ set_varstate(hloopvar,vs_written,[]);
+ set_varstate(hloopvar,vs_read,[vsf_must_be_valid]);
+
+ { ... now the instruction block }
+ hblock:=statement;
+
+ { variable is not used for loop counter anymore }
+ if assigned(loopvarsym) then
+ exclude(loopvarsym.varoptions,vo_is_loop_counter);
+
+ result:=cfornode.create(hloopvar,hfrom,hto,hblock,backward);
+ end;
+
+ function for_in_loop_create(hloopvar: tnode): tnode;
+ var
+ expr: tnode;
+ begin
+ expr := comp_expr(true);
- hfrom:=comp_expr(true);
+ consume(_DO);
- if try_to_consume(_DOWNTO) then
- backward:=true
- else
- begin
- consume(_TO);
- backward:=false;
- end;
+ set_varstate(hloopvar,vs_written,[]);
+ set_varstate(hloopvar,vs_read,[vsf_must_be_valid]);
+
+ result := create_for_in_loop(hloopvar, statement, expr);
+
+ expr.free;
+ end;
+
+ var
+ hloopvar: tnode;
+ begin
+ { parse loop header }
+ consume(_FOR);
+
+ hloopvar:=factor(false);
+ valid_for_loopvar(hloopvar,true);
- hto:=comp_expr(true);
- consume(_DO);
- { Check if the constants fit in the range }
- check_range(hfrom);
- check_range(hto);
-
- { first set the varstate for from and to, so
- uses of loopvar in those expressions will also
- trigger a warning when it is not used yet. This
- needs to be done before the instruction block is
- parsed to have a valid hloopvar }
- typecheckpass(hfrom);
- set_varstate(hfrom,vs_read,[vsf_must_be_valid]);
- typecheckpass(hto);
- set_varstate(hto,vs_read,[vsf_must_be_valid]);
- typecheckpass(hloopvar);
- { in two steps, because vs_readwritten may turn on vsf_must_be_valid }
- { for some subnodes }
- set_varstate(hloopvar,vs_written,[]);
- set_varstate(hloopvar,vs_read,[vsf_must_be_valid]);
-
- { ... now the instruction block }
- hblock:=statement;
-
- { variable is not used for loop counter anymore }
- if assigned(loopvarsym) then
- exclude(loopvarsym.varoptions,vo_is_loop_counter);
-
- result:=cfornode.create(hloopvar,hfrom,hto,hblock,backward);
+ if try_to_consume(_ASSIGNMENT) then
+ result:=for_loop_create(hloopvar)
+ else
+ if try_to_consume(_IN) then
+ result:=for_in_loop_create(hloopvar)
+ else
+ consume(_ASSIGNMENT); // fail
end;
diff --git a/compiler/psub.pas b/compiler/psub.pas
index be3525783c..d4bcda68b4 100644
--- a/compiler/psub.pas
+++ b/compiler/psub.pas
@@ -82,7 +82,7 @@ implementation
globtype,tokens,verbose,comphook,constexp,
systems,
{ aasm }
- cpubase,aasmbase,aasmtai,aasmdata,
+ cpuinfo,cpubase,aasmbase,aasmtai,aasmdata,
{ symtable }
symconst,symbase,symsym,symtype,symtable,defutil,
paramgr,
@@ -101,7 +101,7 @@ implementation
scanner,import,gendef,
pbase,pstatmnt,pdecl,pdecsub,pexports,
{ codegen }
- tgobj,cgbase,cgobj,dbgbase,
+ tgobj,cgbase,cgobj,cgcpu,dbgbase,
ncgutil,regvars,
optbase,
opttail,
@@ -819,6 +819,8 @@ implementation
{ only do secondpass if there are no errors }
if (ErrorCount=0) then
begin
+ create_codegen;
+
{ set the start offset to the start of the temp area in the stack }
tg:=ttgobj.create;
@@ -1136,6 +1138,7 @@ implementation
{ stop tempgen and ra }
tg.free;
cg.done_register_allocators;
+ destroy_codegen;
tg:=nil;
end;
@@ -1585,7 +1588,7 @@ implementation
{ hint directives, these can be separated by semicolons here,
that needs to be handled here with a loop (PFV) }
- while try_consume_hintdirective(pd.symoptions) do
+ while try_consume_hintdirective(pd.symoptions,pd.deprecatedmsg) do
Consume(_SEMICOLON);
{ Set calling convention }
diff --git a/compiler/psystem.pas b/compiler/psystem.pas
index 6f6edeb7d5..bbbde99760 100644
--- a/compiler/psystem.pas
+++ b/compiler/psystem.pas
@@ -580,6 +580,9 @@ implementation
{$ifdef SPARC}
// aiclass[ait_labeled_instruction]:=tai_labeled_instruction;
{$endif SPARC}
+{$ifdef arm}
+ aiclass[ait_thumb_func]:=tai_thumb_func;
+{$endif arm}
aiclass[ait_cutobject]:=tai_cutobject;
aiclass[ait_regalloc]:=tai_regalloc;
aiclass[ait_tempalloc]:=tai_tempalloc;
diff --git a/compiler/ptconst.pas b/compiler/ptconst.pas
index 4e41d7b537..929c302781 100644
--- a/compiler/ptconst.pas
+++ b/compiler/ptconst.pas
@@ -1401,7 +1401,7 @@ implementation
read_typed_const_data(valuelist,sym.vardef);
{ Parse hints }
- try_consume_hintdirective(sym.symoptions);
+ try_consume_hintdirective(sym.symoptions,sym.deprecatedmsg);
consume(_SEMICOLON);
diff --git a/compiler/rautils.pas b/compiler/rautils.pas
index bc2c3c35ab..7b292b2be9 100644
--- a/compiler/rautils.pas
+++ b/compiler/rautils.pas
@@ -87,6 +87,7 @@ type
{$ifdef arm}
OPR_REGSET : (regset : tcpuregisterset);
OPR_SHIFTEROP : (shifterop : tshifterop);
+ OPR_COND : (cc : tasmcond);
{$endif arm}
end;
@@ -1062,6 +1063,8 @@ end;
ai.loadregset(i-1,regset);
OPR_SHIFTEROP:
ai.loadshifterop(i-1,shifterop);
+ OPR_COND:
+ ai.loadconditioncode(i-1,cc);
{$endif ARM}
{ ignore wrong operand }
OPR_NONE:
diff --git a/compiler/scanner.pas b/compiler/scanner.pas
index c45de8d86c..143f9c53d0 100644
--- a/compiler/scanner.pas
+++ b/compiler/scanner.pas
@@ -391,6 +391,14 @@ implementation
if (cs_support_exceptions in current_settings.globalswitches) then
include(current_settings.modeswitches,m_except);
+ { Default strict string var checking in TP/Delphi modes }
+ if ([m_delphi,m_tp7] * current_settings.modeswitches <> []) then
+ begin
+ include(current_settings.localswitches,cs_strict_var_strings);
+ if changeinit then
+ include(init_settings.localswitches,cs_strict_var_strings);
+ end;
+
{ Undefine old symbol }
if (m_delphi in oldmodeswitches) then
undef_system_macro('FPC_DELPHI')
@@ -3412,7 +3420,14 @@ In case not, the value returned can be arbitrary.
if m_fpc in current_settings.modeswitches then
begin
readnumber;
- token:=_INTCONST;
+ if length(pattern)=1 then
+ begin
+ readstring;
+ token:=_ID;
+ idtoken:=_ID;
+ end
+ else
+ token:=_INTCONST;
goto exit_label;
end
else if m_mac in current_settings.modeswitches then
diff --git a/compiler/sparc/cgcpu.pas b/compiler/sparc/cgcpu.pas
index b0449eda9a..cb46a05185 100644
--- a/compiler/sparc/cgcpu.pas
+++ b/compiler/sparc/cgcpu.pas
@@ -106,6 +106,8 @@ interface
procedure a_op64_const_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;value : int64;regsrc,regdst : tregister64;setflags : boolean;var ovloc : tlocation);override;
procedure a_op64_reg_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;regsrc1,regsrc2,regdst : tregister64;setflags : boolean;var ovloc : tlocation);override;
end;
+
+ procedure create_codegen;
const
TOpCG2AsmOp : array[topcg] of TAsmOp=(
@@ -1535,7 +1537,10 @@ implementation
end;
-begin
- cg:=TCgSparc.Create;
- cg64:=TCg64Sparc.Create;
+ procedure create_codegen;
+ begin
+ cg:=TCgSparc.Create;
+ cg64:=TCg64Sparc.Create;
+ end;
+
end.
diff --git a/compiler/symconst.pas b/compiler/symconst.pas
index f6533c4b67..fc6367914d 100644
--- a/compiler/symconst.pas
+++ b/compiler/symconst.pas
@@ -151,7 +151,8 @@ type
sp_internal, { internal symbol, not reported as unused }
sp_implicitrename,
sp_hint_experimental,
- sp_generic_para
+ sp_generic_para,
+ sp_has_deprecated_msg
);
tsymoptions=set of tsymoption;
@@ -231,6 +232,7 @@ type
po_classmethod, { class method }
po_virtualmethod, { Procedure is a virtual method }
po_abstractmethod, { Procedure is an abstract method }
+ po_finalmethod, { Procedure is a final method }
po_staticmethod, { static method }
po_overridingmethod, { method with override directive }
po_methodpointer, { method pointer, only in procvardef, also used for 'with object do' }
@@ -281,7 +283,9 @@ type
{ weakly linked (i.e., may or may not exist at run time) }
po_weakexternal,
{ Objective-C method }
- po_objc
+ po_objc,
+ { enumerator support }
+ po_enumerator_movenext
);
tprocoptions=set of tprocoption;
@@ -311,6 +315,8 @@ type
{ options for objects and classes }
tobjectoption=(oo_none,
oo_is_forward, { the class is only a forward declared yet }
+ oo_is_abstract, { the class is abstract - only descendants can be used }
+ oo_is_sealed, { the class is sealed - can't have descendants }
oo_has_virtual, { the object/class has virtual methods }
oo_has_private,
oo_has_protected,
@@ -324,6 +330,8 @@ type
oo_can_have_published,{ the class has rtti, i.e. you can publish properties }
oo_has_default_property,
oo_has_valid_guid,
+ oo_has_enumerator_movenext,
+ oo_has_enumerator_current,
oo_is_external, { the class is externally implemented (objcclass, cppclass) }
oo_is_anonymous { the class is only formally defined in this module (objcclass x = class; external;) }
);
@@ -346,7 +354,8 @@ type
ppo_defaultproperty,
ppo_stored,
ppo_hasparameters,
- ppo_implements
+ ppo_implements,
+ ppo_enumerator_current
);
tpropertyoptions=set of tpropertyoption;
diff --git a/compiler/symdef.pas b/compiler/symdef.pas
index 2fb42a9484..ea248e9009 100644
--- a/compiler/symdef.pas
+++ b/compiler/symdef.pas
@@ -299,6 +299,10 @@ interface
function FindDestructor : tprocdef;
function implements_any_interfaces: boolean;
procedure reset; override;
+ { enumerator support }
+ function search_enumerator_get: tprocdef;
+ function search_enumerator_move: tprocdef;
+ function search_enumerator_current: tsym;
{ WPO }
procedure register_created_object_type;override;
procedure register_maybe_created_object_type;
@@ -470,6 +474,7 @@ interface
{$endif}
visibility : tvisibility;
symoptions : tsymoptions;
+ deprecatedmsg : pshortstring;
{ symbol owning this definition }
procsym : tsym;
procsymderef : tderef;
@@ -2803,7 +2808,7 @@ implementation
begin
b:=ppufile.getbyte;
if b<>sizeof(funcretloc[callerside]) then
- internalerror(200411154);
+ internalerror(200411155);
ppufile.getdata(funcretloc[callerside],sizeof(funcretloc[callerside]));
end;
@@ -2966,6 +2971,7 @@ implementation
import_name:=nil;
import_nr:=0;
inlininginfo:=nil;
+ deprecatedmsg:=nil;
{$ifdef i386}
fpu_used:=maxfpuregs;
{$endif i386}
@@ -2990,6 +2996,10 @@ implementation
visibility:=tvisibility(ppufile.getbyte);
ppufile.getsmallset(symoptions);
optional:=boolean(ppufile.getbyte);
+ if sp_has_deprecated_msg in symoptions then
+ deprecatedmsg:=stringdup(ppufile.getstring)
+ else
+ deprecatedmsg:=nil;
{$ifdef powerpc}
{ library symbol for AmigaOS/MorphOS }
ppufile.getderef(libsymderef);
@@ -3090,6 +3100,7 @@ implementation
stringdispose(resultname);
stringdispose(import_dll);
stringdispose(import_name);
+ stringdispose(deprecatedmsg);
if (po_msgstr in procoptions) then
stringdispose(messageinf.str);
if assigned(_mangledname) then
@@ -3128,6 +3139,8 @@ implementation
ppufile.putbyte(byte(visibility));
ppufile.putsmallset(symoptions);
ppufile.putbyte(byte(optional));
+ if sp_has_deprecated_msg in symoptions then
+ ppufile.putstring(deprecatedmsg^);
{$ifdef powerpc}
{ library symbol for AmigaOS/MorphOS }
ppufile.putderef(libsymderef);
@@ -4418,6 +4431,119 @@ implementation
classref_created_in_current_module:=false;
end;
+ function tobjectdef.search_enumerator_get: tprocdef;
+ var
+ objdef : tobjectdef;
+ sym : tsym;
+ i : integer;
+ pd : tprocdef;
+ hashedid : THashedIDString;
+ begin
+ result:=nil;
+ objdef:=self;
+ hashedid.id:='GETENUMERATOR';
+ while assigned(objdef) do
+ begin
+ sym:=tsym(objdef.symtable.FindWithHash(hashedid));
+ if assigned(sym) and (sym.typ=procsym) then
+ begin
+ for i := 0 to Tprocsym(sym).ProcdefList.Count - 1 do
+ begin
+ pd := tprocdef(Tprocsym(sym).ProcdefList[i]);
+ if (pd.proctypeoption = potype_function) and
+ is_class_or_interface_or_object(pd.returndef) and
+ (pd.visibility >= vis_public) then
+ begin
+ result:=pd;
+ exit;
+ end;
+ end;
+ end;
+ objdef:=objdef.childof;
+ end;
+ end;
+
+ function tobjectdef.search_enumerator_move: tprocdef;
+ var
+ objdef : tobjectdef;
+ sym : tsym;
+ i : integer;
+ pd : tprocdef;
+ hashedid : THashedIDString;
+ begin
+ result:=nil;
+ objdef:=self;
+ // first search for po_enumerator_movenext method modifier
+ // then search for public function MoveNext: Boolean
+ hashedid.id:='MOVENEXT';
+ while assigned(objdef) do
+ begin
+ for i:=0 to objdef.symtable.SymList.Count-1 do
+ begin
+ sym:=TSym(objdef.symtable.SymList[i]);
+ if (sym.typ=procsym) then
+ begin
+ pd:=Tprocsym(sym).find_procdef_byoptions([po_enumerator_movenext]);
+ if assigned(pd) then
+ begin
+ result:=pd;
+ exit;
+ end;
+ end;
+ end;
+ sym:=tsym(objdef.symtable.FindWithHash(hashedid));
+ if assigned(sym) and (sym.typ=procsym) then
+ begin
+ for i := 0 to Tprocsym(sym).ProcdefList.Count - 1 do
+ begin
+ pd := tprocdef(Tprocsym(sym).ProcdefList[i]);
+ if (pd.proctypeoption = potype_function) and
+ is_boolean(pd.returndef) and
+ (pd.minparacount = 0) and
+ (pd.visibility >= vis_public) then
+ begin
+ result:=pd;
+ exit;
+ end;
+ end;
+ end;
+ objdef:=objdef.childof;
+ end;
+ end;
+
+ function tobjectdef.search_enumerator_current: tsym;
+ var
+ objdef : tobjectdef;
+ sym: tsym;
+ i: integer;
+ hashedid : THashedIDString;
+ begin
+ result:=nil;
+ objdef:=self;
+ hashedid.id:='CURRENT';
+ // first search for ppo_enumerator_current property modifier
+ // then search for public property Current
+ while assigned(objdef) do
+ begin
+ for i:=0 to objdef.symtable.SymList.Count-1 do
+ begin
+ sym:=TSym(objdef.symtable.SymList[i]);
+ if (sym.typ=propertysym) and (ppo_enumerator_current in tpropertysym(sym).propoptions) then
+ begin
+ result:=sym;
+ exit;
+ end;
+ end;
+ sym:=tsym(objdef.symtable.FindWithHash(hashedid));
+ if assigned(sym) and (sym.typ=propertysym) and
+ (sym.visibility >= vis_public) and not tpropertysym(sym).propaccesslist[palt_read].empty then
+ begin
+ result:=sym;
+ exit;
+ end;
+ objdef:=objdef.childof;
+ end;
+ end;
procedure tobjectdef.register_created_classref_type;
begin
@@ -4681,6 +4807,11 @@ implementation
function TImplementedInterface.getcopy:TImplementedInterface;
begin
Result:=TImplementedInterface.Create(nil);
+ {$warning: this is completely wrong on so many levels...}
+ { 1) the procdefs list will be freed once for each copy
+ 2) since the procdefs list owns its elements, those will also be freed for each copy
+ 3) idem for the name mappings
+ }
Move(pointer(self)^,pointer(result)^,InstanceSize);
end;
diff --git a/compiler/symsym.pas b/compiler/symsym.pas
index 51f40cdeca..54edd4b01b 100644
--- a/compiler/symsym.pas
+++ b/compiler/symsym.pas
@@ -79,6 +79,8 @@ interface
constructor create;
end;
+ { tprocsym }
+
tprocsym = class(tstoredsym)
protected
FProcdefList : TFPObjectList;
@@ -97,8 +99,10 @@ interface
procedure deref;override;
function find_procdef_bytype(pt:Tproctypeoption):Tprocdef;
function find_procdef_bypara(para:TFPObjectList;retdef:tdef;cpoptions:tcompare_paras_options):Tprocdef;
+ function find_procdef_byoptions(ops:tprocoptions): Tprocdef;
function find_procdef_byprocvardef(d:Tprocvardef):Tprocdef;
function find_procdef_assignment_operator(fromdef,todef:tdef;var besteq:tequaltype):Tprocdef;
+ function find_procdef_enumerator_operator(typedef:tdef;var besteq:tequaltype):Tprocdef;
property ProcdefList:TFPObjectList read FProcdefList;
end;
@@ -362,6 +366,10 @@ implementation
ppufile.getposinfo(fileinfo);
visibility:=tvisibility(ppufile.getbyte);
ppufile.getsmallset(symoptions);
+ if sp_has_deprecated_msg in symoptions then
+ deprecatedmsg:=stringdup(ppufile.getstring)
+ else
+ deprecatedmsg:=nil;
end;
@@ -372,6 +380,8 @@ implementation
ppufile.putposinfo(fileinfo);
ppufile.putbyte(byte(visibility));
ppufile.putsmallset(symoptions);
+ if sp_has_deprecated_msg in symoptions then
+ ppufile.putstring(deprecatedmsg^);
end;
@@ -651,6 +661,22 @@ implementation
end;
end;
+ function tprocsym.find_procdef_byoptions(ops: tprocoptions): Tprocdef;
+ var
+ i : longint;
+ pd : tprocdef;
+ begin
+ result:=nil;
+ for i:=0 to ProcdefList.Count-1 do
+ begin
+ pd:=tprocdef(ProcdefList[i]);
+ if ops * pd.procoptions = ops then
+ begin
+ result:=pd;
+ exit;
+ end;
+ end;
+ end;
function Tprocsym.Find_procdef_byprocvardef(d:Tprocvardef):Tprocdef;
var
@@ -688,8 +714,8 @@ implementation
function Tprocsym.Find_procdef_assignment_operator(fromdef,todef:tdef;var besteq:tequaltype):Tprocdef;
var
- paraidx,
- i : longint;
+ paraidx, realparamcount,
+ i, j : longint;
bestpd,
hpd,
pd : tprocdef;
@@ -723,8 +749,13 @@ implementation
assigned(pd.paras[paraidx]) and
(vo_is_hidden_para in tparavarsym(pd.paras[paraidx]).varoptions) do
inc(paraidx);
+ realparamcount:=0;
+ for j := 0 to pd.paras.Count-1 do
+ if assigned(pd.paras[j]) and not (vo_is_hidden_para in tparavarsym(pd.paras[j]).varoptions) then
+ inc(realparamcount);
if (paraidx<pd.paras.count) and
- assigned(pd.paras[paraidx]) then
+ assigned(pd.paras[paraidx]) and
+ (realparamcount = 1) then
begin
eq:=compare_defs_ext(fromdef,tparavarsym(pd.paras[paraidx]).vardef,nothingn,convtyp,hpd,[]);
@@ -753,6 +784,66 @@ implementation
result:=bestpd;
end;
+ function Tprocsym.find_procdef_enumerator_operator(typedef:tdef;var besteq:tequaltype):Tprocdef;
+ var
+ paraidx, realparamcount,
+ i, j : longint;
+ bestpd,
+ hpd,
+ pd : tprocdef;
+ convtyp : tconverttype;
+ eq : tequaltype;
+ begin
+ { This function will return the pprocdef of pprocsym that
+ is the best match for procvardef. When there are multiple
+ matches it returns nil.}
+ result:=nil;
+ bestpd:=nil;
+ besteq:=te_incompatible;
+ for i:=0 to ProcdefList.Count-1 do
+ begin
+ pd:=tprocdef(ProcdefList[i]);
+ paraidx:=0;
+ { ignore vs_hidden parameters }
+ while (paraidx<pd.paras.count) and
+ assigned(pd.paras[paraidx]) and
+ (vo_is_hidden_para in tparavarsym(pd.paras[paraidx]).varoptions) do
+ inc(paraidx);
+ realparamcount:=0;
+ for j := 0 to pd.paras.Count-1 do
+ if assigned(pd.paras[j]) and not (vo_is_hidden_para in tparavarsym(pd.paras[j]).varoptions) then
+ inc(realparamcount);
+ if (paraidx<pd.paras.count) and
+ assigned(pd.paras[paraidx]) and
+ (realparamcount = 1) and
+ is_class_or_interface_or_object(pd.returndef) then
+ begin
+ eq:=compare_defs_ext(typedef,tparavarsym(pd.paras[paraidx]).vardef,nothingn,convtyp,hpd,[]);
+
+ { alias? if yes, only l1 choice,
+ if you mess with this code, check tw4093 }
+ if (eq=te_exact) and
+ (typedef<>tparavarsym(pd.paras[paraidx]).vardef) and
+ ((df_unique in typedef.defoptions) or
+ (df_unique in tparavarsym(pd.paras[paraidx]).vardef.defoptions)) then
+ eq:=te_convert_l1;
+
+ if eq=te_exact then
+ begin
+ besteq:=eq;
+ result:=pd;
+ exit;
+ end;
+ if eq>besteq then
+ begin
+ bestpd:=pd;
+ besteq:=eq;
+ end;
+ end;
+ end;
+ result:=bestpd;
+ end;
+
{****************************************************************************
TERRORSYM
diff --git a/compiler/symtable.pas b/compiler/symtable.pas
index aa851675fc..eee2675e28 100644
--- a/compiler/symtable.pas
+++ b/compiler/symtable.pas
@@ -203,6 +203,7 @@ interface
function search_named_unit_globaltype(const unitname, typename: TIDString): ttypesym;
function search_class_member(pd : tobjectdef;const s : string):tsym;
function search_assignment_operator(from_def,to_def:Tdef):Tprocdef;
+ function search_enumerator_operator(type_def:Tdef):Tprocdef;
{Looks for macro s (must be given in upper case) in the macrosymbolstack, }
{and returns it if found. Returns nil otherwise.}
function search_macro(const s : string):tsym;
@@ -256,7 +257,7 @@ interface
'sym_diff','starstar',
'as','is','in','or',
'and','div','mod','not','shl','shr','xor',
- 'assign');
+ 'assign','enumerator');
@@ -1940,6 +1941,44 @@ implementation
end;
+ function search_enumerator_operator(type_def:Tdef): Tprocdef;
+ var
+ sym : Tprocsym;
+ hashedid : THashedIDString;
+ curreq,
+ besteq : tequaltype;
+ currpd,
+ bestpd : tprocdef;
+ stackitem : psymtablestackitem;
+ begin
+ hashedid.id:='enumerator';
+ besteq:=te_incompatible;
+ bestpd:=nil;
+ stackitem:=symtablestack.stack;
+ while assigned(stackitem) do
+ begin
+ sym:=Tprocsym(stackitem^.symtable.FindWithHash(hashedid));
+ if sym<>nil then
+ begin
+ if sym.typ<>procsym then
+ internalerror(200910241);
+ { if the source type is an alias then this is only the second choice,
+ if you mess with this code, check tw4093 }
+ currpd:=sym.find_procdef_enumerator_operator(type_def,curreq);
+ if curreq>besteq then
+ begin
+ besteq:=curreq;
+ bestpd:=currpd;
+ if (besteq=te_exact) then
+ break;
+ end;
+ end;
+ stackitem:=stackitem^.next;
+ end;
+ result:=bestpd;
+ end;
+
+
function search_system_type(const s: TIDString): ttypesym;
var
sym : tsym;
@@ -1994,7 +2033,6 @@ implementation
search_class_member:=nil;
end;
-
function search_macro(const s : string):tsym;
var
stackitem : psymtablestackitem;
diff --git a/compiler/symtype.pas b/compiler/symtype.pas
index bb9878c3bb..e0f89be174 100644
--- a/compiler/symtype.pas
+++ b/compiler/symtype.pas
@@ -101,6 +101,8 @@ interface
refs : longint;
reflist : TLinkedList;
visibility : tvisibility;
+ { deprecated optionally can have a message }
+ deprecatedmsg: pshortstring;
isdbgwritten : boolean;
constructor create(st:tsymtyp;const aname:string);
destructor destroy;override;
@@ -334,10 +336,12 @@ implementation
fileinfo:=current_tokenpos;
isdbgwritten := false;
visibility:=vis_public;
+ deprecatedmsg:=nil;
end;
destructor Tsym.destroy;
begin
+ stringdispose(deprecatedmsg);
if assigned(RefList) then
RefList.Free;
inherited Destroy;
diff --git a/compiler/systems/i_linux.pas b/compiler/systems/i_linux.pas
index a4f9e43fa7..ec57c42d74 100644
--- a/compiler/systems/i_linux.pas
+++ b/compiler/systems/i_linux.pas
@@ -717,7 +717,7 @@ unit i_linux;
varalignmin : 0;
varalignmax : 4;
localalignmin : 4;
- localalignmax : 8;
+ localalignmax : 4;
recordalignmin : 0;
recordalignmax : 4;
maxCrecordalign : 4
diff --git a/compiler/systems/t_embed.pas b/compiler/systems/t_embed.pas
index 1ff2926b24..d411b4bf1e 100644
--- a/compiler/systems/t_embed.pas
+++ b/compiler/systems/t_embed.pas
@@ -245,6 +245,17 @@ begin
Add('}');
Add('_stack_top = 0x20FFFC;');
end;
+ ct_stm32f103re:
+ with linkres do
+ begin
+ Add('ENTRY(_START)');
+ Add('MEMORY');
+ Add('{');
+ Add(' flash : ORIGIN = 0x08000000, LENGTH = 512K');
+ Add(' ram : ORIGIN = 0x20000000, LENGTH = 64K');
+ Add('}');
+ Add('_stack_top = 0x2000FFFC;');
+ end;
else
internalerror(200902011);
diff --git a/compiler/tokens.pas b/compiler/tokens.pas
index 0fdcd80894..0f5c21c655 100644
--- a/compiler/tokens.pas
+++ b/compiler/tokens.pas
@@ -53,6 +53,7 @@ type
_OP_SHR,
_OP_XOR,
_ASSIGNMENT,
+ _OP_ENUMERATOR,
{ special chars }
_CARET,
_UNEQUAL,
@@ -149,6 +150,7 @@ type
_CONST,
_FALSE,
_FAR16,
+ _FINAL,
_INDEX,
_LABEL,
_LOCAL,
@@ -170,6 +172,7 @@ type
_REPEAT,
_RESULT,
_RETURN,
+ _SEALED,
_STATIC,
_STORED,
_STRICT,
@@ -233,6 +236,7 @@ type
_WRITEONLY,
_DEPRECATED,
_DESTRUCTOR,
+ _ENUMERATOR,
_IMPLEMENTS,
_INTERNPROC,
_OLDFPCCALL,
@@ -262,7 +266,7 @@ const
{ last operator which can be overloaded, the first_overloaded should
be declared directly after NOTOKEN }
first_overloaded = succ(NOTOKEN);
- last_overloaded = _ASSIGNMENT;
+ last_overloaded = _OP_ENUMERATOR;
type
tokenrec=record
@@ -309,6 +313,7 @@ const
(str:'shr' ;special:true ;keyword:m_none;op:NOTOKEN),
(str:'xor' ;special:true ;keyword:m_none;op:NOTOKEN),
(str:':=' ;special:true ;keyword:m_none;op:NOTOKEN),
+ (str:'enumerator' ;special:true ;keyword:m_none;op:NOTOKEN),
{ Special chars }
(str:'^' ;special:true ;keyword:m_none;op:NOTOKEN),
(str:'<>' ;special:true ;keyword:m_none;op:NOTOKEN),
@@ -405,6 +410,7 @@ const
(str:'CONST' ;special:false;keyword:m_all;op:NOTOKEN),
(str:'FALSE' ;special:false;keyword:m_all;op:NOTOKEN),
(str:'FAR16' ;special:false;keyword:m_none;op:NOTOKEN),
+ (str:'FINAL' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'INDEX' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'LABEL' ;special:false;keyword:m_all;op:NOTOKEN),
(str:'LOCAL' ;special:false;keyword:m_none;op:NOTOKEN),
@@ -426,6 +432,7 @@ const
(str:'REPEAT' ;special:false;keyword:m_all;op:NOTOKEN),
(str:'RESULT' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'RETURN' ;special:false;keyword:m_mac;op:NOTOKEN),
+ (str:'SEALED' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'STATIC' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'STORED' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'STRICT' ;special:false;keyword:m_none;op:NOTOKEN),
@@ -489,6 +496,7 @@ const
(str:'WRITEONLY' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'DEPRECATED' ;special:false;keyword:m_all;op:NOTOKEN),
(str:'DESTRUCTOR' ;special:false;keyword:m_all;op:NOTOKEN),
+ (str:'ENUMERATOR' ;special:false;keyword:m_none;op:_OP_ENUMERATOR),
(str:'IMPLEMENTS' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'INTERNPROC' ;special:false;keyword:m_none;op:NOTOKEN),
(str:'OLDFPCCALL' ;special:false;keyword:m_none;op:NOTOKEN),
diff --git a/compiler/utils/ppudump.pp b/compiler/utils/ppudump.pp
index 956bd206d6..fd5a171b31 100644
--- a/compiler/utils/ppudump.pp
+++ b/compiler/utils/ppudump.pp
@@ -744,7 +744,7 @@ begin
end;
-procedure readsymoptions;
+procedure readsymoptions(space : string);
type
{ symbol options }
tsymoption=(sp_none,
@@ -757,7 +757,8 @@ type
sp_has_overloaded,
sp_internal, { internal symbol, not reported as unused }
sp_implicitrename,
- sp_generic_para
+ sp_generic_para,
+ sp_has_deprecated_msg
);
tsymoptions=set of tsymoption;
tsymopt=record
@@ -765,18 +766,19 @@ type
str : string[30];
end;
const
- symopts=10;
+ symopts=11;
symopt : array[1..symopts] of tsymopt=(
- (mask:sp_static; str:'Static'),
- (mask:sp_hint_deprecated;str:'Hint Deprecated'),
- (mask:sp_hint_platform; str:'Hint Platform'),
- (mask:sp_hint_library; str:'Hint Library'),
- (mask:sp_hint_unimplemented;str:'Hint Unimplemented'),
- (mask:sp_hint_experimental;str:'Hint Experimental'),
- (mask:sp_has_overloaded; str:'Has overloaded'),
- (mask:sp_internal; str:'Internal'),
- (mask:sp_implicitrename; str:'Implicit Rename'),
- (mask:sp_generic_para; str:'Generic Parameter')
+ (mask:sp_static; str:'Static'),
+ (mask:sp_hint_deprecated; str:'Hint Deprecated'),
+ (mask:sp_hint_platform; str:'Hint Platform'),
+ (mask:sp_hint_library; str:'Hint Library'),
+ (mask:sp_hint_unimplemented; str:'Hint Unimplemented'),
+ (mask:sp_hint_experimental; str:'Hint Experimental'),
+ (mask:sp_has_overloaded; str:'Has overloaded'),
+ (mask:sp_internal; str:'Internal'),
+ (mask:sp_implicitrename; str:'Implicit Rename'),
+ (mask:sp_generic_para; str:'Generic Parameter'),
+ (mask:sp_has_deprecated_msg; str:'Has Deprecated Message')
);
var
symoptions : tsymoptions;
@@ -798,6 +800,8 @@ begin
end;
end;
writeln;
+ if sp_has_deprecated_msg in symoptions then
+ writeln(space,'Deprecated : ', ppufile.getstring);
end;
@@ -809,7 +813,7 @@ begin
readposinfo;
writeln(space,' Visibility : ',Visibility2Str(ppufile.getbyte));
write (space,' SymOptions : ');
- readsymoptions;
+ readsymoptions(space+' ');
end;
@@ -1074,6 +1078,7 @@ type
po_classmethod, { class method }
po_virtualmethod, { Procedure is a virtual method }
po_abstractmethod, { Procedure is an abstract method }
+ po_finalmethod, { Procedure is a final method }
po_staticmethod, { static method }
po_overridingmethod, { method with override directive }
po_methodpointer, { method pointer, only in procvardef, also used for 'with object do' }
@@ -1122,7 +1127,9 @@ type
po_kylixlocal,
po_dispid,
{ weakly linked (i.e., may or may not exist at run time) }
- po_weakexternal
+ po_weakexternal,
+ po_objc,
+ po_enumerator_movenext
);
tprocoptions=set of tprocoption;
@@ -1169,6 +1176,7 @@ const
(mask:po_classmethod; str:'ClassMethod'),
(mask:po_virtualmethod; str:'VirtualMethod'),
(mask:po_abstractmethod; str:'AbstractMethod'),
+ (mask:po_finalmethod; str:'FinalMethod'),
(mask:po_staticmethod; str:'StaticMethod'),
(mask:po_overridingmethod;str:'OverridingMethod'),
(mask:po_methodpointer; str:'MethodPointer'),
@@ -1205,7 +1213,9 @@ const
(mask:po_has_importname; str:'HasImportName'),
(mask:po_kylixlocal; str:'KylixLocal'),
(mask:po_dispid; str:'DispId'),
- (mask:po_weakexternal; str:'WeakExternal')
+ (mask:po_weakexternal; str:'WeakExternal'),
+ (mask:po_objc; str:'ObjC'),
+ (mask:po_enumerator_movenext; str:'EnumeratorMoveNext')
);
var
proctypeoption : tproctypeoption;
@@ -1354,6 +1364,8 @@ procedure readobjectdefoptions;
type
tobjectoption=(oo_none,
oo_is_forward, { the class is only a forward declared yet }
+ oo_is_abstract, { the class is abstract - only descendants can be used }
+ oo_is_sealed, { the class is sealed - can't have descendants }
oo_has_virtual, { the object/class has virtual methods }
oo_has_private,
oo_has_protected,
@@ -1366,7 +1378,9 @@ type
oo_has_msgint,
oo_can_have_published,{ the class has rtti, i.e. you can publish properties }
oo_has_default_property,
- oo_has_valid_guid
+ oo_has_valid_guid,
+ oo_has_enumerator_movenext,
+ oo_has_enumerator_current
);
tobjectoptions=set of tobjectoption;
tsymopt=record
@@ -1376,6 +1390,8 @@ type
const
symopt : array[1..ord(high(tobjectoption))] of tsymopt=(
(mask:oo_is_forward; str:'IsForward'),
+ (mask:oo_is_abstract; str:'IsAbstract'),
+ (mask:oo_is_sealed; str:'IsSealed'),
(mask:oo_has_virtual; str:'HasVirtual'),
(mask:oo_has_private; str:'HasPrivate'),
(mask:oo_has_protected; str:'HasProtected'),
@@ -1388,7 +1404,9 @@ const
(mask:oo_has_msgint; str:'HasMsgInt'),
(mask:oo_can_have_published; str:'CanHavePublished'),
(mask:oo_has_default_property;str:'HasDefaultProperty'),
- (mask:oo_has_valid_guid; str:'HasValidGUID')
+ (mask:oo_has_valid_guid; str:'HasValidGUID'),
+ (mask:oo_has_enumerator_movenext; str:'HasEnumeratorMoveNext'),
+ (mask:oo_has_enumerator_current; str:'HasEnumeratorCurrent')
);
var
symoptions : tobjectoptions;
@@ -1860,7 +1878,7 @@ begin
readposinfo;
writeln(space,' Visibility : ',Visibility2Str(ppufile.getbyte));
write (space,' SymOptions : ');
- readsymoptions;
+ readsymoptions(space+' ');
if tsystemcpu(ppufile.header.cpu)=cpu_powerpc then
begin
{ library symbol for AmigaOS/MorphOS }
diff --git a/compiler/x86/cgx86.pas b/compiler/x86/cgx86.pas
index 53aae40236..865a7be645 100644
--- a/compiler/x86/cgx86.pas
+++ b/compiler/x86/cgx86.pas
@@ -351,6 +351,11 @@ unit cgx86;
add_hreg: boolean;
{$endif not x86_64}
begin
+ { make_simple_ref() may have already been called earlier, and in that
+ case make sure we don't perform the PIC-simplifications twice }
+ if (ref.refaddr in [addr_pic,addr_pic_no_got]) then
+ exit;
+
{$ifdef x86_64}
{ Only 32bit is allowed }
if ((ref.offset<low(longint)) or (ref.offset>high(longint))) then
@@ -397,7 +402,7 @@ unit cgx86;
if (ref.base<>NR_NO) or
(ref.index<>NR_NO) then
begin
- reference_reset_symbol(href,ref.symbol,0,sizeof(pint));
+ reference_reset_symbol(href,ref.symbol,0,ref.alignment);
hreg:=getaddressregister(list);
href.refaddr:=addr_pic_no_got;
href.base:=NR_RIP;
@@ -413,7 +418,7 @@ unit cgx86;
end
else
begin
- reference_reset_symbol(href,ref.symbol,0,sizeof(pint));
+ reference_reset_symbol(href,ref.symbol,0,ref.alignment);
hreg:=getaddressregister(list);
href.refaddr:=addr_pic;
href.base:=NR_RIP;
diff --git a/compiler/x86_64/cgcpu.pas b/compiler/x86_64/cgcpu.pas
index d47faabc6a..d2125c0958 100644
--- a/compiler/x86_64/cgcpu.pas
+++ b/compiler/x86_64/cgcpu.pas
@@ -43,6 +43,7 @@ unit cgcpu;
procedure a_param_ref(list : TAsmList;size : tcgsize;const r : treference;const paraloc : TCGPara);override;
end;
+ procedure create_codegen;
implementation
@@ -245,7 +246,10 @@ unit cgcpu;
List.concat(Tai_symbol_end.Createname(labelname));
end;
-
-begin
- cg:=tcgx86_64.create;
+
+ procedure create_codegen;
+ begin
+ cg:=tcgx86_64.create;
+ end;
+
end.
diff --git a/ide/Makefile.fpc b/ide/Makefile.fpc
index 966a227510..94c74cd86c 100644
--- a/ide/Makefile.fpc
+++ b/ide/Makefile.fpc
@@ -68,7 +68,7 @@ SYSLIBDIR=/lib /usr/lib /usr/local/lib
# Detect if libgdb.a is available
override LIBGDBFILE=$(firstword $(wildcard $(addsuffix /libgdb.a,$(SYSLIBDIR))))
ifneq (${LIBGDBFILE},)
-$(warning Using system sefault libgdb file located in ${LIBGDBFILE})
+$(warning Using system default libgdb file located in ${LIBGDBFILE})
GDBLIBDIR=$(dir ${LIBGDBFILE})
endif
endif
diff --git a/ide/fpdebug.pas b/ide/fpdebug.pas
index f8b4d4e632..999c76f15e 100644
--- a/ide/fpdebug.pas
+++ b/ide/fpdebug.pas
@@ -51,6 +51,7 @@ type
HasExe : boolean;
RunCount : longint;
WindowWidth : longint;
+ TBreakNumber : longint;
FPCBreakErrorNumber : longint;
{$ifdef SUPPORT_REMOTE}
isRemoteDebugging:boolean;
@@ -65,6 +66,9 @@ type
procedure DoBreakSession;virtual;}
procedure DoEndSession(code:longint);virtual;
procedure DoUserSignal;virtual;
+ procedure FlushAll; virtual;
+ function Query(question : pchar; args : pchar) : longint; virtual;
+
procedure AnnotateError;
procedure InsertBreakpoints;
procedure RemoveBreakpoints;
@@ -334,8 +338,10 @@ uses
{$ifdef DOS}
fpusrscr,
{$endif DOS}
+
App,Strings,
FVConsts,
+ MsgBox,
{$ifdef Windows}
Windebug,
{$endif Windows}
@@ -603,7 +609,8 @@ procedure UpdateDebugViews;
begin
{$ifdef SUPPORT_REMOTE}
- PushStatus(msg_getting_info_on+RemoteMachine);
+ if isRemoteDebugging then
+ PushStatus(msg_getting_info_on+RemoteMachine);
{$endif SUPPORT_REMOTE}
DeskTop^.Lock;
If assigned(StackWindow) then
@@ -620,7 +627,8 @@ procedure UpdateDebugViews;
VectorWindow^.Update;
DeskTop^.UnLock;
{$ifdef SUPPORT_REMOTE}
- PopStatus;
+ if isRemoteDebugging then
+ PopStatus;
{$endif SUPPORT_REMOTE}
end;
@@ -648,6 +656,10 @@ begin
begin
LoadFile(f);
HasExe:=true;
+ { Procedure HandleErrorAddrFrame
+ (Errno : longint;addr,frame : longint);
+ [public,alias:'FPC_BREAK_ERROR'];
+ Command('b HANDLEERRORADDRFRAME'); }
Command('b FPC_BREAK_ERROR');
FPCBreakErrorNumber:=last_breakpoint_number;
{$ifdef FrameNameKnown}
@@ -826,6 +838,8 @@ begin
PopStatus;
exit;
end;
+ s:=IDEApp.GetRemoteExecString;
+ MessageBox(#3'Start in remote'#13#3+s,nil,mfOKbutton);
PopStatus;
end
else
@@ -941,6 +955,76 @@ begin
GDBWindow^.WriteString(S);
end;
+function TDebugController.Query(question : pchar; args : pchar) : longint;
+var
+ c : char;
+ WasModal : boolean;
+ ModalView : PView;
+ res : longint;
+begin
+ if not assigned(Application) then
+ begin
+ system.Write(question);
+ repeat
+ system.write('(y or n)');
+ system.read(c);
+ system.writeln(c);
+ until (lowercase(c)='y') or (lowercase(c)='n');
+ if lowercase(c)='y' then
+ query:=1
+ else
+ query:=0;
+ exit;
+ end;
+ if assigned(Application^.Current) and
+ ((Application^.Current^.State and sfModal)<>0) then
+ begin
+ WasModal:=true;
+ ModalView:=Application^.Current;
+ ModalView^.SetState(sfModal, false);
+ ModalView^.Hide;
+ end
+ else
+ WasModal:=false;
+ PushStatus(Question);
+ res:=MessageBox(Question,nil,mfyesbutton+mfnobutton);
+ PopStatus;
+ if res=cmYes then
+ Query:=1
+ else
+ Query:=0;
+ if WasModal then
+ begin
+ ModalView^.Show;
+ ModalView^.SetState(sfModal, true);
+ ModalView^.Draw;
+ end;
+end;
+
+procedure TDebugController.FlushAll;
+begin
+ if assigned(GDBWindow) then
+ begin
+ If StrLen(GetError)>0 then
+ begin
+ GDBWindow^.WriteErrorText(GetError);
+ if in_command=0 then
+ gdberrorbuf.reset;
+ end;
+
+ If StrLen(GetOutput)>0 then
+ begin
+ GDBWindow^.WriteOutputText(GetOutput);
+ { Keep output for command results }
+ if in_command=0 then
+ gdboutputbuf.reset;
+ end;
+ end
+ else
+ Inherited FlushAll;
+end;
+
+
procedure TDebugController.CommandEnd(const s:string);
begin
if assigned(GDBWindow) and (in_command<=1) then
@@ -1269,7 +1353,13 @@ begin
end
else if not assigned(PB) then
begin
- WarningBox(#3'Stopped by breakpoint '+IntToStr(BreakIndex),nil);
+ if (BreakIndex<>start_break_number) and
+ (BreakIndex<>TbreakNumber) then
+ WarningBox(#3'Stopped by breakpoint '+IntToStr(BreakIndex),nil);
+ if BreakIndex=start_break_number then
+ start_break_number:=0;
+ if BreakIndex=TbreakNumber then
+ TbreakNumber:=0;
end
{ For watch we should get old and new value !! }
else if (Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive)) and
@@ -1377,14 +1467,15 @@ begin
if NoSwitch then
begin
{$ifdef SUPPORT_REMOTE}
- PushStatus(msg_runningremotely+RemoteMachine);
-{$else not SUPPORT_REMOTE}
+ if isRemoteDebugging then
+ PushStatus(msg_runningremotely+RemoteMachine)
+ else
+{$endif SUPPORT_REMOTE}
{$ifdef Unix}
PushStatus(msg_runninginanotherwindow+DebuggeeTTY);
{$else not Unix}
PushStatus(msg_runninginanotherwindow);
{$endif Unix}
-{$endif not SUPPORT_REMOTE}
end
else
begin
@@ -3508,15 +3599,17 @@ end;
function GetGDBTargetShortName : string;
begin
+{$ifndef CROSSGDB}
+GetGDBTargetShortName:=source_info.shortname;
+{$else CROSSGDB}
{$ifdef SUPPORT_REMOTE}
{$ifdef PALMOSGDB}
GetGDBTargetShortName:='palmos';
{$else}
GetGDBTargetShortName:='linux';
{$endif PALMOSGDB}
-{$else not SUPPORT_REMOTE}
-GetGDBTargetShortName:=source_info.shortname
{$endif not SUPPORT_REMOTE}
+{$endif CROSSGDB}
end;
procedure InitDebugger;
@@ -3556,6 +3649,7 @@ begin
{$endif}
NeedRecompileExe:=false;
+{$ifndef SUPPORT_REMOTE}
if UpCaseStr(TargetSwitches^.GetCurrSelParam)<>UpCaseStr(GetGDBTargetShortName) then
begin
ClearFormatParams;
@@ -3575,6 +3669,7 @@ begin
IDEApp.UpdateTarget;
end;
end;
+{$endif ndef SUPPORT_REMOTE}
if not NeedRecompileExe then
NeedRecompileExe:=(not ExistsFile(ExeFile)) or (CompilationPhase<>cpDone) or
(PrevMainFile<>MainFile) or NeedRecompile(cRun,false);
diff --git a/ide/fpide.pas b/ide/fpide.pas
index ade6301b3b..5404566af8 100644
--- a/ide/fpide.pas
+++ b/ide/fpide.pas
@@ -565,6 +565,17 @@ resourcestring menu_local_gotosource = '~G~oto source';
label_debugger_redirection = 'Debuggee ~R~edirection';
label_debugger_useanothertty = '~U~se Another tty for Debuggee';
+ { Remote options dialog }
+ dialog_remote = 'Remote setup';
+ label_remote_machine = 'Remote machine ~n~ame';
+ label_remote_port = 'Remote ~p~ort number';
+ label_remote_dir = 'Remote ~d~irectory';
+ label_remote_config = 'Remote config ~o~ptions';
+ label_remote_ident = 'Remote ~i~dent';
+ label_remote_command = 'Remote ~c~ommand';
+ label_remote_scp = 'Scp executable';
+ label_remote_ssh = 'Ssh executable';
+
{Directories dialog.}
dialog_directories = 'Directories';
diff --git a/ide/test.pas b/ide/test.pas
index 9ee3ddfa11..309fc3cc9f 100644
--- a/ide/test.pas
+++ b/ide/test.pas
@@ -45,13 +45,13 @@ type
end;
TClass = class
- constructor Create;
name : string;
+ constructor Create;
end;
TClass2 = class(TClass)
- constructor Create;
X : longint;
+ constructor Create;
end;
EnumTyp = (enum1,enum2,enum3);
diff --git a/ide/wchmhwrap.pas b/ide/wchmhwrap.pas
index 313661b573..425f27177b 100644
--- a/ide/wchmhwrap.pas
+++ b/ide/wchmhwrap.pas
@@ -129,7 +129,9 @@ begin
debugmessageS({$i %file%},'TCHMWrapper: indexfilename:'+fchmr.indexfile,{$i %line%},'1',0,0);
{$endif}
- m:=fchmr.getobject(fchmr.indexfile);
+
+ findex:=fchmr.GetIndexSitemap(false);
+(* m:=fchmr.getobject(fchmr.indexfile);
try
if assigned(m) then
begin
@@ -141,6 +143,7 @@ begin
finally
freeandnil(m);
end;
+ *)
{$ifdef wdebug}
debugmessageS({$i %file%},'TCHMWrapper: loadindex after final ',{$i %line%},'1',0,0);
{$endif}
@@ -148,6 +151,12 @@ begin
tli:=TopicLinks^.AddItem(fchmr.defaultpage);
TLI:=EncodeHTMLCtx(ID,TLI+1);
IndexEntries^.Insert(NewIndexEntry( FormatAlias('Table of contents'),ID,TLI));
+ if findex= Nil Then
+ begin
+ floaded:=true;
+ exit(true);
+ end;
+ if assigned(findex.items) and (findex.items.count>0) Then
for i:=0 to findex.items.count-1 do
begin
item:=findex.items.item[i];
@@ -289,7 +298,7 @@ begin
Afileid:=chmw.fileid;
alinkid:=chmw.fTopicLinks.additem(restlink);
result:=true;
- end;
+ end;
end;
end
end;
diff --git a/installer/install.dat b/installer/install.dat
index 85ad6a28fe..1f8bab8c34 100644
--- a/installer/install.dat
+++ b/installer/install.dat
@@ -447,7 +447,7 @@ package=compiler.source.zip[compsrc.zip],~C~ompiler sources
# Source 3
package=rtl.source.zip[rtlsrc.zip],Run time library sources
# Source 4
-package=units-graph.source.zip[ugrphsrc.zip],Unit Graph
+package=ide.source.zip[idesrc.zip],IDE sources
# Source 5
package=utils.source.zip[utilsrc.zip],~U~tils sources
# Source 6
@@ -470,6 +470,8 @@ package=units-zlib.source.zip[uzlibsrc.zip],ZLib interface units
package=units-gdbint.source.zip[ugdbsrc.zip],GDB interface units
# Source 15
package=units-postgres.source.zip[upgrsrc.zip],PostGreSQL interface units
+# Source 16
+package=units-graph.source.zip[ugrphsrc.zip],Unit Graph
#
# Source packages 2nd part
diff --git a/installer/install.pas b/installer/install.pas
index a9daf5c2a3..0b8b1ad190 100644
--- a/installer/install.pas
+++ b/installer/install.pas
@@ -98,7 +98,7 @@ program install;
maxpacks=30;
- maxpackages=28;
+ maxpackages=29;
maxdefcfgs=1024;
HTMLIndexExt = '.htx';
diff --git a/packages/Makefile b/packages/Makefile
index 9b4d6c2a2e..a061ea775a 100644
--- a/packages/Makefile
+++ b/packages/Makefile
@@ -265,178 +265,178 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph libc unixutil graph pxlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph libc unixutil graph pxlib bzip2
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv graph unzip gdbint
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv graph unzip gdbint
endif
ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
endif
ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp fcl-extra libxml
endif
ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib iconvenc
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib iconvenc
endif
ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib iconvenc
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib iconvenc
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib imlib utmp fpgtk xforms fftw pcap ggi openssl gnome1 httpd13 httpd20 httpd22 numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra imlib utmp fpgtk xforms fftw pcap ggi openssl gnome1 httpd13 httpd20 httpd22 numlib
endif
ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv zlib unzip
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv zlib unzip
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp graph univint cocoaint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra graph univint cocoaint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl
endif
ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
endif
ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv zlib unzip
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv zlib unzip
endif
ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
endif
ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp fcl-extra libxml
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic amunits
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 amunits
endif
ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic palmunits
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 palmunits
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic amunits
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 amunits
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp graph univint cocoaint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra graph univint cocoaint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv opengl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv opengl
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib imlib utmp fpgtk xforms fftw pcap ggi openssl gnome1 httpd13 httpd20 httpd22 numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra imlib utmp fpgtk xforms fftw pcap ggi openssl gnome1 httpd13 httpd20 httpd22 numlib
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib users iconvenc gmp fcl-extra libxml
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
endif
ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic palmunits
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 palmunits
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp httpd13 httpd20 httpd22 opengles objcrtl
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra httpd13 httpd20 httpd22 opengles objcrtl
endif
ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
endif
ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp graph
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2 fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
endif
override INSTALL_FPCPACKAGE=y
override INSTALL_FPCSUBDIR=packages
@@ -1557,6 +1557,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -1600,6 +1601,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -1624,6 +1626,7 @@ TARGET_DIRS_LIBC=1
TARGET_DIRS_UNIXUTIL=1
TARGET_DIRS_GRAPH=1
TARGET_DIRS_PXLIB=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),i386-go32v2)
TARGET_DIRS_HASH=1
@@ -1646,6 +1649,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_GRAPH=1
TARGET_DIRS_UNZIP=1
@@ -1672,6 +1676,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_WINUNITS-BASE=1
TARGET_DIRS_WINUNITS-JEDI=1
@@ -1699,6 +1704,7 @@ TARGET_DIRS_FPGTK=1
TARGET_DIRS_OPENAL=1
TARGET_DIRS_FFTW=1
TARGET_DIRS_LUA=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_OGGVORBIS=1
TARGET_DIRS_SDL=1
TARGET_DIRS_OPENSSL=1
@@ -1735,6 +1741,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_ZLIB=1
TARGET_DIRS_LIBPNG=1
@@ -1767,6 +1774,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -1815,6 +1823,8 @@ TARGET_DIRS_NUMLIB=1
TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
+TARGET_DIRS_LIBXML=1
endif
ifeq ($(FULL_TARGET),i386-beos)
TARGET_DIRS_HASH=1
@@ -1837,6 +1847,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -1905,6 +1916,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -1973,6 +1985,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2039,6 +2052,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2064,6 +2078,7 @@ TARGET_DIRS_CAIRO=1
TARGET_DIRS_GTK1=1
TARGET_DIRS_BFD=1
TARGET_DIRS_SVGALIB=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -2099,6 +2114,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),i386-netware)
TARGET_DIRS_HASH=1
@@ -2121,6 +2137,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_ZLIB=1
TARGET_DIRS_UNZIP=1
@@ -2146,6 +2163,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2212,6 +2230,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),i386-darwin)
TARGET_DIRS_HASH=1
@@ -2234,6 +2253,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2262,6 +2282,7 @@ TARGET_DIRS_OPENSSL=1
TARGET_DIRS_NUMLIB=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_GRAPH=1
TARGET_DIRS_UNIVINT=1
TARGET_DIRS_COCOAINT=1
@@ -2303,6 +2324,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_ZLIB=1
TARGET_DIRS_LIBPNG=1
@@ -2335,6 +2357,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
TARGET_DIRS_HASH=1
@@ -2357,6 +2380,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_ZLIB=1
TARGET_DIRS_UNZIP=1
@@ -2382,6 +2406,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_WINCEUNITS=1
TARGET_DIRS_HTTPD22=1
TARGET_DIRS_FCL-WEB=1
@@ -2422,6 +2447,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),i386-symbian)
TARGET_DIRS_HASH=1
@@ -2444,6 +2470,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),m68k-linux)
TARGET_DIRS_HASH=1
@@ -2466,6 +2493,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2509,6 +2537,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -2551,6 +2580,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2599,6 +2629,8 @@ TARGET_DIRS_NUMLIB=1
TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
+TARGET_DIRS_LIBXML=1
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
TARGET_DIRS_HASH=1
@@ -2621,6 +2653,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2687,6 +2720,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_AMUNITS=1
endif
ifeq ($(FULL_TARGET),m68k-atari)
@@ -2710,6 +2744,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
TARGET_DIRS_HASH=1
@@ -2732,6 +2767,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2798,6 +2834,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_PALMUNITS=1
endif
ifeq ($(FULL_TARGET),m68k-embedded)
@@ -2821,6 +2858,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),powerpc-linux)
TARGET_DIRS_HASH=1
@@ -2843,6 +2881,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2886,6 +2925,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -2928,6 +2968,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -2994,6 +3035,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_AMUNITS=1
endif
ifeq ($(FULL_TARGET),powerpc-macos)
@@ -3017,6 +3059,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
TARGET_DIRS_HASH=1
@@ -3039,6 +3082,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3067,6 +3111,7 @@ TARGET_DIRS_OPENSSL=1
TARGET_DIRS_NUMLIB=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_GRAPH=1
TARGET_DIRS_UNIVINT=1
TARGET_DIRS_COCOAINT=1
@@ -3107,6 +3152,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_OPENGL=1
endif
@@ -3131,6 +3177,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),sparc-linux)
TARGET_DIRS_HASH=1
@@ -3153,6 +3200,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3196,6 +3244,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -3238,6 +3287,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3304,6 +3354,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3329,6 +3380,7 @@ TARGET_DIRS_CAIRO=1
TARGET_DIRS_GTK1=1
TARGET_DIRS_BFD=1
TARGET_DIRS_SVGALIB=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -3364,6 +3416,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),x86_64-linux)
TARGET_DIRS_HASH=1
@@ -3386,6 +3439,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3429,6 +3483,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -3471,6 +3526,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3519,6 +3575,8 @@ TARGET_DIRS_NUMLIB=1
TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
+TARGET_DIRS_LIBXML=1
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
TARGET_DIRS_HASH=1
@@ -3541,6 +3599,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3569,6 +3628,7 @@ TARGET_DIRS_OPENSSL=1
TARGET_DIRS_NUMLIB=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_OPENGL=1
TARGET_DIRS_X11=1
TARGET_DIRS_CAIRO=1
@@ -3604,6 +3664,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_WINUNITS-BASE=1
TARGET_DIRS_WINUNITS-JEDI=1
@@ -3629,6 +3690,7 @@ TARGET_DIRS_HTTPD13=1
TARGET_DIRS_HTTPD20=1
TARGET_DIRS_HTTPD22=1
TARGET_DIRS_NUMLIB=1
+TARGET_DIRS_FCL-EXTRA=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
TARGET_DIRS_HASH=1
@@ -3651,6 +3713,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),arm-linux)
TARGET_DIRS_HASH=1
@@ -3673,6 +3736,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3716,6 +3780,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -3758,6 +3823,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_PALMUNITS=1
endif
ifeq ($(FULL_TARGET),arm-darwin)
@@ -3781,6 +3847,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -3809,6 +3876,7 @@ TARGET_DIRS_OPENSSL=1
TARGET_DIRS_NUMLIB=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_HTTPD13=1
TARGET_DIRS_HTTPD20=1
TARGET_DIRS_HTTPD22=1
@@ -3836,6 +3904,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_WINCEUNITS=1
TARGET_DIRS_HTTPD22=1
TARGET_DIRS_FCL-WEB=1
@@ -3876,6 +3945,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),arm-nds)
TARGET_DIRS_HASH=1
@@ -3898,6 +3968,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),arm-embedded)
TARGET_DIRS_HASH=1
@@ -3920,6 +3991,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),arm-symbian)
TARGET_DIRS_HASH=1
@@ -3942,6 +4014,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
TARGET_DIRS_HASH=1
@@ -3964,6 +4037,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -4007,6 +4081,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -4049,6 +4124,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -4077,6 +4153,7 @@ TARGET_DIRS_OPENSSL=1
TARGET_DIRS_NUMLIB=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_GMP=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_OPENGL=1
TARGET_DIRS_X11=1
TARGET_DIRS_CAIRO=1
@@ -4112,6 +4189,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),avr-embedded)
TARGET_DIRS_HASH=1
@@ -4134,6 +4212,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifeq ($(FULL_TARGET),armeb-linux)
TARGET_DIRS_HASH=1
@@ -4156,6 +4235,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
TARGET_DIRS_FV=1
TARGET_DIRS_FCL-WEB=1
TARGET_DIRS_FASTCGI=1
@@ -4199,6 +4279,7 @@ TARGET_DIRS_USERS=1
TARGET_DIRS_ICONVENC=1
TARGET_DIRS_LIBXML=1
TARGET_DIRS_PROJ4=1
+TARGET_DIRS_FCL-EXTRA=1
TARGET_DIRS_IMLIB=1
TARGET_DIRS_UTMP=1
TARGET_DIRS_FPGTK=1
@@ -4240,6 +4321,7 @@ TARGET_DIRS_CHM=1
TARGET_DIRS_FCL-RES=1
TARGET_DIRS_LIBGD=1
TARGET_DIRS_SYMBOLIC=1
+TARGET_DIRS_BZIP2=1
endif
ifdef TARGET_DIRS_HASH
hash_all:
@@ -5141,6 +5223,51 @@ symbolic:
$(MAKE) -C symbolic all
.PHONY: symbolic_all symbolic_debug symbolic_smart symbolic_release symbolic_units symbolic_examples symbolic_shared symbolic_install symbolic_sourceinstall symbolic_exampleinstall symbolic_distinstall symbolic_zipinstall symbolic_zipsourceinstall symbolic_zipexampleinstall symbolic_zipdistinstall symbolic_clean symbolic_distclean symbolic_cleanall symbolic_info symbolic_makefiles symbolic
endif
+ifdef TARGET_DIRS_BZIP2
+bzip2_all:
+ $(MAKE) -C bzip2 all
+bzip2_debug:
+ $(MAKE) -C bzip2 debug
+bzip2_smart:
+ $(MAKE) -C bzip2 smart
+bzip2_release:
+ $(MAKE) -C bzip2 release
+bzip2_units:
+ $(MAKE) -C bzip2 units
+bzip2_examples:
+ $(MAKE) -C bzip2 examples
+bzip2_shared:
+ $(MAKE) -C bzip2 shared
+bzip2_install:
+ $(MAKE) -C bzip2 install
+bzip2_sourceinstall:
+ $(MAKE) -C bzip2 sourceinstall
+bzip2_exampleinstall:
+ $(MAKE) -C bzip2 exampleinstall
+bzip2_distinstall:
+ $(MAKE) -C bzip2 distinstall
+bzip2_zipinstall:
+ $(MAKE) -C bzip2 zipinstall
+bzip2_zipsourceinstall:
+ $(MAKE) -C bzip2 zipsourceinstall
+bzip2_zipexampleinstall:
+ $(MAKE) -C bzip2 zipexampleinstall
+bzip2_zipdistinstall:
+ $(MAKE) -C bzip2 zipdistinstall
+bzip2_clean:
+ $(MAKE) -C bzip2 clean
+bzip2_distclean:
+ $(MAKE) -C bzip2 distclean
+bzip2_cleanall:
+ $(MAKE) -C bzip2 cleanall
+bzip2_info:
+ $(MAKE) -C bzip2 info
+bzip2_makefiles:
+ $(MAKE) -C bzip2 makefiles
+bzip2:
+ $(MAKE) -C bzip2 all
+.PHONY: bzip2_all bzip2_debug bzip2_smart bzip2_release bzip2_units bzip2_examples bzip2_shared bzip2_install bzip2_sourceinstall bzip2_exampleinstall bzip2_distinstall bzip2_zipinstall bzip2_zipsourceinstall bzip2_zipexampleinstall bzip2_zipdistinstall bzip2_clean bzip2_distclean bzip2_cleanall bzip2_info bzip2_makefiles bzip2
+endif
ifdef TARGET_DIRS_FV
fv_all:
$(MAKE) -C fv all
@@ -7031,6 +7158,51 @@ proj4:
$(MAKE) -C proj4 all
.PHONY: proj4_all proj4_debug proj4_smart proj4_release proj4_units proj4_examples proj4_shared proj4_install proj4_sourceinstall proj4_exampleinstall proj4_distinstall proj4_zipinstall proj4_zipsourceinstall proj4_zipexampleinstall proj4_zipdistinstall proj4_clean proj4_distclean proj4_cleanall proj4_info proj4_makefiles proj4
endif
+ifdef TARGET_DIRS_FCL-EXTRA
+fcl-extra_all:
+ $(MAKE) -C fcl-extra all
+fcl-extra_debug:
+ $(MAKE) -C fcl-extra debug
+fcl-extra_smart:
+ $(MAKE) -C fcl-extra smart
+fcl-extra_release:
+ $(MAKE) -C fcl-extra release
+fcl-extra_units:
+ $(MAKE) -C fcl-extra units
+fcl-extra_examples:
+ $(MAKE) -C fcl-extra examples
+fcl-extra_shared:
+ $(MAKE) -C fcl-extra shared
+fcl-extra_install:
+ $(MAKE) -C fcl-extra install
+fcl-extra_sourceinstall:
+ $(MAKE) -C fcl-extra sourceinstall
+fcl-extra_exampleinstall:
+ $(MAKE) -C fcl-extra exampleinstall
+fcl-extra_distinstall:
+ $(MAKE) -C fcl-extra distinstall
+fcl-extra_zipinstall:
+ $(MAKE) -C fcl-extra zipinstall
+fcl-extra_zipsourceinstall:
+ $(MAKE) -C fcl-extra zipsourceinstall
+fcl-extra_zipexampleinstall:
+ $(MAKE) -C fcl-extra zipexampleinstall
+fcl-extra_zipdistinstall:
+ $(MAKE) -C fcl-extra zipdistinstall
+fcl-extra_clean:
+ $(MAKE) -C fcl-extra clean
+fcl-extra_distclean:
+ $(MAKE) -C fcl-extra distclean
+fcl-extra_cleanall:
+ $(MAKE) -C fcl-extra cleanall
+fcl-extra_info:
+ $(MAKE) -C fcl-extra info
+fcl-extra_makefiles:
+ $(MAKE) -C fcl-extra makefiles
+fcl-extra:
+ $(MAKE) -C fcl-extra all
+.PHONY: fcl-extra_all fcl-extra_debug fcl-extra_smart fcl-extra_release fcl-extra_units fcl-extra_examples fcl-extra_shared fcl-extra_install fcl-extra_sourceinstall fcl-extra_exampleinstall fcl-extra_distinstall fcl-extra_zipinstall fcl-extra_zipsourceinstall fcl-extra_zipexampleinstall fcl-extra_zipdistinstall fcl-extra_clean fcl-extra_distclean fcl-extra_cleanall fcl-extra_info fcl-extra_makefiles fcl-extra
+endif
ifdef TARGET_DIRS_IMLIB
imlib_all:
$(MAKE) -C imlib all
@@ -8545,29 +8717,44 @@ fpmkunit_debug: fcl-base_debug fcl-process_debug paszlib_debug
fpmkunit_smart: fcl-base_smart fcl-process_smart paszlib_smart
fpmkunit_release: fcl-base_release fcl-process_release paszlib_release
fpmkunit_shared: fcl-base_shared fcl-process_shared paszlib_shared
-ifneq ($(findstring $(OS_TARGET),win32 win64),)
-fcl-base_all: paszlib_all winunits-base_all winunits-jedi_all
-fcl-base_debug: paszlib_debug winunits-base_debug winunits-jedi_debug
-fcl-base_smart: paszlib_smart winunits-base_smart winunits-jedi_smart
-fcl-base_release: paszlib_release winunits-base_release winunits-jedi_release
-fcl-base_shared: paszlib_shared winunits-base_shared winunits-jedi_shared
+ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
+fcl-base_all: univint_all paszlib_all
+fcl-base_debug: univint_debug paszlib_debug
+fcl-base_smart: univint_smart paszlib_smart
+fcl-base_release: univint_release paszlib_release
+fcl-base_shared: univint_shared paszlib_shared
+else
fcl-base_all: paszlib_all
fcl-base_debug: paszlib_debug
fcl-base_smart: paszlib_smart
fcl-base_release: paszlib_release
fcl-base_shared: paszlib_shared
endif
+ifneq ($(findstring $(OS_TARGET),win32 win64),)
+fcl-extra_all: fcl-base winunits-base_all winunits-jedi_all
+fcl-extra_debug: fcl-base_debug winunits-base_debug winunits-jedi_debug
+fcl-extra_smart: fcl-base_smart winunits-base_smart winunits-jedi_smart
+fcl-extra_release: fcl-base_release winunits-base_release winunits-jedi_release
+fcl-extra_shared: fcl-base_shared winunits-base_shared winunits-jedi_shared
+else
ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
-fcl-base_all: univint_all
-fcl-base_debug: univint_debug
-fcl-base_smart: univint_smart
-fcl-base_release: univint_release
-fcl-base_shared: univint_shared
+fcl-extra_all: univint_all fcl-base_all
+fcl-extra_debug: univint_debug fcl-base_debug
+fcl-extra_smart: univint_smart fcl-base_release
+fcl-extra_release: univint_release fcl-base_release
+fcl-extra_shared: univint_shared fcl-base_shared
cocoaint_all: univint_all
cocoaint_debug: univint_debug
cocoaint_smart: univint_smart
cocoaint_release: univint_release
cocoaint_shared: univint_shared
+else
+fcl-extra_all: fcl-base_all
+fcl-extra_debug: fcl-base_debug
+fcl-extra_smart: fcl-base_smart
+fcl-extra_release: fcl-base_release
+fcl-extra_shared: fcl-base_shared
+endif
endif
fcl-xml_all: fcl-base_all
fcl-xml_debug: fcl-base_debug
@@ -8745,11 +8932,16 @@ unixutil_shared: libc_shared fcl-base_shared
unixutil_smart: libc_smart fcl-base_smart
unixutil_debug: libc_debug fcl-base_debug
unixutil_release: libc_release fcl-base_release
-winunits-jedi_all: winunits-base_all
-winunits-jedi_shared: winunits-base_shared
-winunits-jedi_smart: winunits-base_smart
-winunits-jedi_debug: winunits-base_debug
-winunits-jedi_release: winunits-base_release
+winunits-base_all: fcl-registry fcl-base_all
+winunits-base_shared: fcl-registry fcl-base_shared
+winunits-base_smart: fcl-registry fcl-base_smart
+winunits-base_debug: fcl-registry fcl-base_debug
+winunits-base_release: fcl-registry fcl-base_release
+winunits-jedi_all: winunits-base_all fcl-registry fcl-base_all
+winunits-jedi_shared: winunits-base_shared fcl-registry fcl-base_shared
+winunits-jedi_smart: winunits-base_smart fcl-registry fcl-base_smart
+winunits-jedi_debug: winunits-base_debug fcl-registry fcl-base_debug
+winunits-jedi_release: winunits-base_release fcl-registry fcl-base_release
xforms_all: x11_all
xforms_shared: x11_shared
xforms_smart: x11_smart
diff --git a/packages/Makefile.fpc b/packages/Makefile.fpc
index e04c1c3509..8e6a9ca83d 100644
--- a/packages/Makefile.fpc
+++ b/packages/Makefile.fpc
@@ -4,8 +4,8 @@
#
[target]
-dirs=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic
-dirs_linux_i386=libc unixutil graph pxlib
+dirs=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
+dirs_linux_i386=libc unixutil graph pxlib bzip2
dirs_i386_linux=graph
dirs_x86_64_linux=graph
dirs_powerpc_linux=graph
@@ -24,16 +24,16 @@ dirs_haiku=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc pos
dirs_freebsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo bfd aspell svgalib \
imlib utmp fpgtk xforms fftw pcap ggi sdl openssl graph gnome1 gtk1 gtk2 librsvg httpd13 httpd20 httpd22 pxlib numlib \
- users iconvenc gmp
+ users iconvenc gmp fcl-extra libxml
dirs_darwin=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
- libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp
+ libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra
dirs_i386_darwin=graph univint cocoaint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl
dirs_powerpc_darwin=graph univint cocoaint sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl
dirs_x86_64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
dirs_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib
dirs_arm_darwin= httpd13 httpd20 httpd22 opengles objcrtl
dirs_solaris=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
- libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib \
+ libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 bfd svgalib fcl-extra \
imlib utmp fpgtk xforms fftw pcap ggi openssl gnome1 httpd13 httpd20 httpd22 numlib
dirs_netbsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
gdbint libpng x11 gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg bfd aspell svgalib \
@@ -43,13 +43,13 @@ dirs_openbsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc
imlib utmp fpgtk xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib
dirs_linux=fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick \
gdbint libpng x11 uuid ldap modplug dts mad gdbm tcl syslog libcurl opengl cairo gtk1 gtk2 librsvg \
- a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 \
+ a52 bfd aspell svgalib newt cdrom users iconvenc libxml proj4 fcl-extra \
imlib utmp fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
dirs_win32=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
- gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua \
+ gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra \
oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
dirs_win64=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
- tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib
+ tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra
dirs_wince=winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
dirs_os2=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
dirs_emx=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
@@ -74,13 +74,13 @@ fpmkunit_smart: fcl-base_smart fcl-process_smart paszlib_smart
fpmkunit_release: fcl-base_release fcl-process_release paszlib_release
fpmkunit_shared: fcl-base_shared fcl-process_shared paszlib_shared
-
-ifneq ($(findstring $(OS_TARGET),win32 win64),)
-fcl-base_all: paszlib_all winunits-base_all winunits-jedi_all
-fcl-base_debug: paszlib_debug winunits-base_debug winunits-jedi_debug
-fcl-base_smart: paszlib_smart winunits-base_smart winunits-jedi_smart
-fcl-base_release: paszlib_release winunits-base_release winunits-jedi_release
-fcl-base_shared: paszlib_shared winunits-base_shared winunits-jedi_shared
+ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
+fcl-base_all: univint_all paszlib_all
+fcl-base_debug: univint_debug paszlib_debug
+fcl-base_smart: univint_smart paszlib_smart
+fcl-base_release: univint_release paszlib_release
+fcl-base_shared: univint_shared paszlib_shared
+else
fcl-base_all: paszlib_all
fcl-base_debug: paszlib_debug
fcl-base_smart: paszlib_smart
@@ -88,18 +88,32 @@ fcl-base_release: paszlib_release
fcl-base_shared: paszlib_shared
endif
+ifneq ($(findstring $(OS_TARGET),win32 win64),)
+fcl-extra_all: fcl-base winunits-base_all winunits-jedi_all
+fcl-extra_debug: fcl-base_debug winunits-base_debug winunits-jedi_debug
+fcl-extra_smart: fcl-base_smart winunits-base_smart winunits-jedi_smart
+fcl-extra_release: fcl-base_release winunits-base_release winunits-jedi_release
+fcl-extra_shared: fcl-base_shared winunits-base_shared winunits-jedi_shared
+else
ifneq ($(findstring $(FULL_TARGET),powerpc-darwin i386-darwin),)
-fcl-base_all: univint_all
-fcl-base_debug: univint_debug
-fcl-base_smart: univint_smart
-fcl-base_release: univint_release
-fcl-base_shared: univint_shared
+fcl-extra_all: univint_all fcl-base_all
+fcl-extra_debug: univint_debug fcl-base_debug
+fcl-extra_smart: univint_smart fcl-base_release
+fcl-extra_release: univint_release fcl-base_release
+fcl-extra_shared: univint_shared fcl-base_shared
cocoaint_all: univint_all
cocoaint_debug: univint_debug
cocoaint_smart: univint_smart
cocoaint_release: univint_release
cocoaint_shared: univint_shared
+else
+fcl-extra_all: fcl-base_all
+fcl-extra_debug: fcl-base_debug
+fcl-extra_smart: fcl-base_smart
+fcl-extra_release: fcl-base_release
+fcl-extra_shared: fcl-base_shared
+endif
endif
fcl-xml_all: fcl-base_all
@@ -304,11 +318,18 @@ unixutil_smart: libc_smart fcl-base_smart
unixutil_debug: libc_debug fcl-base_debug
unixutil_release: libc_release fcl-base_release
-winunits-jedi_all: winunits-base_all
-winunits-jedi_shared: winunits-base_shared
-winunits-jedi_smart: winunits-base_smart
-winunits-jedi_debug: winunits-base_debug
-winunits-jedi_release: winunits-base_release
+winunits-base_all: fcl-registry fcl-base_all
+winunits-base_shared: fcl-registry fcl-base_shared
+winunits-base_smart: fcl-registry fcl-base_smart
+winunits-base_debug: fcl-registry fcl-base_debug
+winunits-base_release: fcl-registry fcl-base_release
+
+winunits-jedi_all: winunits-base_all fcl-registry fcl-base_all
+winunits-jedi_shared: winunits-base_shared fcl-registry fcl-base_shared
+winunits-jedi_smart: winunits-base_smart fcl-registry fcl-base_smart
+winunits-jedi_debug: winunits-base_debug fcl-registry fcl-base_debug
+winunits-jedi_release: winunits-base_release fcl-registry fcl-base_release
+
xforms_all: x11_all
xforms_shared: x11_shared
diff --git a/packages/chm/Makefile b/packages/chm/Makefile
index 913e0bca51..f4b6c1c9b7 100644
--- a/packages/chm/Makefile
+++ b/packages/chm/Makefile
@@ -1,5 +1,5 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/03]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -441,178 +441,178 @@ ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_PROGRAMS+=chmcmd chmls
endif
ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
endif
override INSTALL_FPCPACKAGE=y
ifeq ($(FULL_TARGET),i386-linux)
diff --git a/packages/chm/Makefile.fpc b/packages/chm/Makefile.fpc
index ffd2197ba1..a623e04f9c 100644
--- a/packages/chm/Makefile.fpc
+++ b/packages/chm/Makefile.fpc
@@ -9,7 +9,7 @@ version=2.5.1
[target]
units=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes \
chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer \
- chmfiftimain
+ chmfiftimain lzxcompressthread
programs=chmcmd chmls
examples=
diff --git a/packages/chm/fpmake.pp b/packages/chm/fpmake.pp
index 7c0897779d..3d28527058 100644
--- a/packages/chm/fpmake.pp
+++ b/packages/chm/fpmake.pp
@@ -56,7 +56,7 @@ begin
end;
T:=P.Targets.AddUnit('chmtypes.pas');
with T.Dependencies do
- begin
+ begin
AddUnit('chmbase');
end;
T:=P.Targets.AddUnit('htmlindexer.pas');
@@ -74,6 +74,11 @@ begin
AddUnit('paslzxcomp');
AddUnit('chmfiftimain');
end;
+ T:=P.Targets.AddUnit('lzxcompressthread');
+ with T.Dependencies do
+ begin
+ AddUnit('paslzxcomp');
+ end;
T:=P.Targets.AddUnit('fasthtmlparser.pas');
T:=P.Targets.AddUnit('htmlutil.pas');
T:=P.Targets.AddUnit('paslznonslide.pas');
diff --git a/packages/chm/src/chmfiftimain.pas b/packages/chm/src/chmfiftimain.pas
index 4462791e48..519f32a5b1 100644
--- a/packages/chm/src/chmfiftimain.pas
+++ b/packages/chm/src/chmfiftimain.pas
@@ -67,6 +67,7 @@ type
FWriteStream: TStream;
FBlockStream: TMemoryStream;
ParentNode: TFIftiNode;
+ OwnsParentNode : boolean;
function AdjustedWord(AWord: String; out AOffset: Byte; AOldWord: String): String;
procedure ChildIsFull(AWord: String; ANodeOffset: DWord); virtual; abstract;
function GuessIfCanHold(AWord: String): Boolean; virtual; abstract;
@@ -91,6 +92,7 @@ type
public
procedure WriteToStream;
constructor Create(AStream: TStream; AWordList: TIndexedWordList);
+ destructor Destroy; override;
end;
{ TChmSearchReader }
@@ -259,6 +261,7 @@ begin
FActiveLeafNode.Flush(False); // causes the unwritten parts of the tree to be written
end;
+
procedure TChmSearchWriter.WriteHeader ( IsPlaceHolder: Boolean ) ;
var
TmpNode: TFIftiNode;
@@ -344,6 +347,7 @@ begin
end;
procedure TChmSearchWriter.WriteAWord ( AWord: TIndexedWord ) ;
+
begin
if FActiveLeafNode = nil then
begin
@@ -363,7 +367,6 @@ begin
TLeafNode(FActiveLeafNode).AddWord(AWord);
end;
-
procedure TChmSearchWriter.WriteToStream;
begin
WriteHeader(True);
@@ -376,9 +379,16 @@ constructor TChmSearchWriter.Create ( AStream: TStream;
begin
FStream := AStream;
FWordList := AWordList;
+ FActiveLeafNode:=NIL;
+end;
+
+destructor TChmSearchWriter.Destroy;
+begin
+ freeandnil(FActiveLeafNode);
end;
+
{ TLeafNode }
function TFIftiNode.RemainingSpace: DWord;
@@ -391,11 +401,13 @@ begin
inherited Create;
FWriteStream := AStream;
FBlockStream := TMemoryStream.Create;
+ OwnsParentNode :=false;
end;
destructor TFIftiNode.Destroy;
begin
FBlockStream.Free;
+ if OwnsParentNode then ParentNode.Free;
inherited Destroy;
end;
@@ -486,8 +498,10 @@ begin
if NewBlockNeeded or ((NewBlockNeeded = False) and (ParentNode <> nil)) then
begin
if ParentNode = nil then
- ParentNode := TIndexNode.Create(FWriteStream);
-
+ begin
+ ParentNode := TIndexNode.Create(FWriteStream);
+ OwnsParentNode:=True;
+ end;
ParentNode.ChildIsFull(FLastWord, FLastNodeStart);
if (NewBlockNeeded = False) then
ParentNode.Flush(False);
@@ -675,7 +689,10 @@ begin
if NewBlockNeeded then
begin
if ParentNode = nil then
- ParentNode := TIndexNode.Create(FWriteStream);
+ begin
+ ParentNode := TIndexNode.Create(FWriteStream);
+ OwnsParentNode:=True;
+ end;
end;
if ParentNode <> nil then
diff --git a/packages/chm/src/chmfilewriter.pas b/packages/chm/src/chmfilewriter.pas
index 1cc98b37d7..218de71596 100644
--- a/packages/chm/src/chmfilewriter.pas
+++ b/packages/chm/src/chmfilewriter.pas
@@ -26,10 +26,10 @@ interface
uses
Classes, SysUtils, chmwriter;
-
+
type
TChmProject = class;
-
+
TChmProgressCB = procedure (Project: TChmProject; CurrentFile: String) of object;
{ TChmProject }
@@ -42,6 +42,7 @@ type
FFiles: TStrings;
FIndexFileName: String;
FMakeBinaryTOC: Boolean;
+ FMakeBinaryIndex: Boolean;
FMakeSearchable: Boolean;
FFileName: String;
FOnProgress: TChmProgressCB;
@@ -66,12 +67,13 @@ type
property AutoFollowLinks: Boolean read FAutoFollowLinks write FAutoFollowLinks;
property TableOfContentsFileName: String read FTableOfContentsFileName write FTableOfContentsFileName;
property MakeBinaryTOC: Boolean read FMakeBinaryTOC write FMakeBinaryTOC;
+ property MakeBinaryIndex: Boolean read FMakeBinaryIndex write FMakeBinaryIndex;
property Title: String read FTitle write FTitle;
property IndexFileName: String read FIndexFileName write FIndexFileName;
property MakeSearchable: Boolean read FMakeSearchable write FMakeSearchable;
property DefaultPage: String read FDefaultPage write FDefaultPage;
property DefaultFont: String read FDefaultFont write FDefaultFont;
-
+
property OnProgress: TChmProgressCB read FOnProgress write FOnProgress;
end;
@@ -90,7 +92,7 @@ begin
// clean up the filename
FileName := StringReplace(ExtractFileName(DataName), '\', '/', [rfReplaceAll]);
FileName := StringReplace(FileName, '//', '/', [rfReplaceAll]);
-
+
PathInChm := '/'+ExtractFilePath(DataName);
if Assigned(FOnProgress) then FOnProgress(Self, DataName);
end;
@@ -100,13 +102,28 @@ var
IndexStream: TFileStream;
TOCStream: TFileStream;
Writer: TChmWriter;
- TOCSitemap: TChmSiteMap;
+ TOCSitemap : TChmSiteMap;
+ IndexSiteMap: TChmSiteMap;
begin
// Assign the TOC and index files
Writer := TChmWriter(Sender);
+ {$ifdef chmindex}
+ Writeln('binindex filename ',IndexFileName);
+ {$endif}
if (IndexFileName <> '') and FileExists(IndexFileName) then begin
IndexStream := TFileStream.Create(IndexFileName, fmOpenRead);
Writer.AppendIndex(IndexStream);
+ if MakeBinaryIndex then
+ begin
+ {$ifdef chmindex}
+ Writeln('into binindex ');
+ {$endif}
+ IndexStream.Position := 0;
+ IndexSitemap := TChmSiteMap.Create(stIndex);
+ indexSitemap.LoadFromStream(IndexStream);
+ Writer.AppendBinaryIndexFromSiteMap(IndexSitemap,False);
+ IndexSitemap.Free;
+ end;
IndexStream.Free;
end;
if (TableOfContentsFileName <> '') and FileExists(TableOfContentsFileName) then begin
@@ -145,7 +162,7 @@ begin
Cfg := TXMLConfig.Create(nil);
Cfg.Filename := AFileName;
FileName := AFileName;
-
+
Files.Clear;
FileCount := Cfg.GetValue('Files/Count/Value', 0);
for I := 0 to FileCount-1 do begin
@@ -153,8 +170,9 @@ begin
end;
IndexFileName := Cfg.GetValue('Files/IndexFile/Value','');
TableOfContentsFileName := Cfg.GetValue('Files/TOCFile/Value','');
+ // For chm file merging, bintoc must be false and binindex true. Change defaults in time?
MakeBinaryTOC := Cfg.GetValue('Files/MakeBinaryTOC/Value', True);
-
+ MakeBinaryIndex:= Cfg.GetValue('Files/MakeBinaryIndex/Value', False);
AutoFollowLinks := Cfg.GetValue('Settings/AutoFollowLinks/Value', False);
MakeSearchable := Cfg.GetValue('Settings/MakeSearchable/Value', False);
DefaultPage := Cfg.GetValue('Settings/DefaultPage/Value', '');
@@ -181,7 +199,7 @@ begin
Cfg.SetValue('Files/IndexFile/Value', IndexFileName);
Cfg.SetValue('Files/TOCFile/Value', TableOfContentsFileName);
Cfg.SetValue('Files/MakeBinaryTOC/Value',MakeBinaryTOC);
-
+ Cfg.SetValue('Files/MakeBinaryIndex/Value',MakeBinaryIndex);
Cfg.SetValue('Settings/AutoFollowLinks/Value', AutoFollowLinks);
Cfg.SetValue('Settings/MakeSearchable/Value', MakeSearchable);
Cfg.SetValue('Settings/DefaultPage/Value', DefaultPage);
@@ -212,7 +230,7 @@ begin
// our callback to get data
Writer.OnGetFileData := @GetData;
Writer.OnLastFile := @LastFileAdded;
-
+
// give it the list of files
Writer.FilesToCompress.AddStrings(Files);
@@ -222,10 +240,11 @@ begin
Writer.DefaultFont := DefaultFont;
Writer.FullTextSearch := MakeSearchable;
Writer.HasBinaryTOC := MakeBinaryTOC;
-
+ Writer.HasBinaryIndex := MakeBinaryIndex;
+
// and write!
Writer.Execute;
-
+
if Assigned(TOCStream) then TOCStream.Free;
if Assigned(IndexStream) then IndexStream.Free;
end;
diff --git a/packages/chm/src/chmreader.pas b/packages/chm/src/chmreader.pas
index d68c4470be..3a72cb16bb 100644
--- a/packages/chm/src/chmreader.pas
+++ b/packages/chm/src/chmreader.pas
@@ -116,7 +116,8 @@ type
public
function GetContextUrl(Context: THelpContext): String;
function LookupTopicByID(ATopicID: Integer; out ATitle: String): String; // returns a url
- function GetTOCSitemap: TChmSiteMap;
+ function GetTOCSitemap(ForceXML:boolean=false): TChmSiteMap;
+ function GetIndexSitemap(ForceXML:boolean=false): TChmSiteMap;
function HasContextList: Boolean;
property DefaultPage: String read fDefaultPage;
property IndexFile: String read fIndexFile;
@@ -875,7 +876,241 @@ begin
end;
end;
-function TChmReader.GetTOCSitemap: TChmSiteMap;
+const DefBlockSize = 2048;
+
+function LoadBtreeHeader(m:TMemoryStream;var btreehdr:TBtreeHeader):boolean;
+
+begin
+ if m.size<sizeof(TBtreeHeader) Then
+ Exit(False);
+ result:=true;
+ m.read(btreeHdr,sizeof(TBtreeHeader));
+ {$IFDEF ENDIAN_BIG}
+ btreehdr.flags :=LEToN(btreehdr.flags);
+ btreehdr.blocksize :=LEToN(btreehdr.blocksize);
+ btreehdr.lastlstblock :=LEToN(btreehdr.lastlstblock);
+ btreehdr.indexrootblock:=LEToN(btreehdr.indexrootblock);
+ btreehdr.nrblock :=LEToN(btreehdr.nrblock);
+ btreehdr.treedepth :=LEToN(btreehdr.treedepth);
+ btreehdr.nrkeywords :=LEToN(btreehdr.nrkeywords);
+ btreehdr.codepage :=LEToN(btreehdr.codepage);
+ btreehdr.lcid :=LEToN(btreehdr.lcid);
+ btreehdr.ischm :=LEToN(btreehdr.ischm);
+ {$endif}
+end;
+
+function readwcharstring(var head:pbyte;tail:pbyte;var readv : ansistring):boolean;
+
+var pw : PWord;
+ oldhead : PByte;
+ ws : WideString;
+ n : Integer;
+begin
+ oldhead:=head;
+ pw:=pword(head);
+ while (pw<pword(tail)) and (pw^<>word(0)) do
+ inc(pw);
+ inc(pw); // skip #0#0.
+ head:=pbyte(pw);
+ result:=head<tail;
+
+ n:=head-oldhead;
+ setlength(ws,n div sizeof(widechar));
+ move(oldhead^,ws[1],n);
+ for n:=1 to length(ws) do
+ word(ws[n]):=LEToN(word(ws[n]));
+ readv:=ws; // force conversion for now, and hope it doesn't require cwstring
+end;
+
+function TChmReader.GetIndexSitemap(ForceXML:boolean=false): TChmSiteMap;
+var Index : TMemoryStream;
+ sitemap : TChmSiteMap;
+ Item : TChmSiteMapItem;
+
+function AbortAndTryTextual:tchmsitemap;
+
+begin
+ if Assigned(Index) Then Index.Free;
+ // Second Try text Index
+ Index := GetObject(IndexFile);
+ if Index <> nil then
+ begin
+ Result := TChmSiteMap.Create(stIndex);
+ Result.LoadFromStream(Index);
+ Index.Free;
+ end
+ else
+ result:=nil;
+end;
+
+procedure createentry(Name:ansistring;CharIndex:integer;Topic,Title:ansistring);
+var litem : TChmSiteMapItem;
+ shortname : ansistring;
+ longpart : ansistring;
+begin
+ if charindex=0 then
+ begin
+ item:=sitemap.items.NewItem;
+ item.keyword:=Name;
+ item.local:=topic;
+ item.text:=title;
+ end
+ else
+ begin
+ shortname:=copy(name,1,charindex-2);
+ longpart:=copy(name,charindex,length(name)-charindex+1);
+ if assigned(item) and (shortname=item.text) then
+ begin
+ litem:=item.children.newitem;
+ litem.local:=topic;
+ litem.keyword :=longpart; // recursively split this? No examples.
+ litem.text:=title;
+ end
+ else
+ begin
+ item:=sitemap.items.NewItem;
+ item.keyword:=shortname;
+ item.local:=topic;
+ item.text:=title;
+ litem:=item.children.newitem;
+ litem.keyword:=longpart;
+ litem.local:=topic;
+ litem.text :=Title; // recursively split this? No examples.
+ end;
+ end;
+end;
+
+procedure parselistingblock(p:pbyte);
+var hdr:PBTreeBlockHeader;
+ head,tail : pbyte;
+ isseealso,
+ nrpairs : Integer;
+ i : integer;
+ PE : PBtreeBlockEntry;
+ title : string;
+ CharIndex,
+ ind:integer;
+ seealsostr,
+ topic,
+ Name : AnsiString;
+ item : TChmSiteMapItem;
+begin
+ hdr:=PBTreeBlockHeader(p);
+ hdr^.Length :=LEToN(hdr^.Length);
+ hdr^.NumberOfEntries :=LEToN(hdr^.NumberOfEntries);
+ hdr^.IndexOfPrevBlock:=LEToN(hdr^.IndexOfPrevBlock);
+ hdr^.IndexOfNextBlock:=LEToN(hdr^.IndexOfNextBlock);
+
+ tail:=p+(2048-hdr^.length);
+ head:=p+sizeof(TBtreeBlockHeader);
+
+ {$ifdef binindex}
+ writeln('previndex : ',hdr^.IndexOfPrevBlock);
+ writeln('nextindex : ',hdr^.IndexOfNextBlock);
+ {$endif}
+ while head<tail do
+ begin
+ if not ReadWCharString(Head,Tail,Name) Then
+ Break;
+ {$ifdef binindex}
+ Writeln('name : ',name);
+ {$endif}
+ if (head+sizeof(TBtreeBlockEntry))>=tail then
+ break;
+ PE :=PBtreeBlockEntry(head);
+ NrPairs :=LEToN(PE^.nrpairs);
+ IsSeealso:=LEToN(PE^.isseealso);
+ CharIndex:=LEToN(PE^.CharIndex);
+ {$ifdef binindex}
+ Writeln('seealso: ',IsSeeAlso);
+ Writeln('entrydepth: ',LEToN(PE^.entrydepth));
+ Writeln('charindex : ',charindex );
+ Writeln('Nrpairs : ',NrPairs);
+ writeln('seealso data : ');
+ {$endif}
+
+ inc(head,sizeof(TBtreeBlockEntry));
+ if isseealso>0 then
+ begin
+ if not ReadWCharString(Head,Tail,SeeAlsoStr) Then
+ Break;
+ // have to figure out first what to do with it.
+ end
+ else
+ begin
+ if NrPairs>0 Then
+ for i:=0 to nrpairs-1 do
+ begin
+ if head<tail Then
+ begin
+ ind:=LEToN(plongint(head)^);
+ topic:=lookuptopicbyid(ind,title);
+ {$ifdef binindex}
+ writeln(i:3,' topic: ',topic);
+ writeln(' title: ',title);
+ {$endif}
+ inc(head,4);
+ end;
+ end;
+ end;
+ if nrpairs<>0 Then
+ createentry(Name,CharIndex,Topic,Title);
+ inc(head,4); // always 1
+ {$ifdef binindex}
+ if head<tail then
+ writeln('Zero based index (13 higher than last) :',plongint(head)^);
+ {$endif}
+ inc(head,4); // zero based index (13 higher than last
+ end;
+end;
+
+var TryTextual : boolean;
+ BHdr : TBTreeHeader;
+ block : Array[0..2047] of Byte;
+ i : Integer;
+begin
+ Result := nil; SiteMap:=Nil;
+ // First Try Binary
+ Index := GetObject('/$WWKeywordLinks/BTree');
+ if (Index = nil) or ForceXML then
+ begin
+ Result:=AbortAndTryTextual;
+ Exit;
+ end;
+ if not CheckCommonStreams then
+ begin
+ Result:=AbortAndTryTextual;
+ Exit;
+ end;
+ SiteMap:=TChmSitemap.Create(StIndex);
+ Item :=Nil; // cached last created item, in case we need to make
+ // a child.
+ TryTextual:=True;
+ BHdr.LastLstBlock:=0;
+ if LoadBtreeHeader(index,BHdr) and (BHdr.LastLstBlock>0) Then
+ begin
+ if BHdr.BlockSize=defblocksize then
+ begin
+ for i:=0 to BHdr.lastlstblock do
+ begin
+ if (index.size-index.position)>=defblocksize then
+ begin
+ Index.read(block,defblocksize);
+ parselistingblock(@block)
+ end;
+ end;
+ trytextual:=false;
+ result:=sitemap;
+ end;
+ end;
+ if trytextual then
+ begin
+ sitemap.free;
+ Result:=AbortAndTryTextual;
+ end;
+end;
+
+function TChmReader.GetTOCSitemap(ForceXML:boolean=false): TChmSiteMap;
function AddTOCItem(TOC: TStream; AItemOffset: DWord; SiteMapITems: TChmSiteMapItems): DWord;
var
Props: DWord;
@@ -919,8 +1154,9 @@ begin
Result := nil;
// First Try Binary
TOC := GetObject('/#TOCIDX');
- if TOC = nil then
+ if (TOC = nil) or ForceXML then
begin
+ if Assigned(TOC) Then Toc.Free;
// Second Try text toc
TOC := GetObject(TOCFile);
if TOC <> nil then
diff --git a/packages/chm/src/chmsitemap.pas b/packages/chm/src/chmsitemap.pas
index dd15d2cfa3..fa13854b2b 100644
--- a/packages/chm/src/chmsitemap.pas
+++ b/packages/chm/src/chmsitemap.pas
@@ -124,6 +124,7 @@ type
FUseFolderImages: Boolean;
FWindowName: String;
FLevel: Integer;
+ FLevelForced: Boolean;
FWindowStyles: LongInt;
procedure SetItems(const AValue: TChmSiteMapItems);
protected
@@ -202,7 +203,7 @@ begin
else begin // looking for /HTML
if TagName = '/HTML' then Exclude(FSiteMapTags, smtHTML);
end;}
-
+
//if (smtHTML in FSiteMapTags) then begin
if not (smtBODY in FSiteMapTags) then begin
if TagName = 'BODY' then Include(FSiteMapTags, smtBODY);
@@ -210,7 +211,7 @@ begin
else begin
if TagName = '/BODY' then Exclude(FSiteMapTags, smtBODY);
end;
-
+
if (smtBODY in FSiteMapTags) then begin
//WriteLn('GOT TAG: ', AActualTag);
if TagName = 'UL' then begin
@@ -221,16 +222,26 @@ begin
//WriteLN('Dec Level');
DecreaseULevel;
end
+ else if (TagName = 'LI') and (FLevel = 0) then
+ FLevelForced := True
else if TagName = 'OBJECT' then begin
Include(FSiteMapBodyTags, smbtOBJECT);
+ if FLevelForced then
+ IncreaseULevel;
If FLevel > 0 then // if it is zero it is the site properties
NewSiteMapItem;
end
else if TagName = '/OBJECT' then begin
Exclude(FSiteMapBodyTags, smbtOBJECT);
+ if FLevelForced then
+ begin
+ DecreaseULevel;
+ FLevelForced := False;
+ end;
end
else begin // we are the properties of the object tag
- if (smbtOBJECT in FSiteMapBodyTags) then begin
+ if (FLevel > 0 ) and (smbtOBJECT in FSiteMapBodyTags) then begin
+
if LowerCase(GetTagName(AActualTag)) = 'param' then begin
TagAttributeName := GetVal(AActualTag, 'name');
diff --git a/packages/chm/src/chmtypes.pas b/packages/chm/src/chmtypes.pas
index 057671f9fc..ffe8a5f540 100644
--- a/packages/chm/src/chmtypes.pas
+++ b/packages/chm/src/chmtypes.pas
@@ -25,13 +25,13 @@ unit chmtypes;
interface
uses
- Classes, SysUtils;
-
+ Classes, SysUtils;
+
type
TSectionName = (snMSCompressed, snUnCompressed);
-
+
TSectionNames = set of TSectionName;
-
+
{ TDirectoryChunk }
TDirectoryChunk = class(TObject)
@@ -52,7 +52,7 @@ type
property ItemCount: Word read FItemCount;
constructor Create(AHeaderSize: Integer);
end;
-
+
{ TPMGIDirectoryChunk }
TPMGIDirectoryChunk = class(TDirectoryChunk)
@@ -134,8 +134,60 @@ type
Unknown: Word; // 0,2,4,8,10,12,16,32
end;
+ TBtreeHeader = packed record
+ ident : array[0..1] of ansichar; // $3B $29
+ flags : word; // bit $2 is always 1, bit $0400 1 if dir? (always on)
+ blocksize : word; // size of blocks (2048)
+ dataformat : array[0..15] of ansichar; // "X44" always the same, see specs.
+ unknown0 : dword; // always 0
+ lastlstblock : dword; // index of last listing block in the file;
+ indexrootblock : dword; // Index of the root block in the file.
+ unknown1 : dword; // always -1
+ nrblock : dword; // Number of blocks
+ treedepth : word; // The depth of the tree of blocks (1 if no index blocks, 2 one level of index blocks, ...)
+ nrkeywords : dword; // number of keywords in the file.
+ codepage : dword; // Windows code page identifier (usually 1252 - Windows 3.1 US (ANSI))
+ lcid : dword; // LCID from the HHP file.
+ ischm : dword; // 0 if this a BTREE and is part of a CHW file, 1 if it is a BTree and is part of a CHI or CHM file
+ unknown2 : dword; // Unknown. Almost always 10031. Also 66631 (accessib.chm, ieeula.chm, iesupp.chm, iexplore.chm, msoe.chm, mstask.chm, ratings.chm, wab.chm).
+ unknown3 : dword; // unknown 0
+ unknown4 : dword; // unknown 0
+ unknown5 : dword; // unknown 0
+ end;
+ PBTreeBlockHeader = ^TBtreeBlockHeader;
+ TBtreeBlockHeader = packed record
+ Length : word; // Length of free space at the end of the block.
+ NumberOfEntries : word; // Number of entries in the block.
+ IndexOfPrevBlock : dword; // Index of the previous block. -1 if this is the first listing block.
+ IndexOfNextBlock : dword; // Index of the next block. -1 if this is the last listing block.
+ end;
+
+ PBtreeBlockEntry = ^TBtreeBlockEntry;
+ TBtreeBlockEntry = packed record
+ isseealso : word; // 2 if this keyword is a See Also keyword, 0 if it is not.
+ entrydepth : word; // Depth of this entry into the tree.
+ charindex : dword;// Character index of the last keyword in the ", " separated list.
+ unknown0 : dword;// 0 (unknown)
+ NrPairs : dword;// Number of Name, Local pairs
+ end;
+
+ PBtreeIndexBlockHeader = ^TBtreeIndexBlockHeader;
+ TBtreeIndexBlockHeader = packed record
+ length : word; // Length of free space at the end of the block.
+ NumberOfEntries : word; // Number of entries in the block.
+ IndexOfChildBlock : dword; // Index of Child Block
+ end;
+
+ PBtreeIndexBlockEntry = ^TBtreeIndexBlockEntry;
+ TBtreeIndexBlockEntry = packed record
+ isseealso : word; // 2 if this keyword is a See Also keyword, 0 if it is not.
+ entrydepth : word; // Depth of this entry into the tree.
+ charindex : dword;// Character index of the last keyword in the ", " separated list.
+ unknown0 : dword;// 0 (unknown)
+ NrPairs : dword;// Number of Name, Local pairs
+ end;
- function PageBookInfoRecordSize(ARecord: PTOCEntryPageBookInfo): Integer;
+function PageBookInfoRecordSize(ARecord: PTOCEntryPageBookInfo): Integer;
implementation
uses chmbase;
@@ -174,7 +226,7 @@ begin
Move(Data^, Buffer[CurrentPos], Size);
Inc(CurrentPos, Size);
Inc(FItemCount);
-
+
// now put a quickref entry if needed
if ItemCount mod 5 = 0 then begin
Inc(FQuickRefEntries);
@@ -312,7 +364,7 @@ begin
WriteChunkToStream(Stream);
NewPos := Stream.Position;
Inc(FChunkLevelCount);
-
+
if Final and (ChunkLevelCount < 2) then begin
FParentChunk.Free;
FParentChunk := nil;
@@ -332,7 +384,7 @@ begin
if not FParentChunk.CanHold(WriteSize) then begin
FinishBlock;
end;
-
+
FParentChunk.WriteEntry(WriteSize, @NewBuffer[0]);
if Final then FinishBlock;
//WriteLn(ChunkLevelCount);
diff --git a/packages/chm/src/chmwriter.pas b/packages/chm/src/chmwriter.pas
index 705af4b938..1c479c42d0 100644
--- a/packages/chm/src/chmwriter.pas
+++ b/packages/chm/src/chmwriter.pas
@@ -20,9 +20,10 @@
}
unit chmwriter;
{$MODE OBJFPC}{$H+}
+{ $DEFINE LZX_USETHREADS}
interface
-uses Classes, ChmBase, chmtypes, chmspecialfiles, HtmlIndexer, chmsitemap;
+uses Classes, ChmBase, chmtypes, chmspecialfiles, HtmlIndexer, chmsitemap, Avl_Tree{$IFDEF LZX_USETHREADS}, lzxcompressthread{$ENDIF};
type
@@ -33,6 +34,15 @@ type
// FileName : /home/user/helpstuff/index.html > index.html
// Stream : the file opened with DataName should be written to this stream
+Type
+ TStringIndex = Class // AVLTree needs wrapping in non automated reference type
+ TheString : String;
+ StrId : Integer;
+ end;
+ TUrlStrIndex = Class
+ UrlStr : String;
+ UrlStrId : Integer;
+ end;
{ TChmWriter }
@@ -40,9 +50,9 @@ type
FOnLastFile: TNotifyEvent;
private
FHasBinaryTOC: Boolean;
-
+ FHasBinaryIndex: Boolean;
ForceExit: Boolean;
-
+
FDefaultFont: String;
FDefaultPage: String;
FFullTextSearch: Boolean;
@@ -82,6 +92,10 @@ type
HeaderSuffix: TITSFHeaderSuffix; //contains the offset of CONTENTSection0 from zero
HeaderSection0: TITSPHeaderPrefix;
HeaderSection1: TITSPHeader; // DirectoryListings header
+ FAvlStrings : TAVLTree; // dedupe strings
+ FAvlURLStr : TAVLTree; // dedupe urltbl + binindex must resolve URL to topicid
+ SpareString : TStringIndex;
+ SpareUrlStr : TUrlStrIndex;
// DirectoryListings
// CONTENT Section 0 (section 1 is contained in section 0)
// EOF
@@ -109,6 +123,7 @@ type
function AddString(AString: String): LongWord;
function AddURL(AURL: String; TopicsIndex: DWord): LongWord;
procedure CheckFileMakeSearchable(AStream: TStream; AFileEntry: TFileEntryRec);
+ function AddTopic(ATitle,AnUrl:AnsiString):integer;
function NextTopicIndex: Integer;
// callbacks for lzxcomp
function AtEndOfData: Longbool;
@@ -116,13 +131,23 @@ type
function WriteCompressedData(Count: Longint; Buffer: Pointer): LongInt;
procedure MarkFrame(UnCompressedTotal, CompressedTotal: LongWord);
// end callbacks
+ {$IFDEF LZX_USETHREADS}
+ // callbacks for lzx compress threads
+ function LTGetData(Sender: TLZXCompressor; WantedByteCount: Integer; Buffer: Pointer): Integer;
+ function LTIsEndOfFile(Sender: TLZXCompressor): Boolean;
+ procedure LTChunkDone(Sender: TLZXCompressor; CompressedSize: Integer; UncompressedSize: Integer; Buffer: Pointer);
+ procedure LTMarkFrame(Sender: TLZXCompressor; CompressedTotal: Integer; UncompressedTotal: Integer);
+ {$ENDIF}
+ // end callbacks
public
constructor Create(OutStream: TStream; FreeStreamOnDestroy: Boolean);
destructor Destroy; override;
procedure Execute;
procedure AppendTOC(AStream: TStream);
procedure AppendBinaryTOCFromSiteMap(ASiteMap: TChmSiteMap);
+ procedure AppendBinaryIndexFromSiteMap(ASiteMap: TChmSiteMap;chw:boolean);
procedure AppendBinaryTOCStream(AStream: TStream);
+ procedure AppendBinaryIndexStream(IndexStream,DataStream,MapStream,Propertystream: TStream;chw:boolean);
procedure AppendIndex(AStream: TStream);
procedure AppendSearchDB(AName: String; AStream: TStream);
procedure AddStreamToArchive(AFileName, APath: String; AStream: TStream; Compress: Boolean = True);
@@ -138,6 +163,7 @@ type
property FullTextSearch: Boolean read FFullTextSearch write FFullTextSearch;
property SearchTitlesOnly: Boolean read FSearchTitlesOnly write FSearchTitlesOnly;
property HasBinaryTOC: Boolean read FHasBinaryTOC write FHasBinaryTOC;
+ property HasBinaryIndex: Boolean read FHasBinaryIndex write FHasBinaryIndex;
property DefaultFont: String read FDefaultFont write FDefaultFont;
property DefaultPage: String read FDefaultPage write FDefaultPage;
property TempRawStream: TStream read FTempStream write SetTempRawStream;
@@ -148,12 +174,38 @@ implementation
uses dateutils, sysutils, paslzxcomp, chmFiftiMain;
const
-
LZX_WINDOW_SIZE = 16; // 16 = 2 frames = 1 shl 16
LZX_FRAME_SIZE = $8000;
+ {$ifdef binindex}
+ procedure logentry(s:string);
+ begin
+ Writeln(s);
+ flush(stdout);
+ end;
+ {$endif}
{$I chmobjinstconst.inc}
+
+Function CompareStrings(Node1, Node2: Pointer): integer;
+var n1,n2 : TStringIndex;
+begin
+ n1:=TStringIndex(Node1); n2:=TStringIndex(Node2);
+ Result := CompareText(n1.TheString, n2.TheString);
+ if Result < 0 then Result := -1
+ else if Result > 0 then Result := 1;
+end;
+
+
+Function CompareUrlStrs(Node1, Node2: Pointer): integer;
+var n1,n2 : TUrlStrIndex;
+begin
+ n1:=TUrlStrIndex(Node1); n2:=TUrlStrIndex(Node2);
+ Result := CompareText(n1.UrlStr, n2.UrlStr);
+ if Result < 0 then Result := -1
+ else if Result > 0 then Result := 1;
+end;
+
{ TChmWriter }
procedure TChmWriter.InitITSFHeader;
@@ -179,10 +231,10 @@ begin
// header section 1
HeaderSection1Table.PosFromZero := HeaderSection0Table.PosFromZero + HeaderSection0Table.Length;
HeaderSection1Table.Length := SizeOf(TITSPHeader)+FDirectoryListings.Size;
-
+
//contains the offset of CONTENT Section0 from zero
HeaderSuffix.Offset := HeaderSection1Table.PosFromZero + HeaderSection1Table.Length;
-
+
// now fix endian stuff
HeaderSection0Table.PosFromZero := NToLE(HeaderSection0Table.PosFromZero);
HeaderSection0Table.Length := NToLE(HeaderSection0Table.Length);
@@ -209,7 +261,7 @@ begin
//IndexOfRootChunk := -1;// if no root chunk
//FirstPMGLChunkIndex,
//LastPMGLChunkIndex: LongWord;
-
+
Unknown2 := NToLE(Longint(-1));
//DirectoryChunkCount: LongWord;
LanguageID := NToLE(DWord($0409));
@@ -219,7 +271,7 @@ begin
Unknown4 := NToLE(Longint(-1));
Unknown5 := NToLE(Longint(-1));
end;
-
+
// more endian stuff
HeaderSuffix.Offset := NToLE(HeaderSuffix.Offset);
end;
@@ -289,7 +341,7 @@ const
ParentIndex,
TmpIndex: TPMGIDirectoryChunk;
begin
- with IndexHeader do
+ with IndexHeader do
begin
PMGIsig := PMGI;
UnusedSpace := NToLE(IndexBlock.FreeSpace);
@@ -298,11 +350,11 @@ const
IndexBlock.WriteChunkToStream(FDirectoryListings, ChunkIndex, ShouldFinish);
IndexBlock.Clear;
if HeaderSection1.IndexOfRootChunk < 0 then HeaderSection1.IndexOfRootChunk := ChunkIndex;
- if ShouldFinish then
+ if ShouldFinish then
begin
HeaderSection1.IndexTreeDepth := 2;
ParentIndex := IndexBlock.ParentChunk;
- if ParentIndex <> nil then
+ if ParentIndex <> nil then
repeat // the parent index is notified by our child index when to write
HeaderSection1.IndexOfRootChunk := ChunkIndex;
TmpIndex := ParentIndex;
@@ -344,7 +396,7 @@ begin
FInternalFiles.Sort;
HeaderSection1.IndexTreeDepth := 1;
HeaderSection1.IndexOfRootChunk := -1;
-
+
ChunkIndex := 0;
IndexBlock := TPMGIDirectoryChunk.Create(SizeOf(TPMGIIndexChunk));
@@ -375,9 +427,9 @@ begin
if not ListingBlock.CanHold(Size) then
WriteListChunk;
-
+
ListingBlock.WriteEntry(Size, @Buffer[0]);
-
+
if ListingBlock.ItemCount = 1 then begin // add the first list item to the index
Move(Buffer[0], FirstListEntry.Entry[0], FESize);
FirstListEntry.Size := FESize + WriteCompressedInteger(@FirstListEntry.Entry[FESize], ChunkIndex);
@@ -395,7 +447,7 @@ begin
IndexBlock.Free;
ListingBlock.Free;
-
+
//now fix some endian stuff
HeaderSection1.IndexOfRootChunk := NToLE(HeaderSection1.IndexOfRootChunk);
HeaderSection1.IndexTreeDepth := NtoLE(HeaderSection1.IndexTreeDepth);
@@ -463,13 +515,13 @@ begin
// two for a QWord
FSection0.WriteDWord(0);
FSection0.WriteDWord(0);
-
+
FSection0.WriteDWord(0);
FSection0.WriteDWord(0);
-
-
+
+
////////////////////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// 2 default page to load
if FDefaultPage <> '' then begin
@@ -493,14 +545,14 @@ begin
FSection0.Write(FDefaultFont[1], Length(FDefaultFont));
FSection0.WriteByte(0);
end;
-
+
// 6
// unneeded. if output file is : /somepath/OutFile.chm the value here is outfile(lowercase)
{FSection0.WriteWord(6);
FSection0.WriteWord(Length('test1')+1);
Fsection0.Write('test1', 5);
FSection0.WriteByte(0);}
-
+
// 0 Table of contents filename
if FHasTOC then begin
TmpStr := 'default.hhc';
@@ -524,13 +576,16 @@ begin
Entry.DecompressedSize := FSection0.Position - Entry.DecompressedOffset;
FInternalFiles.AddEntry(Entry);
- {// 7 Binary Index
+ // 7 Binary Index
if FHasBinaryIndex then
begin
+ {$ifdef binindex}
+ logentry('binary index!');
+ {$endif}
FSection0.WriteWord(NToLE(Word(7)));
FSection0.WriteWord(NToLE(Word(4)));
FSection0.WriteDWord(DWord(0)); // what is this number to be?
- end;}
+ end;
// 11 Binary TOC
if FHasBinaryTOC then
@@ -551,7 +606,7 @@ begin
Entry.Compressed := False;
Entry.DecompressedOffset :=0;// FSection0.Position;
Entry.DecompressedSize := 0;
-
+
FInternalFiles.AddEntry(Entry);
end;
@@ -569,14 +624,13 @@ begin
cnt:=pinteger(state)^;
for i := 0 to AWord.DocumentCount-1 do
Inc(cnt, AWord.GetLogicalDocument(i).NumberOfIndexEntries);
- // was commented in original procedure, seems to list index entries per doc.
+ // was commented in original procedure, seems to list index entries per doc.
//WriteLn(AWord.TheWord,' documents = ', AWord.DocumentCount, ' h
pinteger(state)^:=cnt;
-end;
+end;
procedure TChmWriter.WriteTOPICS;
var
- AWord: TIndexedWord;
FHits: Integer;
i: Integer;
begin
@@ -584,7 +638,7 @@ begin
Exit;
FTopicsStream.Position := 0;
PostAddStreamToArchive('#TOPICS', '/', FTopicsStream);
- // I commented the code below since the result seemed unused
+ // I commented the code below since the result seemed unused
// FHits:=0;
// FIndexedFiles.ForEach(@IterateWord,FHits);
end;
@@ -596,7 +650,7 @@ begin
FContextStream.Position := 0;
// the size of all the entries
FContextStream.WriteDWord(NToLE(DWord(FContextStream.Size-SizeOf(dword))));
-
+
FContextStream.Position := 0;
AddStreamToArchive('#IVB', '/', FContextStream);
end;
@@ -802,7 +856,7 @@ begin
Entry.Path := '::DataSpace/Storage/MSCompressed/';
Entry.Name := 'ControlData';
FInternalFiles.AddEntry(Entry, False);
-
+
// ::DataSpace/Storage/MSCompressed/SpanInfo
Entry.DecompressedOffset := FSection0.Position;
Entry.DecompressedSize := WriteSpanInfoToStream(FSection0, FReadCompressedSize);
@@ -833,16 +887,24 @@ begin
Entry.Name := 'Content';
FInternalFiles.AddEntry(Entry, False);
-
+
end;
function TChmWriter.AddString(AString: String): LongWord;
var
NextBlock: DWord;
Pos: DWord;
+ n : TAVLTreeNode;
+ StrRec : TStringIndex;
begin
// #STRINGS starts with a null char
if FStringsStream.Size = 0 then FStringsStream.WriteByte(0);
+
+ SpareString.TheString:=AString;
+ n:=fAvlStrings.FindKey(SpareString,@CompareStrings);
+ if assigned(n) then
+ exit(TStringIndex(n.data).strid);
+
// each entry is a null terminated string
Pos := DWord(FStringsStream.Position);
@@ -857,11 +919,16 @@ begin
Result := FStringsStream.Position;
FStringsStream.WriteBuffer(AString[1], Length(AString));
FStringsStream.WriteByte(0);
+
+ StrRec:=TStringIndex.Create;
+ StrRec.TheString:=AString;
+ StrRec.Strid :=Result;
+ fAvlStrings.Add(StrRec);
end;
function TChmWriter.AddURL ( AURL: String; TopicsIndex: DWord ) : LongWord;
- procedure CheckURLStrBlockCanHold(AString: String);
+ procedure CheckURLStrBlockCanHold(Const AString: String);
var
Rem: LongWord;
Len: LongWord;
@@ -876,26 +943,48 @@ function TChmWriter.AddURL ( AURL: String; TopicsIndex: DWord ) : LongWord;
end;
end;
- function AddURLString(AString: String): DWord;
+ function AddURLString(Const AString: String): DWord;
+ var urlstrrec : TUrlStrIndex;
begin
CheckURLStrBlockCanHold(AString);
if FURLSTRStream.Size mod $4000 = 0 then
FURLSTRStream.WriteByte(0);
Result := FURLSTRStream.Position;
+ UrlStrRec:=TUrlStrIndex.Create;
+ UrlStrRec.UrlStr:=AString;
+ UrlStrRec.UrlStrid:=result;
+ FAvlUrlStr.Add(UrlStrRec);
FURLSTRStream.WriteDWord(NToLE(DWord(0))); // URL Offset for topic after the the "Local" value
FURLSTRStream.WriteDWord(NToLE(DWord(0))); // Offset of FrameName??
FURLSTRStream.Write(AString[1], Length(AString));
FURLSTRStream.WriteByte(0); //NT
end;
+
+ function LookupUrlString(const AUrl : String):DWord;
+ var n :TAvlTreeNode;
+ begin
+ SpareUrlStr.UrlStr:=AUrl;
+ n:=FAvlUrlStr.FindKey(SpareUrlStr,@CompareUrlStrs);
+ if assigned(n) Then
+ result:=TUrlStrIndex(n.data).UrlStrId
+ else
+ result:=AddUrlString(AUrl);
+ end;
+
+
+var UrlIndex : Integer;
+
begin
if AURL[1] = '/' then Delete(AURL,1,1);
+ UrlIndex:=LookupUrlString(AUrl);
+
//if $1000 - (FURLTBLStream.Size mod $1000) = 4 then // we are at 4092
if FURLTBLStream.Size and $FFC = $FFC then // faster :)
FURLTBLStream.WriteDWord(0);
Result := FURLTBLStream.Position;
FURLTBLStream.WriteDWord(0);//($231e9f5c); //unknown
FURLTBLStream.WriteDWord(NtoLE(TopicsIndex)); // Index of topic in #TOPICS
- FURLTBLStream.WriteDWord(NtoLE(AddURLString(AURL)));
+ FURLTBLStream.WriteDWord(NtoLE(UrlIndex));
end;
function _AtEndOfData(arg: pointer): LongBool; cdecl;
@@ -931,7 +1020,7 @@ begin
FileEntry.DecompressedSize := FCurrentStream.Size;
FileEntry.DecompressedOffset := FReadCompressedSize; //269047723;//to test writing really large numbers
FileEntry.Compressed := True;
-
+
if FullTextSearch then
CheckFileMakeSearchable(FCurrentStream, FileEntry);
@@ -1024,6 +1113,33 @@ begin
// We have to trim the last entry off when we are done because there is no next block in that case
end;
+{$IFDEF LZX_USETHREADS}
+function TChmWriter.LTGetData(Sender: TLZXCompressor; WantedByteCount: Integer;
+ Buffer: Pointer): Integer;
+begin
+ Result := GetData(WantedByteCount, Buffer);
+ //WriteLn('Wanted ', WantedByteCount, ' got ', Result);
+end;
+
+function TChmWriter.LTIsEndOfFile(Sender: TLZXCompressor): Boolean;
+begin
+ Result := AtEndOfData;
+end;
+
+procedure TChmWriter.LTChunkDone(Sender: TLZXCompressor;
+ CompressedSize: Integer; UncompressedSize: Integer; Buffer: Pointer);
+begin
+ WriteCompressedData(CompressedSize, Buffer);
+end;
+
+procedure TChmWriter.LTMarkFrame(Sender: TLZXCompressor;
+ CompressedTotal: Integer; UncompressedTotal: Integer);
+begin
+ MarkFrame(UncompressedTotal, CompressedTotal);
+ //WriteLn('Mark Frame C = ', CompressedTotal, ' U = ', UncompressedTotal);
+end;
+{$ENDIF}
+
procedure TChmWriter.CheckFileMakeSearchable(AStream: TStream; AFileEntry: TFileEntryRec);
var
@@ -1049,6 +1165,28 @@ begin
end;
end;
+function TChmWriter.AddTopic(ATitle,AnUrl:AnsiString):integer;
+
+var
+ TopicEntry: TTopicEntry;
+
+begin
+ if ATitle <> '' then
+ TopicEntry.StringsOffset := AddString(ATitle)
+ else
+ TopicEntry.StringsOffset := $FFFFFFFF;
+ result:=NextTopicIndex;
+ TopicEntry.URLTableOffset := AddURL(AnUrl, Result);
+ TopicEntry.InContents := 2;
+ TopicEntry.Unknown := 0;
+ TopicEntry.TocOffset := 0;
+ FTopicsStream.WriteDWord(LEtoN(TopicEntry.TocOffset));
+ FTopicsStream.WriteDWord(LEtoN(TopicEntry.StringsOffset));
+ FTopicsStream.WriteDWord(LEtoN(TopicEntry.URLTableOffset));
+ FTopicsStream.WriteWord(LEtoN(TopicEntry.InContents));
+ FTopicsStream.WriteWord(LEtoN(TopicEntry.Unknown));
+end;
+
function TChmWriter.NextTopicIndex: Integer;
begin
Result := FTopicsStream.Size div 16;
@@ -1074,6 +1212,11 @@ begin
FDestroyStream := FreeStreamOnDestroy;
FFileNames := TStringList.Create;
FIndexedFiles := TIndexedWordList.Create;
+ FAvlStrings := TAVLTree.Create(@CompareStrings); // dedupe strings
+ FAvlURLStr := TAVLTree.Create(@CompareUrlStrs); // dedupe urltbl + binindex must resolve URL to topicid
+ SpareString := TStringIndex.Create; // We need an object to search in avltree
+ SpareUrlStr := TUrlStrIndex.Create; // to avoid create/free circles we keep one in spare
+ // for searching purposes
end;
destructor TChmWriter.Destroy;
@@ -1093,6 +1236,12 @@ begin
FDirectoryListings.Free;
FFileNames.Free;
FIndexedFiles.Free;
+ SpareString.free;
+ SpareUrlStr.free;
+ FAvlUrlStr.FreeAndClear;
+ FAvlUrlStr.Free;
+ FAvlStrings.FreeAndClear;
+ FAvlStrings.Free;
inherited Destroy;
end;
@@ -1104,12 +1253,12 @@ begin
// write any internal files to FCurrentStream that we want in the compressed section
WriteIVB;
-
+
// written to Section0 (uncompressed)
WriteREADMEFile;
WriteOBJINST;
-
+
// move back to zero so that we can start reading from zero :)
FReadCompressedSize := FCurrentStream.Size;
FCurrentStream.Position := 0; // when compressing happens, first the FCurrentStream is read
@@ -1128,7 +1277,7 @@ begin
//this creates all special files in the archive that start with ::DataSpace
WriteDataSpaceFiles(FSection0);
-
+
// creates all directory listings including header
CreateDirectoryListings;
@@ -1200,7 +1349,7 @@ begin
FreeAndNil(NextLevelItems);
while NextLevelItems <> nil do
- begin
+ begin
CurrentLevelItems := NextLevelItems;
NextLevelItems := TFPList.Create;
@@ -1314,7 +1463,423 @@ begin
TOCIDXStream.Position := 0;
AppendBinaryTOCStream(TOCIDXStream);
TOCIDXStream.Free;
+end;
+Const
+ BinIndexIdent : array[0..1] of char = (CHR($3B),CHR($29));
+ AlwaysX44 : Array[0..15] of char = ('X','4','4',#0,#0,#0,#0,#0,
+ #0,#0,#0,#0,#0,#0,#0,#0);
+ DataEntry : Array[0..12] of Byte = ($00,$00,$00,$00,$05,$00,$00,$00,$80,$00,$00,$00,$00);
+{
+ IndexStream:=TMemoryStream.Create;
+ IndexStream.Write(BinIndexIdent,2);
+ IndexStream.Write(NToLE(word(2)),2);
+ IndexStream.Write(NToLE(word(2048)),2);
+ IndexStream.Write(AlwaysX44,sizeof(AlwaysX44));
+ IndexStrem.Write (dword(0),2);
+}
+
+Const DefBlockSize = 2048;
+
+Type TIndexBlock = Array[0..DefBlockSize-1] of Byte;
+
+procedure writeword(var p:pbyte;w:word); inline;
+
+begin
+ pword(p)^:=NToLE(w);
+ inc(pword(p));
+end;
+
+procedure writedword(var p:pbyte;d:dword); inline;
+
+begin
+ pdword(p)^:=NToLE(d);
+ inc(pdword(p));
+end;
+
+procedure TChmWriter.AppendBinaryIndexFromSiteMap(ASiteMap: TChmSiteMap;chw:boolean);
+
+Var
+ IndexStream : TMemoryStream;
+ //n : Integer;
+ curblock : TIndexBlock; // current listing block being built
+ TestBlock : TIndexBlock; // each entry is first built here. then moved to curblock
+ curind : integer; // next byte to write in testblock.
+ blocknr : Integer; // blocknr of block in testblock;
+ lastblock : Integer; // blocknr of last block.
+ Entries : Integer; // Number of entries in this block so far
+ TotalEntries: Integer; // Total number of entries
+ MapEntries : Integer;
+ MapIndex : Integer;
+ indexblocknr: Integer;
+ blockind : Integer; // next byte to write in blockn[blocknr]
+ blockentries: Integer; // entries so far ins blockn[blocknr]
+ blockn : Array Of TIndexBlock;
+ BlockNPlus1 : Array of TIndexBlock;
+ Mod13value : integer; // A value that is increased by 13 for each entry. (?!?!)
+ EntryToIndex: boolean; // helper var to make sure the first block is always indexed.
+ blocknplusindex : Integer; // blocks in level n+1 (second part)
+ blocknplusentries : Integer; // The other blocks indexed on creation.
+ datastream,mapstream,propertystream : TMemoryStream;
+
+procedure preparecurrentblock;
+
+var p: PBTreeBlockHeader;
+
+begin
+ p:=@curblock[0];
+ p^.Length:=NToLE(Defblocksize-curind);
+ p^.NumberOfEntries:=Entries;
+ p^.IndexOfPrevBlock:=lastblock;
+ p^.IndexOfNextBlock:=Blocknr;
+ IndexStream.Write(curblock[0],Defblocksize);
+ MapStream.Write(NToLE(MapEntries),sizeof(dword));
+ MapStream.Write(NToLE(BlockNr),Sizeof(DWord));
+ MapEntries:=TotalEntries;
+ curind:=sizeof(TBtreeBlockHeader); // index into current block;
+ lastblock:=blocknr;
+ inc(blocknr);
+end;
+
+procedure prepareindexblockn(listingblocknr:integer);
+var p:PBTreeIndexBlockHeader;
+begin
+ p:=@Blockn[IndexBlockNr];
+ p^.Length:=defblocksize-BlockInd;
+ p^.NumberOfEntries:=BlockEntries;
+
+// p^.IndexOfChildBlock // already entered on block creation, since of first entry, not last.
+ inc(Indexblocknr);
+ BlockEntries:=0;
+ BlockInd:=0;
+ if Indexblocknr>=length(blockn) then
+ setlength(blockn,length(blockn)+1); // larger increments also possible. #blocks is kept independantly.
+ p:=@Blockn[IndexBlockNr];
+ p^.IndexOfChildBlock:=ListingBlockNr;
+ blockind:=sizeof(TBTreeIndexBlockHeader);
+end;
+
+procedure finalizeindexblockn(p:pbyte;var ind:integer;Entries:integer);
+var ph:PBTreeIndexBlockHeader;
+begin
+ ph:=PBTreeIndexBlockHeader(p);
+ ph^.Length:=defblocksize-Ind;
+ ph^.NumberOfEntries:=Entries;
+// p^.IndexOfChildBlock // already entered on block creation, since of first entry, not last.
+// inc(Ind);
+end;
+
+procedure CurEntryToIndex(entrysize:integer);
+var p,pentry : pbyte;
+ indexentrysize : integer;
+begin
+ indexentrysize:=entrysize-sizeof(dword); // index entry is 4 bytes shorter, and only the last dword differs
+ if (blockind+indexentrysize)>=Defblocksize then
+ prepareindexblockn(blocknr);
+ p:=@blockn[Indexblocknr][blockind];
+ move(testblock[0],p^,indexentrysize);
+ pentry:=@p[indexentrysize-sizeof(dword)]; // ptr to last dword
+ writedword(pentry,blocknr); // patch up the "index of child field"
+ inc(blockind,indexentrysize);
+end;
+
+procedure CreateEntry(Item:TChmSiteMapItem;Str:WideString;commaatposition:integer);
+
+var p : pbyte;
+ topicid: integer;
+ seealso: Integer;
+ entrysize:Integer;
+ i : Integer;
+begin
+ inc(TotalEntries);
+ p:=@TestBlock[0];
+ for i:=1 to Length(str) do
+ WriteWord(p,Word(str[i])); // write the wstr in little endian
+ WriteWord(p,0); // NT
+// if item.seealso='' then // no seealso for now
+ seealso:=0;
+ // else
+// seealso:=2;
+ WriteWord(p,seealso); // =0 not a see also 2 =seealso
+ WriteWord(p,2); // Entrydepth. We can't know it, so write 2.
+ WriteDword(p,commaatposition); // position of the comma
+ WriteDword(p,0); // unused 0
+ WriteDword(p,1); // for now only local pair.
+ TopicId:=AddTopic(Item.Text,item.Local);
+ WriteDword(p,TopicId);
+ // if seealso then _here_ a wchar NT string with seealso?
+ WriteDword(p,1); // always 1 (unknown);
+ WriteDword(p,mod13value); //a value that increments with 13.
+ mod13value:=mod13value+13;
+ entrysize:=p-pbyte(@testblock[0]);
+ if (curind+entrysize)>=Defblocksize then
+ begin
+ preparecurrentblock;
+ EntrytoIndex:=true;
+ end;
+ if EntryToIndex Then
+ begin
+ CurEntryToIndex(entrysize);
+ EntryToIndex:=False;
+ end;
+ move(testblock[0],curblock[curind],entrysize);
+ inc(curind,entrysize);
+ datastream.write(DataEntry,Sizeof(DataEntry));
+end;
+
+procedure MoveIndexEntry(nr:integer;bytes:integer;childblock:integer);
+var
+ pscr,pdest : pbyte;
+begin
+ {$ifdef binindex}
+ writeln(' moveindexentry ',nr,' bytes:',bytes,' childblock:',childblock);
+ flush(stdout);
+ {$endif}
+
+ if ((blockind+bytes)>=defblocksize) then
+ begin
+ {$ifdef binindex}
+ writeln(' in scalecheck ',blockind);
+ flush(stdout);
+ {$endif}
+
+ FinalizeIndexBlockn(@blocknplus1[blocknplusindex][0],blockind,blocknplusentries);
+ inc(blocknplusindex);
+ if blocknplusindex>=length(blocknplus1) then
+ setlength(blocknplus1,length(blocknplus1)+1);
+ blockInd:=Sizeof(TBTreeIndexBlockHeader);
+ pdword(@blocknplus1[blocknplusindex][0])[4]:=NToLE(ChildBlock); /// init 2nd level index to first 1st level index block
+ end;
+ {$ifdef binindex}
+ writeln(' len:',length(blocknplus1),' blockind:',blockind,' index:',blocknplusindex);
+ flush(stdout);
+ {$endif}
+
+ // copy entry from one indexblock to another
+ pscr:=@blockn[nr][sizeof(TBtreeIndexBlockHeader)];
+ pdest:=@blocknplus1[blocknplusindex][blockind];
+ move(pscr^,pdest^,bytes);
+ pdword(@pdest[bytes-sizeof(dword)])^:=NToLE(childblock); // correcting the childindex
+ inc (blockind,bytes);
+ inc(blocknplusentries); // not needed for writing, but used to check if something has been written. End condition
+end;
+
+function ScanIndexBlock(blk:Pbyte):Integer;
+
+var start : pbyte;
+ n : Integer;
+ i : Integer;
+begin
+ start:=@blk[sizeof(TBtreeIndexBlockHeader)];
+ blk:=start;
+ while pword(blk)^<>0 do // skip wchar
+ inc(pword(blk));
+ inc(pword(blk)); // skip NT
+ inc(pword(blk)); // skip see also
+ inc(pword(blk)); // skip depth
+ inc(pdword(blk)); // skip Character Index.
+ inc(pdword(blk)); // skip always 0
+ n:=LEToN(pdword(blk)^);
+ inc(pdword(blk)); // skip nr of pairs.
+ for i:= 1 to n do
+ inc(pdword(blk)); // skip <n> topicids
+ inc(pdword(blk)); // skip childindex
+ Result:=blk-start;
+end;
+
+procedure CombineWithChildren(ParentItem:TChmSiteMapItem;Str:WideString;commaatposition:integer;first:boolean);
+var i : Integer;
+ Item : TChmSiteMapItem;
+begin
+ if ParentItem.Children.Count = 0 Then
+ Begin
+ // comment/fix next
+ // if commatposition=length(str) then commaatposition:=0;
+ if first then
+ CreateEntry(ParentItem,Str,0)
+ else
+ CreateEntry(ParentItem,Str,commaatposition);
+ End
+ Else
+ for i:=0 to ParentItem.Children.Count-1 do
+ begin
+ item := TChmSiteMapItem(ParentItem.Children.Item[i]);
+ if first Then
+ CombineWithChildren(Item,Str+', '+item.text,commaatposition+2,false)
+ else
+ CombineWithChildren(Item,Str+', '+item.text,commaatposition,false);
+ end;
+end;
+
+Var i : Integer;
+ Key : WideString;
+ Item : TChmSiteMapItem;
+ ListingBlocks : Integer;
+ EntryBytes : Integer;
+ Hdr : TBTreeHeader;
+ TreeDepth : Integer;
+
+{$ifdef binindex}
+procedure printloopvars(i:integer);
+
+begin
+ Writeln('location :' ,i, ' blocknr :', blocknr,' level:',TreeDepth);
+ Writeln('blockn length: ',length(blockn),' indexblocknr: ',indexblocknr,' blockind ',blockind);
+ Writeln('blocknplus1 length: ',length(blocknplus1),' blocknplusindex:',blocknplusindex,' entries:',blocknplusentries);
+ flush(stdout);
+end;
+{$endif}
+begin
+ IndexStream:=TMemoryStream.Create;
+ indexstream.size:=sizeof(TBTreeHeader);
+ IndexStream.position:=Sizeof(TBTreeHeader);
+ datastream:=TMemoryStream.Create;
+ mapstream :=TMemoryStream.Create;
+ mapstream.size:=2;
+ mapstream.position:=2;
+ propertystream :=TMemoryStream.Create;
+ propertystream.write(NToLE(0),sizeof(4));
+ // we iterate over all entries and write listingblocks directly to the stream.
+ // and the first (and maybe last) level is written to blockn.
+ // we can't do higher levels yet because we don't know how many listblocks we get
+ BlockNr :=0; // current block number
+ Lastblock :=-1; // previous block nr or -1 if none.
+ Entries :=0; // entries in this block
+ TotalEntries:=0; // entries so far.
+ Mod13value :=0; // value that increments by 13 entirely.
+ indexblocknr:=0; // nr of first index block.
+ BlockEntries:=0; // entries into current block;
+ MapEntries :=0; // entries before the current listing block, for MAP file
+
+ curind :=sizeof(TBTreeBlockHeader); // index into current listing block;
+ blockind :=sizeof(TBtreeIndexBlockHeader); // index into current index block
+
+ Setlength(blockn,1);
+ pdword(@blockn[0][4])^:=NToLE(0); /// init first listingblock nr to 0 in the first index block
+ EntryToIndex := True;
+ for i:=0 to ASiteMap.Items.Count-1 do
+ begin
+ item := TChmSiteMapItem(ASiteMap.Items.Item[i]);
+ key :=Item.Text;
+ {$ifdef chm_windowsbinindex}
+ // append 2 to all index level 0 entries. This
+ // so we can see if Windows loads the binary or textual index.
+ CombineWithChildren(Item,Key+'2',length(key)+1,true);
+ {$else}
+ CombineWithChildren(Item,Key,length(key),true);
+ {$endif}
+ end;
+ PrepareCurrentBlock; // flush last listing block.
+ Listingblocks:=blocknr; // blocknr is from now on the number of the first block in blockn.
+ // we still need the # of listingblocks for the header though
+
+ {$ifdef binindex}
+ writeln('binindex: listingblocks : '+inttostr(listingblocks),' indexblocks: ',indexblocknr,' entries:',blockentries);
+ {$endif}
+
+ // we have now created and written the listing blocks, and created the first level of index in <blockn>
+ // the following loop uses <blockn> to calculate the next level (in blocknplus1), then write out blockn,
+ // and repeat until we have no entries left.
+
+ // First we finalize the current set of blocks
+
+ if Blockind<>sizeof(TBtreeIndexBlockHeader) Then
+ begin
+ {$ifdef binindex}
+ writeln('finalizing level 1 index');
+ {$endif}
+ FinalizeIndexBlockN(@blockn[indexblocknr][0],blockind,blockentries); // also increasing indexblocknr
+ inc(IndexBlockNr);
+ end;
+ {$ifdef binindex}
+ writeln('binindex: listingblocks : '+inttostr(listingblocks),' indexblocks: ',indexblocknr,' entries:',blockentries);
+ {$endif}
+
+
+ while (Indexblocknr>1) do
+ begin
+ {$ifdef binindex}
+ printloopvars(1);
+ {$endif}
+
+ blockind :=sizeof(TBtreeIndexBlockHeader);
+ pdword(@blockn[0][4])^:=NToLE(Listingblocks); /// init 2nd level index to first 1st level index block
+ blocknplusindex :=0;
+ blocknplusentries :=0;
+ if length(blocknplus1)<1 then
+ Setlength(blocknplus1,1);
+
+ EntryToIndex :=True;
+ {$ifdef binindex}
+ printloopvars(2);
+ {$endif}
+ for i:=0 to Indexblocknr-1 do
+ begin
+ Entrybytes:=ScanIndexBlock(@blockn[i][0]);
+// writeln('after scan ,',i, ' bytes: ',entrybytes,' blocknr:',blocknr,' indexblocknr:',indexblocknr,' to:',blocknr+i);
+ MoveIndexEntry(i,Entrybytes,blocknr+i);
+ indexStream.Write(blockn[i][0],defblocksize);
+ end;
+
+ {$ifdef binindex}
+ printloopvars(3);
+ {$endif}
+
+ If Blockind<>sizeof(TBtreeIndexBlockHeader) Then
+ begin
+ {$ifdef binindex}
+ logentry('finalizing');
+ {$endif}
+ FinalizeIndexBlockn(@blocknplus1[blocknplusindex][0],blockind,blocknplusentries);
+ inc(blocknplusindex);
+ end;
+
+ inc(blocknr,indexblocknr);
+
+ indexblocknr:=blocknplusindex;
+ blockn:=copy(blocknplus1); setlength(blocknplus1,1);
+ {$ifdef binindex}
+ printloopvars(5);
+ {$endif}
+
+ inc(TreeDepth);
+ end;
+ indexStream.Write(blockn[0][0],defblocksize);
+ inc(blocknr);
+ // Fixup header.
+ hdr.ident[0]:=chr($3B); hdr.ident[1]:=chr($29);
+ hdr.flags :=NToLE($2); // bit $2 is always 1, bit $0400 1 if dir? (always on)
+ hdr.blocksize :=NToLE(defblocksize); // size of blocks (2048)
+ hdr.dataformat :=AlwaysX44; // "X44" always the same, see specs.
+ hdr.unknown0 :=NToLE(0); // always 0
+ hdr.lastlstblock :=NToLE(ListingBlocks-1); // index of last listing block in the file;
+ hdr.indexrootblock :=NToLE(blocknr-1); // Index of the root block in the file.
+ hdr.unknown1 :=NToLE(-1); // always -1
+ hdr.nrblock :=NToLE(blocknr); // Number of blocks
+ hdr.treedepth :=NToLE(TreeDepth); // The depth of the tree of blocks (1 if no index blocks, 2 one level of index blocks, ...)
+ hdr.nrkeywords :=NToLE(Totalentries); // number of keywords in the file.
+ hdr.codepage :=NToLE(1252); // Windows code page identifier (usually 1252 - Windows 3.1 US (ANSI))
+ hdr.lcid :=NToLE(0); // ???? LCID from the HHP file.
+ if not chw then
+ hdr.ischm :=NToLE(1) // 0 if this a BTREE and is part of a CHW file, 1 if it is a BTree and is part of a CHI or CHM file
+ else
+ hdr.ischm :=NToLE(0);
+ hdr.unknown2 :=NToLE(10031); // Unknown. Almost always 10031. Also 66631 (accessib.chm, ieeula.chm, iesupp.chm, iexplore.chm, msoe.chm, mstask.chm, ratings.chm, wab.chm).
+ hdr.unknown3 :=NToLE(0); // unknown 0
+ hdr.unknown4 :=NToLE(0); // unknown 0
+ hdr.unknown5 :=NToLE(0); // unknown 0
+
+ IndexStream.Position:=0;
+ IndexStream.write(hdr,sizeof(hdr));
+ {$ifdef binindex}
+ logentry('before append');
+ {$endif}
+
+ AppendBinaryIndexStream(IndexStream,datastream,MapStream,PropertyStream,chw);
+ IndexStream.Free;
+ PropertyStream.Free;
+ MapStream.Free;
+ DataStream.Free;
end;
procedure TChmWriter.AppendBinaryTOCStream(AStream: TStream);
@@ -1322,6 +1887,27 @@ begin
AddStreamToArchive('#TOCIDX', '/', AStream, True);
end;
+procedure TChmWriter.AppendBinaryIndexStream(IndexStream,DataStream,MapStream,Propertystream: TStream;chw:boolean);
+
+procedure stadd(fn:string;stream:TStream);
+
+begin
+ Stream.Position:=0;
+ if CHW then
+ fn:=uppercase(fn);
+ {$ifdef binindex}
+ logentry('before append '+fn);
+ {$endif}
+ AddStreamToArchive(fn,'/$WWKeywordLinks/',stream,True);
+end;
+
+begin
+ stadd('BTree',IndexStream);
+ stadd('Data', DataStream);
+ stadd('Map' , MapStream);
+ stadd('Property', PropertyStream);
+end;
+
procedure TChmWriter.AppendIndex(AStream: TStream);
begin
FHasIndex := True;
@@ -1410,9 +1996,14 @@ end;
procedure TChmWriter.StartCompressingStream;
var
+ {$IFNDEF LZX_USETHREADS}
LZXdata: Plzx_data;
WSize: LongInt;
+ {$ELSE}
+ Compressor: TLZXCompressor;
+ {$ENDIF}
begin
+ {$IFNDEF LZX_USETHREADS}
lzx_init(@LZXdata, LZX_WINDOW_SIZE, @_GetData, Self, @_AtEndOfData,
@_WriteCompressedData, Self, @_MarkFrame, Self);
@@ -1426,6 +2017,16 @@ begin
MarkFrame(LZXdata^.len_uncompressed_input, LZXdata^.len_compressed_output);
lzx_finish(LZXdata, nil);
+ {$ELSE}
+ Compressor := TLZXCompressor.Create(10);
+ Compressor.OnChunkDone :=@LTChunkDone;
+ Compressor.OnGetData :=@LTGetData;
+ Compressor.OnIsEndOfFile:=@LTIsEndOfFile;
+ Compressor.OnMarkFrame :=@LTMarkFrame;
+ Compressor.Execute(True);
+ //Sleep(20000);
+ Compressor.Free;
+ {$ENDIF}
end;
end.
diff --git a/packages/chm/src/lzxcompressthread.pas b/packages/chm/src/lzxcompressthread.pas
new file mode 100644
index 0000000000..f22dd2b1d2
--- /dev/null
+++ b/packages/chm/src/lzxcompressthread.pas
@@ -0,0 +1,529 @@
+{ Copyright (C) <2009> <Andrew Haines> lzxcompressthread.pas
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+}
+{
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+}
+unit lzxcompressthread;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, paslzxcomp;
+
+type
+ TLZXCompressor = class;
+ TLZXMasterThread = class;
+ TLZXWorkerThread = class;
+
+ TLZXGetDataMethod = function(Sender: TLZXCompressor; WantedByteCount: Integer; Buffer: Pointer): Integer of object;
+ TLZXIsEndOfFileMethod = function(Sender: TLZXCompressor): Boolean of object;
+ TLZXChunkDoneMethod = procedure(Sender: TLZXCompressor; CompressedSize: Integer; UncompressedSize: Integer; Buffer: Pointer) of object;
+ TLZXMarkFrameMethod = procedure(Sender: TLZXCompressor; CompressedSize: Integer; UncompressedSize: Integer) of object;
+
+ PLZXFinishedBlock = ^TLZXFinishedBlock;
+ TLZXFinishedBlock = record
+ CompressedSize: Integer;
+ UnCompressedSize: Integer;
+ Frame1CSize,
+ Frame1USize,
+ Frame2CSize,
+ Frame2USize: Integer;
+ Index: Integer;
+ Data: Pointer;
+ end;
+
+ { TLZXCompressor }
+
+ TLZXCompressor = class(TObject)
+ private
+ FOnMarkFrame: TLZXMarkFrameMethod;
+ FThreadCount: Integer;
+ FBlockSize: Integer;
+ FTotalCompressedSize: DWord;
+ FTotalUnCompressedSize: DWord;
+ FOnChunkDone: TLZXChunkDoneMethod;
+ FOnGetData: TLZXGetDataMethod;
+ FOnIsEndOfFile: TLZXIsEndOfFileMethod;
+ FWindowSizeCode: Integer;
+ FinishedBlocks: TFPList;
+ NextBlockNeeded: Integer;
+ FMasterThread: TLZXMasterThread;
+ procedure BlockIsFinished(ABlock: PLZXFinishedBlock);
+ function GetRunning: Boolean;
+ public
+ constructor Create(AThreadCount: Integer);
+ destructor Destroy; override;
+
+ procedure Execute(WaitForFinish: Boolean = True);
+
+ property BlockSize: Integer read FBlockSize write FBlockSize;
+ property Running: Boolean read GetRunning;
+ property WindowSizeCode: Integer read FWindowSizeCode write FWindowSizeCode;
+
+ // the following properties must all be assigned
+ property OnGetData: TLZXGetDataMethod read FOnGetData write FOnGetData;
+ property OnChunkDone: TLZXChunkDoneMethod read FOnChunkDone write FOnChunkDone;
+ property OnIsEndOfFile: TLZXIsEndOfFileMethod read FOnIsEndOfFile write FOnIsEndOfFile;
+ property OnMarkFrame: TLZXMarkFrameMethod read FOnMarkFrame write FOnMarkFrame;
+ end;
+
+ { TLZXMasterThread }
+
+ TLZXMasterThread = class(TThread)
+ FCompressor: TLZXCompressor;
+ FBusyThreads: TFPList;
+ FLockData: TRTLCriticalSection;
+ FLockQueueThread: TRTLCriticalSection;
+ FDataRemains: Boolean;
+ FBlockNumber: Integer;
+ FRunning: Boolean;
+ FMemList: TFPList;
+
+ // only used inside a critical section!!
+ // belongs to a Worker thread which will free it
+ FTmpData: Pointer;
+ FTmpDataSize: Integer;
+
+ procedure UpdateDataRemains;
+
+ function BlockDone(Worker: TLZXWorkerThread; ABlock: PLZXFinishedBlock): Boolean;
+ procedure WorkerFinished(Sender: TObject);
+ function GetFreeMemoryChunk: Pointer;
+
+
+ procedure Lock;
+ Procedure UnLock;
+ procedure LockTmpData;
+ procedure UnLockTmpData;
+ function Working: Boolean;
+ function DataRemains: Boolean;
+ function Running: Boolean;
+ function QueueThread(Thread: TLZXWorkerThread): Boolean;
+
+ public
+ procedure Execute; override;
+ constructor Create(Compressor: TLZXCompressor);
+ destructor Destroy; override;
+ end;
+
+ { TLZXWorkerThread }
+
+ TLZXWorkerThread = class(TThread)
+ private
+ Data: PByte;
+ DataSize: Integer;
+ DataCursor: Integer;
+ Frame1C,
+ Frame1U,
+ Frame2C,
+ Frame2U: Integer;
+
+ LZXData: Plzx_data;
+
+ CompressedData: PByte;
+ CompressedDataSize: Integer; // compressed written size. not the size of the array
+
+ BlockNumber: Integer;
+
+ WindowSizeCode: Integer;
+ BlockSize: Integer;
+
+ MasterThread: TLZXMasterThread;
+ ShouldSuspend: Boolean;
+
+ // callbacks for lzxcomp
+ function GetBytes(ACount: Longint; ABuffer: Pointer): LongInt; cdecl;
+ function WriteBytes(ACount: LongInt; ABuffer: Pointer): LongInt; cdecl;
+ procedure MarkFrame(UnCompressedSize: DWord; CompressedSize: DWord); cdecl;
+ function IsEndOfFile: LongBool; cdecl;
+ // end callbacks
+ procedure NotifyMasterDone;
+ protected
+ procedure Execute; override;
+ public
+ procedure CompressData(ABlockNumber: Integer);
+
+ constructor Create(AMaster: TLZXMasterThread; AWindowSizeCode: Integer; ABlockSize: Integer);
+ destructor Destroy; override;
+ end;
+
+implementation
+uses
+ Sysutils; // for Sleep()
+
+{ TLZXCompressor }
+
+procedure TLZXCompressor.BlockIsFinished(ABlock: PLZXFinishedBlock);
+ procedure SendChunk(AChunk: PLZXFinishedBlock);
+ begin
+ if Assigned(FOnMarkFrame) then
+ begin
+ Inc(FTotalCompressedSize, AChunk^.Frame1CSize);
+ Inc(FTotalUnCompressedSize, AChunk^.Frame1USize);
+ Inc(NextBlockNeeded);
+
+ FOnMarkFrame(Self, FTotalCompressedSize, FTotalUnCompressedSize);
+
+ if AChunk^.Frame2CSize > 0 then
+ begin
+ Inc(FTotalCompressedSize, AChunk^.Frame2CSize);
+ Inc(FTotalUnCompressedSize, AChunk^.Frame2USize);
+ FOnMarkFrame(Self, FTotalCompressedSize, FTotalUnCompressedSize);
+ end;
+ end;
+
+ FOnChunkDone(Self, AChunk^.CompressedSize, AChunk^.UnCompressedSize, AChunk^.Data);
+ FMasterThread.FMemList.Add(AChunk^.Data);
+ Dispose(AChunk);
+ end;
+var
+ TmpBlock : PLZXFinishedBlock;
+ FoundMatch: Boolean;
+ i: Integer;
+
+begin
+ if NextBlockNeeded = ABlock^.Index then
+ SendChunk(ABlock)
+ else
+ FinishedBlocks.Add(ABlock);
+
+ repeat
+ FoundMatch := False;
+ for i := FinishedBlocks.Count-1 downto 0 do
+ begin
+ TmpBlock := PLZXFinishedBlock(FinishedBlocks.Items[i]);
+ if TmpBlock^.Index = NextBlockNeeded then
+ begin
+ FoundMatch := True;
+ SendChunk(TmpBlock);
+ FinishedBlocks.Delete(i);
+ end;
+ end;
+ until not FoundMatch;
+end;
+
+function TLZXCompressor.GetRunning: Boolean;
+begin
+ Result := FMasterThread.Running;
+end;
+
+constructor TLZXCompressor.Create(AThreadCount: Integer);
+begin
+ inherited Create;
+ FThreadCount := AThreadCount;
+ FBlockSize := 1 shl 16 ; // $10000;
+ FWindowSizeCode := 16;
+ FMasterThread := TLZXMasterThread.Create(Self);
+ FinishedBlocks := TFPList.Create;
+end;
+
+destructor TLZXCompressor.Destroy;
+begin
+ FMasterThread.Free;
+ FinishedBlocks.Free;
+ inherited Destroy;
+end;
+
+procedure TLZXCompressor.Execute(WaitForFinish: Boolean = True);
+begin
+ FTotalCompressedSize := 0;
+ FTotalUnCompressedSize := 0;
+ FMasterThread.FRunning:=True;
+ FMasterThread.Resume;
+ if WaitForFinish then
+ While Running do
+ CheckSynchronize(50);
+end;
+
+{ TLZXMasterThread }
+
+procedure TLZXMasterThread.UpdateDataRemains;
+begin
+ FDataRemains := not FCompressor.FOnIsEndOfFile(FCompressor);
+end;
+
+function TLZXMasterThread.BlockDone(Worker: TLZXWorkerThread; ABlock: PLZXFinishedBlock): Boolean;
+begin
+ Lock;
+ REsult := True;
+ FCompressor.BlockIsFinished(ABlock);
+ if DataRemains then
+ QueueThread(Worker)
+ else
+ begin
+ Result := False;
+ FBusyThreads.Remove(Worker);
+ Worker.Terminate;
+ if FBusyThreads.Count = 0 then
+ Resume;
+ end;
+ Unlock;
+end;
+
+procedure TLZXMasterThread.WorkerFinished(Sender: TObject);
+begin
+ FBusyThreads.Remove(Sender);
+ if TThread(Sender).FatalException <> nil then
+ Raise Exception(TThread(Sender).FatalException);
+ Sender.Free;
+end;
+
+function TLZXMasterThread.GetFreeMemoryChunk: Pointer;
+begin
+ if FMemList.Count >0 then
+ begin
+ Result := FMemList.Items[0];
+ FMemList.Delete(0);
+ end
+ else
+ Result := Getmem(FCompressor.BlockSize);
+end;
+
+procedure TLZXMasterThread.Lock;
+begin
+ EnterCriticalsection(FLockData);
+end;
+
+procedure TLZXMasterThread.UnLock;
+begin
+ LeaveCriticalsection(FLockData);
+end;
+
+procedure TLZXMasterThread.LockTmpData;
+begin
+ EnterCriticalsection(FLockQueueThread);
+end;
+
+procedure TLZXMasterThread.UnLockTmpData;
+begin
+ LeaveCriticalsection(FLockQueueThread);
+end;
+
+function TLZXMasterThread.Working: Boolean;
+begin
+ Result := FBusyThreads.Count > 0;
+end;
+
+function TLZXMasterThread.DataRemains: Boolean;
+begin
+ UpdateDataRemains;
+ Result := FDataRemains;
+end;
+
+function TLZXMasterThread.Running: Boolean;
+begin
+ REsult := FRunning;
+end;
+
+function TLZXMasterThread.QueueThread(Thread: TLZXWorkerThread): Boolean;
+begin
+ LockTmpData;
+
+ Result := DataRemains;
+ if Not Result then
+ begin
+ UnLockTmpData;
+ Exit;
+ end;
+
+ FDataRemains := False;
+
+ Thread.DataSize := FCompressor.OnGetData(FCompressor, FCompressor.FBlockSize, Thread.Data);
+
+ Thread.CompressData(FBlockNumber);
+ Inc(FBlockNumber);
+ Thread.Resume;
+ UnLockTmpData;
+end;
+
+procedure TLZXMasterThread.Execute;
+var
+ i: Integer;
+ Thread: TLZXWorkerThread;
+begin
+ FRunning:= True;
+ for i := 0 to FCompressor.FThreadCount-1 do
+ begin
+ Thread := TLZXWorkerThread.Create(Self, FCompressor.WindowSizeCode, FCompressor.BlockSize);
+ Thread.FreeOnTerminate := True;
+ Thread.OnTerminate:= @WorkerFinished;
+ if QueueThread(Thread) then
+ FBusyThreads.Add(Thread);
+ end;
+ //Suspend;
+ while Working do
+ begin
+ Sleep(50);
+ end;
+ FRunning:= False;
+end;
+
+constructor TLZXMasterThread.Create(Compressor: TLZXCompressor);
+begin
+ Inherited Create(True);
+ FCompressor := Compressor;
+ FDataRemains := True;
+ FBusyThreads := TFPList.Create;
+ FMemList := TFPList.Create;
+ InitCriticalSection(FLockData);
+ InitCriticalSection(FLockQueueThread);
+end;
+
+destructor TLZXMasterThread.Destroy;
+var
+ i: Integer;
+begin
+ DoneCriticalsection(FLockData);
+ DoneCriticalsection(FLockQueueThread);
+
+ for i := 0 to FBusyThreads.Count-1 do TObject(FBusyThreads.Items[i]).Free;
+ for i := 0 to FMemList.Count-1 do Freemem(FMemList.Items[i]);
+
+ FBusyThreads.Free;
+ FMemList.Free;
+
+ inherited Destroy;
+end;
+
+{ TLZXWorkerThread }
+
+function TLZXWorkerThread.GetBytes(ACount: Longint; ABuffer: Pointer): LongInt; cdecl;
+var
+ MaxBytes: Integer;
+begin
+ MaxBytes := DataSize - DataCursor;
+
+ if ACount > MaxBytes then
+ ACount := MaxBytes;
+
+ Move(Data[DataCursor], ABuffer^, ACount);
+ Inc(DataCursor, ACount);
+
+ Result := ACount;
+end;
+
+function TLZXWorkerThread.WriteBytes(ACount: LongInt; ABuffer: Pointer
+ ): LongInt; cdecl;
+begin
+ Move(ABuffer^, CompressedData[CompressedDataSize], ACount);
+ Inc(CompressedDataSize, ACount);
+ Result := ACount;
+end;
+
+procedure TLZXWorkerThread.MarkFrame(UnCompressedSize: DWord;
+ CompressedSize: DWord); cdecl;
+begin
+ if Frame1C = 0 then
+ begin
+ Frame1C := CompressedSize;
+ Frame1U := UnCompressedSize;
+ end
+ else
+ begin
+ Frame2C := CompressedSize;
+ Frame2U := UnCompressedSize;
+ end;
+end;
+
+function TLZXWorkerThread.IsEndOfFile: LongBool; cdecl;
+begin
+ Result := LongBool(DataSize - DataCursor <= 0);
+end;
+
+procedure TLZXWorkerThread.NotifyMasterDone;
+var
+ Block: PLZXFinishedBlock;
+begin
+ LZXData^.len_compressed_output:=0;
+ LZXData^.len_uncompressed_input:=0;
+
+ New(Block);
+ Block^.Data := MasterThread.GetFreeMemoryChunk;
+ Move(CompressedData^, Block^.Data^, CompressedDataSize);
+ Block^.CompressedSize := CompressedDataSize;
+ Block^.UnCompressedSize:= DataSize;
+ Block^.Index := BlockNumber;
+ Block^.Frame1CSize := Frame1C;
+ Block^.Frame2CSize := Frame2C-Frame1C;
+ Block^.Frame1USize := Frame1U;
+ Block^.Frame2USize := Frame2U-Frame1U;
+
+ Frame1C := 0;
+ Frame2C := 0;
+ Frame1U := 0;
+ Frame2U := 0;
+
+ ShouldSuspend := not MasterThread.BlockDone(Self, Block);
+
+end;
+
+procedure TLZXWorkerThread.CompressData(ABlockNumber: Integer);
+begin
+ BlockNumber := ABlockNumber;
+ DataCursor := 0;
+ CompressedDataSize := 0;
+end;
+
+procedure TLZXWorkerThread.Execute;
+var
+ WSize: LongInt;
+begin
+ WSize := 1 shl WindowSizeCode;
+ while not Terminated do
+ begin
+ lzx_reset(LZXdata);
+ lzx_compress_block(LZXdata, WSize, True);
+
+ MasterThread.Synchronize(@NotifyMasterDone);
+
+ if ShouldSuspend then
+ Suspend;
+ end;
+end;
+
+constructor TLZXWorkerThread.Create(AMaster: TLZXMasterThread;
+ AWindowSizeCode: Integer; ABlockSize: Integer);
+begin
+ Inherited Create(True);
+ MasterThread := AMaster;
+ WindowSizeCode := AWindowSizeCode;
+ BlockSize := ABlockSize;
+ FreeOnTerminate := True;
+
+ Data := GetMem(ABlockSize);
+ CompressedData:=GetMem(ABlockSize);
+
+ lzx_init(@LZXdata, longint(WindowSizeCode),
+ TGetBytesFunc(@TLZXWorkerThread.GetBytes), Self,
+ TIsEndOfFileFunc(@TLZXWorkerThread.IsEndOfFile),
+ TWriteBytesFunc(@TLZXWorkerThread.WriteBytes), Self,
+ TMarkFrameFunc(@TLZXWorkerThread.MarkFrame), Self);
+end;
+
+destructor TLZXWorkerThread.Destroy;
+begin
+ lzx_finish(LZXdata, nil);
+ Freemem(Data);
+ FreeMem(CompressedData);
+ inherited Destroy;
+end;
+
+end.
+
diff --git a/packages/chm/src/paslzxcomp.pas b/packages/chm/src/paslzxcomp.pas
index 5679314348..676744c71c 100644
--- a/packages/chm/src/paslzxcomp.pas
+++ b/packages/chm/src/paslzxcomp.pas
@@ -710,11 +710,11 @@ begin
end
else begin
mask_bits := (1 shl shift_bits) - 1;
- lzxd^.bit_buf := lzxd^.bit_buf shl shift_bits;
- lzxd^.bit_buf := lzxd^.bit_buf or (bits shr rshift_bits) and mask_bits;
+ lzxd^.bit_buf := word(lzxd^.bit_buf shl shift_bits);
+ lzxd^.bit_buf := word(lzxd^.bit_buf or (bits shr rshift_bits) and mask_bits);
end;
{$IFDEF ENDIAN_BIG}
- lzxd^.bit_buf := ((lzxd^.bit_buf and $FF)shl 8) or (lzxd^.bit_buf shr 8);
+ lzxd^.bit_buf := word(((lzxd^.bit_buf and $FF)shl 8) or (lzxd^.bit_buf shr 8));
{$ENDIF}
lzxd^.put_bytes(lzxd^.out_arg, sizeof(lzxd^.bit_buf), @lzxd^.bit_buf);
Inc(lzxd^.len_compressed_output, sizeof(lzxd^.bit_buf));
@@ -726,8 +726,8 @@ begin
// otherwise move bits in */
shift_bits := nbits;
mask_bits := (1 shl shift_bits) - 1;
- lzxd^.bit_buf := lzxd^.bit_buf shl shift_bits;
- lzxd^.bit_buf := lzxd^.bit_buf or bits and mask_bits;
+ lzxd^.bit_buf := word(lzxd^.bit_buf shl shift_bits);
+ lzxd^.bit_buf := word(lzxd^.bit_buf or bits and mask_bits);
Inc(cur_bits, nbits);
lzxd^.bits_in_buf := cur_bits;
@@ -892,8 +892,8 @@ begin
Inc(freqs[19]);
//* right, MS lies again. Code is NOT
// prev_len + len (mod 17), it's prev_len - len (mod 17)*/
- codep^ := prevlengths[i-cur_run] - last_len;
- if (codep^ > 16) then Inc(codep^, 17);
+ codep^ := byte(prevlengths[i-cur_run] - last_len);
+ if (codep^ > 16) then codep^ := byte(codep^ + 17); //Inc(codep^, 17);
Inc(freqs[codep^]);
Inc(codep);
runp^ := 0; //* not necessary */
@@ -901,8 +901,8 @@ begin
Dec(cur_run, excess+4);
end;
while (cur_run > 0) do begin
- codep^ := prevlengths[i-cur_run] - last_len;
- if (codep^ > 16) then Inc(codep^, 17);
+ codep^ := byte(prevlengths[i-cur_run] - last_len);
+ if (codep^ > 16) then codep^ := byte(codep^ + 17); //Inc(codep^, byte(17));
runp^ := 0; //* not necessary */
Inc(runp);
Dec(cur_run);
@@ -1151,6 +1151,7 @@ begin
freemem(lzxd^.prev_main_treelengths);
freemem(lzxd^.main_tree);
freemem(lzxd^.main_freq_table);
+ freemem(lzxd^.block_codes);
dispose(lzxd);
Exit(0);
end;
diff --git a/packages/fcl-base/Makefile b/packages/fcl-base/Makefile
index 714efe3103..1bd0d257e2 100644
--- a/packages/fcl-base/Makefile
+++ b/packages/fcl-base/Makefile
@@ -1,5 +1,5 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/02]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -273,19 +273,19 @@ ifeq ($(OS_TARGET),win64)
INSTALL_DATADIR=${INSTALL_UNITDIR}
endif
ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fileinfo syncobjs daemonapp ServiceManager fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fileinfo syncobjs fptimer
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs
@@ -294,10 +294,10 @@ ifeq ($(FULL_TARGET),i386-haiku)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fptimer
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -306,13 +306,13 @@ ifeq ($(FULL_TARGET),i386-netware)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fptimer
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -333,13 +333,13 @@ ifeq ($(FULL_TARGET),i386-symbian)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fptimer
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -348,7 +348,7 @@ ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fptimer
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -357,10 +357,10 @@ ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fptimer
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -369,7 +369,7 @@ ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -378,40 +378,40 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fptimer
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fileinfo syncobjs daemonapp ServiceManager fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fileinfo syncobjs fptimer
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 fileinfo syncobjs fptimer
@@ -429,10 +429,10 @@ ifeq ($(FULL_TARGET),arm-symbian)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -441,7 +441,7 @@ ifeq ($(FULL_TARGET),avr-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs daemonapp fptimer
+override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85 syncobjs fptimer
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_UNITS+=contnrs inifiles rtfpars idea base64 gettext iostream cachecls avl_tree uriparser eventlog custapp wformat whtml wtex rttiutils bufstream streamex blowfish streamio inicol pooledmm libtar streamcoll maskutils fpexprpars ascii85
@@ -1924,8 +1924,6 @@ REQUIRE_PACKAGES_RTL=1
endif
ifeq ($(FULL_TARGET),i386-win32)
REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_WINUNITS-BASE=1
-REQUIRE_PACKAGES_WINUNITS-JEDI=1
endif
ifeq ($(FULL_TARGET),i386-os2)
REQUIRE_PACKAGES_RTL=1
@@ -2049,8 +2047,6 @@ REQUIRE_PACKAGES_UNIVINT=1
endif
ifeq ($(FULL_TARGET),x86_64-win64)
REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_WINUNITS-BASE=1
-REQUIRE_PACKAGES_WINUNITS-JEDI=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
REQUIRE_PACKAGES_RTL=1
@@ -2125,58 +2121,6 @@ ifdef UNITDIR_RTL
override COMPILER_UNITDIR+=$(UNITDIR_RTL)
endif
endif
-ifdef REQUIRE_PACKAGES_WINUNITS-BASE
-PACKAGEDIR_WINUNITS-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_WINUNITS-BASE),)
-ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-BASE)/units/$(TARGETSUFFIX)),)
-UNITDIR_WINUNITS-BASE=$(PACKAGEDIR_WINUNITS-BASE)/units/$(TARGETSUFFIX)
-else
-UNITDIR_WINUNITS-BASE=$(PACKAGEDIR_WINUNITS-BASE)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_WINUNITS-BASE)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_WINUNITS-BASE) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-BASE)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_WINUNITS-BASE=
-UNITDIR_WINUNITS-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_WINUNITS-BASE),)
-UNITDIR_WINUNITS-BASE:=$(firstword $(UNITDIR_WINUNITS-BASE))
-else
-UNITDIR_WINUNITS-BASE=
-endif
-endif
-ifdef UNITDIR_WINUNITS-BASE
-override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-BASE)
-endif
-endif
-ifdef REQUIRE_PACKAGES_WINUNITS-JEDI
-PACKAGEDIR_WINUNITS-JEDI:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_WINUNITS-JEDI),)
-ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)),)
-UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)
-else
-UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_WINUNITS-JEDI) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_WINUNITS-JEDI=
-UNITDIR_WINUNITS-JEDI:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_WINUNITS-JEDI),)
-UNITDIR_WINUNITS-JEDI:=$(firstword $(UNITDIR_WINUNITS-JEDI))
-else
-UNITDIR_WINUNITS-JEDI=
-endif
-endif
-ifdef UNITDIR_WINUNITS-JEDI
-override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-JEDI)
-endif
-endif
ifdef REQUIRE_PACKAGES_UNIVINT
PACKAGEDIR_UNIVINT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /univint/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_UNIVINT),)
diff --git a/packages/fcl-base/Makefile.fpc b/packages/fcl-base/Makefile.fpc
index d49a6d0523..4120508942 100644
--- a/packages/fcl-base/Makefile.fpc
+++ b/packages/fcl-base/Makefile.fpc
@@ -7,8 +7,6 @@ name=fcl-base
version=2.5.1
[require]
-packages_win32=winunits-base winunits-jedi
-packages_win64=winunits-base winunits-jedi
packages_darwin=univint
[target]
@@ -19,14 +17,14 @@ units=contnrs inifiles rtfpars idea base64 gettext \
maskutils fpexprpars ascii85
units_beos=syncobjs
units_haiku=syncobjs
-units_freebsd=syncobjs daemonapp fptimer
-units_darwin=syncobjs daemonapp fptimer
-units_solaris=syncobjs daemonapp fptimer
-units_netbsd=daemonapp fptimer
-units_openbsd=daemonapp fptimer
-units_linux=syncobjs daemonapp fptimer
-units_win32=fileinfo syncobjs daemonapp ServiceManager fptimer
-units_win64=fileinfo syncobjs daemonapp ServiceManager fptimer
+units_freebsd=syncobjs fptimer
+units_darwin=syncobjs fptimer
+units_solaris=syncobjs fptimer
+units_netbsd= fptimer
+units_openbsd= fptimer
+units_linux=syncobjs fptimer
+units_win32=fileinfo syncobjs fptimer
+units_win64=fileinfo syncobjs fptimer
units_wince=fileinfo syncobjs fptimer
# syncobjs requires GetLastOSError function
units_netware=syncobjs
diff --git a/packages/fcl-db/src/codegen/fpcgtiopf.pp b/packages/fcl-db/src/codegen/fpcgtiopf.pp
index 12104d4b18..0c61623547 100644
--- a/packages/fcl-db/src/codegen/fpcgtiopf.pp
+++ b/packages/fcl-db/src/codegen/fpcgtiopf.pp
@@ -340,7 +340,7 @@ begin
EndMethod(Strings,S);
// AcceptVisitor
S:=BeginAcceptVisitor(Strings,C,ObjectClassName);
- AddLn(Strings,'Result:=Result and (Visited.ObjectState in [posCreate,posdelete,posUpdate]);');
+ AddLn(Strings,'Result:=Result and (Visited.ObjectState in [posCreate,posDelete,posUpdate]);');
DecIndent;
EndMethod(Strings,S);
S:=BeginSetupParams(Strings,C,ObjectClassName,True);
@@ -431,7 +431,7 @@ begin
// Common setup case
If (V in [voCreate,voUpdate]) and (UseCommonSetupParams) then
A:=Format('TUpdateCreate%sVisitor',[StripType(ObjectClassName)])
- else If (V in [voCreate,voDelete,voUpdate,voCommonSetupParams]) then
+ else If (V in [voCreate,voDelete,voUpdate,voCommonSetupParams,voSingleSaveVisitor]) then
A:='TtiVisitorUpdate'
else
A:='TtiVisitorSelect';
@@ -1226,7 +1226,7 @@ begin
end;
Initialization
- RegisterCodeGenerator('tiOPF','tiOPF class and visitors for the data',TTiOPFCodeGenerator);
+ RegisterCodeGenerator('tiOPF','tiOPF classes and hard-coded visitors for the data',TTiOPFCodeGenerator);
Finalization
UnRegisterCodeGenerator(TTiOPFCodeGenerator);
diff --git a/packages/fcl-db/src/codegen/fpddcodegen.pp b/packages/fcl-db/src/codegen/fpddcodegen.pp
index 607b0336f5..a3bb5c187c 100644
--- a/packages/fcl-db/src/codegen/fpddcodegen.pp
+++ b/packages/fcl-db/src/codegen/fpddcodegen.pp
@@ -1279,6 +1279,8 @@ begin
begin
Addln(Strings,'Unit '+CodeOptions.UnitName+';');
Addln(Strings);
+ Addln(Strings, '{$mode objfpc}{$H+}');
+ Addln(Strings);
Addln(Strings,'Interface');
Addln(Strings);
S:=GetInterfaceUsesClause;
diff --git a/packages/fcl-db/src/datadict/fpddfb.pp b/packages/fcl-db/src/datadict/fpddfb.pp
index cd8640834b..a3f6649daa 100644
--- a/packages/fcl-db/src/datadict/fpddfb.pp
+++ b/packages/fcl-db/src/datadict/fpddfb.pp
@@ -459,7 +459,7 @@ Var
{Opmerking: bestaande fielddefs die niet meer in de tabel zitten worden niet verwijderd !? }
- function ImportFieldDef : boolean;
+ function ImportFieldDef(APosition : Integer) : boolean;
var FD : TDDFieldDef;
n, s : string;
begin
@@ -497,7 +497,7 @@ Var
FD.Required:=false
else
FD.Required:=false;
- FD.index := FPosition.AsInteger;
+ FD.index := APosition;
s := trim(FDomainName.asstring);
if copy(s, 1, 4) <> 'RDB$' then
FD.DomainName := s
@@ -513,7 +513,7 @@ Var
BindFields;
while not Q.eof do
begin
- if ImportFieldDef then
+ if ImportFieldDef(Result) then
inc (result);
Q.Next;
end;
diff --git a/packages/fcl-db/src/export/fpdbexport.pp b/packages/fcl-db/src/export/fpdbexport.pp
index ece28b2747..0567c93834 100644
--- a/packages/fcl-db/src/export/fpdbexport.pp
+++ b/packages/fcl-db/src/export/fpdbexport.pp
@@ -72,8 +72,10 @@ Type
FTimeFormat : String;
FDateTimeFormat : String;
FDecimalSeparator: Char;
+ FUseDisplayText : Boolean;
Protected
Procedure InitSettings; virtual;
+ Property UseDisplayText : Boolean Read FUseDisplayText Write FUseDisplayText;
Property IntegerFormat : String Read FIntegerFormat Write FIntegerFormat;
Property DecimalSeparator : Char Read FDecimalSeparator Write FDecimalSeparator;
Property CurrencySymbol : String Read FCurrencySymbol Write FCurrencySymbol;
@@ -587,8 +589,10 @@ begin
begin
If (FormatSettings.IntegerFormat)<>'' then
Result:=Format(FormatSettings.IntegerFormat,[F.AsInteger])
+ else if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
else
- Result:=F.AsString;
+ Result:=F.AsString;
end
else if (F.DataType=ftBoolean) then
begin
@@ -597,12 +601,17 @@ begin
else
Result:=FormatSettings.BooleanFalse;
If (Result='') then
- Result:=F.AsString;
+ if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
+ else
+ Result:=F.AsString;
end
else if (F.DataType=ftDate) then
begin
If (FormatSettings.DateFormat<>'') then
Result:=FormatDateTime(FormatSettings.DateFormat,F.AsDateTime)
+ else if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
else
Result:=F.AsString;
end
@@ -610,16 +619,20 @@ begin
begin
If (FormatSettings.TimeFormat<>'') then
Result:=FormatDateTime(FormatSettings.TimeFormat,F.AsDateTime)
+ else if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
else
- Result:=F.AsString;
+ Result:=F.AsString;
end
else if (F.DataType in [ftDateTime,ftTimeStamp]) then
begin
If (FormatSettings.DateTimeFormat<>'') then
Result:=FormatDateTime(FormatSettings.DateTimeFormat,F.AsDateTime)
+ else if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
else
Result:=F.AsString;
- end
+ end
else if (F.DataType=ftCurrency) then
begin
If (FormatSettings.CurrencySymbol<>'') then
@@ -628,11 +641,15 @@ begin
FS.CurrencyString:=FormatSettings.CurrencySymbol;
Result:=CurrToStrF(F.AsCurrency,ffCurrency,FormatSettings.CurrencyDigits,FS);
end
- else
- Result:=F.AsString
+ else if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
+ else
+ Result:=F.AsString;
end
+ else if FormatSettings.UseDisplayText then
+ Result:=F.DisplayText
else
- Result:=F.AsString;
+ Result:=F.AsString;
end;
procedure TCustomDatasetExporter.ExportError(Msg: String);
@@ -852,6 +869,7 @@ begin
FTimeFormat:=FS.FTimeFormat;
FDateTimeFormat:=FS.FDateTimeFormat;
FDecimalSeparator:=FS.FDecimalSeparator;
+ FUseDisplayText:=FS.FUseDisplayText;
end
else
inherited Assign(Source);
diff --git a/packages/fcl-db/src/paradox/paradox.pp b/packages/fcl-db/src/paradox/paradox.pp
index 491aa3d074..4a4aaf88fa 100644
--- a/packages/fcl-db/src/paradox/paradox.pp
+++ b/packages/fcl-db/src/paradox/paradox.pp
@@ -417,6 +417,7 @@ Var
pxf : Ppxfield_t;
begin
+ FieldDefs.Clear;
pxf:=PX_get_fields(FDoc);
ACount:= PX_get_num_fields(FDoc);
ReallocMem(FOffsets,ACount*SizeOf(Integer));
@@ -549,6 +550,9 @@ end;
procedure TParadox.InternalClose;
begin
+ BindFields(False);
+ if DefaultFields then
+ DestroyFields;
FreeAndNil(FParser);
FreeMem(FOffsets);
FOffSets:=Nil;
@@ -629,7 +633,7 @@ var
No,pft,flen : integer;
pxf : PPx_field;
Value : Pchar;
- Y,M,D : cint;
+ D : clong;
longv : Clong;
R : Double;
c : Char;
@@ -652,7 +656,9 @@ begin
If result then
begin
Move(Value^,Buffer^,flen);
- doc^.free(doc,value);
+ If (Flen<=Field.DataSize) then
+ Pchar(Buffer)[flen]:=#0;
+ FDoc^.free(FDoc,value);
end;
end;
pxfDate:
@@ -660,8 +666,11 @@ begin
Result:=PX_get_data_long(FDoc,Buf,flen,@longv)>0;
If Result then
begin
- PX_SdnToGregorian(longv+1721425,@Y,@M,@D);
- PDateTime(Buffer)^:=EncodeDate(Y,M,D);
+ // 1721425 is the number of the days between the start of the
+ // julian calendar (4714 BC) and jan-00-0000 (Paradox base date)
+ // 2415019 is the number of the days between the start of the
+ // julian calendar (4714 BC) and dec-30-1899 (TDateTime base date)
+ PDateTime(Buffer)^:=Longv+1721425-2415019;
end;
end;
pxfShort:
@@ -688,7 +697,7 @@ begin
begin
Result:=(PX_get_data_byte(FDoc,Buf,flen,@C)>0);
If result then
- PBoolean(Buffer)^:=(C<>#0);
+ PWordBool(Buffer)^:=(C<>#0);
end;
pxfBytes:
begin
@@ -721,9 +730,9 @@ begin
begin
R:=R/1000.0;
longv:=trunc(R /86400);
- PX_SdnToGregorian(longv+1721425,@Y,@M,@D);
+ D:=Longv+1721425-2415019;
longv:=(Trunc(r) mod 86400);
- PDateTime(Buffer)^:=EncodeDate(Y,M,d)+(Longv/MSecsPerday);
+ PDateTime(Buffer)^:=D+(Longv/MSecsPerday);
end;
end;
pxfBCD:
diff --git a/packages/fcl-db/src/sqldb/interbase/ibconnection.pp b/packages/fcl-db/src/sqldb/interbase/ibconnection.pp
index ced5ffe524..b84642faf1 100644
--- a/packages/fcl-db/src/sqldb/interbase/ibconnection.pp
+++ b/packages/fcl-db/src/sqldb/interbase/ibconnection.pp
@@ -555,7 +555,12 @@ begin
SQLData := AllocMem(in_SQLDA^.SQLVar[x].SQLLen+2)
else
SQLData := AllocMem(in_SQLDA^.SQLVar[x].SQLLen);
- if (sqltype and 1) = 1 then New(SQLInd);
+ // Always force the creation of slqind for parameters. It could be
+ // that a database-trigger takes care of inserting null-values, so
+ // it should always be possible to pass null-parameters. If that fails,
+ // the database-server will generate the appropiate error.
+ sqltype := sqltype or 1;
+ new(sqlind);
end;
{$R+}
end
@@ -778,13 +783,10 @@ begin
ParNr := ParamBinding[SQLVarNr];
VSQLVar := @in_sqlda^.SQLvar[SQLVarNr];
if AParams[ParNr].IsNull then
- begin
- If Assigned(VSQLVar^.SQLInd) then
- VSQLVar^.SQLInd^ := -1;
- end
+ VSQLVar^.SQLInd^ := -1
else
begin
- if assigned(VSQLVar^.SQLInd) then VSQLVar^.SQLInd^ := 0;
+ VSQLVar^.SQLInd^ := 0;
case (VSQLVar^.sqltype and not 1) of
SQL_LONG :
diff --git a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
index 7c6dbd49b2..067f516c37 100644
--- a/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
+++ b/packages/fcl-db/src/sqldb/mysql/mysqlconn.inc
@@ -338,17 +338,19 @@ begin
end;
procedure TConnectionName.DoInternalConnect;
+var ClientVerStr: string;
begin
InitialiseMysql;
+ ClientVerStr := copy(strpas(mysql_get_client_info()),1,3);
{$IFDEF mysql50}
- if copy(strpas(mysql_get_client_info()),1,3)<>'5.0' then
+ if (ClientVerStr<>'5.0') and (ClientVerStr<>'5.1') then
Raise EInOutError.CreateFmt(SErrNotversion50,[strpas(mysql_get_client_info())]);
{$ELSE}
{$IFDEF mysql41}
- if copy(strpas(mysql_get_client_info()),1,3)<>'4.1' then
+ if ClientVerStr<>'4.1' then
Raise EInOutError.CreateFmt(SErrNotversion41,[strpas(mysql_get_client_info())]);
{$ELSE}
- if copy(strpas(mysql_get_client_info()),1,3)<>'4.0' then
+ if ClientVerStr<>'4.0' then
Raise EInOutError.CreateFmt(SErrNotversion40,[strpas(mysql_get_client_info())]);
{$ENDIF}
{$ENDIF}
diff --git a/packages/fcl-db/src/sqldb/sqldb.pp b/packages/fcl-db/src/sqldb/sqldb.pp
index d4dca690e3..5598d160e6 100644
--- a/packages/fcl-db/src/sqldb/sqldb.pp
+++ b/packages/fcl-db/src/sqldb/sqldb.pp
@@ -1504,17 +1504,23 @@ begin
qry := FUpdateQry;
end;
ukInsert : begin
- if not assigned(FInsertQry) and (trim(FInsertSQL.Text)<> '') then
- InitialiseModifyQuery(FInsertQry,FInsertSQL.Text)
- else
- InitialiseModifyQuery(FInsertQry,InsertRecQuery);
+ if not assigned(FInsertQry) then
+ begin
+ if (trim(FInsertSQL.Text)<> '') then
+ InitialiseModifyQuery(FInsertQry,FInsertSQL.Text)
+ else
+ InitialiseModifyQuery(FInsertQry,InsertRecQuery);
+ end;
qry := FInsertQry;
end;
ukDelete : begin
- if not assigned(FDeleteQry) and (trim(FDeleteSQL.Text)<> '') then
- InitialiseModifyQuery(FDeleteQry,FDeleteSQL.Text)
- else
- InitialiseModifyQuery(FDeleteQry,DeleteRecQuery);
+ if not assigned(FDeleteQry) then
+ begin
+ if (trim(FDeleteSQL.Text)<> '') then
+ InitialiseModifyQuery(FDeleteQry,FDeleteSQL.Text)
+ else
+ InitialiseModifyQuery(FDeleteQry,DeleteRecQuery);
+ end;
qry := FDeleteQry;
end;
end;
diff --git a/packages/fcl-db/src/sqlite/customsqliteds.pas b/packages/fcl-db/src/sqlite/customsqliteds.pas
index c01aaf1333..34aa2d97a7 100644
--- a/packages/fcl-db/src/sqlite/customsqliteds.pas
+++ b/packages/fcl-db/src/sqlite/customsqliteds.pas
@@ -161,7 +161,6 @@ type
//TDataSet overrides
function AllocRecordBuffer: PChar; override;
procedure ClearCalcFields(Buffer: PChar); override;
- function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
procedure DoBeforeClose; override;
procedure DoAfterInsert; override;
procedure DoBeforeInsert; override;
@@ -191,19 +190,20 @@ type
procedure SetExpectedAppends(AValue: Integer);
procedure SetExpectedUpdates(AValue: Integer);
procedure SetExpectedDeletes(AValue: Integer);
- procedure SetFieldData(Field: TField; Buffer: Pointer); override;
- procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); override;
procedure SetRecNo(Value: Integer); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function BookmarkValid(ABookmark: TBookmark): Boolean; override;
function CompareBookmarks(Bookmark1, Bookmark2: TBookmark): Longint; override;
+ function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
function GetFieldData(Field: TField; Buffer: Pointer): Boolean; override;
function GetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean): Boolean; override;
function Locate(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean; override;
function LocateNext(const KeyFields: String; const KeyValues: Variant; LocateOptions: TLocateOptions) : Boolean;
function Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant; override;
+ procedure SetFieldData(Field: TField; Buffer: Pointer); override;
+ procedure SetFieldData(Field: TField; Buffer: Pointer; NativeFormat: Boolean); override;
// Additional procedures
function ApplyUpdates: Boolean;
procedure ClearUpdates(RecordStates: TRecordStateSet = [rsAdded, rsDeleted, rsUpdated]);
@@ -658,7 +658,7 @@ begin
else
FieldOffset := FieldDefs.Count + FCalcFieldList.IndexOf(Field);
- if State <> dsCalcFields then
+ if not (State in [dsCalcFields, dsInternalCalc]) then
FieldRow := PPDataRecord(ActiveBuffer)^^.Row[FieldOffset]
else
FieldRow := PPDataRecord(CalcBuffer)^^.Row[FieldOffset];
@@ -1220,11 +1220,20 @@ end;
function TCustomSqliteDataset.Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant;
var
TempItem: PDataRecord;
+ SaveState: TDataSetState;
begin
CheckBrowseMode;
TempItem := FindRecordItem(FBeginItem^.Next, KeyFields, KeyValues, [], False);
if TempItem <> nil then
- Result := TempItem^.Row[FieldByName(ResultFields).FieldNo - 1]
+ begin
+ SaveState := SetTempState(dsInternalCalc);
+ try
+ CalculateFields(PChar(@TempItem));
+ Result := FieldByName(ResultFields).Value;
+ finally
+ RestoreState(SaveState);
+ end;
+ end
else
Result := Null;
end;
diff --git a/packages/fcl-db/src/sqlite/sqlite3ds.pas b/packages/fcl-db/src/sqlite/sqlite3ds.pas
index 00fab08832..8780b07411 100644
--- a/packages/fcl-db/src/sqlite/sqlite3ds.pas
+++ b/packages/fcl-db/src/sqlite/sqlite3ds.pas
@@ -44,14 +44,13 @@ type
{ TSqlite3Dataset }
TSqlite3Dataset = class(TCustomSqliteDataset)
- private
- function SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; override;
- function InternalGetHandle: Pointer; override;
- procedure InternalCloseHandle; override;
- procedure BuildLinkedList; override;
protected
+ procedure BuildLinkedList; override;
function GetRowsAffected:Integer; override;
+ procedure InternalCloseHandle; override;
+ function InternalGetHandle: Pointer; override;
procedure RetrieveFieldDefs; override;
+ function SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; override;
public
procedure ExecuteDirect(const ASQL: String); override;
function QuickQuery(const ASQL: String; const AStrList: TStrings; FillObjects: Boolean): String; override;
diff --git a/packages/fcl-db/src/sqlite/sqliteds.pas b/packages/fcl-db/src/sqlite/sqliteds.pas
index 0f9d2c396b..8f63c587a8 100644
--- a/packages/fcl-db/src/sqlite/sqliteds.pas
+++ b/packages/fcl-db/src/sqlite/sqliteds.pas
@@ -45,14 +45,14 @@ type
TSqliteDataset = class(TCustomSqliteDataset)
private
- function SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; override;
- function InternalGetHandle: Pointer; override;
function GetSqliteEncoding: String;
- procedure InternalCloseHandle; override;
- procedure BuildLinkedList; override;
protected
- procedure RetrieveFieldDefs; override;
+ procedure BuildLinkedList; override;
function GetRowsAffected:Integer; override;
+ function InternalGetHandle: Pointer; override;
+ procedure InternalCloseHandle; override;
+ procedure RetrieveFieldDefs; override;
+ function SqliteExec(ASQL: PChar; ACallback: TSqliteCdeclCallback; Data: Pointer): Integer; override;
public
procedure ExecuteDirect(const ASQL: String); override;
function QuickQuery(const ASQL: String; const AStrList: TStrings; FillObjects: Boolean): String; override;
diff --git a/packages/fcl-db/tests/testfieldtypes.pas b/packages/fcl-db/tests/testfieldtypes.pas
index 5e5474435c..40cf4c8a2a 100644
--- a/packages/fcl-db/tests/testfieldtypes.pas
+++ b/packages/fcl-db/tests/testfieldtypes.pas
@@ -48,6 +48,7 @@ type
procedure TestSetBlobAsMemoParam;
procedure TestSetBlobAsBlobParam;
procedure TestSetBlobAsStringParam;
+ procedure TestNonNullableParams;
procedure TestGetIndexDefs;
procedure TestDblQuoteEscComments;
procedure TestpfInUpdateFlag; // bug 7565
@@ -926,7 +927,35 @@ end;
procedure TTestFieldTypes.TestEmptyUpdateQuery;
begin
- TSQLDBConnector(DBConnector).Connection.ExecuteDirect('update fpdev set name=''nothing'' where (1=0)');
+ TSQLDBConnector(DBConnector).Connection.ExecuteDirect('update FPDEV set name=''nothing'' where (1=0)');
+end;
+
+procedure TTestFieldTypes.TestNonNullableParams;
+var ASQLQuery : TSQLQuery;
+ Passed: Boolean;
+begin
+ // Check for an exception when a null value is stored into a non-nullable
+ // field using a parameter
+ // There was a bug in IBConnection so that in this case the last used value
+ // for the parameter was used.
+
+ // To make sure that any changes are cancelled in the case the test fails
+ TSQLDBConnector(DBConnector).GetNDataset(true,5);
+
+ ASQLQuery := TSQLDBConnector(DBConnector).Query;
+ ASQLQuery.SQL.text := 'update fpdev set ID=:ID1 where id = :ID2';
+ ASQLQuery.Params[0].Clear;
+ ASQLQuery.Params[1].AsInteger := 1;
+ AssertTrue(ASQLQuery.Params[0].IsNull);
+ Passed:=False;
+ try
+ @ASQLQuery.ExecSQL;
+ except
+ on E: Exception do
+ if E.ClassType.InheritsFrom(EDatabaseError) then
+ Passed := true;
+ end;
+ AssertTrue(Passed);
end;
procedure TTestFieldTypes.TestStringLargerThen8192;
@@ -1238,7 +1267,7 @@ begin
// Firebird/Interbase need a commit after a DDL statement. Not necessary for the other connections
TSQLDBConnector(DBConnector).Transaction.CommitRetaining;
Connection.ExecuteDirect('insert into FPDEV2(ID,"NAME-TEST") values (1,''test1'')');
- Query.SQL.Text := 'select * from fpdev2';
+ Query.SQL.Text := 'select * from FPDEV2';
Query.Open;
AssertEquals(1,Query.FieldByName('ID').AsInteger);
AssertEquals('test1',Query.FieldByName('NAME-TEST').AsString);
diff --git a/packages/fcl-extra/Makefile b/packages/fcl-extra/Makefile
new file mode 100644
index 0000000000..36b54fd31a
--- /dev/null
+++ b/packages/fcl-extra/Makefile
@@ -0,0 +1,2831 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/11]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifeq ($(OS_TARGET),darwin)
+ifeq ($(OS_SOURCE),darwin)
+DARWIN2DARWIN=1
+endif
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+ifndef DARWIN2DARWIN
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=fcl-extra
+override PACKAGE_VERSION=2.5.1
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=daemonapp ServiceManager
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=daemonapp ServiceManager
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_UNITS+=daemonapp
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_RSTS+=daemonapp servicemanager
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_OPTIONS+=-S2h
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/win
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/os2
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/win
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/win
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/win
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy src/unix
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_INCLUDEDIR+=src/$(OS_TARGET) src src/dummy
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_SOURCEDIR+=src/$(OS_TARGET) src
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl fcl-base
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
+REQUIRE_PACKAGES_WINUNITS-BASE=1
+REQUIRE_PACKAGES_WINUNITS-JEDI=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_UNIVINT=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_UNIVINT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_UNIVINT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
+REQUIRE_PACKAGES_WINUNITS-BASE=1
+REQUIRE_PACKAGES_WINUNITS-JEDI=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_UNIVINT=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_UNIVINT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-BASE
+PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-BASE),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-BASE)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-BASE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-BASE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-BASE=
+UNITDIR_FCL-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-BASE),)
+UNITDIR_FCL-BASE:=$(firstword $(UNITDIR_FCL-BASE))
+else
+UNITDIR_FCL-BASE=
+endif
+endif
+ifdef UNITDIR_FCL-BASE
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-BASE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-XML
+PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-XML),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-XML=
+UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-XML),)
+UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
+else
+UNITDIR_FCL-XML=
+endif
+endif
+ifdef UNITDIR_FCL-XML
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-REGISTRY
+PACKAGEDIR_FCL-REGISTRY:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-registry/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-REGISTRY),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-REGISTRY)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-REGISTRY=$(PACKAGEDIR_FCL-REGISTRY)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-REGISTRY=$(PACKAGEDIR_FCL-REGISTRY)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-REGISTRY)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-REGISTRY) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-REGISTRY)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-REGISTRY=
+UNITDIR_FCL-REGISTRY:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-registry/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-REGISTRY),)
+UNITDIR_FCL-REGISTRY:=$(firstword $(UNITDIR_FCL-REGISTRY))
+else
+UNITDIR_FCL-REGISTRY=
+endif
+endif
+ifdef UNITDIR_FCL-REGISTRY
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-REGISTRY)
+endif
+endif
+ifdef REQUIRE_PACKAGES_WINUNITS-BASE
+PACKAGEDIR_WINUNITS-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_WINUNITS-BASE),)
+ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-BASE)/units/$(TARGETSUFFIX)),)
+UNITDIR_WINUNITS-BASE=$(PACKAGEDIR_WINUNITS-BASE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_WINUNITS-BASE=$(PACKAGEDIR_WINUNITS-BASE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_WINUNITS-BASE)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_WINUNITS-BASE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-BASE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_WINUNITS-BASE=
+UNITDIR_WINUNITS-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_WINUNITS-BASE),)
+UNITDIR_WINUNITS-BASE:=$(firstword $(UNITDIR_WINUNITS-BASE))
+else
+UNITDIR_WINUNITS-BASE=
+endif
+endif
+ifdef UNITDIR_WINUNITS-BASE
+override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-BASE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_WINUNITS-JEDI
+PACKAGEDIR_WINUNITS-JEDI:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_WINUNITS-JEDI),)
+ifneq ($(wildcard $(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)),)
+UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)/units/$(TARGETSUFFIX)
+else
+UNITDIR_WINUNITS-JEDI=$(PACKAGEDIR_WINUNITS-JEDI)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_WINUNITS-JEDI) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS-JEDI)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_WINUNITS-JEDI=
+UNITDIR_WINUNITS-JEDI:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits-jedi/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_WINUNITS-JEDI),)
+UNITDIR_WINUNITS-JEDI:=$(firstword $(UNITDIR_WINUNITS-JEDI))
+else
+UNITDIR_WINUNITS-JEDI=
+endif
+endif
+ifdef UNITDIR_WINUNITS-JEDI
+override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS-JEDI)
+endif
+endif
+ifdef REQUIRE_PACKAGES_UNIVINT
+PACKAGEDIR_UNIVINT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /univint/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_UNIVINT),)
+ifneq ($(wildcard $(PACKAGEDIR_UNIVINT)/units/$(TARGETSUFFIX)),)
+UNITDIR_UNIVINT=$(PACKAGEDIR_UNIVINT)/units/$(TARGETSUFFIX)
+else
+UNITDIR_UNIVINT=$(PACKAGEDIR_UNIVINT)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_UNIVINT)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_UNIVINT) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_UNIVINT)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_UNIVINT=
+UNITDIR_UNIVINT:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /univint/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_UNIVINT),)
+UNITDIR_UNIVINT:=$(firstword $(UNITDIR_UNIVINT))
+else
+UNITDIR_UNIVINT=
+endif
+endif
+ifdef UNITDIR_UNIVINT
+override COMPILER_UNITDIR+=$(UNITDIR_UNIVINT)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+ @$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+ $(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+ $(MAKE) all DEBUG=1
+fpc_release:
+ $(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+ $(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+ $(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(PPUEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.lpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.dpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%.res: %.rc
+ windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+ $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+ $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+ @$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+ $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+ $(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+ -$(UPXPROG) $(INSTALLEXEFILES)
+endif
+ $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+ $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+ $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+ $(MKDIR) $(INSTALL_LIBDIR)
+ $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+ ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+ $(MKDIR) $(INSTALL_DATADIR)
+ $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+ $(MKDIR) $(INSTALL_SOURCEDIR)
+ $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+ $(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+ $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+ $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+ $(MKDIR) $(DIST_DESTDIR)
+ $(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+ echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+ echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+ echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+ /bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+ $(RUNBATCH) $(ZIPWRAPPER)
+else
+ $(ZIPWRAPPER)
+endif
+endif
+ $(DEL) $(ZIPWRAPPER)
+else
+ $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+ $(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+ $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+ -$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+ -$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+ -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ -$(DELTREE) units
+ -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+ -$(DEL) *.o *.ppu *.a
+endif
+ -$(DELTREE) *$(SMARTEXT)
+ -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+ -$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+ -$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+ @$(ECHO)
+ @$(ECHO) == Package info ==
+ @$(ECHO) Package Name..... $(PACKAGE_NAME)
+ @$(ECHO) Package Version.. $(PACKAGE_VERSION)
+ @$(ECHO)
+ @$(ECHO) == Configuration info ==
+ @$(ECHO)
+ @$(ECHO) FPC.......... $(FPC)
+ @$(ECHO) FPC Version.. $(FPC_VERSION)
+ @$(ECHO) Source CPU... $(CPU_SOURCE)
+ @$(ECHO) Target CPU... $(CPU_TARGET)
+ @$(ECHO) Source OS.... $(OS_SOURCE)
+ @$(ECHO) Target OS.... $(OS_TARGET)
+ @$(ECHO) Full Source.. $(FULL_SOURCE)
+ @$(ECHO) Full Target.. $(FULL_TARGET)
+ @$(ECHO) SourceSuffix. $(SOURCESUFFIX)
+ @$(ECHO) TargetSuffix. $(TARGETSUFFIX)
+ @$(ECHO)
+ @$(ECHO) == Directory info ==
+ @$(ECHO)
+ @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES)
+ @$(ECHO)
+ @$(ECHO) Basedir......... $(BASEDIR)
+ @$(ECHO) FPCDir.......... $(FPCDIR)
+ @$(ECHO) CrossBinDir..... $(CROSSBINDIR)
+ @$(ECHO) UnitsDir........ $(UNITSDIR)
+ @$(ECHO) PackagesDir..... $(PACKAGESDIR)
+ @$(ECHO)
+ @$(ECHO) GCC library..... $(GCCLIBDIR)
+ @$(ECHO) Other library... $(OTHERLIBDIR)
+ @$(ECHO)
+ @$(ECHO) == Tools info ==
+ @$(ECHO)
+ @$(ECHO) As........ $(AS)
+ @$(ECHO) Ld........ $(LD)
+ @$(ECHO) Ar........ $(AR)
+ @$(ECHO) Rc........ $(RC)
+ @$(ECHO)
+ @$(ECHO) Mv........ $(MVPROG)
+ @$(ECHO) Cp........ $(CPPROG)
+ @$(ECHO) Rm........ $(RMPROG)
+ @$(ECHO) GInstall.. $(GINSTALL)
+ @$(ECHO) Echo...... $(ECHO)
+ @$(ECHO) Shell..... $(SHELL)
+ @$(ECHO) Date...... $(DATE)
+ @$(ECHO) FPCMake... $(FPCMAKE)
+ @$(ECHO) PPUMove... $(PPUMOVE)
+ @$(ECHO) Upx....... $(UPXPROG)
+ @$(ECHO) Zip....... $(ZIPPROG)
+ @$(ECHO)
+ @$(ECHO) == Object info ==
+ @$(ECHO)
+ @$(ECHO) Target Loaders........ $(TARGET_LOADERS)
+ @$(ECHO) Target Units.......... $(TARGET_UNITS)
+ @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS)
+ @$(ECHO) Target Programs....... $(TARGET_PROGRAMS)
+ @$(ECHO) Target Dirs........... $(TARGET_DIRS)
+ @$(ECHO) Target Examples....... $(TARGET_EXAMPLES)
+ @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+ @$(ECHO)
+ @$(ECHO) Clean Units......... $(CLEAN_UNITS)
+ @$(ECHO) Clean Files......... $(CLEAN_FILES)
+ @$(ECHO)
+ @$(ECHO) Install Units....... $(INSTALL_UNITS)
+ @$(ECHO) Install Files....... $(INSTALL_FILES)
+ @$(ECHO)
+ @$(ECHO) == Install info ==
+ @$(ECHO)
+ @$(ECHO) DateStr.............. $(DATESTR)
+ @$(ECHO) ZipName.............. $(ZIPNAME)
+ @$(ECHO) ZipPrefix............ $(ZIPPREFIX)
+ @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+ @$(ECHO) ZipSuffix............ $(ZIPSUFFIX)
+ @$(ECHO) FullZipName.......... $(FULLZIPNAME)
+ @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE)
+ @$(ECHO)
+ @$(ECHO) Install base dir..... $(INSTALL_BASEDIR)
+ @$(ECHO) Install binary dir... $(INSTALL_BINDIR)
+ @$(ECHO) Install library dir.. $(INSTALL_LIBDIR)
+ @$(ECHO) Install units dir.... $(INSTALL_UNITDIR)
+ @$(ECHO) Install source dir... $(INSTALL_SOURCEDIR)
+ @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR)
+ @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR)
+ @$(ECHO) Install data dir..... $(INSTALL_DATADIR)
+ @$(ECHO)
+ @$(ECHO) Dist destination dir. $(DIST_DESTDIR)
+ @$(ECHO) Dist zip name........ $(DIST_ZIPNAME)
+ @$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+ fpc_makefile_dirs
+fpc_makefile:
+ $(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
diff --git a/packages/fcl-extra/Makefile.fpc b/packages/fcl-extra/Makefile.fpc
new file mode 100644
index 0000000000..683ea9b590
--- /dev/null
+++ b/packages/fcl-extra/Makefile.fpc
@@ -0,0 +1,52 @@
+#
+# Makefile.fpc for Free Component Library
+#
+
+[package]
+name=fcl-extra
+version=2.5.1
+
+[require]
+packages=fcl-base
+packages_win32=winunits-base winunits-jedi
+packages_win64=winunits-base winunits-jedi
+packages_darwin=univint
+
+[target]
+
+units_freebsd=daemonapp
+units_darwin=daemonapp
+units_solaris= daemonapp
+units_netbsd=daemonapp
+units_openbsd=daemonapp
+units_linux=daemonapp
+units_win32= daemonapp ServiceManager
+units_win64=daemonapp ServiceManager
+rsts=daemonapp servicemanager
+
+[compiler]
+options=-S2h
+includedir=src/$(OS_TARGET) src src/dummy
+includedir_linux=src/unix
+includedir_freebsd=src/unix
+includedir_darwin=src/unix
+includedir_netbsd=src/unix
+includedir_openbsd=src/unix
+includedir_solaris=src/unix
+includedir_qnx=src/unix
+includedir_beos=src/unix
+includedir_haiku=src/unix
+includedir_emx=src/os2
+includedir_win32=src/win
+includedir_win64=src/win
+includedir_wince=src/win
+sourcedir=src/$(OS_TARGET) src
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[rules]
+.NOTPARALLEL:
diff --git a/packages/fcl-extra/fpmake.pp b/packages/fcl-extra/fpmake.pp
new file mode 100644
index 0000000000..2c8982fb1f
--- /dev/null
+++ b/packages/fcl-extra/fpmake.pp
@@ -0,0 +1,197 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+ T : TTarget;
+ P : TPackage;
+begin
+ With Installer do
+ begin
+{$endif ALLPACKAGES}
+
+ P:=AddPackage('fcl-base');
+{$ifdef ALLPACKAGES}
+ P.Directory:='fcl-base';
+{$endif ALLPACKAGES}
+ P.Version:='2.2.2-0';
+ P.Dependencies.Add('winunits-jedi',[Win32,Win64]);
+
+ P.Author := '<various>';
+ P.License := 'LGPL with modification, ';
+ P.ExternalURL := 'www.freepascal.org';
+ P.Email := '';
+ P.Description := 'Base library of Free Component Libraries(FCL), FPC''s OOP library.';
+ P.NeedLibC:= false;
+
+ P.SourcePath.Add('src');
+ P.SourcePath.Add('src/unix',AllUnixOSes);
+ P.SourcePath.Add('src/win',AllWindowsOSes);
+ P.SourcePath.Add('src/$(OS)',AllOSes-AllWindowsOSes-AllUnixOSes);
+ P.IncludePath.Add('src');
+ P.IncludePath.Add('src/unix',AllUnixOSes);
+ P.IncludePath.Add('src/win',AllWindowsOSes);
+ P.IncludePath.Add('src/$(OS)',AllOSes-AllWindowsOSes-AllUnixOSes);
+ P.IncludePath.Add('src/dummy',AllOSes);
+
+ T:=P.Targets.AddUnit('ascii85.pp');
+ T:=P.Targets.AddUnit('avl_tree.pp');
+ T:=P.Targets.AddUnit('base64.pp');
+ T:=P.Targets.AddUnit('blowfish.pp');
+ T:=P.Targets.AddUnit('bufstream.pp');
+ T:=P.Targets.AddUnit('cachecls.pp');
+ T.ResourceStrings:=true;
+ T:=P.Targets.AddUnit('contnrs.pp');
+ T:=P.Targets.AddUnit('custapp.pp');
+ T.ResourceStrings:=true;
+ T:=P.Targets.AddUnit('daemonapp.pp',AllWindowsOSes+AllUnixOSes);
+ with T.Dependencies do
+ begin
+ AddInclude('daemonapp.inc');
+ AddUnit('custapp');
+ AddUnit('eventlog');
+ end;
+ T:=P.Targets.AddUnit('eventlog.pp');
+ T.ResourceStrings:=true;
+ with T.Dependencies do
+ begin
+ AddInclude('eventlog.inc');
+ end;
+ T:=P.Targets.AddUnit('fptimer.pp',AllWindowsOSes+AllUnixOSes);
+ T:=P.Targets.AddUnit('gettext.pp');
+ T:=P.Targets.AddUnit('idea.pp');
+ T:=P.Targets.AddUnit('inicol.pp');
+ T.ResourceStrings:=true;
+ with T.Dependencies do
+ begin
+ AddUnit('inifiles');
+ end;
+ T:=P.Targets.AddUnit('inifiles.pp');
+ with T.Dependencies do
+ begin
+ AddUnit('contnrs');
+ end;
+ T:=P.Targets.AddUnit('iostream.pp');
+ T:=P.Targets.AddUnit('libtar.pp');
+ T:=P.Targets.AddUnit('maskutils.pp');
+ T:=P.Targets.AddUnit('pooledmm.pp');
+ T:=P.Targets.AddUnit('rtfpars.pp');
+ with T.Dependencies do
+ begin
+ AddInclude('rtfdata.inc');
+ end;
+ T:=P.Targets.AddUnit('rttiutils.pp');
+ T:=P.Targets.AddUnit('streamcoll.pp');
+ T.ResourceStrings:=true;
+ T:=P.Targets.AddUnit('streamex.pp');
+ T:=P.Targets.AddUnit('streamio.pp');
+ T:=P.Targets.AddUnit('syncobjs.pp',AllOSes-[GO32v2,OS2,EMX]);
+ T:=P.Targets.AddUnit('uriparser.pp');
+ T:=P.Targets.AddUnit('wformat.pp');
+ T:=P.Targets.AddUnit('whtml.pp');
+ with T.Dependencies do
+ begin
+ AddUnit('wformat');
+ end;
+ T:=P.Targets.AddUnit('wtex.pp');
+ with T.Dependencies do
+ begin
+ AddUnit('wformat');
+ end;
+ T:=P.Targets.AddUnit('fpexprpars.pp');
+
+ // Windows units
+ T:=P.Targets.AddUnit('ServiceManager.pas',[Win32,Win64]);
+ T:=P.Targets.AddUnit('fileinfo.pp',AllWindowsOSes);
+
+ // Additional sources
+ P.Sources.AddSrcFiles('src/win/fclel.*');
+
+ // Examples
+ P.ExamplePath.Add('examples');
+ T:=P.Targets.AddExampleProgram('asiotest.pp');
+ T:=P.Targets.AddExampleProgram('b64dec.pp');
+ T:=P.Targets.AddExampleProgram('b64enc.pp');
+ T:=P.Targets.AddExampleProgram('b64.pp');
+ T:=P.Targets.AddExampleProgram('b64test2.pp');
+ T:=P.Targets.AddExampleProgram('b64test.pp');
+ T:=P.Targets.AddExampleProgram('base64decodingtestcase.pas');
+ T:=P.Targets.AddExampleProgram('cachetest.pp');
+ T:=P.Targets.AddExampleProgram('cfgtest.pp');
+ T:=P.Targets.AddExampleProgram('daemon.pp');
+ T:=P.Targets.AddExampleProgram('daemon.txt');
+ T:=P.Targets.AddExampleProgram('dbugsrv.pp');
+ T:=P.Targets.AddExampleProgram('debugtest.pp');
+ T:=P.Targets.AddExampleProgram('doecho.pp');
+ T:=P.Targets.AddExampleProgram('dparser.pp');
+ T:=P.Targets.AddExampleProgram('dsockcli.pp');
+ T:=P.Targets.AddExampleProgram('dsocksvr.pp');
+ T:=P.Targets.AddExampleProgram('fpdoc.dtd');
+ T:=P.Targets.AddExampleProgram('fstream.pp');
+ T:=P.Targets.AddExampleProgram('htdump.pp');
+ T:=P.Targets.AddExampleProgram('ipcclient.pp');
+ T:=P.Targets.AddExampleProgram('ipcserver.pp');
+ T:=P.Targets.AddExampleProgram('isockcli.pp');
+ T:=P.Targets.AddExampleProgram('isocksvr.pp');
+ T:=P.Targets.AddExampleProgram('istream.pp');
+ T:=P.Targets.AddExampleProgram('list.pp');
+ T:=P.Targets.AddExampleProgram('mstream.pp');
+ T:=P.Targets.AddExampleProgram('poolmm1.pp');
+ T:=P.Targets.AddExampleProgram('poolmm2.pp');
+ T:=P.Targets.AddExampleProgram('restest.pp');
+ T:=P.Targets.AddExampleProgram('showver.pp');
+ T:=P.Targets.AddExampleProgram('sockcli.pp');
+ T:=P.Targets.AddExampleProgram('socksvr.pp');
+ T:=P.Targets.AddExampleProgram('sstream.pp');
+ T:=P.Targets.AddExampleProgram('stringl.pp');
+ T:=P.Targets.AddExampleProgram('tarmakerconsgzip.pas');
+ T:=P.Targets.AddExampleProgram('tarmakercons.pas');
+ T:=P.Targets.AddExampleProgram('testapp.pp');
+ T:=P.Targets.AddExampleProgram('testbf.pp');
+ T:=P.Targets.AddExampleProgram('testbs.pp');
+ T:=P.Targets.AddExampleProgram('testcgi.pp');
+ T:=P.Targets.AddExampleProgram('testcont.pp');
+ T:=P.Targets.AddExampleProgram('testez.pp');
+ T:=P.Targets.AddExampleProgram('testhres.pp');
+ T:=P.Targets.AddExampleProgram('testnres.pp');
+ T:=P.Targets.AddExampleProgram('testol.pp');
+ T:=P.Targets.AddExampleProgram('testproc.pp');
+ T:=P.Targets.AddExampleProgram('testreg.pp');
+ T:=P.Targets.AddExampleProgram('testrhre.pp');
+ T:=P.Targets.AddExampleProgram('testrnre.pp');
+ T:=P.Targets.AddExampleProgram('testrsre.pp');
+ T:=P.Targets.AddExampleProgram('testrtf.pp');
+ T:=P.Targets.AddExampleProgram('testser.pp');
+ T:=P.Targets.AddExampleProgram('testsres.pp');
+ T:=P.Targets.AddExampleProgram('testtimer.pp');
+ T:=P.Targets.AddExampleProgram('testunzip.pp');
+ T:=P.Targets.AddExampleProgram('testur.pp');
+ T:=P.Targets.AddExampleProgram('testweb.pp');
+ T:=P.Targets.AddExampleProgram('testz2.pp');
+ T:=P.Targets.AddExampleProgram('testzip.pp');
+ T:=P.Targets.AddExampleProgram('testz.pp');
+ T:=P.Targets.AddExampleProgram('threads.pp');
+ T:=P.Targets.AddExampleProgram('tidea.pp');
+ T:=P.Targets.AddExampleProgram('tstelcmd.pp');
+ T:=P.Targets.AddExampleProgram('tstelgtk.pp');
+ T:=P.Targets.AddExampleProgram('txmlreg.pp');
+ T:=P.Targets.AddExampleProgram('xmldump.pp');
+
+ // example data files.
+ // README
+ // kword.xml
+ // overview.rtf
+ // showver.rc
+ // showver.res
+ // simple.xml
+ // parser.dat
+ // testcgi.html
+
+{$ifndef ALLPACKAGES}
+ Run;
+ end;
+end.
+{$endif ALLPACKAGES}
+
diff --git a/packages/fcl-base/src/daemonapp.pp b/packages/fcl-extra/src/daemonapp.pp
index 56b2817397..e5eb513e63 100644
--- a/packages/fcl-base/src/daemonapp.pp
+++ b/packages/fcl-extra/src/daemonapp.pp
@@ -360,7 +360,6 @@ Type
procedure SetupLogger;
procedure StopLogger;
Procedure DoRun; override;
- Property OnRun : TNotifyEvent Read FOnRun Write FOnRun;
Property SysData : TObject Read FSysData Write FSysData;
Public
Procedure ShowException(E : Exception); override;
@@ -370,6 +369,7 @@ Type
procedure RunDaemons;
procedure UnInstallDaemons;
procedure CreateForm(InstanceClass: TComponentClass; var Reference); virtual;
+ Property OnRun : TNotifyEvent Read FOnRun Write FOnRun;
Property Logger : TEventLog Read FLogger;
Property GUIMainLoop : TGuiLoopEvent Read FGUIMainLoop Write FGuiMainLoop;
Property GuiHandle : THandle Read FGUIHandle Write FGUIHandle;
@@ -418,6 +418,7 @@ Var
SStatus : Array[1..5] of string =
('Stop','Pause','Continue','Interrogate','Shutdown');
DefaultDaemonOptions : TDaemonOptions = [doAllowStop,doAllowPause];
+ AppClass : TCustomDaemonApplicationClass;
implementation
@@ -429,7 +430,6 @@ Var
MapperClass : TCustomDaemonMapperClass;
DesignMapper : TCustomDaemonMapper;
DaemonClasses : TStringList;
- AppClass : TCustomDaemonApplicationClass;
{$ifdef svcdebug}
Var
diff --git a/packages/fcl-base/src/unix/daemonapp.inc b/packages/fcl-extra/src/unix/daemonapp.inc
index 5a42243bb0..5a42243bb0 100644
--- a/packages/fcl-base/src/unix/daemonapp.inc
+++ b/packages/fcl-extra/src/unix/daemonapp.inc
diff --git a/packages/fcl-base/src/win/ServiceManager.pas b/packages/fcl-extra/src/win/ServiceManager.pas
index f827a7ca46..f827a7ca46 100644
--- a/packages/fcl-base/src/win/ServiceManager.pas
+++ b/packages/fcl-extra/src/win/ServiceManager.pas
diff --git a/packages/fcl-base/src/win/daemonapp.inc b/packages/fcl-extra/src/win/daemonapp.inc
index c53e4ca888..c53e4ca888 100644
--- a/packages/fcl-base/src/win/daemonapp.inc
+++ b/packages/fcl-extra/src/win/daemonapp.inc
diff --git a/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc b/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc
index 435253c66a..d7cbb84abe 100644
--- a/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc
+++ b/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc
@@ -16,6 +16,7 @@
class procedure CheckNull(obj: IUnknown; msg: string = ''); overload;
class procedure CheckNull(obj: TObject; msg: string = ''); overload;
class procedure CheckNotNull(obj: TObject; msg: string = ''); overload;
+ class procedure CheckNotNull(obj: IUnknown; msg: string = ''); overload; virtual;
class procedure CheckIs(obj :TObject; pClass: TClass; msg: string = ''); overload;
class procedure CheckSame(expected, actual: TObject; msg: string = ''); overload;
class procedure FailNotEquals(expected, actual: string; msg: string = ''; errorAddr: Pointer = nil); virtual;
@@ -120,6 +121,11 @@ begin
AssertNotNull(msg, obj);
end;
+class procedure TAssert.CheckNotNull(obj: IUnknown; msg: string);
+begin
+ AssertNotNullIntf(msg, obj);
+end;
+
class procedure TAssert.CheckIs(obj: TObject; pClass: TClass; msg: string);
begin
Assert(pClass <> nil);
diff --git a/packages/fcl-image/src/fpreadjpeg.pas b/packages/fcl-image/src/fpreadjpeg.pas
index c1176afe11..5a9b9fb087 100644
--- a/packages/fcl-image/src/fpreadjpeg.pas
+++ b/packages/fcl-image/src/fpreadjpeg.pas
@@ -15,7 +15,6 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
ToDo:
- - grayscale
- palette
}
unit FPReadJPEG;
@@ -225,27 +224,21 @@ var
x: Integer;
y: Integer;
c: word;
- begin
- InitReadingPixels;
-
- Continue:=true;
- Progress(psStarting, 0, False, Rect(0,0,0,0), '', Continue);
- if not Continue then exit;
-
- jpeg_start_decompress(@FInfo);
-
- Img.SetSize(FInfo.output_width,FInfo.output_height);
-
- // read one line per call
- GetMem(SampArray,SizeOf(JSAMPROW));
- GetMem(SampRow,FInfo.output_width*FInfo.output_components);
- SampArray^[0]:=SampRow;
- try
+ Status,Scan: integer;
+ ReturnValue,RestartLoop: Boolean;
+ procedure OutputScanLines();
+ var
+ x: integer;
+ begin
Color.Alpha:=alphaOpaque;
y:=0;
while (FInfo.output_scanline < FInfo.output_height) do begin
+ // read one line per call
LinesRead := jpeg_read_scanlines(@FInfo, SampArray, 1);
- if LinesRead<1 then break;
+ if LinesRead<1 then begin
+ ReturnValue:=false;
+ break;
+ end;
if (FInfo.jpeg_color_space = JCS_CMYK) then
for x:=0 to FInfo.output_width-1 do begin
Color.Red:=SampRow^[x*4+0];
@@ -274,12 +267,100 @@ var
end;
inc(y);
end;
+ end;
+ begin
+ InitReadingPixels;
+
+ Continue:=true;
+ Progress(psStarting, 0, False, Rect(0,0,0,0), '', Continue);
+ if not Continue then exit;
+
+ jpeg_start_decompress(@FInfo);
+
+ Img.SetSize(FInfo.output_width,FInfo.output_height);
+
+ GetMem(SampArray,SizeOf(JSAMPROW));
+ GetMem(SampRow,FInfo.output_width*FInfo.output_components);
+ SampArray^[0]:=SampRow;
+ try
+ case FProgressiveEncoding of
+ false:
+ begin
+ ReturnValue:=true;
+ OutputScanLines();
+ if FInfo.buffered_image then jpeg_finish_output(@FInfo);
+ end;
+ true:
+ begin
+ while true do begin
+ (* The RestartLoop variable drops a placeholder for suspension
+ mode, or partial jpeg decode, return and continue. In case
+ of support this suspension, the RestartLoop:=True should be
+ changed by an Exit and in the routine enter detects that it
+ is being called from a suspended state to not
+ reinitialize some buffer *)
+ RestartLoop:=false;
+ repeat
+ status := jpeg_consume_input(@FInfo);
+ until (status=JPEG_SUSPENDED) or (status=JPEG_REACHED_EOI);
+ ReturnValue:=true;
+ if FInfo.output_scanline = 0 then begin
+ Scan := FInfo.input_scan_number;
+ (* if we haven't displayed anything yet (output_scan_number==0)
+ and we have enough data for a complete scan, force output
+ of the last full scan *)
+ if (FInfo.output_scan_number = 0) and (Scan > 1) and
+ (status <> JPEG_REACHED_EOI) then Dec(Scan);
+
+ if not jpeg_start_output(@FInfo, Scan) then begin
+ RestartLoop:=true; (* I/O suspension *)
+ end;
+ end;
+
+ if not RestartLoop then begin
+ if (FInfo.output_scanline = $ffffff) then
+ FInfo.output_scanline := 0;
+
+ OutputScanLines();
+
+ if ReturnValue=false then begin
+ if (FInfo.output_scanline = 0) then begin
+ (* didn't manage to read any lines - flag so we don't call
+ jpeg_start_output() multiple times for the same scan *)
+ FInfo.output_scanline := $ffffff;
+ end;
+ RestartLoop:=true; (* I/O suspension *)
+ end;
+
+ if not RestartLoop then begin
+ if (FInfo.output_scanline = FInfo.output_height) then begin
+ if not jpeg_finish_output(@FInfo) then begin
+ RestartLoop:=true; (* I/O suspension *)
+ end;
+
+ if not RestartLoop then begin
+ if (jpeg_input_complete(@FInfo) and
+ (FInfo.input_scan_number = FInfo.output_scan_number)) then
+ break;
+
+ FInfo.output_scanline := 0;
+ end;
+ end;
+ end;
+ end;
+ if RestartLoop then begin
+ (* Suspension mode, but as not supported by this implementation
+ it will simple break the loop to avoid endless looping. *)
+ break;
+ end;
+ end;
+ end;
+ end;
finally
FreeMem(SampRow);
FreeMem(SampArray);
end;
- if FInfo.buffered_image then jpeg_finish_output(@FInfo);
jpeg_finish_decompress(@FInfo);
Progress(psEnding, 100, false, Rect(0,0,0,0), '', Continue);
diff --git a/packages/fcl-net/src/mkxmlrpc.pp b/packages/fcl-net/src/mkxmlrpc.pp
index b78633ee68..61794c8618 100644
--- a/packages/fcl-net/src/mkxmlrpc.pp
+++ b/packages/fcl-net/src/mkxmlrpc.pp
@@ -738,7 +738,7 @@ begin
// Create dispatcher method
ProcMember := TPasProcedure.Create('Dispatch', ServerClass);
ProcMember.Visibility := visProtected;
- ProcMember.IsOverride := True;
+ ProcMember.AddModifier(pmOverride);
ProcMember.ProcType := TPasProcedureType.Create('', ProcMember);
ProcMember.ProcType.CreateArgument('AParser', 'TXMLRPCParser').
Visibility := visPublic;
diff --git a/packages/fcl-net/src/servlets.pp b/packages/fcl-net/src/servlets.pp
index 85eaba8253..34dca4ba9a 100644
--- a/packages/fcl-net/src/servlets.pp
+++ b/packages/fcl-net/src/servlets.pp
@@ -35,8 +35,10 @@ type
TServletRequest = class
private
FInputStream: TStream;
- FScheme, FPathInfo: String;
+ FScheme: String;
protected
+ FPathInfo: String;
+
function GetContentLength: Integer; virtual; abstract;
function GetContentType: String; virtual; abstract;
function GetProtocol: String; virtual; abstract;
diff --git a/packages/fcl-passrc/src/pastree.pp b/packages/fcl-passrc/src/pastree.pp
index e6bb6b1474..bb12695e1d 100644
--- a/packages/fcl-passrc/src/pastree.pp
+++ b/packages/fcl-passrc/src/pastree.pp
@@ -63,19 +63,30 @@ resourcestring
SPasTreeDestructorImpl = 'destructor implementation';
type
+ // Visitor pattern.
+ TPassTreeVisitor = class;
+
+ TPasElementBase = class
+ procedure Accept(Visitor: TPassTreeVisitor); virtual; abstract;
+ end;
+
TPasModule = class;
TPasMemberVisibility = (visDefault, visPrivate, visProtected, visPublic,
visPublished, visAutomated);
+ TCallingConvention = (ccDefault,ccRegister,ccPascal,ccCDecl,ccStdCall,ccOldFPCCall,ccSafeCall);
+
TPasMemberVisibilities = set of TPasMemberVisibility;
TPasMemberHint = (hDeprecated,hLibrary,hPlatform);
TPasMemberHints = set of TPasMemberHint;
TPTreeElement = class of TPasElement;
- TPasElement = class
+ { TPasElement }
+
+ TPasElement = class(TPasElementBase)
private
FRefCount: LongWord;
FName: string;
@@ -94,12 +105,15 @@ type
function GetModule: TPasModule;
function ElementTypeName: string; virtual;
function GetDeclaration(full : Boolean) : string; virtual;
+ procedure Accept(Visitor: TPassTreeVisitor); override;
property RefCount: LongWord read FRefCount;
property Name: string read FName write FName;
property Parent: TPasElement read FParent;
Property Hints : TPasMemberHints Read FHints Write FHints;
end;
+ { TPasSection }
+
TPasSection = class(TPasElement)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -112,6 +126,8 @@ type
Functions, Variables, Properties: TList;
end;
+ { TPasModule }
+
TPasModule = class(TPasElement)
public
destructor Destroy; override;
@@ -122,6 +138,8 @@ type
PackageName: string;
end;
+ { TPasPackage }
+
TPasPackage = class(TPasElement)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -131,6 +149,8 @@ type
Modules: TList; // List of TPasModule objects
end;
+ { TPasResString }
+
TPasResString = class(TPasElement)
public
function ElementTypeName: string; override;
@@ -139,11 +159,15 @@ type
Value: string;
end;
+ { TPasType }
+
TPasType = class(TPasElement)
public
function ElementTypeName: string; override;
end;
+ { TPasPointerType }
+
TPasPointerType = class(TPasType)
public
destructor Destroy; override;
@@ -153,6 +177,8 @@ type
DestType: TPasType;
end;
+ { TPasAliasType }
+
TPasAliasType = class(TPasType)
public
destructor Destroy; override;
@@ -162,11 +188,15 @@ type
DestType: TPasType;
end;
+ { TPasTypeAliasType }
+
TPasTypeAliasType = class(TPasAliasType)
public
function ElementTypeName: string; override;
end;
+ { TPasClassOfType }
+
TPasClassOfType = class(TPasAliasType)
public
function ElementTypeName: string; override;
@@ -174,6 +204,8 @@ type
end;
+ { TPasRangeType }
+
TPasRangeType = class(TPasType)
public
function ElementTypeName: string; override;
@@ -182,6 +214,8 @@ type
RangeStart, RangeEnd: string;
end;
+ { TPasArrayType }
+
TPasArrayType = class(TPasType)
public
destructor Destroy; override;
@@ -193,6 +227,8 @@ type
ElType: TPasType;
end;
+ { TPasFileType }
+
TPasFileType = class(TPasType)
public
destructor Destroy; override;
@@ -202,6 +238,8 @@ type
ElType: TPasType;
end;
+ { TPasEnumValue }
+
TPasEnumValue = class(TPasElement)
public
function ElementTypeName: string; override;
@@ -211,6 +249,8 @@ type
AssignedValue : string;
end;
+ { TPasEnumType }
+
TPasEnumType = class(TPasType)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -222,6 +262,8 @@ type
Values: TList; // List of TPasEnumValue objects
end;
+ { TPasSetType }
+
TPasSetType = class(TPasType)
public
destructor Destroy; override;
@@ -233,6 +275,8 @@ type
TPasRecordType = class;
+ { TPasVariant }
+
TPasVariant = class(TPasElement)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -242,6 +286,8 @@ type
Members: TPasRecordType;
end;
+ { TPasRecordType }
+
TPasRecordType = class(TPasType)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -260,6 +306,8 @@ type
TPasObjKind = (okObject, okClass, okInterface);
+ { TPasClassType }
+
TPasClassType = class(TPasType)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -276,6 +324,8 @@ type
TArgumentAccess = (argDefault, argConst, argVar, argOut);
+ { TPasArgument }
+
TPasArgument = class(TPasElement)
public
destructor Destroy; override;
@@ -287,6 +337,8 @@ type
Value: string;
end;
+ { TPasProcedureType }
+
TPasProcedureType = class(TPasType)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -301,6 +353,8 @@ type
Args: TList; // List of TPasArgument objects
end;
+ { TPasResultElement }
+
TPasResultElement = class(TPasElement)
public
destructor Destroy; override;
@@ -309,6 +363,8 @@ type
ResultType: TPasType;
end;
+ { TPasFunctionType }
+
TPasFunctionType = class(TPasProcedureType)
public
destructor Destroy; override;
@@ -326,12 +382,17 @@ type
function ElementTypeName: string; override;
end;
+ { TPasTypeRef }
+
TPasTypeRef = class(TPasUnresolvedTypeRef)
public
+ public
// function GetDeclaration(full : Boolean): string; override;
RefType: TPasType;
end;
+ { TPasVariable }
+
TPasVariable = class(TPasElement)
public
destructor Destroy; override;
@@ -344,11 +405,16 @@ type
AbsoluteLocation : String;
end;
+ { TPasConst }
+
TPasConst = class(TPasVariable)
public
+ public
function ElementTypeName: string; override;
end;
+ { TPasProperty }
+
TPasProperty = class(TPasVariable)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -362,11 +428,15 @@ type
IsDefault, IsNodefault: Boolean;
end;
+ { TPasProcedureBase }
+
TPasProcedureBase = class(TPasElement)
public
function TypeName: string; virtual; abstract;
end;
+ { TPasOverloadedProc }
+
TPasOverloadedProc = class(TPasProcedureBase)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -377,7 +447,19 @@ type
Overloads: TList; // List of TPasProcedure nodes
end;
+ TProcedureModifier = (pmVirtual, pmDynamic, pmAbstract, pmOverride,
+ pmExported, pmOverload, pmMessage, pmReintroduce,
+ pmStatic,pmInline,pmAssembler,pmVarargs,
+ pmCompilerProc,pmExternal,pmExtdecl);
+ TProcedureModifiers = Set of TProcedureModifier;
+ TProcedureMessageType = (pmtInteger,pmtString);
+
TPasProcedure = class(TPasProcedureBase)
+ Private
+ FCallingConvention : TCallingConvention;
+ FModifiers : TProcedureModifiers;
+ FMessageName : String;
+ FMessageType : TProcedureMessageType;
public
destructor Destroy; override;
function ElementTypeName: string; override;
@@ -385,9 +467,21 @@ type
function GetDeclaration(full: Boolean): string; override;
procedure GetModifiers(List: TStrings);
public
- ProcType: TPasProcedureType;
- IsVirtual, IsDynamic, IsAbstract, IsOverride,
- IsOverload, IsMessage, isReintroduced, isStatic: Boolean;
+ ProcType : TPasProcedureType;
+ Procedure AddModifier(AModifier : TProcedureModifier);
+ Function IsVirtual : Boolean;
+ Function IsDynamic : Boolean;
+ Function IsAbstract : Boolean;
+ Function IsOverride : Boolean;
+ Function IsExported : Boolean;
+ Function IsOverload : Boolean;
+ Function IsMessage: Boolean;
+ Function IsReintroduced : Boolean;
+ Function IsStatic : Boolean;
+ Property Modifiers : TProcedureModifiers Read FModifiers Write FModifiers;
+ Property CallingConvention : TCallingConvention Read FCallingConvention Write FCallingConvention;
+ Property MessageName : String Read FMessageName Write FMessageName;
+ property MessageType : TProcedureMessageType Read FMessageType Write FMessageType;
end;
TPasFunction = class(TPasProcedure)
@@ -396,18 +490,24 @@ type
function GetDeclaration (full : boolean) : string; override;
end;
+ { TPasOperator }
+
TPasOperator = class(TPasProcedure)
public
function ElementTypeName: string; override;
function GetDeclaration (full : boolean) : string; override;
end;
+ { TPasConstructor }
+
TPasConstructor = class(TPasProcedure)
public
function ElementTypeName: string; override;
function TypeName: string; override;
end;
+ { TPasDestructor }
+
TPasDestructor = class(TPasProcedure)
public
function ElementTypeName: string; override;
@@ -417,6 +517,8 @@ type
TPasImplBlock = class;
+ { TPasProcedureImpl }
+
TPasProcedureImpl = class(TPasElement)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -429,12 +531,16 @@ type
Body: TPasImplBlock;
end;
+ { TPasConstructorImpl }
+
TPasConstructorImpl = class(TPasProcedureImpl)
public
function ElementTypeName: string; override;
function TypeName: string; override;
end;
+ { TPasDestructorImpl }
+
TPasDestructorImpl = class(TPasProcedureImpl)
public
function ElementTypeName: string; override;
@@ -444,11 +550,15 @@ type
TPasImplElement = class(TPasElement)
end;
+ { TPasImplCommand }
+
TPasImplCommand = class(TPasImplElement)
public
Command: string;
end;
+ { TPasImplCommands }
+
TPasImplCommands = class(TPasImplElement)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -457,6 +567,8 @@ type
Commands: TStrings;
end;
+ { TPasImplIfElse }
+
TPasImplIfElse = class(TPasImplElement)
public
destructor Destroy; override;
@@ -465,6 +577,8 @@ type
IfBranch, ElseBranch: TPasImplElement;
end;
+ { TPasImplForLoop }
+
TPasImplForLoop = class(TPasImplElement)
public
destructor Destroy; override;
@@ -474,6 +588,8 @@ type
Body: TPasImplElement;
end;
+ { TPasImplBlock }
+
TPasImplBlock = class(TPasImplElement)
public
constructor Create(const AName: string; AParent: TPasElement); override;
@@ -487,6 +603,11 @@ type
Elements: TList; // TPasImplElement objects
end;
+ { TPassTreeVisitor }
+
+ TPassTreeVisitor = class
+ procedure Visit(obj: TPasElement); virtual;
+ end;
const
AccessNames: array[TArgumentAccess] of string[6] = ('', 'const ', 'var ', 'out ');
@@ -635,6 +756,11 @@ begin
Result := '';
end;
+procedure TPasElement.Accept(Visitor: TPassTreeVisitor);
+begin
+ Visitor.Visit(Self);
+end;
+
constructor TPasSection.Create(const AName: string; AParent: TPasElement);
begin
inherited Create(AName, AParent);
@@ -1457,6 +1583,58 @@ begin
DoAdd(IsMessage,' Message');
end;
+Procedure TPasProcedure.AddModifier(AModifier : TProcedureModifier);
+
+begin
+ Include(FModifiers,AModifier);
+end;
+
+Function TPasProcedure.IsVirtual : Boolean;
+begin
+ Result:=pmVirtual in FModifiers;
+end;
+
+Function TPasProcedure.IsDynamic : Boolean;
+begin
+ Result:=pmDynamic in FModifiers;
+end;
+
+Function TPasProcedure.IsAbstract : Boolean;
+begin
+ Result:=pmAbstract in FModifiers;
+end;
+
+Function TPasProcedure.IsOverride : Boolean;
+begin
+ Result:=pmOverride in FModifiers;
+end;
+
+Function TPasProcedure.IsExported : Boolean;
+begin
+ Result:=pmExported in FModifiers;
+end;
+
+Function TPasProcedure.IsOverload : Boolean;
+begin
+ Result:=pmOverload in FModifiers;
+end;
+
+Function TPasProcedure.IsMessage: Boolean;
+begin
+ Result:=pmMessage in FModifiers;
+end;
+
+Function TPasProcedure.IsReintroduced : Boolean;
+begin
+ Result:=pmReintroduce in FModifiers;
+end;
+
+Function TPasProcedure.IsStatic : Boolean;
+
+begin
+ Result:=pmStatic in FModifiers;
+end;
+
function TPasProcedure.GetDeclaration (full : boolean) : string;
Var
@@ -1550,4 +1728,13 @@ begin
Result:='';
end;
+
+
+{ TPassTreeVisitor }
+
+procedure TPassTreeVisitor.Visit(obj: TPasElement);
+begin
+ // Needs to be implemented by descendents.
+end;
+
end.
diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp
index df8c64c674..7a818f1cf1 100644
--- a/packages/fcl-passrc/src/pparser.pp
+++ b/packages/fcl-passrc/src/pparser.pp
@@ -124,7 +124,7 @@ type
function ParseType(Parent: TPasElement; Prefix : String): TPasType;overload;
function ParseType(Parent: TPasElement): TPasType;overload;
- function ParseComplexType: TPasType;
+ function ParseComplexType(Parent : TPasElement = Nil): TPasType;
procedure ParseArrayType(Element: TPasArrayType);
procedure ParseFileType(Element: TPasFileType);
function ParseExpression: String;
@@ -516,20 +516,20 @@ begin
end;
end;
-function TPasParser.ParseComplexType: TPasType;
+function TPasParser.ParseComplexType(Parent : TPasElement = Nil): TPasType;
begin
NextToken;
case CurToken of
tkProcedure:
begin
- Result := TPasProcedureType(CreateElement(TPasProcedureType, '', nil));
+ Result := TPasProcedureType(CreateElement(TPasProcedureType, '', Parent));
ParseProcedureOrFunctionHeader(Result,
TPasProcedureType(Result), ptProcedure, True);
UngetToken; // Unget semicolon
end;
tkFunction:
begin
- Result := Engine.CreateFunctionType('', 'Result', nil, False,
+ Result := Engine.CreateFunctionType('', 'Result', Parent, False,
Scanner.CurFilename, Scanner.CurRow);
ParseProcedureOrFunctionHeader(Result,
TPasFunctionType(Result), ptFunction, True);
@@ -538,7 +538,7 @@ begin
else
begin
UngetToken;
- Result := ParseType(nil);
+ Result := ParseType(Parent);
exit;
end;
end;
@@ -872,18 +872,18 @@ end;
// Starts after the "uses" token
procedure TPasParser.ParseUsesList(ASection: TPasSection);
var
- UnitName: String;
+ AUnitName: String;
Element: TPasElement;
begin
while True do
begin
- UnitName := ExpectIdentifier;
+ AUnitName := ExpectIdentifier;
- Element := Engine.FindModule(UnitName);
+ Element := Engine.FindModule(AUnitName);
if Assigned(Element) then
Element.AddRef
else
- Element := TPasType(CreateElement(TPasUnresolvedTypeRef, UnitName,
+ Element := TPasType(CreateElement(TPasUnresolvedTypeRef, AUnitName,
ASection));
ASection.UsesList.Add(Element);
@@ -1198,7 +1198,7 @@ begin
ExpectIdentifier;
end;
- VarType := ParseComplexType;
+ VarType := ParseComplexType(Parent);
H:=CheckHint(Nil,False);
NextToken;
@@ -1523,73 +1523,77 @@ begin
Tok:=UpperCase(CurTokenString);
If (Tok='CDECL') then
begin
- { El['calling-conv'] := 'cdecl';}
+ TPasProcedure(Parent).CallingConvention:=ccCDecl;
+ ExpectToken(tkSemicolon);
+ end
+ else If (Tok='EXPORT') then
+ begin
+ TPasProcedure(Parent).AddModifier(pmExported);
ExpectToken(tkSemicolon);
end
else if (Tok='PASCAL') then
begin
-{ El['calling-conv'] := 'pascal';}
+ TPasProcedure(Parent).CallingConvention:=ccPascal;
ExpectToken(tkSemicolon);
end
else if (Tok='STDCALL') then
begin
-{ El['calling-conv'] := 'stdcall';}
+ TPasProcedure(Parent).CallingConvention:=ccStdCall;
ExpectToken(tkSemicolon);
end
else if (Tok='OLDFPCCALL') then
begin
-{ El['calling-conv'] := 'oldfpccall';}
+ TPasProcedure(Parent).CallingConvention:=ccOldFPCCall;
ExpectToken(tkSemicolon);
end
else if (Tok='EXTDECL') then
begin
-{ El['calling-conv'] := 'extdecl';}
+ TPasProcedure(Parent).AddModifier(pmExternal);
ExpectToken(tkSemicolon);
end
else if (Tok='REGISTER') then
begin
-{ El['calling-conv'] := 'register';}
+ TPasProcedure(Parent).CallingConvention:=ccRegister;
ExpectToken(tkSemicolon);
end
else if (Tok='COMPILERPROC') then
begin
-{ El['calling-conv'] := 'compilerproc';}
+ TPasProcedure(Parent).AddModifier(pmCompilerProc);
ExpectToken(tkSemicolon);
end
else if (Tok='VARARGS') then
begin
-{ 'varargs': needs CDECL & EXTERNAL }
+ TPasProcedure(Parent).AddModifier(pmVarArgs);
ExpectToken(tkSemicolon);
end
else if (tok='DEPRECATED') then
begin
-{ El['calling-conv'] := 'deprecated';}
element.hints:=element.hints+[hDeprecated];
ExpectToken(tkSemicolon);
end
else if (tok='PLATFORM') then
begin
-{ El['calling-conv'] := 'deprecated';}
element.hints:=element.hints+[hPlatform];
ExpectToken(tkSemicolon);
end
else if (tok='LIBRARY') then
begin
-{ El['calling-conv'] := 'deprecated';}
element.hints:=element.hints+[hLibrary];
ExpectToken(tkSemicolon);
end
else if (tok='OVERLOAD') then
begin
- TPasProcedure(Parent).IsOverload := True;
+ TPasProcedure(Parent).AddModifier(pmOverload);
ExpectToken(tkSemicolon);
end
else if (tok='INLINE') then
begin
+ TPasProcedure(Parent).AddModifier(pmInline);
ExpectToken(tkSemicolon);
end
else if (tok='ASSEMBLER') then
begin
+ TPasProcedure(Parent).AddModifier(pmAssembler);
ExpectToken(tkSemicolon);
end
else if (tok = 'EXTERNAL') then
@@ -1621,7 +1625,8 @@ begin
end
else if (CurToken = tkInline) then
begin
-{ TPasProcedure(Parent).IsInline := True;}
+ if Parent is TPasProcedure then
+ TPasProcedure(Parent).AddModifier(pmInline);
ExpectToken(tkSemicolon);
end
else if (CurToken = tkSquaredBraceOpen) then
@@ -2018,38 +2023,46 @@ var
begin
s := UpperCase(CurTokenString);
if s = 'VIRTUAL' then
- Proc.IsVirtual := True
+ Proc.AddModifier(pmVirtual)
else if s = 'DYNAMIC' then
- Proc.IsDynamic := True
+ Proc.AddModifier(pmDynamic)
else if s = 'ABSTRACT' then
- Proc.IsAbstract := True
+ Proc.AddModifier(pmAbstract)
else if s = 'OVERRIDE' then
- Proc.IsOverride := True
+ Proc.AddModifier(pmOverride)
else if s = 'REINTRODUCE' then
- Proc.IsReintroduced := True
+ Proc.AddModifier(pmReintroduce)
else if s = 'OVERLOAD' then
- Proc.IsOverload := True
+ Proc.AddModifier(pmOverload)
else if s = 'STATIC' then
- Proc.IsStatic := True
+ Proc.AddModifier(pmStatic)
else if s = 'MESSAGE' then begin
- Proc.IsMessage := True;
+ Proc.AddModifier(pmMessage);
repeat
NextToken;
+ If CurToken<>tkSemicolon then
+ begin
+ Proc.MessageName:=CurtokenString;
+ If (CurToken=tkString) then
+ Proc.Messagetype:=pmtString;
+ end;
until CurToken = tkSemicolon;
UngetToken;
end
else if s = 'CDECL' then
-{ El['calling-conv'] := 'cdecl';}
+ Proc.CallingConvention:=ccCDecl
else if s = 'PASCAL' then
-{ El['calling-conv'] := 'cdecl';}
+ Proc.CallingConvention:=ccPascal
else if s = 'STDCALL' then
-{ El['calling-conv'] := 'stdcall';}
+ Proc.CallingConvention:=ccStdCall
else if s = 'OLDFPCCALL' then
-{ El['calling-conv'] := 'oldfpccall';}
+ Proc.CallingConvention:=ccOldFPCCall
else if s = 'EXTDECL' then
-{ El['calling-conv'] := 'extdecl';}
+ Proc.AddModifier(pmExtdecl)
else if s = 'DEPRECATED' then
-{ El['calling-conv'] := 'deprecated';}
+ Proc.Hints:=Proc.Hints+[hDeprecated]
+ else if s = 'EXPORT' then
+ Proc.AddModifier(pmExported)
else
begin
UngetToken;
diff --git a/packages/fcl-passrc/src/pscanner.pp b/packages/fcl-passrc/src/pscanner.pp
index 95b8570fc8..1557922189 100644
--- a/packages/fcl-passrc/src/pscanner.pp
+++ b/packages/fcl-passrc/src/pscanner.pp
@@ -1036,7 +1036,7 @@ begin
PPIsSkipping := false
else if PPSkipMode = ppSkipElseBranch then
PPIsSkipping := true;
- end else if Directive = 'ENDIF' then
+ end else if ((Directive = 'ENDIF') or (Directive='IFEND')) then
begin
if PPSkipStackIndex = 0 then
Error(SErrInvalidPPEndif);
diff --git a/packages/fcl-process/src/dummy/process.inc b/packages/fcl-process/src/dummy/process.inc
index d3145d0ab0..73311f2ffa 100644
--- a/packages/fcl-process/src/dummy/process.inc
+++ b/packages/fcl-process/src/dummy/process.inc
@@ -2,10 +2,13 @@
Dummy process.inc
}
-{$if defined(VER2_2) or defined(VER2_3_1)}
+{
+ prevent compilation error for the versions mentioned below
+}
+{$if defined(VER2_4) or defined(VER2_5_1)}
{$warning Temporary workaround - unit does nothing}
{$else}
-{$fatal Proper implementation of TProcess needed}
+{$fatal Proper implementation of TProcess for version of this target needed}
{$endif}
procedure TProcess.CloseProcessHandles;
diff --git a/packages/fcl-process/src/process.pp b/packages/fcl-process/src/process.pp
index fd51639424..9b533a9951 100644
--- a/packages/fcl-process/src/process.pp
+++ b/packages/fcl-process/src/process.pp
@@ -187,8 +187,7 @@ end;
Function TProcess.GetExitStatus : Integer;
begin
- If FRunning then
- PeekExitStatus;
+ GetRunning;
Result:=FExitCode;
end;
diff --git a/packages/fcl-process/src/unix/process.inc b/packages/fcl-process/src/unix/process.inc
index 80ac6a1410..5e10c63111 100644
--- a/packages/fcl-process/src/unix/process.inc
+++ b/packages/fcl-process/src/unix/process.inc
@@ -160,6 +160,9 @@ begin
CommandToList(Cmd,S);
if poNewConsole in P.Options then
begin
+ {$ifdef darwin}
+ S.Insert(0,'open');
+ {$else}
S.Insert(0,'-e');
If (P.ApplicationName<>'') then
begin
@@ -172,6 +175,7 @@ begin
S.Insert(0,'-geometry');
end;
S.Insert(0,'xterm');
+ {$endif}
end;
if (P.ApplicationName<>'') then
begin
@@ -367,7 +371,8 @@ Var
R : Dword;
begin
- fexitcode:=waitprocess(handle);
+ if FRunning then
+ fexitcode:=waitprocess(handle);
Result:=(fexitcode>=0);
FRunning:=False;
end;
diff --git a/packages/fcl-web/src/httpdefs.pp b/packages/fcl-web/src/httpdefs.pp
index 47f995a34a..f002dc55af 100644
--- a/packages/fcl-web/src/httpdefs.pp
+++ b/packages/fcl-web/src/httpdefs.pp
@@ -171,7 +171,8 @@ type
private
FContentFields: TStrings;
FCookieFields: TStrings;
- FHTTPVersion : String;
+ FHTTPVersion: String;
+ FHTTPXRequestedWith: String;
FFields : THttpFields;
FQueryFields: TStrings;
function GetSetField(AIndex: Integer): String;
@@ -249,6 +250,7 @@ type
Property Query : String Index 33 read GetFieldValue Write SetFieldValue;
Property Host : String Index 34 Read GetFieldValue Write SetFieldValue;
Property Content : String Index 35 Read GetFieldValue Write SetFieldValue;
+ Property HTTPXRequestedWith : String Index 36 read GetFieldValue Write SetFieldValue;
// Lists
Property CookieFields : TStrings Read FCookieFields Write SetCookieFields;
Property ContentFields: TStrings read FContentFields;
@@ -604,6 +606,7 @@ begin
else
case Index of
0 : Result:=FHTTPVersion;
+ 36 : Result:=FHTTPXRequestedWith;
else
Result := '';
end;
@@ -633,6 +636,7 @@ begin
28 : ; // Property RemoteHost : String Index 28 read GetFieldValue Write SetFieldValue;
29 : ; // Property ScriptName : String Index 29 read GetFieldValue Write SetFieldValue;
30 : ; // Property ServerPort : Word Read GetServerPort; // Index 30
+ 36 : FHTTPXRequestedWith:=Value;
end;
end;
diff --git a/packages/fcl-xml/src/dom.pp b/packages/fcl-xml/src/dom.pp
index 4c2e791caf..867015ef9e 100644
--- a/packages/fcl-xml/src/dom.pp
+++ b/packages/fcl-xml/src/dom.pp
@@ -101,7 +101,7 @@ type
TDOMAttrDef = class;
TNodePool = class;
PNodePoolArray = ^TNodePoolArray;
- TNodePoolArray = array[0..0] of TNodePool;
+ TNodePoolArray = array[0..MaxInt div sizeof(Pointer)-1] of TNodePool;
{$ifndef fpc}
TFPList = TList;
@@ -216,6 +216,7 @@ type
function GetPrefix: DOMString; virtual;
procedure SetPrefix(const Value: DOMString); virtual;
function GetOwnerDocument: TDOMDocument; virtual;
+ function GetBaseURI: DOMString;
procedure SetReadOnly(Value: Boolean);
procedure Changing;
public
@@ -255,11 +256,15 @@ type
property Prefix: DOMString read GetPrefix write SetPrefix;
// DOM level 3
property TextContent: DOMString read GetTextContent write SetTextContent;
+ function LookupPrefix(const nsURI: DOMString): DOMString;
function LookupNamespaceURI(const APrefix: DOMString): DOMString;
+ function IsDefaultNamespace(const nsURI: DOMString): Boolean;
+ property baseURI: DOMString read GetBaseURI;
// Extensions to DOM interface:
function CloneNode(deep: Boolean; ACloneOwner: TDOMDocument): TDOMNode; overload; virtual;
function FindNode(const ANodeName: DOMString): TDOMNode; virtual;
function CompareName(const name: DOMString): Integer; virtual;
+ property Flags: TNodeFlags read FFlags;
end;
TDOMNodeClass = class of TDOMNode;
@@ -450,6 +455,8 @@ type
function Alloc(AClass: TDOMNodeClass): TDOMNode;
public
function IndexOfNS(const nsURI: DOMString; AddIfAbsent: Boolean = False): Integer;
+ function InsertBefore(NewChild, RefChild: TDOMNode): TDOMNode; override;
+ function ReplaceChild(NewChild, OldChild: TDOMNode): TDOMNode; override;
property DocType: TDOMDocumentType read GetDocType;
property Impl: TDOMImplementation read FImplementation;
property DocumentElement: TDOMElement read GetDocumentElement;
@@ -575,6 +582,7 @@ type
function GetNodeType: Integer; override;
function GetAttributes: TDOMNamedNodeMap; override;
procedure AttachDefaultAttrs;
+ function InternalLookupPrefix(const nsURI: DOMString; Original: TDOMElement): DOMString;
procedure RestoreDefaultAttr(AttrDef: TDOMAttr);
public
destructor Destroy; override;
@@ -1140,10 +1148,17 @@ function GetAncestorElement(n: TDOMNode): TDOMElement;
var
parent: TDOMNode;
begin
- parent := n.ParentNode;
- while Assigned(parent) and (parent.NodeType <> ELEMENT_NODE) do
- parent := parent.ParentNode;
- Result := TDOMElement(parent);
+ case n.nodeType of
+ DOCUMENT_NODE:
+ result := TDOMDocument(n).documentElement;
+ ATTRIBUTE_NODE:
+ result := TDOMAttr(n).OwnerElement;
+ else
+ parent := n.ParentNode;
+ while Assigned(parent) and (parent.NodeType <> ELEMENT_NODE) do
+ parent := parent.ParentNode;
+ Result := TDOMElement(parent);
+ end;
end;
// TODO: specs prescribe to return default namespace if APrefix=null,
@@ -1158,39 +1173,89 @@ begin
Result := '';
if Self = nil then
Exit;
- case NodeType of
- ELEMENT_NODE:
+ if nodeType = ELEMENT_NODE then
+ begin
+ if (nfLevel2 in FFlags) and (TDOMElement(Self).Prefix = APrefix) then
+ begin
+ result := Self.NamespaceURI;
+ Exit;
+ end;
+ if HasAttributes then
begin
- if (nfLevel2 in FFlags) and (TDOMElement(Self).Prefix = APrefix) then
+ Map := Attributes;
+ for I := 0 to Map.Length-1 do
begin
- result := Self.NamespaceURI;
- Exit;
- end;
- if HasAttributes then
+ Attr := TDOMAttr(Map[I]);
+ // should ignore level 1 atts here
+ if ((Attr.Prefix = 'xmlns') and (Attr.localName = APrefix)) or
+ ((Attr.localName = 'xmlns') and (APrefix = '')) then
+ begin
+ result := Attr.NodeValue;
+ Exit;
+ end;
+ end
+ end;
+ end;
+ result := GetAncestorElement(Self).LookupNamespaceURI(APrefix);
+end;
+
+function TDOMNode.LookupPrefix(const nsURI: DOMString): DOMString;
+begin
+ Result := '';
+ if (nsURI = '') or (Self = nil) then
+ Exit;
+ if nodeType = ELEMENT_NODE then
+ result := TDOMElement(Self).InternalLookupPrefix(nsURI, TDOMElement(Self))
+ else
+ result := GetAncestorElement(Self).LookupPrefix(nsURI);
+end;
+
+function TDOMNode.IsDefaultNamespace(const nsURI: DOMString): Boolean;
+var
+ Attr: TDOMAttr;
+ Map: TDOMNamedNodeMap;
+ I: Integer;
+begin
+ Result := False;
+ if Self = nil then
+ Exit;
+ if nodeType = ELEMENT_NODE then
+ begin
+ if TDOMElement(Self).FNSI.PrefixLen = 0 then
+ begin
+ result := (nsURI = namespaceURI);
+ Exit;
+ end
+ else if HasAttributes then
+ begin
+ Map := Attributes;
+ for I := 0 to Map.Length-1 do
begin
- Map := Attributes;
- for I := 0 to Map.Length-1 do
+ Attr := TDOMAttr(Map[I]);
+ if Attr.LocalName = 'xmlns' then
begin
- Attr := TDOMAttr(Map[I]);
- // should ignore level 1 atts here
- if ((Attr.Prefix = 'xmlns') and (Attr.localName = APrefix)) or
- ((Attr.localName = 'xmlns') and (APrefix = '')) then
- begin
- result := Attr.NodeValue;
- Exit;
- end;
- end
+ result := (Attr.Value = nsURI);
+ Exit;
+ end;
end;
- result := GetAncestorElement(Self).LookupNamespaceURI(APrefix);
end;
- DOCUMENT_NODE:
- result := TDOMDocument(Self).documentElement.LookupNamespaceURI(APrefix);
-
- ATTRIBUTE_NODE:
- result := TDOMAttr(Self).OwnerElement.LookupNamespaceURI(APrefix);
+ end;
+ result := GetAncestorElement(Self).IsDefaultNamespace(nsURI);
+end;
+function TDOMNode.GetBaseURI: DOMString;
+begin
+ case NodeType of
+ // !! Incomplete !!
+ DOCUMENT_NODE:
+ result := TDOMDocument(Self).FDocumentURI;
+ PROCESSING_INSTRUCTION_NODE:
+ if Assigned(ParentNode) then
+ result := ParentNode.GetBaseURI
+ else
+ result := OwnerDocument.DocumentURI;
else
- Result := GetAncestorElement(Self).LookupNamespaceURI(APrefix);
+ result := '';
end;
end;
@@ -2167,6 +2232,32 @@ begin
Result := nil;
end;
+function TDOMDocument.InsertBefore(NewChild, RefChild: TDOMNode): TDOMNode;
+var
+ nType: Integer;
+begin
+ nType := NewChild.NodeType;
+ if ((nType = ELEMENT_NODE) and Assigned(DocumentElement)) or
+ ((nType = DOCUMENT_TYPE_NODE) and Assigned(DocType)) then
+ raise EDOMHierarchyRequest.Create('Document.InsertBefore');
+ Result := inherited InsertBefore(NewChild, RefChild);
+end;
+
+function TDOMDocument.ReplaceChild(NewChild, OldChild: TDOMNode): TDOMNode;
+var
+ nType: Integer;
+begin
+ nType := NewChild.NodeType;
+ if ((nType = ELEMENT_NODE) and (OldChild = DocumentElement)) or // root can be replaced by another element
+ ((nType = DOCUMENT_TYPE_NODE) and (OldChild = DocType)) then // and so can be DTD
+ begin
+ inherited InsertBefore(NewChild, OldChild);
+ Result := RemoveChild(OldChild);
+ end
+ else
+ Result := inherited ReplaceChild(NewChild, OldChild);
+end;
+
function TDOMDocument.GetDocumentElement: TDOMElement;
var
node: TDOMNode;
@@ -2677,6 +2768,36 @@ begin
end;
end;
+function TDOMElement.InternalLookupPrefix(const nsURI: DOMString; Original: TDOMElement): DOMString;
+var
+ I: Integer;
+ Attr: TDOMAttr;
+begin
+ result := '';
+ if Self = nil then
+ Exit;
+ if (nfLevel2 in FFlags) and (namespaceURI = nsURI) and (FNSI.PrefixLen > 0) then
+ begin
+ Result := Prefix;
+ if Original.LookupNamespaceURI(result) = nsURI then
+ Exit;
+ end;
+ if Assigned(FAttributes) then
+ begin
+ for I := 0 to FAttributes.Length-1 do
+ begin
+ Attr := TDOMAttr(FAttributes[I]);
+ if (Attr.Prefix = 'xmlns') and (Attr.Value = nsURI) then
+ begin
+ result := Attr.LocalName;
+ if Original.LookupNamespaceURI(result) = nsURI then
+ Exit;
+ end;
+ end;
+ end;
+ result := GetAncestorElement(Self).InternalLookupPrefix(nsURI, Original);
+end;
+
procedure TDOMElement.RestoreDefaultAttr(AttrDef: TDOMAttr);
var
Attr: TDOMAttr;
@@ -3218,7 +3339,7 @@ begin
end
else
begin
- if PAnsiChar(FCurrBlock) = PAnsiChar(FCurrExtent) + sizeof(TExtent) then
+ if PAnsiChar(FCurrBlock) < PAnsiChar(FCurrExtent) + sizeof(TExtent) then
AddExtent(FCurrExtentSize * 2);
Result := FCurrBlock;
Dec(PAnsiChar(FCurrBlock), FElementSize);
diff --git a/packages/fcl-xml/src/xmlread.pp b/packages/fcl-xml/src/xmlread.pp
index 204719b523..7d01671efe 100644
--- a/packages/fcl-xml/src/xmlread.pp
+++ b/packages/fcl-xml/src/xmlread.pp
@@ -67,7 +67,10 @@ type
FResolveExternals: Boolean;
FNamespaces: Boolean;
FDisallowDoctype: Boolean;
+ FCanonical: Boolean;
FMaxChars: Cardinal;
+ function GetCanonical: Boolean;
+ procedure SetCanonical(aValue: Boolean);
public
property Validate: Boolean read FValidate write FValidate;
property PreserveWhitespace: Boolean read FPreserveWhitespace write FPreserveWhitespace;
@@ -78,6 +81,7 @@ type
property Namespaces: Boolean read FNamespaces write FNamespaces;
property DisallowDoctype: Boolean read FDisallowDoctype write FDisallowDoctype;
property MaxChars: Cardinal read FMaxChars write FMaxChars;
+ property CanonicalForm: Boolean read GetCanonical write SetCanonical;
end;
// NOTE: DOM 3 LS ACTION_TYPE enumeration starts at 1
@@ -94,7 +98,7 @@ type
private
FStream: TStream;
FStringData: string;
-// FBaseURI: WideString;
+ FBaseURI: WideString;
FSystemID: WideString;
FPublicID: WideString;
// FEncoding: string;
@@ -103,7 +107,7 @@ type
constructor Create(const AStringData: string); overload;
property Stream: TStream read FStream;
property StringData: string read FStringData;
-// property BaseURI: WideString read FBaseURI write FBaseURI;
+ property BaseURI: WideString read FBaseURI write FBaseURI;
property SystemID: WideString read FSystemID write FSystemID;
property PublicID: WideString read FPublicID write FPublicID;
// property Encoding: string read FEncoding write FEncoding;
@@ -191,10 +195,8 @@ type
LFPos: PWideChar;
FXML11Rules: Boolean;
FSystemID: WideString;
- FPublicID: WideString;
FCharCount: Cardinal;
function GetSystemID: WideString;
- function GetPublicID: WideString;
protected
function Reload: Boolean; virtual;
public
@@ -208,7 +210,6 @@ type
function SetEncoding(const AEncoding: string): Boolean; virtual;
function Matches(const arg: WideString): Boolean;
property SystemID: WideString read GetSystemID write FSystemID;
- property PublicID: WideString read GetPublicID write FPublicID;
end;
TXMLDecodingSource = class(TXMLCharSource)
@@ -307,14 +308,6 @@ type
TCheckNameFlags = set of (cnOptional, cnToken);
- TBinding = class
- public
- uri: WideString;
- next: TBinding;
- prevPrefixBinding: TObject;
- Prefix: PHashItem;
- end;
-
TPrefixedAttr = record
Attr: TDOMAttr;
PrefixLen: Integer; // to avoid recalculation
@@ -345,12 +338,10 @@ type
FDTDStartPos: PWideChar;
FIntSubset: TWideCharBuf;
FAttrTag: Cardinal;
- FPrefixes: THashTable;
- FBindings: TFPList;
- FDefaultPrefix: THashItem;
+ FOwnsDoctype: Boolean;
+
+ FNSHelper: TNSSupport;
FWorkAtts: array of TPrefixedAttr;
- FBindingStack: array of TBinding;
- FFreeBindings: TBinding;
FNsAttHash: TDblHashArray;
FStdPrefix_xml: PHashItem;
FStdPrefix_xmlns: PHashItem;
@@ -364,9 +355,10 @@ type
FResolveExternals: Boolean;
FNamespaces: Boolean;
FDisallowDoctype: Boolean;
+ FCanonical: Boolean;
FMaxChars: Cardinal;
- procedure RaiseExpectedQmark;
+ procedure SkipQuote(out Delim: WideChar; required: Boolean = True);
procedure Initialize(ASource: TXMLCharSource);
function DoParseAttValue(Delim: WideChar): Boolean;
function ContextPush(AEntity: TDOMEntityEx): Boolean;
@@ -382,7 +374,7 @@ type
procedure StandaloneError(LineOffs: Integer = 0);
procedure CallErrorHandler(E: EXMLReadError);
function FindOrCreateElDef: TDOMElementDef;
- function SkipUntilSeq(const Delim: TSetOfChar; const More: array of WideChar): Boolean;
+ function SkipUntilSeq(const Delim: TSetOfChar; c1: WideChar; c2: WideChar = #0): Boolean;
procedure CheckMaxChars;
protected
FCursor: TDOMNode_WithChildren;
@@ -408,7 +400,6 @@ type
function ExpectName: WideString; // [5]
procedure SkipQuotedLiteral(out Literal: WideString; required: Boolean = True);
procedure ExpectAttValue; // [10]
- procedure SkipPubidLiteral(out Literal: WideString); // [12]
procedure ParseComment; // [15]
procedure ParsePI; // [16]
procedure ParseCDSect; // [18]
@@ -435,11 +426,10 @@ type
procedure ExpectChoiceOrSeq(CP: TContentParticle);
procedure ParseElementDecl;
procedure ParseNotationDecl;
- function ResolveEntity(const AbsSysID, PublicID: WideString; out Source: TXMLCharSource): Boolean;
+ function ResolveEntity(const SystemID, PublicID, BaseURI: WideString; out Source: TXMLCharSource): Boolean;
procedure ProcessDefaultAttributes(Element: TDOMElement; Map: TDOMNamedNodeMap);
procedure ProcessNamespaceAtts(Element: TDOMElement);
- procedure AddBinding(Attr: TDOMAttr; Prefix: PHashItem; var Chain: TBinding);
- procedure EndNamespaceScope(var Chain: TBinding);
+ procedure AddBinding(Attr: TDOMAttr; PrefixPtr: PWideChar; PrefixLen: Integer);
procedure PushVC(aElement: TDOMElement; aElDef: TDOMElementDef);
procedure PopVC;
@@ -696,6 +686,30 @@ begin
CompareMem(ABuf.Buffer, Pointer(Arg), ABuf.Length*sizeof(WideChar));
end;
+{ TDOMParseOptions }
+
+function TDOMParseOptions.GetCanonical: Boolean;
+begin
+ Result := FCanonical and FExpandEntities and FCDSectionsAsText and
+ { (not normalizeCharacters) and } FNamespaces and
+ { namespaceDeclarations and } FPreserveWhitespace;
+end;
+
+procedure TDOMParseOptions.SetCanonical(aValue: Boolean);
+begin
+ FCanonical := aValue;
+ if aValue then
+ begin
+ FExpandEntities := True;
+ FCDSectionsAsText := True;
+ FNamespaces := True;
+ FPreserveWhitespace := True;
+ { normalizeCharacters := False; }
+ { namespaceDeclarations := True; }
+ { wellFormed := True; }
+ end;
+end;
+
{ TXMLInputSource }
constructor TXMLInputSource.Create(AStream: TStream);
@@ -744,7 +758,7 @@ begin
ADoc := nil;
with TXMLReader.Create(Self) do
try
- if ResolveEntity(URI, '', Src) then
+ if ResolveEntity(URI, '', '', Src) then
ProcessXML(Src)
else
DoErrorPos(esFatal, 'The specified URI could not be resolved', NullLocation);
@@ -819,16 +833,6 @@ begin
Result := True; // always succeed
end;
-function TXMLCharSource.GetPublicID: WideString;
-begin
- if FPublicID <> '' then
- Result := FPublicID
- else if Assigned(FParent) then
- Result := FParent.PublicID
- else
- Result := '';
-end;
-
function TXMLCharSource.GetSystemID: WideString;
begin
if FSystemID <> '' then
@@ -879,7 +883,11 @@ begin
if (FBufEnd >= FBuf + Length(arg)) or Reload then
Result := CompareMem(Pointer(arg), FBuf, Length(arg)*sizeof(WideChar));
if Result then
+ begin
Inc(FBuf, Length(arg));
+ if FBuf >= FBufEnd then
+ Reload;
+ end;
end;
{ TXMLDecodingSource }
@@ -1164,7 +1172,7 @@ begin
else if SrcIn.FStringData <> '' then
SrcOut := TXMLStreamInputSource.Create(TStringStream.Create(SrcIn.FStringData), True)
else if (SrcIn.SystemID <> '') then
- ResolveEntity(SrcIn.SystemID, SrcIn.PublicID, SrcOut);
+ ResolveEntity(SrcIn.SystemID, SrcIn.PublicID, SrcIn.BaseURI, SrcOut);
end;
if (SrcOut = nil) and (FSource = nil) then
DoErrorPos(esFatal, 'No input source specified', NullLocation);
@@ -1176,14 +1184,17 @@ begin
Loc.LinePos := FSource.FBuf-FSource.LFPos;
end;
-function TXMLReader.ResolveEntity(const AbsSysID, PublicID: WideString; out Source: TXMLCharSource): Boolean;
+function TXMLReader.ResolveEntity(const SystemID, PublicID, BaseURI: WideString; out Source: TXMLCharSource): Boolean;
var
+ AbsSysID: WideString;
Filename: string;
Stream: TStream;
fd: THandle;
begin
Source := nil;
Result := False;
+ if not ResolveRelativeURI(BaseURI, SystemID, AbsSysID) then
+ Exit;
{ TODO: alternative resolvers
These may be 'internal' resolvers or a handler set by application.
Internal resolvers should probably produce a TStream
@@ -1199,7 +1210,6 @@ begin
Stream := THandleOwnerStream.Create(fd);
Source := TXMLStreamInputSource.Create(Stream, True);
Source.SystemID := AbsSysID; // <- Revisit: Really need absolute sysID?
- Source.PublicID := PublicID;
end;
end;
Result := Assigned(Source);
@@ -1213,11 +1223,6 @@ begin
FSource.Initialize;
end;
-procedure TXMLReader.RaiseExpectedQmark;
-begin
- FatalError('Expected single or double quote');
-end;
-
procedure TXMLReader.FatalError(Expected: WideChar);
begin
// FIX: don't output what is found - anything may be found, including exploits...
@@ -1258,9 +1263,15 @@ end;
procedure TXMLReader.DoErrorPos(Severity: TErrorSeverity; const descr: string; const ErrPos: TLocation);
var
E: EXMLReadError;
+ sysid: WideString;
begin
if Assigned(FSource) then
- E := EXMLReadError.CreateFmt('In ''%s'' (line %d pos %d): %s', [FSource.SystemID, ErrPos.Line, ErrPos.LinePos, descr])
+ begin
+ sysid := FSource.FSystemID;
+ if (sysid = '') and Assigned(FSource.FEntity) then
+ sysid := TDOMEntityEx(FSource.FEntity).FURI;
+ E := EXMLReadError.CreateFmt('In ''%s'' (line %d pos %d): %s', [sysid, ErrPos.Line, ErrPos.LinePos, descr]);
+ end
else
E := EXMLReadError.Create(descr);
E.FSeverity := Severity;
@@ -1393,12 +1404,22 @@ begin
end;
end;
+procedure TXMLReader.SkipQuote(out Delim: WideChar; required: Boolean);
+begin
+ Delim := #0;
+ if (FSource.FBuf^ = '''') or (FSource.FBuf^ = '"') then
+ begin
+ Delim := FSource.FBuf^;
+ FSource.NextChar; // skip quote
+ end
+ else if required then
+ FatalError('Expected single or double quote');
+end;
+
const
PrefixDefault: array[0..4] of WideChar = ('x','m','l','n','s');
constructor TXMLReader.Create;
-var
- b: TBinding;
begin
inherited Create;
BufAllocate(FName, 128);
@@ -1406,20 +1427,12 @@ begin
FIDRefs := TFPList.Create;
FNotationRefs := TFPList.Create;
- FPrefixes := THashTable.Create(16, False);
- FBindings := TFPList.Create;
+ FNSHelper := TNSSupport.Create;
+
FNsAttHash := TDblHashArray.Create;
SetLength(FWorkAtts, 16);
- SetLength(FBindingStack, 16);
- FStdPrefix_xml := FPrefixes.FindOrAdd(@PrefixDefault, 3);
- FStdPrefix_xmlns := FPrefixes.FindOrAdd(@PrefixDefault, 5);
- { implicit binding for the 'xml' prefix }
- b := TBinding.Create;
- FBindings.Add(b);
- FStdPrefix_xml^.Data := b;
- b.uri := stduri_xml;
- b.Prefix := FStdPrefix_xml;
-
+ FStdPrefix_xml := FNSHelper.GetPrefix(@PrefixDefault, 3);
+ FStdPrefix_xmlns := FNSHelper.GetPrefix(@PrefixDefault, 5);
// Set char rules to XML 1.0
FNamePages := @NamePages;
SetLength(FValidator, 16);
@@ -1437,12 +1450,11 @@ begin
FResolveExternals := FCtrl.Options.ResolveExternals;
FNamespaces := FCtrl.Options.Namespaces;
FDisallowDoctype := FCtrl.Options.DisallowDoctype;
+ FCanonical := FCtrl.Options.CanonicalForm;
FMaxChars := FCtrl.Options.MaxChars;
end;
destructor TXMLReader.Destroy;
-var
- I: Integer;
begin
if Assigned(FEntityValue.Buffer) then
FreeMem(FEntityValue.Buffer);
@@ -1455,10 +1467,10 @@ begin
ClearRefs(FNotationRefs);
ClearRefs(FIDRefs);
FNsAttHash.Free;
- for I := FBindings.Count-1 downto 0 do
- TObject(FBindings.List^[I]).Free;
- FPrefixes.Free;
- FBindings.Free;
+ FNSHelper.Free;
+ if FOwnsDoctype then
+ FDocType.Free;
+
FNotationRefs.Free;
FIDRefs.Free;
inherited Destroy;
@@ -1732,7 +1744,7 @@ var
begin
if (AEntity.SystemID <> '') and not AEntity.FResolved then
begin
- Result := ResolveEntity(AEntity.FURI, AEntity.PublicID, Src);
+ Result := ResolveEntity(AEntity.SystemID, AEntity.PublicID, AEntity.FURI, Src);
if not Result then
begin
// TODO: a detailed message like SysErrorMessage(GetLastError) would be great here
@@ -1743,10 +1755,11 @@ begin
else
begin
Src := TXMLCharSource.Create(AEntity.FReplacementText);
- // needed in case of prefetched external PE
- Src.SystemID := AEntity.FURI;
Src.FLineNo := AEntity.FStartLocation.Line;
Src.LFPos := Src.FBuf - AEntity.FStartLocation.LinePos;
+ // needed in case of prefetched external PE
+ if AEntity.SystemID <> '' then
+ Src.SystemID := AEntity.FURI;
end;
AEntity.FOnStack := True;
@@ -1884,6 +1897,7 @@ begin
PEnt.FCharCount := FValue.Length;
PEnt.FStartLocation.Line := 1;
PEnt.FStartLocation.LinePos := 1;
+ PEnt.FURI := FSource.SystemID; // replace base URI with absolute one
finally
ContextPop;
PEnt.FResolved := True;
@@ -1903,10 +1917,7 @@ procedure TXMLReader.ExpectAttValue; // [10]
var
Delim: WideChar;
begin
- if (FSource.FBuf^ <> '''') and (FSource.FBuf^ <> '"') then
- RaiseExpectedQmark;
- Delim := FSource.FBuf^;
- FSource.NextChar; // skip quote
+ SkipQuote(Delim);
StoreLocation(FTokenStart);
if not DoParseAttValue(Delim) then
FatalError('Literal has no closing quote',-1);
@@ -1916,10 +1927,9 @@ procedure TXMLReader.SkipQuotedLiteral(out Literal: WideString; required: Boolea
var
Delim: WideChar;
begin
- if (FSource.FBuf^ = '''') or (FSource.FBuf^ = '"') then
+ SkipQuote(Delim, required);
+ if Delim <> #0 then
begin
- Delim := FSource.FBuf^;
- FSource.NextChar; // skip quote
StoreLocation(FTokenStart);
FValue.Length := 0;
if Delim = '''' then
@@ -1930,32 +1940,12 @@ begin
FatalError('Literal has no closing quote', -1);
FSource.NextChar;
SetString(Literal, FValue.Buffer, FValue.Length);
- end
- else if required then
- RaiseExpectedQMark;
-end;
-
-procedure TXMLReader.SkipPubidLiteral(out Literal: WideString); // [12]
-var
- I: Integer;
- wc: WideChar;
-begin
- SkipQuotedLiteral(Literal);
- for I := 1 to Length(Literal) do
- begin
- wc := Literal[I];
- if (wc > #255) or not (Char(ord(wc)) in PubidChars) then
- FatalError('Illegal Public ID literal', -1);
- if (wc = #10) or (wc = #13) then
- Literal[I] := #32;
end;
end;
-function TXMLReader.SkipUntilSeq(const Delim: TSetOfChar; const More: array of WideChar): Boolean;
+function TXMLReader.SkipUntilSeq(const Delim: TSetOfChar; c1: WideChar; c2: WideChar = #0): Boolean;
var
- I: Integer;
wc: WideChar;
- Match: Boolean;
begin
Result := False;
FValue.Length := 0;
@@ -1965,18 +1955,12 @@ begin
if wc <> #0 then
begin
FSource.NextChar;
- if (FValue.Length > High(More)) then
+ if (FValue.Length > ord(c2 <> #0)) then
begin
- Match := True;
- for I := High(More) downto Low(More) do
- if FValue.Buffer[FValue.Length - (High(More)+1) + I] <> More[I] then
- begin
- Match := False;
- Break;
- end;
- if Match then
+ if (FValue.Buffer[FValue.Length-1] = c1) and
+ ((c2 = #0) or ((c2 <> #0) and (FValue.Buffer[FValue.Length-2] = c2))) then
begin
- Dec(FValue.Length, High(More)+1);
+ Dec(FValue.Length, ord(c2 <> #0) + 1);
Result := True;
Exit;
end;
@@ -1986,15 +1970,10 @@ begin
until wc = #0;
end;
-const
- CommentEnd: array[0..0] of WideChar = ('-');
- PIEnd: array[0..0] of WideChar = ('?');
- CDEnd: array[0..1] of WideChar = (']',']');
-
procedure TXMLReader.ParseComment; // [15]
begin
ExpectString('--');
- if SkipUntilSeq([#0, '-'], CommentEnd) then
+ if SkipUntilSeq([#0, '-'], '-') then
begin
ExpectChar('>');
DoComment(FValue.Buffer, FValue.Length);
@@ -2026,7 +2005,7 @@ begin
if FSource.FBuf^ <> '?' then
SkipS(True);
- if SkipUntilSeq(GT_Delim, PIEnd) then
+ if SkipUntilSeq(GT_Delim, '?') then
begin
SetString(Value, FValue.Buffer, FValue.Length);
// SAX: ContentHandler.ProcessingInstruction(Name, Value);
@@ -2043,75 +2022,102 @@ begin
FatalError('Unterminated processing instruction', -1);
end;
+const
+ verStr: array[Boolean] of WideString = ('1.0', '1.1');
+
procedure TXMLReader.ParseXmlOrTextDecl(TextDecl: Boolean);
var
TmpStr: WideString;
IsXML11: Boolean;
+ Delim: WideChar;
+ buf: array[0..31] of WideChar;
+ I: Integer;
begin
SkipS(True);
- // VersionInfo: optional in TextDecl, required in XmlDecl
+ // [24] VersionInfo: optional in TextDecl, required in XmlDecl
if (not TextDecl) or (FSource.FBuf^ = 'v') then
begin
- ExpectString('version'); // [24]
+ ExpectString('version');
ExpectEq;
- SkipQuotedLiteral(TmpStr);
- IsXML11 := False;
- if TmpStr = '1.1' then // Checking for bad chars is implied
- IsXML11 := True
- else if TmpStr <> '1.0' then
- { should be no whitespace in these literals, but that isn't checked now }
+ SkipQuote(Delim);
+ StoreLocation(FTokenStart);
+ I := 0;
+ while (I < 3) and (FSource.FBuf^ <> Delim) do
+ begin
+ buf[I] := FSource.FBuf^;
+ Inc(I);
+ FSource.NextChar;
+ end;
+ if (I <> 3) or (buf[0] <> '1') or (buf[1] <> '.') or
+ ((buf[2] <> '0') and (buf[2] <> '1')) then
FatalError('Illegal version number', -1);
+ ExpectChar(Delim);
+ IsXML11 := buf[2] = '1';
+
if not TextDecl then
begin
if doc.InheritsFrom(TXMLDocument) then
- TXMLDocument(doc).XMLVersion := TmpStr;
- if IsXML11 then
- XML11_BuildTables;
+ TXMLDocument(doc).XMLVersion := verStr[IsXML11]; // buf[0..2] works with FPC only
end
else // parsing external entity
if IsXML11 and not FXML11 then
FatalError('XML 1.0 document cannot invoke XML 1.1 entities', -1);
- if FSource.FBuf^ <> '?' then
+ if TextDecl or (FSource.FBuf^ <> '?') then
SkipS(True);
end;
- // EncodingDecl: required in TextDecl, optional in XmlDecl
- if TextDecl or (FSource.FBuf^ = 'e') then // [80]
+ // [80] EncodingDecl: required in TextDecl, optional in XmlDecl
+ if TextDecl or (FSource.FBuf^ = 'e') then
begin
ExpectString('encoding');
ExpectEq;
- SkipQuotedLiteral(TmpStr);
-
- if not IsValidXmlEncoding(TmpStr) then
- FatalError('Illegal encoding name', -1);
+ SkipQuote(Delim);
+ I := 0;
+ while (I < 30) and (FSource.FBuf^ <> Delim) and (FSource.FBuf^ < #127) and
+ ((Char(ord(FSource.FBuf^)) in ['A'..'Z', 'a'..'z']) or
+ ((I > 0) and (Char(ord(FSource.FBuf^)) in ['0'..'9', '.', '-', '_']))) do
+ begin
+ buf[I] := FSource.FBuf^;
+ Inc(I);
+ FSource.NextChar;
+ end;
+ if not CheckForChar(Delim) then
+ FatalError('Illegal encoding name', i);
+ SetString(TmpStr, buf, i);
if not FSource.SetEncoding(TmpStr) then // <-- Wide2Ansi conversion here
- FatalError('Encoding ''%s'' is not supported', [TmpStr], -1);
+ FatalError('Encoding ''%s'' is not supported', [TmpStr], i+1);
// getting here means that specified encoding is supported
// TODO: maybe assign the 'preferred' encoding name?
if not TextDecl and doc.InheritsFrom(TXMLDocument) then
TXMLDocument(doc).Encoding := TmpStr;
if FSource.FBuf^ <> '?' then
- SkipS(True);
+ SkipS(not TextDecl);
end;
- // SDDecl: forbidden in TextDecl, optional in XmlDecl
+ // [32] SDDecl: forbidden in TextDecl, optional in XmlDecl
if (not TextDecl) and (FSource.FBuf^ = 's') then
begin
ExpectString('standalone');
ExpectEq;
- SkipQuotedLiteral(TmpStr);
- if TmpStr = 'yes' then
+ SkipQuote(Delim);
+ StoreLocation(FTokenStart);
+ if FSource.Matches('yes') then
FStandalone := True
- else if TmpStr <> 'no' then
+ else if not FSource.Matches('no') then
FatalError('Only "yes" or "no" are permitted as values of "standalone"', -1);
+ ExpectChar(Delim);
SkipS;
end;
ExpectString('?>');
+ { Switch to 1.1 rules only after declaration is parsed completely. This is to
+ ensure that NEL and LSEP within declaration are rejected (rmt-056, rmt-057) }
+ if (not TextDecl) and IsXML11 then
+ XML11_BuildTables;
end;
procedure TXMLReader.DTDReloadHook;
@@ -2136,7 +2142,6 @@ end;
procedure TXMLReader.ParseDoctypeDecl; // [28]
var
Src: TXMLCharSource;
- DoctypeURI: WideString;
begin
if FState >= rsDTD then
FatalError('Markup declaration is not allowed here');
@@ -2155,7 +2160,10 @@ begin
SkipS;
finally
// DONE: append node after its name has been set; always append to avoid leak
- Doc.AppendChild(FDocType);
+ if FCanonical then
+ FOwnsDoctype := True
+ else
+ Doc.AppendChild(FDocType);
FCursor := nil;
end;
@@ -2179,8 +2187,7 @@ begin
if (FDocType.SystemID <> '') then
begin
- ResolveRelativeURI(FSource.SystemID, FDocType.SystemID, DoctypeURI);
- if ResolveEntity(DocTypeURI, FDocType.PublicID, Src) then
+ if ResolveEntity(FDocType.SystemID, FDocType.PublicID, FSource.SystemID, Src) then
begin
Initialize(Src);
try
@@ -2606,6 +2613,8 @@ begin
CheckNCName;
ExpectWhitespace;
+ // remember where the entity is declared
+ Entity.FURI := FSource.SystemID;
if (FSource.FBuf^ = '"') or (FSource.FBuf^ = '''') then
begin
NDataAllowed := False;
@@ -2617,14 +2626,8 @@ begin
SetString(Entity.FReplacementText, FEntityValue.Buffer, FEntityValue.Length);
Entity.FCharCount := FEntityValue.Length;
end
- else
- begin
- if not ParseExternalID(Entity.FSystemID, Entity.FPublicID, False) then
- FatalError('Expected entity value or external ID');
- { need to resolve entity's SystemID relative to the current source,
- which may differ from the source at the point of inclusion }
- ResolveRelativeURI(FSource.SystemID, Entity.SystemID, Entity.FURI);
- end;
+ else if not ParseExternalID(Entity.FSystemID, Entity.FPublicID, False) then
+ FatalError('Expected entity value or external ID');
if NDataAllowed then // [76]
begin
@@ -2726,11 +2729,10 @@ begin
else if FSource.Matches(']]>') then
Dec(IgnoreLevel)
else if wc <> #0 then
- FSource.NextChar;
- until (IgnoreLevel=0) or (wc = #0);
-// Since PE's are not recognized in ignore sections, reaching EOF is fatal.
- if wc = #0 then
- Break;
+ FSource.NextChar
+ else // PE's aren't recognized in ignore section, cannot ContextPop()
+ DoErrorPos(esFatal, 'IGNORE section is not closed', IgnoreLoc);
+ until IgnoreLevel=0;
end;
end
else
@@ -2759,14 +2761,8 @@ begin
end;
until False;
FRecognizePE := False;
- if (IncludeLevel > 0) or (IgnoreLevel > 0) then
- begin
- if IncludeLevel > 0 then
- FTokenStart := IncludeLoc
- else
- FTokenStart := IgnoreLoc;
- FatalError('Conditional section is not closed', -1);
- end;
+ if IncludeLevel > 0 then
+ DoErrorPos(esFatal, 'INCLUDE section is not closed', IncludeLoc);
if (FSource.DTDSubsetType = dsInternal) and (FSource.FBuf^ = ']') then
Exit;
if FSource.FBuf^ <> #0 then
@@ -2789,7 +2785,7 @@ begin
ExpectString('[CDATA[');
if FState <> rsRoot then
FatalError('Illegal at document level');
- if SkipUntilSeq(GT_Delim, CDEnd) then
+ if SkipUntilSeq(GT_Delim, ']', ']') then
DoCDSect(FValue.Buffer, FValue.Length)
else
FatalError('Unterminated CDATA section', -1);
@@ -3025,7 +3021,7 @@ begin
ValidationError('Element ''%s'' is missing required sub-elements', [NewElem.NSI.QName^.Key], ErrOffset);
if FNamespaces then
- EndNamespaceScope(FBindingStack[FNesting]);
+ FNSHelper.EndElement;
PopVC;
end;
@@ -3173,12 +3169,13 @@ begin
end;
-procedure TXMLReader.AddBinding(Attr: TDOMAttr; Prefix: PHashItem; var Chain: TBinding);
+procedure TXMLReader.AddBinding(Attr: TDOMAttr; PrefixPtr: PWideChar; PrefixLen: Integer);
var
nsUri: DOMString;
- b: TBinding;
+ Prefix: PHashItem;
begin
nsUri := Attr.NodeValue;
+ Prefix := FNSHelper.GetPrefix(PrefixPtr, PrefixLen);
{ 'xml' is allowed to be bound to the correct namespace }
if ((nsUri = stduri_xml) <> (Prefix = FStdPrefix_xml)) or
(Prefix = FStdPrefix_xmlns) or
@@ -3190,45 +3187,10 @@ begin
FatalError('Illegal usage of reserved namespace URI ''%s''', [nsUri]);
end;
- { try reusing an existing binding }
- b := FFreeBindings;
- if Assigned(b) then
- FFreeBindings := b.Next
- else { no free bindings, create a new one }
- begin
- b := TBinding.Create;
- FBindings.Add(b);
- end;
+ if (nsUri = '') and not (FXML11 or (Prefix^.Key = '')) then
+ FatalError('Illegal undefining of namespace'); { position - ? }
- b.uri := nsUri;
- b.prefix := Prefix;
- b.PrevPrefixBinding := Prefix^.Data;
- if nsUri = '' then
- begin
- if (FXML11 or (Prefix = @FDefaultPrefix)) then // prefix being unbound
- Prefix^.Data := nil
- else
- FatalError('Illegal undefining of namespace'); { position - ? }
- end
- else
- Prefix^.Data := b;
-
- b.Next := Chain;
- Chain := b;
-end;
-
-procedure TXMLReader.EndNamespaceScope(var Chain: TBinding);
-var
- b: TBinding;
-begin
- while Assigned(Chain) do
- begin
- b := Chain;
- Chain := b.next;
- b.next := FFreeBindings;
- FFreeBindings := b;
- b.Prefix^.Data := b.prevPrefixBinding;
- end;
+ FNSHelper.BindPrefix(nsURI, Prefix);
end;
procedure TXMLReader.ProcessNamespaceAtts(Element: TDOMElement);
@@ -3240,8 +3202,8 @@ var
PrefixCount: Integer;
b: TBinding;
begin
- if FNesting = Length(FBindingStack) then
- SetLength(FBindingStack, FNesting * 2);
+ FNSHelper.StartElement;
+
PrefixCount := 0;
if Element.HasAttributes then
begin
@@ -3260,13 +3222,12 @@ begin
begin
// TODO: check all consequences of having zero PrefixLength
Attr.SetNSI(stduri_xmlns, 0);
- AddBinding(Attr, @FDefaultPrefix, FBindingStack[FNesting]);
+ AddBinding(Attr, nil, 0);
end
else if AttrName^.Key[6] = ':' then
begin
- Prefix := FPrefixes.FindOrAdd(@AttrName^.Key[7], Length(AttrName^.Key)-6);
Attr.SetNSI(stduri_xmlns, 6);
- AddBinding(Attr, Prefix, FBindingStack[FNesting]);
+ AddBinding(Attr, @AttrName^.Key[7], Length(AttrName^.Key)-6);
end;
end
else
@@ -3287,15 +3248,15 @@ begin
FNsAttHash.Init(PrefixCount);
for I := 0 to PrefixCount-1 do
begin
- AttrName := FWorkAtts[I].Attr.NSI.QName;
- Prefix := FPrefixes.FindOrAdd(PWideChar(AttrName^.Key), FWorkAtts[I].PrefixLen-1);
- b := TBinding(Prefix^.Data);
- if b = nil then
+ AttrName := FWorkAtts[I].Attr.NSI.QName;
+ if not FNSHelper.IsPrefixBound(PWideChar(AttrName^.Key), FWorkAtts[I].PrefixLen-1, Prefix) then
FatalError('Unbound prefix "%s"', [Prefix^.Key]);
+
+ b := TBinding(Prefix^.Data);
{ detect duplicates }
J := FWorkAtts[I].PrefixLen+1;
- if FNsAttHash.Locate(@b.uri, @AttrName^.Key[J], Length(AttrName^.Key) - J) then
+ if FNsAttHash.Locate(@b.uri, @AttrName^.Key[J], Length(AttrName^.Key) - J+1) then
FatalError('Duplicate prefixed attribute');
// convert Attr into namespaced one (by hack for the time being)
@@ -3306,21 +3267,24 @@ begin
J := Pos(WideChar(':'), Element.NSI.QName^.Key);
if J > 1 then
begin
- Prefix := FPrefixes.FindOrAdd(PWideChar(Element.NSI.QName^.Key), J-1);
- if Prefix^.Data = nil then
+ if not FNSHelper.IsPrefixBound(PWideChar(Element.NSI.QName^.Key), J-1, Prefix) then
FatalError('Unbound prefix "%s"', [Prefix^.Key]);
b := TBinding(Prefix^.Data);
+ Element.SetNSI(b.uri, J);
end
- else if Assigned(FDefaultPrefix.Data) then
- b := TBinding(FDefaultPrefix.Data)
else
- Exit;
- // convert Element into namespaced one (by hack for the time being)
- Element.SetNSI(b.uri, J);
+ begin
+ b := FNSHelper.DefaultNSBinding;
+ if Assigned(b) then
+ Element.SetNSI(b.uri, 0);
+ end;
end;
function TXMLReader.ParseExternalID(out SysID, PubID: WideString; // [75]
SysIdOptional: Boolean): Boolean;
+var
+ I: Integer;
+ wc: WideChar;
begin
if FSource.Matches('SYSTEM') then
begin
@@ -3331,7 +3295,15 @@ begin
else if FSource.Matches('PUBLIC') then
begin
ExpectWhitespace;
- SkipPubidLiteral(PubID);
+ SkipQuotedLiteral(PubID);
+ for I := 1 to Length(PubID) do
+ begin
+ wc := PubID[I];
+ if (wc > #255) or not (Char(ord(wc)) in PubidChars) then
+ FatalError('Illegal Public ID literal', -1);
+ if (wc = #10) or (wc = #13) then
+ PubID[I] := #32;
+ end;
NormalizeSpaces(PubID);
if SysIdOptional then
SkipWhitespace
diff --git a/packages/fcl-xml/src/xmlutils.pp b/packages/fcl-xml/src/xmlutils.pp
index 4280bc4f92..b6dcc3c8b3 100644
--- a/packages/fcl-xml/src/xmlutils.pp
+++ b/packages/fcl-xml/src/xmlutils.pp
@@ -16,11 +16,12 @@ unit xmlutils;
{$ifdef fpc}{$mode objfpc}{$endif}
{$H+}
+{$ifopt Q+}{$define overflow_check}{$endif}
interface
uses
- SysUtils;
+ SysUtils, Classes;
function IsXmlName(const Value: WideString; Xml11: Boolean = False): Boolean; overload;
function IsXmlName(Value: PWideChar; Len: Integer; Xml11: Boolean = False): Boolean; overload;
@@ -40,6 +41,7 @@ function WStrLIComp(S1, S2: PWideChar; Len: Integer): Integer;
type
{$ifndef fpc}
PtrInt = LongInt;
+ TFPList = TList;
{$endif}
PPHashItem = ^PHashItem;
@@ -50,7 +52,7 @@ type
Next: PHashItem;
Data: TObject;
end;
- THashItemArray = array[0..0] of PHashItem;
+ THashItemArray = array[0..MaxInt div sizeof(Pointer)-1] of PHashItem;
PHashItemArray = ^THashItemArray;
THashForEach = function(Entry: PHashItem; arg: Pointer): Boolean;
@@ -86,7 +88,7 @@ type
lname: PWideChar;
lnameLen: Integer;
end;
- TExpHashEntryArray = array[0..0] of TExpHashEntry;
+ TExpHashEntryArray = array[0..MaxInt div sizeof(TExpHashEntry)-1] of TExpHashEntry;
PExpHashEntryArray = ^TExpHashEntryArray;
TDblHashArray = class(TObject)
@@ -100,6 +102,43 @@ type
destructor Destroy; override;
end;
+ TBinding = class
+ public
+ uri: WideString;
+ next: TBinding;
+ prevPrefixBinding: TObject;
+ Prefix: PHashItem;
+ end;
+
+ TAttributeAction = (
+ aaUnchanged,
+ aaPrefix, // only override the prefix
+ aaBoth // override prefix and emit namespace definition
+ );
+
+ TNSSupport = class(TObject)
+ private
+ FNesting: Integer;
+ FPrefixSeqNo: Integer;
+ FFreeBindings: TBinding;
+ FBindings: TFPList;
+ FBindingStack: array of TBinding;
+ FPrefixes: THashTable;
+ FDefaultPrefix: THashItem;
+ public
+ constructor Create;
+ destructor Destroy; override;
+ procedure DefineBinding(const Prefix, nsURI: WideString; out Binding: TBinding);
+ function CheckAttribute(const Prefix, nsURI: WideString;
+ out Binding: TBinding): TAttributeAction;
+ function IsPrefixBound(P: PWideChar; Len: Integer; out Prefix: PHashItem): Boolean;
+ function GetPrefix(P: PWideChar; Len: Integer): PHashItem;
+ function BindPrefix(const nsURI: WideString; aPrefix: PHashItem): TBinding;
+ function DefaultNSBinding: TBinding;
+ procedure StartElement;
+ procedure EndElement;
+ end;
+
{$i names.inc}
implementation
@@ -345,7 +384,9 @@ begin
Result := InitValue;
while KeyLen <> 0 do
begin
+{$ifdef overflow_check}{$q-}{$endif}
Result := Result * $F4243 xor ord(Key^);
+{$ifdef overflow_check}{$q+}{$endif}
Inc(Key);
Dec(KeyLen);
end;
@@ -440,7 +481,7 @@ var
h: LongWord;
begin
h := Hash(0, Key, KeyLength);
- Entry := @FBucket[h mod FBucketCount];
+ Entry := @FBucket^[h mod FBucketCount];
while Assigned(Entry^) and not ((Entry^^.HashValue = h) and KeyCompare(Entry^^.Key, Key, KeyLength) ) do
Entry := @Entry^^.Next;
Found := Assigned(Entry^);
@@ -457,8 +498,7 @@ begin
else
begin
New(Result);
- // SetString for WideStrings trims on zero chars
- // need to investigate and report
+ // SetString for WideStrings trims on zero chars [fixed, #14740]
SetLength(Result^.Key, KeyLength);
Move(Key^, Pointer(Result^.Key)^, KeyLength*sizeof(WideChar));
Result^.HashValue := h;
@@ -482,7 +522,7 @@ begin
e := FBucket^[i];
while Assigned(e) do
begin
- chain := @p[e^.HashValue mod NewCapacity];
+ chain := @p^[e^.HashValue mod NewCapacity];
n := e^.Next;
e^.Next := chain^;
chain^ := e;
@@ -498,7 +538,7 @@ function THashTable.Remove(Entry: PHashItem): Boolean;
var
chain: PPHashItem;
begin
- chain := @FBucket[Entry^.HashValue mod FBucketCount];
+ chain := @FBucket^[Entry^.HashValue mod FBucketCount];
while Assigned(chain^) do
begin
if chain^ = Entry then
@@ -525,7 +565,7 @@ var
begin
for i := 0 to FBucketCount-1 do
begin
- chain := @FBucket[i];
+ chain := @FBucket^[i];
while Assigned(chain^) do
begin
if chain^^.Data = aData then
@@ -625,6 +665,172 @@ begin
result := False;
end;
+{ TNSSupport }
+
+constructor TNSSupport.Create;
+var
+ b: TBinding;
+begin
+ inherited Create;
+ FPrefixes := THashTable.Create(16, False);
+ FBindings := TFPList.Create;
+ SetLength(FBindingStack, 16);
+
+ { provide implicit binding for the 'xml' prefix }
+ // TODO: move stduri_xml, etc. to this unit, so they are reused.
+ DefineBinding('xml', 'http://www.w3.org/XML/1998/namespace', b);
+end;
+
+destructor TNSSupport.Destroy;
+var
+ I: Integer;
+begin
+ for I := FBindings.Count-1 downto 0 do
+ TObject(FBindings.List^[I]).Free;
+ FBindings.Free;
+ FPrefixes.Free;
+ inherited Destroy;
+end;
+
+function TNSSupport.BindPrefix(const nsURI: WideString; aPrefix: PHashItem): TBinding;
+begin
+ { try to reuse an existing binding }
+ result := FFreeBindings;
+ if Assigned(result) then
+ FFreeBindings := result.Next
+ else { no free bindings, create a new one }
+ begin
+ result := TBinding.Create;
+ FBindings.Add(result);
+ end;
+
+ { link it into chain of bindings at the current element level }
+ result.Next := FBindingStack[FNesting];
+ FBindingStack[FNesting] := result;
+
+ { bind }
+ result.uri := nsURI;
+ result.Prefix := aPrefix;
+ result.PrevPrefixBinding := aPrefix^.Data;
+ aPrefix^.Data := result;
+end;
+
+function TNSSupport.DefaultNSBinding: TBinding;
+begin
+ result := TBinding(FDefaultPrefix.Data);
+end;
+
+procedure TNSSupport.DefineBinding(const Prefix, nsURI: WideString;
+ out Binding: TBinding);
+var
+ Pfx: PHashItem;
+begin
+ Pfx := @FDefaultPrefix;
+ if (nsURI <> '') and (Prefix <> '') then
+ Pfx := FPrefixes.FindOrAdd(PWideChar(Prefix), Length(Prefix));
+ if (Pfx^.Data = nil) or (TBinding(Pfx^.Data).uri <> nsURI) then
+ Binding := BindPrefix(nsURI, Pfx)
+ else
+ Binding := nil;
+end;
+
+function TNSSupport.CheckAttribute(const Prefix, nsURI: WideString;
+ out Binding: TBinding): TAttributeAction;
+var
+ Pfx: PHashItem;
+ I: Integer;
+ b: TBinding;
+ buf: array[0..31] of WideChar;
+ p: PWideChar;
+begin
+ Binding := nil;
+ Pfx := nil;
+ Result := aaUnchanged;
+ if Prefix <> '' then
+ Pfx := FPrefixes.FindOrAdd(PWideChar(Prefix), Length(Prefix))
+ else if nsURI = '' then
+ Exit;
+ { if the prefix is already bound to correct URI, we're done }
+ if Assigned(Pfx) and Assigned(Pfx^.Data) and (TBinding(Pfx^.Data).uri = nsURI) then
+ Exit;
+
+ { see if there's another prefix bound to the target URI }
+ // TODO: should use something faster than linear search
+ for i := FNesting downto 0 do
+ begin
+ b := FBindingStack[i];
+ while Assigned(b) do
+ begin
+ if (b.uri = nsURI) and (b.Prefix <> @FDefaultPrefix) then
+ begin
+ Binding := b; // found one -> override the attribute's prefix
+ Result := aaPrefix;
+ Exit;
+ end;
+ b := b.Next;
+ end;
+ end;
+ { no prefix, or bound (to wrong URI) -> use generated prefix instead }
+ if (Pfx = nil) or Assigned(Pfx^.Data) then
+ repeat
+ Inc(FPrefixSeqNo);
+ i := FPrefixSeqNo; // This is just 'NS'+IntToStr(FPrefixSeqNo);
+ p := @Buf[high(Buf)]; // done without using strings
+ while i <> 0 do
+ begin
+ p^ := WideChar(i mod 10+ord('0'));
+ dec(p);
+ i := i div 10;
+ end;
+ p^ := 'S'; dec(p);
+ p^ := 'N';
+ Pfx := FPrefixes.FindOrAdd(p, @Buf[high(Buf)]-p+1);
+ until Pfx^.Data = nil;
+ Binding := BindPrefix(nsURI, Pfx);
+ Result := aaBoth;
+end;
+
+function TNSSupport.IsPrefixBound(P: PWideChar; Len: Integer; out
+ Prefix: PHashItem): Boolean;
+begin
+ Prefix := FPrefixes.FindOrAdd(P, Len);
+ Result := Assigned(Prefix^.Data) and (TBinding(Prefix^.Data).uri <> '');
+end;
+
+function TNSSupport.GetPrefix(P: PWideChar; Len: Integer): PHashItem;
+begin
+ if Assigned(P) and (Len > 0) then
+ Result := FPrefixes.FindOrAdd(P, Len)
+ else
+ Result := @FDefaultPrefix;
+end;
+
+procedure TNSSupport.StartElement;
+begin
+ Inc(FNesting);
+ if FNesting >= Length(FBindingStack) then
+ SetLength(FBindingStack, FNesting * 2);
+end;
+
+procedure TNSSupport.EndElement;
+var
+ b, temp: TBinding;
+begin
+ temp := FBindingStack[FNesting];
+ while Assigned(temp) do
+ begin
+ b := temp;
+ temp := b.next;
+ b.next := FFreeBindings;
+ FFreeBindings := b;
+ b.Prefix^.Data := b.prevPrefixBinding;
+ end;
+ FBindingStack[FNesting] := nil;
+ if FNesting > 0 then
+ Dec(FNesting);
+end;
+
+
initialization
finalization
diff --git a/packages/fcl-xml/src/xmlwrite.pp b/packages/fcl-xml/src/xmlwrite.pp
index 7ca4e9f1ef..4eeacaf254 100644
--- a/packages/fcl-xml/src/xmlwrite.pp
+++ b/packages/fcl-xml/src/xmlwrite.pp
@@ -37,20 +37,33 @@ procedure WriteXML(Element: TDOMNode; AStream: TStream); overload;
implementation
-uses SysUtils;
+uses SysUtils, xmlutils;
type
- TSpecialCharCallback = procedure(c: WideChar) of object;
+ TXMLWriter = class;
+ TSpecialCharCallback = procedure(Sender: TXMLWriter; const s: DOMString;
+ var idx: Integer);
+
+ PAttrFixup = ^TAttrFixup;
+ TAttrFixup = record
+ Attr: TDOMNode;
+ Prefix: PHashItem;
+ end;
TXMLWriter = class(TObject)
private
FInsideTextNode: Boolean;
+ FCanonical: Boolean;
FIndent: WideString;
FIndentCount: Integer;
FBuffer: PChar;
FBufPos: PChar;
FCapacity: Integer;
FLineBreak: string;
+ FNSHelper: TNSSupport;
+ FAttrFixups: TFPList;
+ FScratch: TFPList;
+ FNSDefs: TFPList;
procedure wrtChars(Src: PWideChar; Length: Integer);
procedure IncIndent;
procedure DecIndent; {$IFDEF HAS_INLINE} inline; {$ENDIF}
@@ -60,8 +73,8 @@ type
procedure wrtQuotedLiteral(const ws: WideString);
procedure ConvWrite(const s: WideString; const SpecialChars: TSetOfChar;
const SpecialCharCallback: TSpecialCharCallback);
- procedure AttrSpecialCharCallback(c: WideChar);
- procedure TextNodeSpecialCharCallback(c: WideChar);
+ procedure WriteNSDef(B: TBinding);
+ procedure NamespaceFixup(Element: TDOMElement);
protected
procedure Write(const Buffer; Count: Longint); virtual; abstract;
procedure WriteNode(Node: TDOMNode);
@@ -159,10 +172,22 @@ begin
// Later on, this may be put under user control
// for now, take OS setting
FLineBreak := sLineBreak;
+ FNSHelper := TNSSupport.Create;
+ FScratch := TFPList.Create;
+ FNSDefs := TFPList.Create;
+ FAttrFixups := TFPList.Create;
end;
destructor TXMLWriter.Destroy;
+var
+ I: Integer;
begin
+ for I := FAttrFixups.Count-1 downto 0 do
+ Dispose(PAttrFixup(FAttrFixups.List^[I]));
+ FAttrFixups.Free;
+ FNSDefs.Free;
+ FScratch.Free;
+ FNSHelper.Free;
if FBufPos > FBuffer then
write(FBuffer^, FBufPos-FBuffer);
@@ -304,7 +329,7 @@ begin
if (s[EndPos] < #255) and (Char(ord(s[EndPos])) in SpecialChars) then
begin
wrtChars(@s[StartPos], EndPos - StartPos);
- SpecialCharCallback(s[EndPos]);
+ SpecialCharCallback(Self, s, EndPos);
StartPos := EndPos + 1;
end;
Inc(EndPos);
@@ -319,29 +344,31 @@ const
ltStr = '&lt;';
gtStr = '&gt;';
-procedure TXMLWriter.AttrSpecialCharCallback(c: WideChar);
+procedure AttrSpecialCharCallback(Sender: TXMLWriter; const s: DOMString;
+ var idx: Integer);
begin
- case c of
- '"': wrtStr(QuotStr);
- '&': wrtStr(AmpStr);
- '<': wrtStr(ltStr);
+ case s[idx] of
+ '"': Sender.wrtStr(QuotStr);
+ '&': Sender.wrtStr(AmpStr);
+ '<': Sender.wrtStr(ltStr);
// Escape whitespace using CharRefs to be consistent with W3 spec § 3.3.3
- #9: wrtStr('&#x9;');
- #10: wrtStr('&#xA;');
- #13: wrtStr('&#xD;');
+ #9: Sender.wrtStr('&#x9;');
+ #10: Sender.wrtStr('&#xA;');
+ #13: Sender.wrtStr('&#xD;');
else
- wrtChr(c);
+ Sender.wrtChr(s[idx]);
end;
end;
-procedure TXMLWriter.TextnodeSpecialCharCallback(c: WideChar);
+procedure TextnodeSpecialCharCallback(Sender: TXMLWriter; const s: DOMString;
+ var idx: Integer);
begin
- case c of
- '<': wrtStr(ltStr);
- '>': wrtStr(gtStr); // Required only in ']]>' literal, otherwise optional
- '&': wrtStr(AmpStr);
+ case s[idx] of
+ '<': Sender.wrtStr(ltStr);
+ '>': Sender.wrtStr(gtStr); // Required only in ']]>' literal, otherwise optional
+ '&': Sender.wrtStr(AmpStr);
else
- wrtChr(c);
+ Sender.wrtChr(s[idx]);
end;
end;
@@ -362,6 +389,155 @@ begin
end;
end;
+procedure TXMLWriter.WriteNSDef(B: TBinding);
+begin
+ wrtChars(' xmlns', 6);
+ if B.Prefix^.Key <> '' then
+ begin
+ wrtChr(':');
+ wrtStr(B.Prefix^.Key);
+ end;
+ wrtChars('="', 2);
+ ConvWrite(B.uri, AttrSpecialChars, @AttrSpecialCharCallback);
+ wrtChr('"');
+end;
+
+// clone of system.FPC_WIDESTR_COMPARE which cannot be called directly
+function Compare(const s1, s2: DOMString): integer;
+var
+ maxi, temp: integer;
+begin
+ Result := 0;
+ if pointer(S1) = pointer(S2) then
+ exit;
+ maxi := Length(S1);
+ temp := Length(S2);
+ if maxi > temp then
+ maxi := temp;
+ Result := CompareWord(S1[1], S2[1], maxi);
+ if Result = 0 then
+ Result := Length(S1)-Length(S2);
+end;
+
+function SortNSDefs(Item1, Item2: Pointer): Integer;
+begin
+ Result := Compare(TBinding(Item1).Prefix^.Key, TBinding(Item2).Prefix^.Key);
+end;
+
+function SortAtts(Item1, Item2: Pointer): Integer;
+var
+ p1: PAttrFixup absolute Item1;
+ p2: PAttrFixup absolute Item2;
+ s1, s2: DOMString;
+begin
+ Result := Compare(p1^.Attr.namespaceURI, p2^.Attr.namespaceURI);
+ if Result = 0 then
+ begin
+ // TODO: Must fix the parser so it doesn't produce Level 1 attributes
+ if nfLevel2 in p1^.Attr.Flags then
+ s1 := p1^.Attr.localName
+ else
+ s1 := p1^.Attr.nodeName;
+ if nfLevel2 in p2^.Attr.Flags then
+ s2 := p2^.Attr.localName
+ else
+ s2 := p2^.Attr.nodeName;
+ Result := Compare(s1, s2);
+ end;
+end;
+
+procedure TXMLWriter.NamespaceFixup(Element: TDOMElement);
+var
+ B: TBinding;
+ i, j: Integer;
+ node: TDOMNode;
+ s: DOMString;
+ action: TAttributeAction;
+ p: PAttrFixup;
+begin
+ FScratch.Count := 0;
+ FNSDefs.Count := 0;
+ if Element.hasAttributes then
+ begin
+ j := 0;
+ for i := 0 to Element.Attributes.Length-1 do
+ begin
+ node := Element.Attributes[i];
+ if TDOMNode_NS(node).NSI.NSIndex = 2 then
+ begin
+ if TDOMNode_NS(node).NSI.PrefixLen = 0 then
+ s := ''
+ else
+ s := node.localName;
+ FNSHelper.DefineBinding(s, node.nodeValue, B);
+ if Assigned(B) then // drop redundant namespace declarations
+ FNSDefs.Add(B);
+ end
+ else if TDOMAttr(node).Specified then
+ begin
+ // obtain a TAttrFixup record (allocate if needed)
+ if j >= FAttrFixups.Count then
+ begin
+ New(p);
+ FAttrFixups.Add(p);
+ end
+ else
+ p := PAttrFixup(FAttrFixups.List^[j]);
+ // add it to the working list
+ p^.Attr := node;
+ p^.Prefix := nil;
+ FScratch.Add(p);
+ Inc(j);
+ end;
+ end;
+ end;
+
+ FNSHelper.DefineBinding(Element.Prefix, Element.namespaceURI, B);
+ if Assigned(B) then
+ FNSDefs.Add(B);
+
+ for i := 0 to FScratch.Count-1 do
+ begin
+ node := PAttrFixup(FScratch.List^[i])^.Attr;
+ action := FNSHelper.CheckAttribute(node.Prefix, node.namespaceURI, B);
+ if action = aaBoth then
+ FNSDefs.Add(B);
+
+ if action in [aaPrefix, aaBoth] then
+ PAttrFixup(FScratch.List^[i])^.Prefix := B.Prefix;
+ end;
+
+ if FCanonical then
+ begin
+ FNSDefs.Sort(@SortNSDefs);
+ FScratch.Sort(@SortAtts);
+ end;
+
+ // now, at last, dump all this stuff.
+ for i := 0 to FNSDefs.Count-1 do
+ WriteNSDef(TBinding(FNSDefs.List^[I]));
+
+ for i := 0 to FScratch.Count-1 do
+ begin
+ wrtChr(' ');
+ with PAttrFixup(FScratch.List^[I])^ do
+ begin
+ if Assigned(Prefix) then
+ begin
+ wrtStr(Prefix^.Key);
+ wrtChr(':');
+ wrtStr(Attr.localName);
+ end
+ else
+ wrtStr(Attr.nodeName);
+
+ wrtChars('="', 2);
+ // TODO: not correct w.r.t. entities
+ ConvWrite(attr.nodeValue, AttrSpecialChars, @AttrSpecialCharCallback);
+ wrtChr('"');
+ end;
+ end;
+end;
procedure TXMLWriter.VisitElement(node: TDOMNode);
var
@@ -371,10 +547,13 @@ var
begin
if not FInsideTextNode then
wrtIndent;
+ FNSHelper.StartElement;
wrtChr('<');
wrtStr(TDOMElement(node).TagName);
- // FIX: Accessing Attributes was causing them to be created for every element :(
- if node.HasAttributes then
+
+ if nfLevel2 in node.Flags then
+ NamespaceFixup(TDOMElement(node))
+ else if node.HasAttributes then
for i := 0 to node.Attributes.Length - 1 do
begin
child := node.Attributes.Item[i];
@@ -402,20 +581,26 @@ begin
wrtStr(TDOMElement(Node).TagName);
wrtChr('>');
end;
+ FNSHelper.EndElement;
end;
procedure TXMLWriter.VisitText(node: TDOMNode);
begin
- ConvWrite(TDOMCharacterData(node).Data, TextSpecialChars, {$IFDEF FPC}@{$ENDIF}TextnodeSpecialCharCallback);
+ ConvWrite(TDOMCharacterData(node).Data, TextSpecialChars, @TextnodeSpecialCharCallback);
end;
procedure TXMLWriter.VisitCDATA(node: TDOMNode);
begin
if not FInsideTextNode then
wrtIndent;
- wrtChars('<![CDATA[', 9);
- wrtStr(TDOMCharacterData(node).Data);
- wrtChars(']]>', 3);
+ if FCanonical then
+ ConvWrite(TDOMCharacterData(node).Data, TextSpecialChars, @TextnodeSpecialCharCallback)
+ else
+ begin
+ wrtChars('<![CDATA[', 9);
+ wrtStr(TDOMCharacterData(node).Data);
+ wrtChars(']]>', 3);
+ end;
end;
procedure TXMLWriter.VisitEntityRef(node: TDOMNode);
@@ -430,8 +615,11 @@ begin
if not FInsideTextNode then wrtIndent;
wrtStr('<?');
wrtStr(TDOMProcessingInstruction(node).Target);
- wrtChr(' ');
- wrtStr(TDOMProcessingInstruction(node).Data);
+ if TDOMProcessingInstruction(node).Data <> '' then
+ begin
+ wrtChr(' ');
+ wrtStr(TDOMProcessingInstruction(node).Data);
+ end;
wrtStr('?>');
end;
@@ -500,7 +688,7 @@ begin
ENTITY_REFERENCE_NODE:
VisitEntityRef(Child);
TEXT_NODE:
- ConvWrite(TDOMCharacterData(Child).Data, AttrSpecialChars, {$IFDEF FPC}@{$ENDIF}AttrSpecialCharCallback);
+ ConvWrite(TDOMCharacterData(Child).Data, AttrSpecialChars, @AttrSpecialCharCallback);
end;
Child := Child.NextSibling;
end;
diff --git a/packages/fcl-xml/src/xpath.pp b/packages/fcl-xml/src/xpath.pp
index cdb6e66e4a..7c088343e0 100644
--- a/packages/fcl-xml/src/xpath.pp
+++ b/packages/fcl-xml/src/xpath.pp
@@ -34,8 +34,7 @@ resourcestring
SVarNoConversion = 'Conversion from %s to %s not possible';
{ Scanner errors }
- SScannerQuotStringIsOpen = 'Ending ''"'' for string not found';
- SScannerAposStringIsOpen = 'Ending "''" for string not found';
+ SScannerUnclosedString = 'String literal was not closed';
SScannerInvalidChar = 'Invalid character';
SScannerMalformedQName = 'Expected "*" or local part after colon';
SScannerExpectedVarName = 'Expected variable name after "$"';
@@ -252,6 +251,7 @@ type
Axis: TAxis;
NodeTestType: TNodeTestType;
NodeTestString: DOMString;
+ NSTestString: DOMString;
Predicates: TXPathNodeArray;
constructor Create(aAxis: TAxis; aTest: TNodeTestType);
destructor Destroy; override;
@@ -345,6 +345,8 @@ type
end;
+ TXPathNSResolver = TDOMNode {!!! experimental};
+
{ XPath lexical scanner }
TXPathScanner = class
@@ -355,6 +357,7 @@ type
FTokenStart: DOMPChar;
FTokenLength: Integer;
FPrefixLength: Integer;
+ FResolver: TXPathNSResolver;
procedure Error(const Msg: String);
procedure ParsePredicates(var Dest: TXPathNodeArray);
procedure ParseStep(Dest: TStep); // [4]
@@ -471,8 +474,9 @@ type
public
{ CompleteExpresion specifies wether the parser should check for gargabe
after the recognised part. True => Throw exception if there is garbage }
- constructor Create(AScanner: TXPathScanner; CompleteExpression: Boolean);
- destructor destroy;override;
+ constructor Create(AScanner: TXPathScanner; CompleteExpression: Boolean;
+ AResolver: TXPathNSResolver = nil);
+ destructor Destroy; override;
function Evaluate(AContextNode: TDOMNode): TXPathVariable;
function Evaluate(AContextNode: TDOMNode;
AEnvironment: TXPathEnvironment): TXPathVariable;
@@ -480,7 +484,7 @@ type
function EvaluateXPathExpression(const AExpressionString: DOMString;
- AContextNode: TDOMNode): TXPathVariable;
+ AContextNode: TDOMNode; AResolver: TXPathNSResolver = nil): TXPathVariable;
// ===================================================================
@@ -524,7 +528,7 @@ var
begin
Val(s, Result, Code);
{$push}
-{$r-}
+{$r-,q-}
if Code <> 0 then
Result := NaN;
{$pop}
@@ -762,7 +766,7 @@ begin
NumberResult := Op1 / Op2;
opMod: if IsNan(Op1) or IsNan(Op2) then
{$push}
-{$r-}
+{$r-,q-}
NumberResult := NaN
{$pop}
else
@@ -1096,16 +1100,24 @@ var
(Node.NodeType <> ELEMENT_NODE) then
exit;
ntName:
- if Node.NodeName <> NodeTestString then
+ if NSTestString <> '' then
+ begin
+ if Node.namespaceURI <> NSTestString then
+ exit;
+ if (NodeTestString <> '') and (Node.localName <> NodeTestString) then
+ exit;
+ end
+ else if Node.NodeName <> NodeTestString then
exit;
ntTextNode:
- if not Node.InheritsFrom(TDOMCharacterData) then
+ if not Node.InheritsFrom(TDOMText) then
exit;
ntCommentNode:
if Node.NodeType <> COMMENT_NODE then
exit;
ntPINode:
- if Node.NodeType <> PROCESSING_INSTRUCTION_NODE then
+ if (Node.NodeType <> PROCESSING_INSTRUCTION_NODE) or
+ ((NodeTestString <> '') and (Node.nodeName <> NodeTestString)) then
exit;
end;
if ResultNodes.IndexOf(Node) < 0 then
@@ -1674,6 +1686,8 @@ function TXPathScanner.GetToken: TXPathToken;
Result := tkNumber;
end;
+var
+ Delim: WideChar;
begin
// Skip whitespace
while (FCurData[0] < #255) and (char(ord(FCurData[0])) in [#9, #10, #13, ' ']) do
@@ -1681,6 +1695,7 @@ begin
FTokenStart := FCurData;
FTokenLength := 0;
+ Result := tkInvalid;
case FCurData[0] of
#0:
@@ -1690,21 +1705,19 @@ begin
begin
Inc(FCurData);
Result := tkNotEqual;
- end
- else
- Error(SScannerInvalidChar);
- '"':
+ end;
+ '"', '''':
begin
- FTokenLength := 0;
+ Delim := FCurData^;
Inc(FCurData);
FTokenStart := FCurData;
- while FCurData[0] <> '"' do
+ while FCurData[0] <> Delim do
begin
if FCurData[0] = #0 then
- Error(SScannerQuotStringIsOpen);
+ Error(SScannerUnclosedString);
Inc(FCurData);
- Inc(FTokenLength);
end;
+ FTokenLength := FCurData-FTokenStart;
Result := tkString;
end;
'$':
@@ -1717,20 +1730,6 @@ begin
Error(SScannerExpectedVarName);
Exit;
end;
- '''':
- begin
- FTokenLength := 0;
- Inc(FCurData);
- FTokenStart := FCurData;
- while FCurData[0] <> '''' do
- begin
- if FCurData[0] = #0 then
- Error(SScannerAposStringIsOpen);
- Inc(FCurData);
- Inc(FTokenLength);
- end;
- Result := tkString;
- end;
'(':
Result := tkLeftBracket;
')':
@@ -1766,8 +1765,7 @@ begin
begin
Inc(FCurData);
Result := tkColonColon;
- end else
- Error(SScannerInvalidChar); // single colons are handled as part of identifier
+ end;
'<':
if FCurData[1] = '=' then
begin
@@ -1809,13 +1807,13 @@ begin
end
else
Error(SScannerMalformedQName);
- end
- else
- Error(SScannerInvalidChar);
+ end;
end;
+ if Result = tkInvalid then
+ Error(SScannerInvalidChar);
// We have processed at least one character now; eat it:
- if Result <> tkEndOfStream then
+ if Result > tkEndOfStream then
Inc(FCurData);
end;
@@ -1923,7 +1921,12 @@ begin
else if CurToken = tkNSNameTest then // [37] NameTest, second case
begin
NextToken;
- // TODO: resolve the prefix and set Dest properties
+ if Assigned(FResolver) then
+ Dest.NSTestString := FResolver.lookupNamespaceURI(CurTokenString);
+ if Dest.NSTestString = '' then
+ // !! localization disrupted by DOM exception specifics
+ raise EDOMNamespace.Create('TXPathScanner.ParseStep');
+ Dest.NodeTestType := ntName;
end
else if CurToken = tkIdentifier then
begin
@@ -1945,7 +1948,6 @@ begin
NextToken; { skip '('; we know it's there }
if NextToken = tkString then
begin
- // TODO: Handle processing-instruction('name') constructs
Dest.NodeTestString := CurTokenString;
NextToken;
end;
@@ -1964,14 +1966,17 @@ begin
end
else // [37] NameTest, third case
begin
- // !!!: Doesn't support namespaces yet
- // (this will have to wait until the DOM unit supports them)
Dest.NodeTestType := ntName;
- Dest.NodeTestString := CurTokenString;
if FPrefixLength > 0 then
begin
- // TODO: resolve the prefix and set Dest properties
- end;
+ if Assigned(FResolver) then
+ Dest.NSTestString := FResolver.lookupNamespaceURI(Copy(CurTokenString, 1, FPrefixLength));
+ if Dest.NSTestString = '' then
+ raise EDOMNamespace.Create('TXPathScanner.ParseStep');
+ Dest.NodeTestString := Copy(CurTokenString, FPrefixLength+2, MaxInt);
+ end
+ else
+ Dest.NodeTestString := CurTokenString;
NextToken;
end;
end
@@ -2472,11 +2477,12 @@ var
begin
Head := 1;
L := Length(s);
- while (Head <= L) and IsXmlWhiteSpace(s[Head]) do
- Inc(Head);
while Head <= L do
begin
+ while (Head <= L) and IsXmlWhiteSpace(s[Head]) do
+ Inc(Head);
+
Tail := Head;
while (Tail <= L) and not IsXmlWhiteSpace(s[Tail]) do
Inc(Tail);
@@ -2486,8 +2492,6 @@ var
ns.Add(Element);
Head := Tail;
- while IsXmlWhiteSpace(s[Head]) do
- Inc(Head);
end;
end;
@@ -2563,17 +2567,27 @@ end;
function TXPathEnvironment.xpName(Context: TXPathContext; Args: TXPathVarList): TXPathVariable;
var
+ n: TDOMNode;
NodeSet: TNodeSet;
+ s: DOMString;
begin
-// TODO: arg is optional, omission case must be handled
- if Args.Count <> 1 then
+ if Args.Count > 1 then
EvaluationError(SEvalInvalidArgCount);
- NodeSet := TXPathVariable(Args[0]).AsNodeSet;
- if NodeSet.Count = 0 then
- Result := TXPathStringVariable.Create('')
+ n := nil;
+ if Args.Count = 0 then
+ n := Context.ContextNode
else
- // !!!: Probably not really correct regarding namespaces...
- Result := TXPathStringVariable.Create(TDOMNode(NodeSet[0]).NodeName);
+ begin
+ NodeSet := TXPathVariable(Args[0]).AsNodeSet;
+ if NodeSet.Count > 0 then
+ n := TDOMNode(NodeSet[0]);
+ end;
+ // TODO: probably this isn't correct. XPath name() isn't the same as DOM nodeName.
+ if Assigned(n) then
+ s := n.nodeName
+ else
+ s := '';
+ Result := TXPathStringVariable.Create(s);
end;
function TXPathEnvironment.xpString(Context: TXPathContext; Args: TXPathVarList): TXPathVariable;
@@ -2686,9 +2700,10 @@ begin
n2 := floor(0.5 + e2);
end;
i := Max(n1, 1);
- n2 := n2 + n1 - i;
if empty then
- n2 := -1;
+ n2 := -1
+ else if n2 < MaxInt then
+ n2 := n2 + (n1 - i);
Result := TXPathStringVariable.Create(Copy(s, i, n2));
end;
@@ -2853,9 +2868,10 @@ end;
{ TXPathExpression }
constructor TXPathExpression.Create(AScanner: TXPathScanner;
- CompleteExpression: Boolean);
+ CompleteExpression: Boolean; AResolver: TXPathNSResolver);
begin
inherited Create;
+ AScanner.FResolver := AResolver;
FRootNode := AScanner.ParseOrExpr;
if CompleteExpression and (AScanner.CurToken <> tkEndOfStream) then
EvaluationError(SParserGarbageAfterExpression);
@@ -2901,14 +2917,14 @@ begin
end;
function EvaluateXPathExpression(const AExpressionString: DOMString;
- AContextNode: TDOMNode): TXPathVariable;
+ AContextNode: TDOMNode; AResolver: TXPathNSResolver): TXPathVariable;
var
Scanner: TXPathScanner;
Expression: TXPathExpression;
begin
Scanner := TXPathScanner.Create(AExpressionString);
try
- Expression := TXPathExpression.Create(Scanner, True);
+ Expression := TXPathExpression.Create(Scanner, True, AResolver);
try
Result := Expression.Evaluate(AContextNode);
finally
diff --git a/packages/fcl-xml/tests/api.xml b/packages/fcl-xml/tests/api.xml
index 770c1e2fae..bf844c8756 100644
--- a/packages/fcl-xml/tests/api.xml
+++ b/packages/fcl-xml/tests/api.xml
@@ -262,6 +262,7 @@
<item id="isId"/>
<item id="documentURI" type="prop"/>
<!--
+<item id="baseURI"/>
// assertNotEquals
// assertLowerSeverity
@@ -273,9 +274,13 @@
<item id="lookupNamespaceURI">
<arg>prefix</arg>
</item>
+<item id="lookupPrefix">
+ <arg>namespaceURI</arg>
+</item>
+<item id="isDefaultNamespace">
+ <arg>namespaceURI</arg>
+</item>
<!--
-<item id="lookupPrefix"/>
-<item id="isDefaultNamespace"/>
<item id="adoptNode"/>
<item id="renameNode"/>
<item id="replaceWholeText"/>
diff --git a/packages/fcl-xml/tests/domunit.pp b/packages/fcl-xml/tests/domunit.pp
index 48cf0b74dc..896a220275 100644
--- a/packages/fcl-xml/tests/domunit.pp
+++ b/packages/fcl-xml/tests/domunit.pp
@@ -323,7 +323,7 @@ begin
src := TXMLInputSource.Create(data);
try
FParser.Parse(src, TXMLDocument(Doc));
- GC(Doc);
+ GC(TObject(Doc));
finally
src.Free;
end;
diff --git a/packages/fcl-xml/tests/extras.pp b/packages/fcl-xml/tests/extras.pp
index 16d8f012af..15581bbd9d 100644
--- a/packages/fcl-xml/tests/extras.pp
+++ b/packages/fcl-xml/tests/extras.pp
@@ -18,7 +18,7 @@ unit extras;
interface
uses
- SysUtils, Classes, DOM, xmlread, domunit, testregistry;
+ SysUtils, Classes, DOM, xmlread, xmlwrite, domunit, testregistry;
implementation
@@ -29,6 +29,9 @@ type
procedure attr_ownership02;
procedure attr_ownership03;
procedure attr_ownership04;
+ procedure nsFixup1;
+ procedure nsFixup2;
+ procedure nsFixup3;
end;
{ TDOMTestExtra }
@@ -113,7 +116,117 @@ begin
AssertEquals('ownerElement2', el, attr2.OwnerElement);
end;
+const
+ nsURI1 = 'http://www.example.com/ns1';
+ nsURI2 = 'http://www.example.com/ns2';
+// verify the namespace fixup with two nested elements
+// (same localName, different nsURI, and no prefixes)
+procedure TDOMTestExtra.nsFixup1;
+var
+ domImpl: TDOMImplementation;
+ origDoc: TDOMDocument;
+ parsedDoc: TDOMDocument;
+ docElem: TDOMElement;
+ el: TDOMElement;
+ stream: TStringStream;
+ list: TDOMNodeList;
+begin
+ FParser.Options.Namespaces := True;
+ domImpl := GetImplementation;
+ origDoc := domImpl.createDocument(nsURI1, 'test', nil);
+ GC(origDoc);
+ docElem := origDoc.documentElement;
+ el := origDoc.CreateElementNS(nsURI2, 'test');
+ docElem.AppendChild(el);
+
+ stream := TStringStream.Create('');
+ GC(stream);
+ writeXML(origDoc, stream);
+ LoadStringData(parsedDoc, stream.DataString);
+
+ docElem := parsedDoc.documentElement;
+ assertEquals('docElemLocalName', 'test', docElem.localName);
+ assertEquals('docElemNS', nsURI1, docElem.namespaceURI);
+
+ list := docElem.GetElementsByTagNameNS(nsURI2, '*');
+ assertEquals('ns2_elementCount', 1, list.Length);
+ el := TDOMElement(list[0]);
+ assertEquals('ns2_nodeName', 'test', el.nodeName);
+end;
+
+// verify the namespace fixup with two nested elements
+// (same localName, different nsURI, different prefixes)
+procedure TDOMTestExtra.nsFixup2;
+var
+ domImpl: TDOMImplementation;
+ origDoc: TDOMDocument;
+ parsedDoc: TDOMDocument;
+ docElem: TDOMElement;
+ el: TDOMElement;
+ stream: TStringStream;
+ list: TDOMNodeList;
+begin
+ FParser.Options.Namespaces := True;
+ domImpl := GetImplementation;
+ origDoc := domImpl.createDocument(nsURI1, 'a:test', nil);
+ GC(origDoc);
+ docElem := origDoc.documentElement;
+ el := origDoc.CreateElementNS(nsURI2, 'b:test');
+ docElem.AppendChild(el);
+
+ stream := TStringStream.Create('');
+ GC(stream);
+ writeXML(origDoc, stream);
+ LoadStringData(parsedDoc, stream.DataString);
+
+ docElem := parsedDoc.documentElement;
+ assertEquals('docElemLocalName', 'test', docElem.localName);
+ assertEquals('docElemNS', nsURI1, docElem.namespaceURI);
+
+ list := docElem.GetElementsByTagNameNS(nsURI2, '*');
+ assertEquals('ns2_elementCount', 1, list.Length);
+ el := TDOMElement(list[0]);
+ assertEquals('ns2_nodeName', 'b:test', el.nodeName);
+end;
+
+// verify the namespace fixup with two nested elements and an attribute
+// attribute's prefix must change to that of document element
+procedure TDOMTestExtra.nsFixup3;
+var
+ domImpl: TDOMImplementation;
+ origDoc: TDOMDocument;
+ parsedDoc: TDOMDocument;
+ docElem: TDOMElement;
+ el: TDOMElement;
+ stream: TStringStream;
+ list: TDOMNodeList;
+ attr: TDOMAttr;
+begin
+ FParser.Options.Namespaces := True;
+ domImpl := GetImplementation;
+ origDoc := domImpl.createDocument(nsURI1, 'a:test', nil);
+ GC(origDoc);
+ docElem := origDoc.documentElement;
+ el := origDoc.CreateElementNS(nsURI2, 'b:test');
+ docElem.AppendChild(el);
+ el.SetAttributeNS(nsURI1, 'test:attr', 'test value');
+
+ stream := TStringStream.Create('');
+ GC(stream);
+ writeXML(origDoc, stream);
+ LoadStringData(parsedDoc, stream.DataString);
+
+ docElem := parsedDoc.documentElement;
+ assertEquals('docElemLocalName', 'test', docElem.localName);
+ assertEquals('docElemNS', nsURI1, docElem.namespaceURI);
+
+ list := docElem.GetElementsByTagNameNS(nsURI2, '*');
+ assertEquals('ns2_elementCount', 1, list.Length);
+ el := TDOMElement(list[0]);
+ attr := el.GetAttributeNodeNS(nsURI1, 'attr');
+ assertEquals('attr_nodeName', 'a:attr', attr.nodeName);
+end;
initialization
diff --git a/packages/fcl-xml/tests/extras2.pp b/packages/fcl-xml/tests/extras2.pp
index 4e432c6fe2..f7747a8d3b 100644
--- a/packages/fcl-xml/tests/extras2.pp
+++ b/packages/fcl-xml/tests/extras2.pp
@@ -88,10 +88,7 @@ var
nodeValue: DOMString;
length: Integer;
begin
-// canonical form: PreserveWhitespace, Namespaces, NamespaceDeclarations = True;
-// Entities, CDSections = False;
- FParser.Options.PreserveWhitespace := True;
- FParser.Options.Namespaces := True;
+ FParser.Options.CanonicalForm := True;
LoadStringData(doc, canonicform01);
begin
node := TDOMNode(doc).firstChild;
@@ -152,10 +149,7 @@ var
nodeValue: DOMString;
length: Integer;
begin
-// canonical form: PreserveWhitespace, Namespaces, NamespaceDeclarations = True;
-// Entities, CDSections = False;
- FParser.Options.PreserveWhitespace := True;
- FParser.Options.Namespaces := True;
+ FParser.Options.CanonicalForm := True;
FParser.Options.IgnoreComments := True;
LoadStringData(doc, canonicform01);
begin
@@ -198,8 +192,7 @@ var
divEl: TDOMElement;
node: TDOMNode;
begin
- FParser.Options.PreserveWhitespace := True;
- FParser.Options.Namespaces := True;
+ FParser.Options.CanonicalForm := True;
LoadStringData(doc, canonicform03);
divList := doc.getElementsByTagName('div');
@@ -220,8 +213,7 @@ var
attrSpecified: Boolean;
attrValue: DOMString;
begin
- FParser.Options.PreserveWhitespace := True;
- FParser.Options.Namespaces := True;
+ FParser.Options.CanonicalForm := True;
LoadStringData(doc, canonicform03);
elemList := doc.getElementsByTagName('acronym');
@@ -252,6 +244,7 @@ begin
FParser.Options.Namespaces := True;
domImpl := GetImplementation;
origDoc := domImpl.createDocument(namespaceURI, 'test', nil);
+ GC(origDoc);
docElem := origDoc.documentElement;
docElem.setAttributeNS(namespaceURI, 'attr', 'test value');
@@ -288,6 +281,7 @@ begin
FParser.Options.Namespaces := True;
domImpl := GetImplementation;
origDoc := domImpl.createDocument(namespaceURI, 'test', nil);
+ GC(origDoc);
docElem := origDoc.documentElement;
docElem.setAttributeNS(namespaceURI, 'test:attr', 'test value');
diff --git a/packages/fcl-xml/tests/xmlts.pp b/packages/fcl-xml/tests/xmlts.pp
index f0976c6498..a59e00f404 100644
--- a/packages/fcl-xml/tests/xmlts.pp
+++ b/packages/fcl-xml/tests/xmlts.pp
@@ -168,7 +168,7 @@ begin
try
for I := 0 to tables.Count-1 do
begin
- el := TDOMElement(tables.Item[I]);
+ el := TDOMElement(tables[I]);
id := el['id'];
if id = 'valid' then
table_valid := el
@@ -208,7 +208,7 @@ begin
Index := 0;
repeat
- Child := Children.Item[Index];
+ Child := Children[Index];
if Child = nil then Break;
Inc(index);
@@ -314,7 +314,7 @@ begin
writeln('Testing, validation = ', FValidating);
try
for I := 0 to Cases.Count-1 do
- RunTest(Cases.Item[I] as TDOMElement);
+ RunTest(Cases[I] as TDOMElement);
I := Cases.Count;
finally
Cases.Free;
@@ -349,6 +349,7 @@ var
Positive: Boolean;
outURI: UTF8string;
FailMsg: string;
+ ExceptionClass: TClass;
docNode, refNode: TDOMNode;
docMap, refMap: TDOMNamedNodeMap;
docN, refN: TDOMNotation;
@@ -407,6 +408,7 @@ begin
on E: Exception do
if E.ClassType <> EAbort then
begin
+ ExceptionClass := E.ClassType;
FailMsg := E.Message;
FValError := '';
end;
@@ -435,7 +437,7 @@ begin
if FailMsg <> '' then // Fatal error
begin
{ outside not-wf category it is a test failure }
- if table <> table_not_wf then
+ if (table <> table_not_wf) or (ExceptionClass <> EXMLReadError) then
begin
Inc(FFailCount);
Diagnose(Element, table, dcFail, FailMsg);
diff --git a/packages/fcl-xml/tests/xpathts.pp b/packages/fcl-xml/tests/xpathts.pp
index c47adf7d24..50bfbd6d4f 100644
--- a/packages/fcl-xml/tests/xpathts.pp
+++ b/packages/fcl-xml/tests/xpathts.pp
@@ -33,6 +33,16 @@ type
rtBool: (b: Boolean);
end;
+ TTestRec3 = record
+ data: string; // UTF-8 encoded
+ re: string;
+ expr: DOMString;
+ case rt: TResultType of
+ rtString, rtNodeStr: (s: DOMPChar); // cannot use DOMString here
+ rtNumber: (n: Extended);
+ rtBool: (b: Boolean);
+ end;
+
{$warnings off}
const
BaseTests: array[0..4] of TTestRec = (
@@ -542,7 +552,7 @@ const
'<b ns1:attrib2="test"/>'#10+
'</doc>';
- StringTests: array[0..84] of TTestRec = ( // numbers refer to xalan/string/stringXX
+ StringTests: array[0..74] of TTestRec = ( // numbers refer to xalan/string/stringXX
(expr: 'string(0)'; rt: rtString; s: '0'),
(expr: 'string(5)'; rt: rtString; s: '5'), // #38/39
(expr: 'string(0.5)'; rt: rtString; s: '0.5'),
@@ -573,8 +583,6 @@ const
(expr: 'starts-with("", "")'; rt: rtBool; b: True), // #49
(expr: 'starts-with(true(), "tr")'; rt: rtBool; b: True), // #50
-
-
(expr: 'contains("tititototata","titi")'; rt: rtBool; b: True),
(expr: 'contains("tititototata","toto")'; rt: rtBool; b: True),
(expr: 'contains("tititototata","tata")'; rt: rtBool; b: True),
@@ -625,18 +633,6 @@ const
(expr: 'translate("--aaa--","abc-","ABC")'; rt: rtString; s: 'AAA'),
(expr: 'translate("ddaaadddd","abcd","ABCxy")'; rt: rtString; s: 'xxAAAxxxx'), // #96
- (data: str30; expr: 'namespace-uri(baz1:a/@baz2:attrib1)'; rt: rtString; s: ''), // #30
- (data: str30; expr: 'namespace-uri(baz2:b/@baz1:attrib2)'; rt: rtString; s: 'http://xsl.lotus.com/ns1'), // #31
- (data: str30; expr: 'name(*)'; rt: rtString; s: 'ns1:a'), // #32
- (data: str30; expr: 'name(baz1:a)'; rt: rtString; s: 'ns1:a'), // #33
- (data: str30; expr: 'name(baz2:b)'; rt: rtString; s: 'b'), // #34
- (data: str30; expr: 'name(baz1:a/@baz2:attrib1)'; rt: rtString; s: ''), // #35
- (data: str30; expr: 'name(baz2:b/@baz1:attrib2)'; rt: rtString; s: 'ns1:attrib2'), // #36
-
- (data: str30; expr: 'local-name(baz2:b)'; rt: rtString; s: 'b'), // namespace07
- (data: str30; expr: 'local-name(baz2:b/@baz1:attrib2)'; rt: rtString; s: 'attrib2'), // namespace09
- (data: str30; expr: 'local-name()'; rt: rtString; s: 'doc'), // namespace26
-
// tests for number->string conversions at boundary conditions
(expr: 'string(123456789012345678)'; rt: rtString; s: '123456789012345680'), // #132.1
(expr: 'string(-123456789012345678)'; rt: rtString; s: '-123456789012345680'), // #132.2
@@ -650,7 +646,23 @@ const
(expr: 'string(-.0000000000000000000000000000000000000000123456789)'; rt: rtString; // #135.2
s: '-0.0000000000000000000000000000000000000000123456789')
);
-
+
+ res1 = '<foo xmlns:baz1="http://xsl.lotus.com/ns1" xmlns:baz2="http://xsl.lotus.com/ns2"/>';
+
+ nameTests: array[0..9] of TTestRec3 = (
+ (data: str30; re: res1; expr: 'namespace-uri(baz1:a/@baz2:attrib1)'; rt: rtString; s: ''), // #30
+ (data: str30; re: res1; expr: 'namespace-uri(baz2:b/@baz1:attrib2)'; rt: rtString; s: 'http://xsl.lotus.com/ns1'), // #31
+ (data: str30; re: res1; expr: 'name(*)'; rt: rtString; s: 'ns1:a'), // #32
+ (data: str30; re: res1; expr: 'name(baz1:a)'; rt: rtString; s: 'ns1:a'), // #33
+ (data: str30; re: res1; expr: 'name(baz2:b)'; rt: rtString; s: 'b'), // #34
+ (data: str30; re: res1; expr: 'name(baz1:a/@baz2:attrib1)'; rt: rtString; s: ''), // #35
+ (data: str30; re: res1; expr: 'name(baz2:b/@baz1:attrib2)'; rt: rtString; s: 'ns1:attrib2'), // #36
+
+ (data: str30; re: res1; expr: 'local-name(baz2:b)'; rt: rtString; s: 'b'), // namespace07
+ (data: str30; re: res1; expr: 'local-name(baz2:b/@baz1:attrib2)'; rt: rtString; s: 'attrib2'), // namespace09
+ (data: str30; re: res1; expr: 'local-name()'; rt: rtString; s: 'doc') // namespace26
+ );
+
ax114='<doc>'+
'<foo att1="c">'+
' <foo att1="b">'+
@@ -814,8 +826,47 @@ begin
end;
end;
+procedure DoSuite3(const tests: array of TTestRec3);
+var
+ i: Integer;
+ doc: TXMLDocument;
+ rslt: TXPathVariable;
+ nsdoc: TXMLDocument;
+ temp: TTestRec;
+begin
+ for i := 0 to High(tests) do
+ begin
+ doc := ParseString(tests[i].data);
+ try
+ nsdoc := ParseString(tests[i].re);
+ try
+ try
+ rslt := EvaluateXPathExpression(tests[i].expr, doc.DocumentElement, nsdoc.DocumentElement);
+ try
+ temp.data := tests[i].data;
+ temp.expr := tests[i].expr;
+ temp.rt := tests[i].rt;
+ temp.n := tests[i].n;
+ CheckResult(temp, rslt);
+ finally
+ rslt.Free;
+ end;
+ except
+ writeln;
+ writeln('Failed: ', tests[i].expr);
+ SysUtils.ShowException(ExceptObject, ExceptAddr);
+ Inc(FailCount);
+ end;
+ finally
+ nsdoc.Free;
+ end;
+ finally
+ doc.Free;
+ end;
+ end;
+end;
+
begin
- DecimalSeparator := '.';
DoSuite(BaseTests);
DoSuite(CompareTests);
DoSuite(NodesetCompareTests);
@@ -825,6 +876,8 @@ begin
DoSuite(StringTests);
DoSuite(AxesTests);
+ DoSuite3(nameTests);
+
writeln;
writeln('Total failed tests: ', FailCount);
end.
diff --git a/packages/gdbint/Makefile b/packages/gdbint/Makefile
index e4adef157b..02fb8b9c44 100644
--- a/packages/gdbint/Makefile
+++ b/packages/gdbint/Makefile
@@ -1,5 +1,5 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/09/05]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/11/03]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -285,6 +285,14 @@ ifeq ($(LIBGDBFILE),)
GDBFOUND=0
else
GDBFOUND=1
+override LIBGDBINC:=$(firstword $(wildcard $(addsuffix /gdblib.inc,$(GDBLIBDIR))))
+ifeq ($(LIBGDBINC),)
+GDBLIBINCFOUND=0
+GDBLIBINCCOND=
+else
+GDBLIBINCFOUND=1
+GDBLIBINCCOND=-dUSE_GDBLIBINC
+endif
endif
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_UNITS+=gdbint gdbcon
@@ -636,178 +644,178 @@ override TARGET_EXAMPLES+=examples/testgdb examples/symify
endif
override INSTALL_FPCPACKAGE=y
ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=src
+override COMPILER_INCLUDEDIR+=$(GDBLIBDIR) src
endif
ifeq ($(FULL_TARGET),i386-linux)
override COMPILER_SOURCEDIR+=src tests
@@ -2966,10 +2974,10 @@ gdbver.inc: gdbver$(EXEEXT)
gdbint$(PPUEXT): gdbint.pp gdbver.inc
ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
@$(ECHO) Using GDB $(GDBVER)
- $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
else
@$(ECHO) Using GDB $(GDBVER) (MingW)
- $(COMPILER) -d$(GDBVER) -dUSE_MINGW_GDB -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -dUSE_MINGW_GDB -Fisrc -Fusrc src/gdbint.pp
endif
$(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
endif
@@ -2979,7 +2987,7 @@ gdbver.inc:
$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
gdbint$(PPUEXT): gdbint.pp gdbver.inc
@$(ECHO) libgdb.a not found, using default GDB $(GDBVER)
- $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
endif
else
GDBVER=GDB_V606
@@ -2987,9 +2995,15 @@ gdbver.inc:
$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
gdbint$(PPUEXT): gdbint.pp gdbver.inc
@$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
- $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
endif
gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+ $(COMPILER) src/gdbcon.pp
+else
+ $(COMPILER) -dUSE_MINGW_GDB src/gdbcon.pp
+endif
+ $(EXECPPAS)
ifeq ($(OS_TARGET),go32v2)
DBGCOM=dbgcom$(OEXT)
else
@@ -3005,7 +3019,20 @@ simple: $(DBGCOM)
-rm gdbint.ppu
ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
ppc386 testgdb
-testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+examples/testgdb$(EXEEXT): examples/testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+ $(COMPILER) -FEexamples examples/testgdb.pp
+else
+ $(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/testgdb.pp
+endif
+ $(EXECPPAS)
+examples/symify$(EXEEXT): examples/symify.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+ $(COMPILER) -FEexamples examples/symify.pp
+else
+ $(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/symify.pp
+endif
+ $(EXECPPAS)
.PHONY: test
test: examples
clean: fpc_clean
diff --git a/packages/gdbint/Makefile.fpc b/packages/gdbint/Makefile.fpc
index 4ca2f07dff..17fde2be22 100644
--- a/packages/gdbint/Makefile.fpc
+++ b/packages/gdbint/Makefile.fpc
@@ -14,7 +14,7 @@ examples=examples/testgdb examples/symify
[compiler]
objectdir=$(GDBLIBDIR)
librarydir=$(GDBLIBDIR)
-includedir=src
+includedir=$(GDBLIBDIR) src
sourcedir=src tests
[require]
@@ -56,6 +56,16 @@ ifeq ($(LIBGDBFILE),)
GDBFOUND=0
else
GDBFOUND=1
+# Detect if gdblib.inc is available
+override LIBGDBINC:=$(firstword $(wildcard $(addsuffix /gdblib.inc,$(GDBLIBDIR))))
+ifeq ($(LIBGDBINC),)
+GDBLIBINCFOUND=0
+GDBLIBINCCOND=
+else
+GDBLIBINCFOUND=1
+GDBLIBINCCOND=-dUSE_GDBLIBINC
+endif
+
endif
@@ -91,10 +101,10 @@ gdbint$(PPUEXT): gdbint.pp gdbver.inc
# MingW?
ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
@$(ECHO) Using GDB $(GDBVER)
- $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
else
@$(ECHO) Using GDB $(GDBVER) (MingW)
- $(COMPILER) -d$(GDBVER) -dUSE_MINGW_GDB -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -dUSE_MINGW_GDB -Fisrc -Fusrc src/gdbint.pp
endif
$(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
endif
@@ -106,7 +116,7 @@ gdbver.inc:
$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
gdbint$(PPUEXT): gdbint.pp gdbver.inc
@$(ECHO) libgdb.a not found, using default GDB $(GDBVER)
- $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
endif
else
@@ -116,10 +126,16 @@ gdbver.inc:
$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
gdbint$(PPUEXT): gdbint.pp gdbver.inc
@$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
- $(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+ $(COMPILER) -d$(GDBVER) $(GDBLIBINCCOND) -Fisrc -Fusrc src/gdbint.pp
endif
gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+ $(COMPILER) src/gdbcon.pp
+else
+ $(COMPILER) -dUSE_MINGW_GDB src/gdbcon.pp
+endif
+ $(EXECPPAS)
ifeq ($(OS_TARGET),go32v2)
DBGCOM=dbgcom$(OEXT)
@@ -143,7 +159,21 @@ simple: $(DBGCOM)
ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
ppc386 testgdb
-testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+examples/testgdb$(EXEEXT): examples/testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+ $(COMPILER) -FEexamples examples/testgdb.pp
+else
+ $(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/testgdb.pp
+endif
+ $(EXECPPAS)
+
+examples/symify$(EXEEXT): examples/symify.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+ifeq ($(wildcard $(GDBLIBDIR)/libmingw32.a),)
+ $(COMPILER) -FEexamples examples/symify.pp
+else
+ $(COMPILER) -FEexamples -dUSE_MINGW_GDB examples/symify.pp
+endif
+ $(EXECPPAS)
# Allow test for example
.PHONY: test
diff --git a/packages/gdbint/examples/mingw.pas b/packages/gdbint/examples/mingw.pas
new file mode 100644
index 0000000000..626ec3b785
--- /dev/null
+++ b/packages/gdbint/examples/mingw.pas
@@ -0,0 +1,91 @@
+unit mingw;
+{
+ This file is part of the Free Pascal Integrated Development Environment
+ Copyright (c) 2009 by Marco van de Voort
+
+ Mingw helpers. Currently mostly atexit.
+ Copied from fpmingw unit from ide directory.
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+interface
+
+// mingw put atexit in binaries, so that it can have one atexit, and call it from
+// dll and .exe startup code.
+// This unit provides a similar service for when mingw code (read: libgdb and friends) are statically
+// linked to FPC.
+
+Type
+ TCFunction = function:longint cdecl; // prototype of an handler to be registered with atexit
+
+function atexit(p:TCFunction):longint; cdecl; // export our own atexit handler
+
+implementation
+
+uses gdbint; // force dependancies that hopefully make it execute at the right moment.
+
+// prototype of atexit:
+Type
+ TAtexitFunction = function(p:TCFUnction):longint cdecl;
+
+var _imp__atexit : TAtExitFunction; Cvar; external; // "true" atexit in mingw libs.
+
+function atexit(p:TCFunction):longint;cdecl; [public, alias : '_atexit'];
+
+begin
+ atexit:=_imp__atexit(p); // simply route to "true" atexit
+end;
+
+procedure __cpu_features_init; cdecl; external;
+procedure _pei386_runtime_relocator; cdecl; external;
+procedure __main; cdecl;external;
+
+procedure doinit;
+// other mingw initialization. Sequence from crt1.c
+begin
+ // not (yet) done: set mingw exception handlers:
+ // SetUnhandledExceptionFilter (_gnu_exception_handler);
+ __cpu_features_init; // load CPU features. Might be useful for debugger :-)
+
+ // fpreset; // don't do this, we init our own fp mask
+
+ // _mingw32_init_mainargs (); // mingw doesn't handle arguments not necessary.
+ // _mingw32_init_fmode (); // Set default filemode. Is not done for libraries, so we don't.
+
+ // Adust references to dllimported data that have non-zero offsets.
+ _pei386_runtime_relocator; //
+
+ // aligns stack here to 16 bytes
+
+ {From libgcc.a, __main calls global class constructors via
+ __do_global_ctors, This in turn registers __do_global_dtors
+ as the first entry of the app's atexit table. We do this
+ explicitly at app startup rather than rely on gcc to generate
+ the call in main's prologue, since main may be imported from a dll
+ which has its own __do_global_ctors. }
+ // __main; // should be libgcc initialization but this causes infinite loop.
+end;
+
+procedure _cexit; cdecl; external;
+
+procedure doatexit;
+begin
+{
+ * Perform exit processing for the C library. This means
+ * flushing output and calling 'atexit' registered functions.
+}
+ _cexit ();
+end;
+
+initialization
+ doinit;
+finalization
+ doatexit;
+end.
diff --git a/packages/gdbint/examples/symify.pp b/packages/gdbint/examples/symify.pp
index d262bf1b15..7fe38dbf6c 100644
--- a/packages/gdbint/examples/symify.pp
+++ b/packages/gdbint/examples/symify.pp
@@ -12,7 +12,11 @@
**********************************************************************}
program symify;
-uses GDBInt;
+uses
+{$ifdef USE_MINGW_GDB}
+ mingw,
+{$endif}
+ GDBInt;
var
gdb : tgdbinterface;
diff --git a/packages/gdbint/examples/testgdb.pp b/packages/gdbint/examples/testgdb.pp
index fe4bbde904..ff44911a48 100644
--- a/packages/gdbint/examples/testgdb.pp
+++ b/packages/gdbint/examples/testgdb.pp
@@ -12,7 +12,11 @@
**********************************************************************}
program testgdb;
-uses gdbcon;
+uses
+{$ifdef USE_MINGW_GDB}
+ mingw,
+{$endif}
+ gdbcon;
var
last,s,parafile : string;
gdb : tgdbcontroller;
diff --git a/packages/gdbint/src/gdbcon.pp b/packages/gdbint/src/gdbcon.pp
index 4742027c3e..7785b720a5 100644
--- a/packages/gdbint/src/gdbcon.pp
+++ b/packages/gdbint/src/gdbcon.pp
@@ -23,6 +23,7 @@ type
progname,
progdir,
progargs : pchar;
+ start_break_number,
in_command,
init_count : longint;
constructor Init;
@@ -245,6 +246,7 @@ end;
procedure TGDBController.StartTrace;
begin
Command('tbreak PASCALMAIN');
+ start_break_number:=last_breakpoint_number;
Run;
end;
diff --git a/packages/gdbint/src/gdbint.pp b/packages/gdbint/src/gdbint.pp
index c6a6cd339e..ef8beb81da 100644
--- a/packages/gdbint/src/gdbint.pp
+++ b/packages/gdbint/src/gdbint.pp
@@ -13,14 +13,25 @@
**********************************************************************}
unit GdbInt;
-{$i gdbver.inc}
+{$mode objfpc}
+
+{$ifdef USE_GDBLIBINC}
+ {$i gdblib.inc}
+{$else not USE_GDBLIBINC}
+ {$i gdbver.inc}
+{$endif not USE_GDBLIBINC}
+
+{ Possible optional conditionals:
+ GDB_DISABLE_INTL To explicitly not use libintl
+ GDB_CORE_ADDR_FORCE_64BITS To force 64 bits for CORE_ADDR
+ Verbose To test gdbint
+ DebugCommand To debug Command method
+}
interface
{$smartlink off}
-{.$define Verbose}
-{.$define DebugCommand}
{$define NotImplemented}
{ Is create_breakpoint_hook deprecated? }
@@ -72,7 +83,7 @@ interface
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
-{$endif def GDB_V605}
+{$endif def GDB_V606}
{ 6.7.x }
{$ifdef GDB_V607}
@@ -82,7 +93,41 @@ interface
{$define GDB_NEEDS_NO_ERROR_INIT}
{$define GDB_USES_EXPAT_LIB}
{$define GDB_HAS_DEBUG_FILE_DIRECTORY}
-{$endif def GDB_V605}
+{$endif def GDB_V607}
+
+{ 6.8.x }
+{$ifdef GDB_V608}
+ {$info using gdb 6.8.x}
+ {$define GDB_V6}
+ {$define GDB_HAS_DB_COMMANDS}
+ {$define GDB_NEEDS_NO_ERROR_INIT}
+ {$define GDB_USES_EXPAT_LIB}
+ {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+ {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ {$define GDB_HAS_BP_NONE}
+{$endif def GDB_V608}
+
+
+{ 7.0.x }
+{$ifdef GDB_V700}
+ {$info using gdb 7.0.x}
+ {$define GDB_V7}
+{$endif def GDB_V700}
+
+{$ifdef GDB_V7}
+ {$define GDB_V6}
+ {$define GDB_HAS_DB_COMMANDS}
+ {$define GDB_NEEDS_NO_ERROR_INIT}
+ {$define GDB_USES_EXPAT_LIB}
+ {$define GDB_USES_LIBDECNUMBER}
+ {$define GDB_USES_LIBINTL}
+ {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+ {$define GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ {$define GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+ {$define GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+ {$define GDB_HAS_BP_NONE}
+{$endif def GDB_V7}
+
{$ifdef GDB_V6}
{$define GDB_HAS_SYSROOT}
@@ -91,12 +136,18 @@ interface
{$define GDB_INIT_HAS_ARGV0}
{$endif GDB_V6}
+
+{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ {$define DO_NOT_USE_CBPH}
+{$endif}
+
{ GDB has a simulator for powerpc CPU
it is integrated into GDB by default }
{$ifdef cpupowerpc}
{$define GDB_HAS_SIM}
{$endif cpupowerpc}
+{$ifdef NotImplemented}
{$ifdef go32v2}
{$undef NotImplemented}
{$LINKLIB gdb}
@@ -108,7 +159,15 @@ interface
{$LINKLIB opcodes}
{$LINKLIB history}
{$LINKLIB iberty}
- {$LINKLIB intl}
+ {$ifdef GDB_USES_LIBDECNUMBER}
+ {$LINKLIB decnumber}
+ {$endif GDB_USES_LIBDECNUMBER}
+ {$ifdef GDB_USES_EXPAT_LIB}
+ {$LINKLIB expat}
+ {$endif GDB_USES_EXPAT_LIB}
+ {$ifndef GDB_DISABLE_INTL}
+ {$LINKLIB intl}
+ {$endif ndef GDB_DISABLE_INTL}
{$LINKLIB dbg}
{$LINKLIB c}
{$endif go32v2}
@@ -151,7 +210,10 @@ interface
{$LINKLIB ncurses}
{$LINKLIB m}
{$LINKLIB iberty}
- {$LINKLIB intl} { does not seem to exist on netbsd LINKLIB dl,
+ {$ifndef GDB_DISABLE_INTL}
+ {$LINKLIB intl}
+ {$endif ndef GDB_DISABLE_INTL}
+ { does not seem to exist on netbsd LINKLIB dl,
but I use GDB CVS snapshots for the *BSDs}
{$ifdef GDB_USES_EXPAT_LIB}
{$LINKLIB expat}
@@ -197,7 +259,9 @@ interface
{$LINKLIB ncurses}
{$LINKLIB m}
{$LINKLIB iberty}
- {$LINKLIB intl}
+ {$ifndef GDB_DISABLE_INTL}
+ {$LINKLIB intl}
+ {$endif ndef GDB_DISABLE_INTL}
{$ifdef GDB_USES_EXPAT_LIB}
{$LINKLIB expat}
{$endif GDB_USES_EXPAT_LIB}
@@ -257,7 +321,9 @@ interface
{$LINKLIB iberty}
{$LINKLIB ncurses}
{ $ LINKLIB m} // include in libroot under BeOS
- {$LINKLIB intl}
+ {$ifndef GDB_DISABLE_INTL}
+ {$LINKLIB intl}
+ {$endif ndef GDB_DISABLE_INTL}
{$ifdef GDB_USES_EXPAT_LIB}
{$LINKLIB expat}
{$endif GDB_USES_EXPAT_LIB}
@@ -267,6 +333,8 @@ interface
{$LINKLIB gcc}
{$endif beos}
+{$endif NotImplemented}
+
{$ifdef go32v2}
{$define supportexceptions}
{$endif go32v2}
@@ -317,6 +385,9 @@ const
type
{$if defined(CPUSPARC) and defined(LINUX)}
+ {$define GDB_CORE_ADDR_FORCE_64BITS}
+{$endif}
+{$ifdef GDB_CORE_ADDR_FORCE_64BITS}
CORE_ADDR = qword;
{$else}
CORE_ADDR = ptrint; { might be target dependent PM }
@@ -486,6 +557,8 @@ type
procedure EndSession(code:longint);
procedure DebuggerScreen;
procedure UserScreen;
+ procedure FlushAll; virtual;
+ function Query(question : pchar; args : pchar) : longint; virtual;
{ Hooks }
procedure DoSelectSourceline(const fn:string;line:longint);virtual;
procedure DoStartSession;virtual;
@@ -611,7 +684,11 @@ type
language_fortran,language_m2,language_asm,
language_scm,language_pascal,language_objc);
- bptype = (bp_breakpoint,bp_hardware_breakpoint,
+ bptype = (
+{$ifdef GDB_HAS_BP_NONE}
+ bp_none,
+{$endif GDB_HAS_BP_NONE}
+ bp_breakpoint,bp_hardware_breakpoint,
bp_until,bp_finish,bp_watchpoint,bp_hardware_watchpoint,
bp_read_watchpoint,bp_access_watchpoint,
bp_longjmp,bp_longjmp_resume,bp_step_resume,
@@ -690,6 +767,11 @@ type
line : longint;
pc : CORE_ADDR;
_end : CORE_ADDR;
+ { Added fields, not used in gdbint,
+ but necessary to allocated enough space to
+ avoid stack memory corruption PM }
+ explicit_pc : longint;
+ explicit_line : longint;
end;
symtabs_and_lines = record
@@ -1145,11 +1227,15 @@ var
{ external variables }
error_return : jmp_buf;cvar;public;
quit_return : jmp_buf;cvar;public;
- {$ifdef GDB_HAS_DEPRECATED_CBPH}
- deprecated_create_breakpoint_hook : pointer;cvar;external;
- {$else}
- create_breakpoint_hook : pointer;cvar;external;
- {$endif}
+ deprecated_query_hook : pointer;cvar;public;
+
+ {$ifndef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ {$ifdef GDB_HAS_DEPRECATED_CBPH}
+ deprecated_create_breakpoint_hook : pointer;cvar;external;
+ {$else}
+ create_breakpoint_hook : pointer;cvar;external;
+ {$endif}
+ {$endif ndef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
current_target : target_ops;cvar;external;
stop_pc : CORE_ADDR;cvar;external;
{ Only used from GDB 5.01 but doesn't hurst otherwise }
@@ -1196,7 +1282,11 @@ procedure gdb_init;cdecl;external;
{$endif not GDB_INIT_HAS_ARGV0}
procedure execute_command(p:pchar;i:longint);cdecl;external;
procedure target_kill;cdecl;external;
+{$ifdef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+procedure target_close(pt : ptarget_ops; i:longint);cdecl;external;
+{$else not GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
procedure target_close(i:longint);cdecl;external;
+{$endif ndef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
{*****************************************************************************
@@ -1538,6 +1628,20 @@ begin
{$endif}
end;
+procedure annotate_new_thread;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|annotate_new_thread()|');
+{$endif}
+end;
+
+procedure annotate_thread_changed;cdecl;public;
+begin
+{$ifdef Verbose}
+ Debug('|annotate_thread_changed()|');
+{$endif}
+end;
+
procedure annotate_breakpoint(num:longint);cdecl;public;
begin
@@ -2041,6 +2145,21 @@ begin
end;
+function QueryHook(question : pchar; arg : pchar) : longint; cdecl;
+begin
+ if not assigned(curr_gdb) then
+ QueryHook:=0
+ else
+ begin
+ if curr_gdb^.reset_command and (pos('Kill',question)>0) then
+ QueryHook:=1
+ else if pos('%s',question)>0 then
+ QueryHook:=curr_gdb^.Query(question, arg)
+ else
+ QueryHook:=curr_gdb^.Query(question, nil);
+ end;
+end;
+
procedure CreateBreakPointHook(var b:breakpoint);cdecl;
var
sym : symtab_and_line;
@@ -2074,6 +2193,37 @@ begin
end;
end;
+{$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+
+type
+ breakpoint_created_function_type = procedure (bpnum : longint); cdecl;
+ pobserver = pointer;
+var
+ breakpoint_created_observer : pobserver = nil;
+
+function observer_attach_breakpoint_created(create_func : breakpoint_created_function_type) : pobserver;cdecl;external;
+procedure observer_detach_breakpoint_created(pob : pobserver);cdecl;external;
+
+var breakpoint_chain : pbreakpoint ;cvar;external;
+
+
+procedure notify_breakpoint_created(bpnum : longint);cdecl;
+var
+ pb : pbreakpoint;
+begin
+ pb:=breakpoint_chain;
+ while assigned(pb) do
+ begin
+ if pb^.number=bpnum then
+ begin
+ CreateBreakPointHook(pb^);
+ exit;
+ end
+ else
+ pb:=pb^.next;
+ end;
+end;
+{$endif def GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
{*****************************************************************************
tgdbinterface
@@ -2121,11 +2271,17 @@ procedure tgdbinterface.gdb__init;
begin
gdboutputbuf.reset;
gdberrorbuf.reset;
- {$ifdef GDB_HAS_DEPRECATED_CBPH}
- deprecated_create_breakpoint_hook:=@CreateBreakPointHook;
- {$else}
- create_breakpoint_hook:=@CreateBreakPointHook;
+ {$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ breakpoint_created_observer:=observer_attach_breakpoint_created(@notify_breakpoint_created);
+ {$else not GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ {$ifdef GDB_HAS_DEPRECATED_CBPH}
+ deprecated_create_breakpoint_hook:=@CreateBreakPointHook;
+ {$else}
+ create_breakpoint_hook:=@CreateBreakPointHook;
+ {$endif}
{$endif}
+ deprecated_query_hook :=@QueryHook;
+
signal_string:=nil;
signal_name:=nil;
end;
@@ -2136,16 +2292,33 @@ procedure tgdbinterface.gdb_done;
begin
if debuggee_started then
begin
- current_target.to_kill;
- current_target.to_close(1);
+ target_kill;
+{$ifdef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+ target_close(@current_target,1);
+{$else not GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
+ target_close(1);
+{$endif ndef GDB_TARGET_CLOSE_HAS_PTARGET_ARG}
end;
- {$ifdef GDB_HAS_DEPRECATED_CBPH}
- deprecated_create_breakpoint_hook:=nil;
- {$else}
- create_breakpoint_hook:=nil;
+ {$ifdef GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ observer_detach_breakpoint_created(breakpoint_created_observer);
+ breakpoint_created_observer:=nil;
+ {$else not GDB_HAS_OBSERVER_NOTIFY_BREAKPOINT_CREATED}
+ {$ifdef GDB_HAS_DEPRECATED_CBPH}
+ deprecated_create_breakpoint_hook:=nil;
+ {$else}
+ create_breakpoint_hook:=nil;
+ {$endif}
{$endif}
end;
+procedure tgdbinterface.FlushAll;
+begin
+end;
+
+function tgdbinterface.Query(question : pchar; args : pchar) : longint;
+begin
+ Query:=0;
+end;
function tgdbinterface.error:boolean;
begin
@@ -2519,6 +2692,12 @@ var
c_argc : longint;external name '___crt0_argc';
c_argv : ppchar;external name '___crt0_argv';
{$endif def go32v2}
+var
+ current_directory : pchar; cvar; external;
+ gdb_dirbuf : array[0..0] of char; cvar; external;
+ CurrentDir : AnsiString;
+const
+ DIRBUF_SIZE = 1024;
procedure InitLibGDB;
{$ifdef supportexceptions}
@@ -2564,7 +2743,12 @@ begin
// gdb_stdtargin := gdb_stdin;
gdb_stdtargerr := gdb_stderr;
{$endif}
-
+ GetDir(0, CurrentDir);
+ if length(CurrentDir)<DIRBUF_SIZE then
+ strpcopy(@gdb_dirbuf,CurrentDir)
+ else
+ gdb_dirbuf[0]:=#0;
+ current_directory:=@gdb_dirbuf[0];
next_exit:=exitproc;
exitproc:=@DoneLibGDB;
{$ifdef GDB_V6}
@@ -2604,6 +2788,7 @@ end;
{$ifdef GDB_HAS_SYSROOT}
var gdb_sysroot : pchar; cvar;public;
+ gdb_datadir : pchar; cvar;public;
gdb_sysrootc : char;
return_child_result : longbool;cvar;public;
return_child_result_value : longint;cvar;public;
@@ -2618,6 +2803,7 @@ begin
{$ifdef GDB_HAS_SYSROOT}
gdb_sysrootc := #0;
gdb_sysroot := @gdb_sysrootc;
+ gdb_datadir := @gdb_sysrootc;
{$endif}
{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
debug_file_directory := '/usr/local/lib';
diff --git a/packages/ibase/src/ibase60.inc b/packages/ibase/src/ibase60.inc
index 5bc668d3f6..24b52874bc 100644
--- a/packages/ibase/src/ibase60.inc
+++ b/packages/ibase/src/ibase60.inc
@@ -1,20 +1,11 @@
-{
-}
-
{$MODE objfpc}
{$MACRO on}
+{$PACKRECORDS C}
interface
-{$IFDEF LinkDynamically}
-uses Dynlibs, sysutils,ctypes;
-
-Var
- UseEmbeddedFirebird : Boolean = False;
-
-{$ELSE}
-uses Dynlibs,ctypes;
-{$ENDIF}
+uses
+ Dynlibs, ctypes;
{$IFDEF Unix}
{$DEFINE extdecl:=cdecl}
@@ -31,58 +22,41 @@ uses Dynlibs,ctypes;
fbembedlib = 'fbembed.dll';
{$ENDIF}
-type
- { Unsigned types }
-
- UChar = Byte;
- UShort = Word;
- UInt = DWord;
- ULong = DWord;
-
- { Signed types }
-
- Int = LongInt;
- Long = LongInt;
- Short = SmallInt;
- Float = Single;
-
- { Pointers to basic types }
-
- PInt = ^Int;
- PShort = ^Short;
- PUShort = ^UShort;
- PLong = ^Long;
- PULong = ^ULong;
- PFloat = ^Float;
- PUChar = ^UChar;
- PVoid = ^Pointer;
-
-{$PACKRECORDS C}
-
- const
- ISC_TRUE = 1;
- ISC_FALSE = 0;
- const
- ISC__TRUE = ISC_TRUE;
- ISC__FALSE = ISC_FALSE;
+const
+ ISC_TRUE = 1;
+ ISC_FALSE = 0;
+ ISC__TRUE = ISC_TRUE;
+ ISC__FALSE = ISC_FALSE;
Type
- ISC_USHORT = word;
+ ISC_SCHAR = char;
+ ISC_UCHAR = cuchar;
+ ISC_SHORT = cshort;
+ ISC_USHORT = cushort;
ISC_STATUS = clong;
- ISC_INT64 = int64;
- ISC_UINT64 = qword;
- ISC_LONG = Longint;
+ ISC_INT64 = clonglong;
+ ISC_UINT64 = culonglong;
+{$IFDEF CPU64}
+ ISC_LONG = cint;
+ ISC_ULONG = cuint;
+{$ELSE}
+ ISC_LONG = clong;
+ ISC_ULONG = culong;
+{$ENDIF}
- PISC_USHORT = ^ISC_USHORT;
- PISC_STATUS = ^ISC_STATUS;
- PPISC_STATUS = ^PISC_STATUS;
- PISC_INT64 = ^ISC_INT64;
- PISC_UINT64 = ^ISC_UINT64;
- PISC_LONG = ^ISC_LONG;
+ PISC_SCHAR = pchar;
+ PISC_UCHAR = ^ISC_UCHAR;
+ PISC_SHORT = ^ISC_SHORT;
+ PISC_USHORT = ^ISC_USHORT;
+ PISC_STATUS = ^ISC_STATUS;
+ PPISC_STATUS = ^PISC_STATUS;
+ PISC_INT64 = ^ISC_INT64;
+ PISC_UINT64 = ^ISC_UINT64;
+ PISC_LONG = ^ISC_LONG;
- const
- DSQL_close = 1;
- DSQL_drop = 2;
+const
+ DSQL_close = 1;
+ DSQL_drop = 2;
{!!MVC
Removed all ISC_FAR, ISC_EXPORT_VARARG and ISC_EXPORT
@@ -96,8 +70,8 @@ Type
type
- ISC_DATE = longint;
- ISC_TIME = dword;
+ ISC_DATE = cint;
+ ISC_TIME = cuint;
ISC_TIMESTAMP = record
timestamp_date : ISC_DATE;
timestamp_time : ISC_TIME;
@@ -119,19 +93,57 @@ Type
{ Blob id structure }
{ }
-Type
+type
+ PGDS_QUAD = ^GDS_QUAD;
+ GDS_QUAD = record
+ gds_quad_high : ISC_LONG;
+ gds_quad_low : ISC_LONG;
+ end;
+ TGDS_QUAD = GDS_QUAD;
- GDS_QUAD = record
- gds_quad_high : ISC_LONG;
- gds_quad_low : ISC_LONG;
- end;
- TGDS_QUAD = GDS_QUAD;
- PGDS_QUAD = ^GDS_QUAD;
+ ISC_QUAD = GDS_QUAD;
+ TISC_QUAD = ISC_QUAD;
+ PISC_QUAD = ^ISC_QUAD;
+
+ { }
+ { InterBase Handle Definitions }
+ { }
+
+ type
+ isc_att_handle = pointer;
+ isc_blob_handle = pointer;
+ isc_db_handle = pointer;
+ isc_form_handle = pointer;
+ isc_req_handle = pointer;
+ isc_stmt_handle = pointer;
+ isc_svc_handle = pointer;
+ isc_tr_handle = pointer;
+ isc_win_handle = pointer;
+ isc_callback = procedure ;extdecl;
+ isc_resv_handle = ISC_LONG;
+ tisc_att_handle = isc_att_handle;
+ tisc_blob_handle = isc_blob_handle;
+ tisc_db_handle = isc_db_handle;
+ tisc_form_handle = isc_form_handle;
+ tisc_req_handle = isc_req_handle;
+ tisc_stmt_handle = isc_stmt_handle;
+ tisc_svc_handle = isc_svc_handle;
+ tisc_tr_handle = isc_tr_handle;
+ tisc_win_handle = isc_win_handle;
+ tisc_callback = isc_callback;
+ tisc_resv_handle = isc_resv_handle;
+ pisc_att_handle =^isc_att_handle ;
+ pisc_blob_handle =^isc_blob_handle ;
+ pisc_db_handle =^isc_db_handle ;
+ pisc_form_handle =^isc_form_handle ;
+ pisc_req_handle =^isc_req_handle ;
+ pisc_stmt_handle =^isc_stmt_handle ;
+ pisc_svc_handle =^isc_svc_handle ;
+ pisc_tr_handle =^isc_tr_handle ;
+ pisc_win_handle =^isc_win_handle ;
+ pisc_callback = ^isc_callback;
+ pisc_resv_handle =^isc_resv_handle ;
-Type
- ISC_QUAD = GDS_QUAD;
- TISC_QUAD = ISC_QUAD;
- PISC_QUAD = ^ISC_QUAD;
{ !!field redefinitions !!
isc_quad_high = gds_quad_high;
@@ -141,31 +153,31 @@ Type
type
ISC_ARRAY_BOUND = record
- array_bound_lower : smallint;
- array_bound_upper : smallint;
+ array_bound_lower : cshort;
+ array_bound_upper : cshort;
end;
TISC_ARRAY_BOUND = ISC_ARRAY_BOUND;
PISC_ARRAY_BOUND = ^ISC_ARRAY_BOUND;
ISC_ARRAY_DESC = record
- array_desc_dtype : byte;
- array_desc_scale : char;
- array_desc_length : word;
- array_desc_field_name : array[0..31] of char;
- array_desc_relation_name : array[0..31] of char;
- array_desc_dimensions : smallint;
- array_desc_flags : smallint;
+ array_desc_dtype : ISC_UCHAR;
+ array_desc_scale : ISC_SCHAR;
+ array_desc_length : cushort;
+ array_desc_field_name : array[0..31] of ISC_SCHAR;
+ array_desc_relation_name : array[0..31] of ISC_SCHAR;
+ array_desc_dimensions : cushort;
+ array_desc_flags : cushort;
array_desc_bounds : array[0..15] of ISC_ARRAY_BOUND;
end;
TISC_ARRAY_DESC = ISC_ARRAY_DESC;
PISC_ARRAY_DESC = ^ISC_ARRAY_DESC;
ISC_BLOB_DESC = record
- blob_desc_subtype : smallint;
- blob_desc_charset : smallint;
- blob_desc_segment_size : smallint;
- blob_desc_field_name : array[0..31] of byte;
- blob_desc_relation_name : array[0..31] of byte;
+ blob_desc_subtype : cushort;
+ blob_desc_charset : cushort;
+ blob_desc_segment_size : cushort;
+ blob_desc_field_name : array[0..31] of ISC_UCHAR;
+ blob_desc_relation_name : array[0..31] of ISC_UCHAR;
end;
TISC_BLOB_DESC = ISC_BLOB_DESC;
PISC_BLOB_DESC = ^ISC_BLOB_DESC ;
@@ -193,24 +205,24 @@ type
{ Total length of blob }
{ Address of status vector }
{ Application specific data }
- TCTLSourceFunction = function : isc_long;
+ TCTLSourceFunction = function : ISC_STATUS;
PISC_BLOB_CTL = ^ISC_BLOB_CTL ;
ISC_BLOB_CTL = record
ctl_source : TCTLSourceFunction; // was ISC_STATUS ( *ctl_source)();
ctl_source_handle : pisc_blob_ctl ; // was struct isc_blob_ctl * ctl_source_handle;
- ctl_to_sub_type : smallint;
- ctl_from_sub_type : smallint;
- ctl_buffer_length : word;
- ctl_segment_length : word;
- ctl_bpb_length : word;
- ctl_bpb : Pchar;
- ctl_buffer : Pbyte;
+ ctl_to_sub_type : cshort;
+ ctl_from_sub_type : cshort;
+ ctl_buffer_length : cushort;
+ ctl_segment_length : cushort;
+ ctl_bpb_length : cushort;
+ ctl_bpb : PISC_SCHAR;
+ ctl_buffer : PISC_UCHAR;
ctl_max_segment : ISC_LONG;
ctl_number_segments : ISC_LONG;
ctl_total_length : ISC_LONG;
ctl_status : PISC_STATUS;
- ctl_data : array[0..7] of longint;
+ ctl_data : array[0..7] of clong;
end;
TISC_BLOB_CTL = ISC_BLOB_CTL;
@@ -225,12 +237,12 @@ type
{ (mode) ? OUTPUT : INPUT }
BSTREAM = record
- bstr_blob : pointer;
- bstr_buffer : Pchar;
- bstr_ptr : Pchar;
- bstr_length : smallint;
- bstr_cnt : smallint;
- bstr_mode : char;
+ bstr_blob : isc_blob_handle;
+ bstr_buffer : PISC_SCHAR;
+ bstr_ptr : PISC_SCHAR;
+ bstr_length : cshort;
+ bstr_cnt : cshort;
+ bstr_mode : cchar;
end;
TBSTREAM = BSTREAM;
PBstream = ^BSTREAM;
@@ -268,20 +280,20 @@ type
{ NULL }
XSQLVAR = record
- sqltype : smallint;
- sqlscale : smallint;
- sqlsubtype : smallint;
- sqllen : smallint;
- sqldata : Pchar;
- sqlind : Psmallint;
- sqlname_length : smallint;
- sqlname : array[0..31] of char;
- relname_length : smallint;
- relname : array[0..31] of char;
- ownname_length : smallint;
- ownname : array[0..31] of char;
- aliasname_length : smallint;
- aliasname : array[0..31] of char;
+ sqltype : ISC_SHORT;
+ sqlscale : ISC_SHORT;
+ sqlsubtype : ISC_SHORT;
+ sqllen : ISC_SHORT;
+ sqldata : PISC_SCHAR;
+ sqlind : PISC_SHORT;
+ sqlname_length : ISC_SHORT;
+ sqlname : array[0..31] of ISC_SCHAR;
+ relname_length : ISC_SHORT;
+ relname : array[0..31] of ISC_SCHAR;
+ ownname_length : ISC_SHORT;
+ ownname : array[0..31] of ISC_SCHAR;
+ aliasname_length : ISC_SHORT;
+ aliasname : array[0..31] of ISC_SCHAR;
end;
TXSQLVAR = XSQLVAR;
PXSQLVAR =^XSQLVAR;
@@ -293,11 +305,11 @@ type
{ first field address }
XSQLDA = record
- version : smallint;
- sqldaid : array[0..7] of char;
+ version : ISC_SHORT;
+ sqldaid : array[0..7] of ISC_SCHAR;
sqldabc : ISC_LONG;
- sqln : smallint;
- sqld : smallint;
+ sqln : ISC_SHORT;
+ sqld : ISC_SHORT;
sqlvar : array[0..0] of XSQLVAR;
end;
TXSQLDA = XSQLDA;
@@ -322,44 +334,6 @@ type
SQL_DIALECT_V6 = 3;
{ latest IB DIALECT }
SQL_DIALECT_CURRENT = SQL_DIALECT_V6;
- { }
- { InterBase Handle Definitions }
- { }
-
- type
- isc_att_handle = pointer;
- isc_blob_handle = pointer;
- isc_db_handle = pointer;
- isc_form_handle = pointer;
- isc_req_handle = pointer;
- isc_stmt_handle = pointer;
- isc_svc_handle = pointer;
- isc_tr_handle = pointer;
- isc_win_handle = pointer;
- isc_callback = procedure ;extdecl;
- isc_resv_handle = ISC_LONG;
- tisc_att_handle = isc_att_handle;
- tisc_blob_handle = isc_blob_handle;
- tisc_db_handle = isc_db_handle;
- tisc_form_handle = isc_form_handle;
- tisc_req_handle = isc_req_handle;
- tisc_stmt_handle = isc_stmt_handle;
- tisc_svc_handle = isc_svc_handle;
- tisc_tr_handle = isc_tr_handle;
- tisc_win_handle = isc_win_handle;
- tisc_callback = isc_callback;
- tisc_resv_handle = isc_resv_handle;
- pisc_att_handle =^isc_att_handle ;
- pisc_blob_handle =^isc_blob_handle ;
- pisc_db_handle =^isc_db_handle ;
- pisc_form_handle =^isc_form_handle ;
- pisc_req_handle =^isc_req_handle ;
- pisc_stmt_handle =^isc_stmt_handle ;
- pisc_svc_handle =^isc_svc_handle ;
- pisc_tr_handle =^isc_tr_handle ;
- pisc_win_handle =^isc_win_handle ;
- pisc_callback = ^isc_callback;
- pisc_resv_handle =^isc_resv_handle ;
{ }
@@ -398,19 +372,19 @@ type
type
USER_SEC_DATA = record
- sec_flags : smallint;
- uid : longint;
- gid : longint;
- protocol : longint;
+ sec_flags : cshort;
+ uid : cint;
+ gid : cint;
+ protocol : cint;
server : Pchar;
- user_name : Pchar;
- password : Pchar;
- group_name : Pchar;
- first_name : Pchar;
- middle_name : Pchar;
- last_name : Pchar;
- dba_user_name : Pchar;
- dba_password : Pchar;
+ user_name : PISC_SCHAR;
+ password : PISC_SCHAR;
+ group_name : PISC_SCHAR;
+ first_name : PISC_SCHAR;
+ middle_name : PISC_SCHAR;
+ last_name : PISC_SCHAR;
+ dba_user_name : PISC_SCHAR;
+ dba_password : PISC_SCHAR;
end;
TUSER_SEC_DATA = USER_SEC_DATA;
PUSER_SEC_DATA = ^USER_SEC_DATA;
@@ -1625,7 +1599,7 @@ type
isc_blob_dbase_ole = 23;
isc_blob_typed_binary = 24;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ }
{ OSRI database functions }
@@ -1743,7 +1717,7 @@ type
function isc_event_block(_para1:PPchar; _para2:PPchar; _para3:word; args:array of const):ISC_LONG; cdecl; external gdslib;
- procedure isc_event_counts(_para1: PISC_STATUS; _para2: short; _para3: pchar; _para4: pchar); extdecl; external gdslib;
+ procedure isc_event_counts(_para1: PISC_STATUS; _para2: cshort; _para3: pchar; _para4: pchar); extdecl; external gdslib;
procedure isc_expand_dpb(_para1:PPchar; _para2:Psmallint; args:array of const); cdecl; external gdslib;
@@ -2222,7 +2196,7 @@ type
function Bopen2:PBSTREAM; extdecl; external gdslib;
{$ENDIF}
-{$ELSE} // LinkDynamically
+{$ELSE} // LOAD_DYNAMICALLY
var
@@ -2276,7 +2250,7 @@ var
isc_encode_sql_time : procedure (_para1:pointer; _para2:PISC_TIME); extdecl;
isc_encode_timestamp : procedure (_para1:pointer; _para2:PISC_TIMESTAMP); extdecl;
isc_event_block : function (_para1:PPchar; _para2:PPchar; _para3:word; args:array of const):ISC_LONG; cdecl;
- isc_event_counts: procedure (_para1: PISC_STATUS; _para2: short; _para3: pchar; _para4: pchar); extdecl;
+ isc_event_counts: procedure (_para1: PISC_STATUS; _para2: cshort; _para3: pchar; _para4: pchar); extdecl;
isc_expand_dpb : procedure (_para1:PPchar; _para2:Psmallint; args:array of const); cdecl;
isc_modify_dpb : function (_para1:PPchar; _para2:Psmallint; _para3:word; _para4:Pchar; _para5:smallint):longint; extdecl;
isc_free : function (_para1:Pchar):ISC_LONG; extdecl;
@@ -2430,263 +2404,242 @@ var
isc_suspend_window : function (_para1:PISC_STATUS; _para2:Pisc_win_handle):ISC_STATUS; extdecl;
{$ENDIF}
-function InitialiseIBase60(Const LibraryName : String) : integer;
-function InitialiseIBase60 : integer;
-procedure ReleaseIBase60;
+function InitializeIBase(UseEmbeddedFirebird: Boolean = False): Integer;
+function InitializeIBase(const LibraryName: String): Integer;
+function TryInitializeIBase(const LibraryName: string): Integer;
+function ReleaseIBase: Integer;
-var IBaseLibraryHandle : TLibHandle;
+var
+ IBaseLibrary: TLibHandler;
-{$ENDIF}
+function InitialiseIBase60(Const LibraryName : String) : integer; deprecated;
+function InitialiseIBase60 : integer; deprecated;
+procedure ReleaseIBase60; deprecated;
-implementation
-
-{$IFDEF LinkDynamically}
+Var
+ UseEmbeddedFirebird: Boolean = False deprecated;
-ResourceString
- SErrEmbeddedFailed = 'Can not load embedded Firebird client "%s". Check your installation.';
- SErrDefaultsFailed = 'Can not load default Firebird clients ("%s" or "%s"). Check your installation.';
- SErrLoadFailed = 'Can not load Firebird client library "%s". Check your installation.';
- SErrAlreadyLoaded = 'Firebird interface already initialized from library %s.';
-
-var
- RefCount : integer;
- LoadedLibrary : String;
+{$ENDIF}
-Function TryInitialiseIBase60(Const LibraryName : String) : integer;
+implementation
+function XSQLDA_LENGTH(n: Integer): Integer;
begin
- Result := 0;
- if (RefCount=0) then
- begin
- IBaseLibraryHandle:=LoadLibrary(LibraryName);
- if (IBaseLibraryHandle=nilhandle) then
- Exit;
- inc(RefCount);
- LoadedLibrary:=LibraryName;
- pointer(isc_attach_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_attach_database');
- pointer(isc_array_gen_sdl) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_gen_sdl');
- pointer(isc_array_get_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_get_slice');
- pointer(isc_array_lookup_bounds) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_lookup_bounds');
- pointer(isc_array_lookup_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_lookup_desc');
- pointer(isc_array_set_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_set_desc');
- pointer(isc_array_put_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_put_slice');
- pointer(isc_blob_default_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_default_desc');
- pointer(isc_blob_gen_bpb) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_gen_bpb');
- pointer(isc_blob_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_info');
- pointer(isc_blob_lookup_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_lookup_desc');
- pointer(isc_blob_set_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_set_desc');
- pointer(isc_cancel_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_cancel_blob');
- pointer(isc_cancel_events) := GetProcedureAddress(IBaseLibraryHandle,'isc_cancel_events');
- pointer(isc_close_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_close_blob');
- pointer(isc_commit_retaining) := GetProcedureAddress(IBaseLibraryHandle,'isc_commit_retaining');
- pointer(isc_commit_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_commit_transaction');
- pointer(isc_create_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_blob');
- pointer(isc_create_blob2) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_blob2');
- pointer(isc_create_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_database');
- pointer(isc_database_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_database_info');
- pointer(isc_decode_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_date');
- pointer(isc_decode_sql_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_sql_date');
- pointer(isc_decode_sql_time) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_sql_time');
- pointer(isc_decode_timestamp) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_timestamp');
- pointer(isc_detach_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_detach_database');
- pointer(isc_drop_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_drop_database');
- pointer(isc_dsql_allocate_statement) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_allocate_statement');
- pointer(isc_dsql_alloc_statement2) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_alloc_statement2');
- pointer(isc_dsql_describe) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_describe');
- pointer(isc_dsql_describe_bind) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_describe_bind');
- pointer(isc_dsql_exec_immed2) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_exec_immed2');
- pointer(isc_dsql_execute) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute');
- pointer(isc_dsql_execute2) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute2');
- pointer(isc_dsql_execute_immediate) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute_immediate');
- pointer(isc_dsql_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_fetch');
- pointer(isc_dsql_finish) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_finish');
- pointer(isc_dsql_free_statement) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_free_statement');
- pointer(isc_dsql_insert) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_insert');
- pointer(isc_dsql_prepare) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_prepare');
- pointer(isc_dsql_set_cursor_name) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_set_cursor_name');
- pointer(isc_dsql_sql_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_sql_info');
- pointer(isc_encode_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_date');
- pointer(isc_encode_sql_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_sql_date');
- pointer(isc_encode_sql_time) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_sql_time');
- pointer(isc_encode_timestamp) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_timestamp');
- pointer(isc_event_block) := GetProcedureAddress(IBaseLibraryHandle,'isc_event_block');
- pointer(isc_event_counts) := GetProcedureAddress(IBaseLibraryHandle,'isc_event_counts');
- pointer(isc_expand_dpb) := GetProcedureAddress(IBaseLibraryHandle,'isc_expand_dpb');
- pointer(isc_modify_dpb) := GetProcedureAddress(IBaseLibraryHandle,'isc_modify_dpb');
- pointer(isc_free) := GetProcedureAddress(IBaseLibraryHandle,'isc_free');
- pointer(isc_get_segment) := GetProcedureAddress(IBaseLibraryHandle,'isc_get_segment');
- pointer(isc_get_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_get_slice');
- pointer(isc_interprete) := GetProcedureAddress(IBaseLibraryHandle,'isc_interprete');
- pointer(isc_open_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_open_blob');
- pointer(isc_open_blob2) := GetProcedureAddress(IBaseLibraryHandle,'isc_open_blob2');
- pointer(isc_prepare_transaction2) := GetProcedureAddress(IBaseLibraryHandle,'isc_prepare_transaction2');
- pointer(isc_print_sqlerror) := GetProcedureAddress(IBaseLibraryHandle,'isc_print_sqlerror');
- pointer(isc_print_status) := GetProcedureAddress(IBaseLibraryHandle,'isc_print_status');
- pointer(isc_put_segment) := GetProcedureAddress(IBaseLibraryHandle,'isc_put_segment');
- pointer(isc_put_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_put_slice');
- pointer(isc_que_events) := GetProcedureAddress(IBaseLibraryHandle,'isc_que_events');
- pointer(isc_rollback_retaining) := GetProcedureAddress(IBaseLibraryHandle,'isc_rollback_retaining');
- pointer(isc_rollback_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_rollback_transaction');
- pointer(isc_start_multiple) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_multiple');
- pointer(isc_start_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_transaction');
- pointer(isc_sqlcode) := GetProcedureAddress(IBaseLibraryHandle,'isc_sqlcode');
- pointer(isc_sql_interprete) := GetProcedureAddress(IBaseLibraryHandle,'isc_sql_interprete');
- pointer(isc_transaction_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_transaction_info');
- pointer(isc_transact_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_transact_request');
- pointer(isc_vax_integer) := GetProcedureAddress(IBaseLibraryHandle,'isc_vax_integer');
- pointer(isc_portable_integer) := GetProcedureAddress(IBaseLibraryHandle,'isc_portable_integer');
- pointer(isc_add_user) := GetProcedureAddress(IBaseLibraryHandle,'isc_add_user');
- pointer(isc_delete_user) := GetProcedureAddress(IBaseLibraryHandle,'isc_delete_user');
- pointer(isc_modify_user) := GetProcedureAddress(IBaseLibraryHandle,'isc_modify_user');
- pointer(isc_compile_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_request');
- pointer(isc_compile_request2) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_request2');
- pointer(isc_ddl) := GetProcedureAddress(IBaseLibraryHandle,'isc_ddl');
- pointer(isc_prepare_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_prepare_transaction');
- pointer(isc_receive) := GetProcedureAddress(IBaseLibraryHandle,'isc_receive');
- pointer(isc_reconnect_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_reconnect_transaction');
- pointer(isc_release_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_release_request');
- pointer(isc_request_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_request_info');
- pointer(isc_seek_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_seek_blob');
- pointer(isc_send) := GetProcedureAddress(IBaseLibraryHandle,'isc_send');
- pointer(isc_start_and_send) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_and_send');
- pointer(isc_start_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_request');
- pointer(isc_unwind_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_unwind_request');
- pointer(isc_wait_for_event) := GetProcedureAddress(IBaseLibraryHandle,'isc_wait_for_event');
- pointer(isc_close) := GetProcedureAddress(IBaseLibraryHandle,'isc_close');
- pointer(isc_declare) := GetProcedureAddress(IBaseLibraryHandle,'isc_declare');
- pointer(isc_describe) := GetProcedureAddress(IBaseLibraryHandle,'isc_describe');
- pointer(isc_describe_bind) := GetProcedureAddress(IBaseLibraryHandle,'isc_describe_bind');
- pointer(isc_execute) := GetProcedureAddress(IBaseLibraryHandle,'isc_execute');
- pointer(isc_execute_immediate) := GetProcedureAddress(IBaseLibraryHandle,'isc_execute_immediate');
- pointer(isc_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_fetch');
- pointer(isc_open) := GetProcedureAddress(IBaseLibraryHandle,'isc_open');
- pointer(isc_prepare) := GetProcedureAddress(IBaseLibraryHandle,'isc_prepare');
- pointer(isc_dsql_execute_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute_m');
- pointer(isc_dsql_execute2_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute2_m');
- pointer(isc_dsql_execute_immediate_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute_immediate_m');
- pointer(isc_dsql_exec_immed3_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_exec_immed3_m');
- pointer(isc_dsql_fetch_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_fetch_m');
- pointer(isc_dsql_insert_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_insert_m');
- pointer(isc_dsql_prepare_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_prepare_m');
- pointer(isc_dsql_release) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_release');
- pointer(isc_embed_dsql_close) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_close');
- pointer(isc_embed_dsql_declare) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_declare');
- pointer(isc_embed_dsql_describe) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_describe');
- pointer(isc_embed_dsql_describe_bind) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_describe_bind');
- pointer(isc_embed_dsql_execute) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_execute');
- pointer(isc_embed_dsql_execute2) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_execute2');
- pointer(isc_embed_dsql_execute_immed) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_execute_immed');
- pointer(isc_embed_dsql_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_fetch');
- pointer(isc_embed_dsql_open) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_open');
- pointer(isc_embed_dsql_open2) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_open2');
- pointer(isc_embed_dsql_insert) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_insert');
- pointer(isc_embed_dsql_prepare) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_prepare');
- pointer(isc_embed_dsql_release) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_release');
- pointer(BLOB_open) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_open');
- pointer(BLOB_put) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_put');
- pointer(BLOB_close) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_close');
- pointer(BLOB_get) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_get');
- pointer(BLOB_display) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_display');
- pointer(BLOB_dump) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_dump');
- pointer(BLOB_edit) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_edit');
- pointer(BLOB_load) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_load');
- pointer(BLOB_text_dump) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_text_dump');
- pointer(BLOB_text_load) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_text_load');
- pointer(Bopen) := GetProcedureAddress(IBaseLibraryHandle,'Bopen');
-{$IFDEF Unix}
- pointer(Bopen2) := GetProcedureAddress(IBaseLibraryHandle,'Bopen2');
+ Result := SizeOf(XSQLDA) + (n - 1) * SizeOf(XSQLVAR);
+end;
+
+{$IFDEF LOAD_DYNAMICALLY}
+const
+ ibsymbols: array[0..140{$IFDEF UNIX}+20{$ENDIF}] of TLibSymbol = (
+ (pvar:@isc_attach_database; name:'isc_attach_database'; weak:false),
+ (pvar:@isc_array_gen_sdl; name:'isc_array_gen_sdl'; weak:false),
+ (pvar:@isc_array_get_slice; name:'isc_array_get_slice'; weak:false),
+ (pvar:@isc_array_lookup_bounds; name:'isc_array_lookup_bounds'; weak:false),
+ (pvar:@isc_array_lookup_desc; name:'isc_array_lookup_desc'; weak:false),
+ (pvar:@isc_array_set_desc; name:'isc_array_set_desc'; weak:false),
+ (pvar:@isc_array_put_slice; name:'isc_array_put_slice'; weak:false),
+ (pvar:@isc_blob_default_desc; name:'isc_blob_default_desc'; weak:false),
+ (pvar:@isc_blob_gen_bpb; name:'isc_blob_gen_bpb'; weak:false),
+ (pvar:@isc_blob_info; name:'isc_blob_info'; weak:false),
+ (pvar:@isc_blob_lookup_desc; name:'isc_blob_lookup_desc'; weak:false),
+ (pvar:@isc_blob_set_desc; name:'isc_blob_set_desc'; weak:false),
+ (pvar:@isc_cancel_blob; name:'isc_cancel_blob'; weak:false),
+ (pvar:@isc_cancel_events; name:'isc_cancel_events'; weak:false),
+ (pvar:@isc_close_blob; name:'isc_close_blob'; weak:false),
+ (pvar:@isc_commit_retaining; name:'isc_commit_retaining'; weak:false),
+ (pvar:@isc_commit_transaction; name:'isc_commit_transaction'; weak:false),
+ (pvar:@isc_create_blob; name:'isc_create_blob'; weak:false),
+ (pvar:@isc_create_blob2; name:'isc_create_blob2'; weak:false),
+ (pvar:@isc_create_database; name:'isc_create_database'; weak:false),
+ (pvar:@isc_database_info; name:'isc_database_info'; weak:false),
+ (pvar:@isc_decode_date; name:'isc_decode_date'; weak:false),
+ (pvar:@isc_decode_sql_date; name:'isc_decode_sql_date'; weak:false),
+ (pvar:@isc_decode_sql_time; name:'isc_decode_sql_time'; weak:false),
+ (pvar:@isc_decode_timestamp; name:'isc_decode_timestamp'; weak:false),
+ (pvar:@isc_detach_database; name:'isc_detach_database'; weak:false),
+ (pvar:@isc_drop_database; name:'isc_drop_database'; weak:false),
+ (pvar:@isc_dsql_allocate_statement; name:'isc_dsql_allocate_statement'; weak:false),
+ (pvar:@isc_dsql_alloc_statement2; name:'isc_dsql_alloc_statement2'; weak:false),
+ (pvar:@isc_dsql_describe; name:'isc_dsql_describe'; weak:false),
+ (pvar:@isc_dsql_describe_bind; name:'isc_dsql_describe_bind'; weak:false),
+ (pvar:@isc_dsql_exec_immed2; name:'isc_dsql_exec_immed2'; weak:false),
+ (pvar:@isc_dsql_execute; name:'isc_dsql_execute'; weak:false),
+ (pvar:@isc_dsql_execute2; name:'isc_dsql_execute2'; weak:false),
+ (pvar:@isc_dsql_execute_immediate; name:'isc_dsql_execute_immediate'; weak:false),
+ (pvar:@isc_dsql_fetch; name:'isc_dsql_fetch'; weak:false),
+ (pvar:@isc_dsql_finish; name:'isc_dsql_finish'; weak:false),
+ (pvar:@isc_dsql_free_statement; name:'isc_dsql_free_statement'; weak:false),
+ (pvar:@isc_dsql_insert; name:'isc_dsql_insert'; weak:false),
+ (pvar:@isc_dsql_prepare; name:'isc_dsql_prepare'; weak:false),
+ (pvar:@isc_dsql_set_cursor_name; name:'isc_dsql_set_cursor_name'; weak:false),
+ (pvar:@isc_dsql_sql_info; name:'isc_dsql_sql_info'; weak:false),
+ (pvar:@isc_encode_date; name:'isc_encode_date'; weak:false),
+ (pvar:@isc_encode_sql_date; name:'isc_encode_sql_date'; weak:false),
+ (pvar:@isc_encode_sql_time; name:'isc_encode_sql_time'; weak:false),
+ (pvar:@isc_encode_timestamp; name:'isc_encode_timestamp'; weak:false),
+ (pvar:@isc_event_block; name:'isc_event_block'; weak:false),
+ (pvar:@isc_event_counts; name:'isc_event_counts'; weak:false),
+ (pvar:@isc_expand_dpb; name:'isc_expand_dpb'; weak:false),
+ (pvar:@isc_modify_dpb; name:'isc_modify_dpb'; weak:false),
+ (pvar:@isc_free; name:'isc_free'; weak:false),
+ (pvar:@isc_get_segment; name:'isc_get_segment'; weak:false),
+ (pvar:@isc_get_slice; name:'isc_get_slice'; weak:false),
+ (pvar:@isc_interprete; name:'isc_interprete'; weak:false),
+ (pvar:@isc_open_blob; name:'isc_open_blob'; weak:false),
+ (pvar:@isc_open_blob2; name:'isc_open_blob2'; weak:false),
+ (pvar:@isc_prepare_transaction2; name:'isc_prepare_transaction2'; weak:false),
+ (pvar:@isc_print_sqlerror; name:'isc_print_sqlerror'; weak:false),
+ (pvar:@isc_print_status; name:'isc_print_status'; weak:false),
+ (pvar:@isc_put_segment; name:'isc_put_segment'; weak:false),
+ (pvar:@isc_put_slice; name:'isc_put_slice'; weak:false),
+ (pvar:@isc_que_events; name:'isc_que_events'; weak:false),
+ (pvar:@isc_rollback_retaining; name:'isc_rollback_retaining'; weak:false),
+ (pvar:@isc_rollback_transaction; name:'isc_rollback_transaction'; weak:false),
+ (pvar:@isc_start_multiple; name:'isc_start_multiple'; weak:false),
+ (pvar:@isc_start_transaction; name:'isc_start_transaction'; weak:false),
+ (pvar:@isc_sqlcode; name:'isc_sqlcode'; weak:false),
+ (pvar:@isc_sql_interprete; name:'isc_sql_interprete'; weak:false),
+ (pvar:@isc_transaction_info; name:'isc_transaction_info'; weak:false),
+ (pvar:@isc_transact_request; name:'isc_transact_request'; weak:false),
+ (pvar:@isc_vax_integer; name:'isc_vax_integer'; weak:false),
+ (pvar:@isc_portable_integer; name:'isc_portable_integer'; weak:false),
+ (pvar:@isc_add_user; name:'isc_add_user'; weak:false),
+ (pvar:@isc_delete_user; name:'isc_delete_user'; weak:false),
+ (pvar:@isc_modify_user; name:'isc_modify_user'; weak:false),
+ (pvar:@isc_compile_request; name:'isc_compile_request'; weak:false),
+ (pvar:@isc_compile_request2; name:'isc_compile_request2'; weak:false),
+ (pvar:@isc_ddl; name:'isc_ddl'; weak:false),
+ (pvar:@isc_prepare_transaction; name:'isc_prepare_transaction'; weak:false),
+ (pvar:@isc_receive; name:'isc_receive'; weak:false),
+ (pvar:@isc_reconnect_transaction; name:'isc_reconnect_transaction'; weak:false),
+ (pvar:@isc_release_request; name:'isc_release_request'; weak:false),
+ (pvar:@isc_request_info; name:'isc_request_info'; weak:false),
+ (pvar:@isc_seek_blob; name:'isc_seek_blob'; weak:false),
+ (pvar:@isc_send; name:'isc_send'; weak:false),
+ (pvar:@isc_start_and_send; name:'isc_start_and_send'; weak:false),
+ (pvar:@isc_start_request; name:'isc_start_request'; weak:false),
+ (pvar:@isc_unwind_request; name:'isc_unwind_request'; weak:false),
+ (pvar:@isc_wait_for_event; name:'isc_wait_for_event'; weak:false),
+ (pvar:@isc_close; name:'isc_close'; weak:false),
+ (pvar:@isc_declare; name:'isc_declare'; weak:false),
+ (pvar:@isc_describe; name:'isc_describe'; weak:false),
+ (pvar:@isc_describe_bind; name:'isc_describe_bind'; weak:false),
+ (pvar:@isc_execute; name:'isc_execute'; weak:false),
+ (pvar:@isc_execute_immediate; name:'isc_execute_immediate'; weak:false),
+ (pvar:@isc_fetch; name:'isc_fetch'; weak:false),
+ (pvar:@isc_open; name:'isc_open'; weak:false),
+ (pvar:@isc_prepare; name:'isc_prepare'; weak:false),
+ (pvar:@isc_dsql_execute_m; name:'isc_dsql_execute_m'; weak:false),
+ (pvar:@isc_dsql_execute2_m; name:'isc_dsql_execute2_m'; weak:false),
+ (pvar:@isc_dsql_execute_immediate_m; name:'isc_dsql_execute_immediate_m'; weak:false),
+ (pvar:@isc_dsql_exec_immed3_m; name:'isc_dsql_exec_immed3_m'; weak:false),
+ (pvar:@isc_dsql_fetch_m; name:'isc_dsql_fetch_m'; weak:false),
+ (pvar:@isc_dsql_insert_m; name:'isc_dsql_insert_m'; weak:false),
+ (pvar:@isc_dsql_prepare_m; name:'isc_dsql_prepare_m'; weak:false),
+ (pvar:@isc_dsql_release; name:'isc_dsql_release'; weak:false),
+ (pvar:@isc_embed_dsql_close; name:'isc_embed_dsql_close'; weak:false),
+ (pvar:@isc_embed_dsql_declare; name:'isc_embed_dsql_declare'; weak:false),
+ (pvar:@isc_embed_dsql_describe; name:'isc_embed_dsql_describe'; weak:false),
+ (pvar:@isc_embed_dsql_describe_bind; name:'isc_embed_dsql_describe_bind'; weak:false),
+ (pvar:@isc_embed_dsql_execute; name:'isc_embed_dsql_execute'; weak:false),
+ (pvar:@isc_embed_dsql_execute2; name:'isc_embed_dsql_execute2'; weak:false),
+ (pvar:@isc_embed_dsql_execute_immed; name:'isc_embed_dsql_execute_immed'; weak:false),
+ (pvar:@isc_embed_dsql_fetch; name:'isc_embed_dsql_fetch'; weak:false),
+ (pvar:@isc_embed_dsql_open; name:'isc_embed_dsql_open'; weak:false),
+ (pvar:@isc_embed_dsql_open2; name:'isc_embed_dsql_open2'; weak:false),
+ (pvar:@isc_embed_dsql_insert; name:'isc_embed_dsql_insert'; weak:false),
+ (pvar:@isc_embed_dsql_prepare; name:'isc_embed_dsql_prepare'; weak:false),
+ (pvar:@isc_embed_dsql_release; name:'isc_embed_dsql_release'; weak:false),
+ (pvar:@BLOB_open; name:'BLOB_open'; weak:false),
+ (pvar:@BLOB_put; name:'BLOB_put'; weak:false),
+ (pvar:@BLOB_close; name:'BLOB_close'; weak:false),
+ (pvar:@BLOB_get; name:'BLOB_get'; weak:false),
+ (pvar:@BLOB_display; name:'BLOB_display'; weak:false),
+ (pvar:@BLOB_dump; name:'BLOB_dump'; weak:false),
+ (pvar:@BLOB_edit; name:'BLOB_edit'; weak:false),
+ (pvar:@BLOB_load; name:'BLOB_load'; weak:false),
+ (pvar:@BLOB_text_dump; name:'BLOB_text_dump'; weak:false),
+ (pvar:@BLOB_text_load; name:'BLOB_text_load'; weak:false),
+ (pvar:@Bopen; name:'Bopen'; weak:false),
+{$IFDEF Unix} { weak functions, be careful! }
+ (pvar:@Bopen2; name:'Bopen2'; weak:true),
{$ENDIF}
- pointer(isc_ftof) := GetProcedureAddress(IBaseLibraryHandle,'isc_ftof');
- pointer(isc_print_blr) := GetProcedureAddress(IBaseLibraryHandle,'isc_print_blr');
- pointer(isc_set_debug) := GetProcedureAddress(IBaseLibraryHandle,'isc_set_debug');
- pointer(isc_qtoq) := GetProcedureAddress(IBaseLibraryHandle,'isc_qtoq');
- pointer(isc_vtof) := GetProcedureAddress(IBaseLibraryHandle,'isc_vtof');
- pointer(isc_vtov) := GetProcedureAddress(IBaseLibraryHandle,'isc_vtov');
- pointer(isc_version) := GetProcedureAddress(IBaseLibraryHandle,'isc_version');
+ (pvar:@isc_ftof; name:'isc_ftof'; weak:false),
+ (pvar:@isc_print_blr; name:'isc_print_blr'; weak:false),
+ (pvar:@isc_set_debug; name:'isc_set_debug'; weak:false),
+ (pvar:@isc_qtoq; name:'isc_qtoq'; weak:false),
+ (pvar:@isc_vtof; name:'isc_vtof'; weak:false),
+ (pvar:@isc_vtov; name:'isc_vtov'; weak:false),
+ (pvar:@isc_version; name:'isc_version'; weak:false),
{$IFDEF Unix}
- pointer(isc_reset_fpe) := GetProcedureAddress(IBaseLibraryHandle,'isc_reset_fpe');
+ (pvar:@isc_reset_fpe; name:'isc_reset_fpe'; weak:false),
{$ENDIF}
- pointer(isc_service_attach) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_attach');
- pointer(isc_service_detach) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_detach');
- pointer(isc_service_query) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_query');
- pointer(isc_service_start) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_start');
-{$IFDEF Unix}
- pointer(isc_compile_map) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_map');
- pointer(isc_compile_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_menu');
- pointer(isc_compile_sub_map) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_sub_map');
- pointer(isc_create_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_window');
- pointer(isc_delete_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_delete_window');
- pointer(isc_drive_form) := GetProcedureAddress(IBaseLibraryHandle,'isc_drive_form');
- pointer(isc_drive_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_drive_menu');
- pointer(isc_form_delete) := GetProcedureAddress(IBaseLibraryHandle,'isc_form_delete');
- pointer(isc_form_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_form_fetch');
- pointer(isc_form_insert) := GetProcedureAddress(IBaseLibraryHandle,'isc_form_insert');
- pointer(isc_get_entree) := GetProcedureAddress(IBaseLibraryHandle,'isc_get_entree');
- pointer(isc_initialize_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_initialize_menu');
- pointer(isc_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_menu');
- pointer(isc_load_form) := GetProcedureAddress(IBaseLibraryHandle,'isc_load_form');
- pointer(isc_pop_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_pop_window');
- pointer(isc_put_entree) := GetProcedureAddress(IBaseLibraryHandle,'isc_put_entree');
- pointer(isc_reset_form) := GetProcedureAddress(IBaseLibraryHandle,'isc_reset_form');
- pointer(isc_suspend_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_suspend_window');
+ (pvar:@isc_service_attach; name:'isc_service_attach'; weak:false),
+ (pvar:@isc_service_detach; name:'isc_service_detach'; weak:false),
+ (pvar:@isc_service_query; name:'isc_service_query'; weak:false),
+ (pvar:@isc_service_start; name:'isc_service_start'; weak:false)
+{$IFDEF Unix} { weak functions, be careful! }
+ ,(pvar:@isc_compile_map; name:'isc_compile_map'; weak:true),
+ (pvar:@isc_compile_menu; name:'isc_compile_menu'; weak:true),
+ (pvar:@isc_compile_sub_map; name:'isc_compile_sub_map'; weak:true),
+ (pvar:@isc_create_window; name:'isc_create_window'; weak:true),
+ (pvar:@isc_delete_window; name:'isc_delete_window'; weak:true),
+ (pvar:@isc_drive_form; name:'isc_drive_form'; weak:true),
+ (pvar:@isc_drive_menu; name:'isc_drive_menu'; weak:true),
+ (pvar:@isc_form_delete; name:'isc_form_delete'; weak:true),
+ (pvar:@isc_form_fetch; name:'isc_form_fetch'; weak:true),
+ (pvar:@isc_form_insert; name:'isc_form_insert'; weak:true),
+ (pvar:@isc_get_entree; name:'isc_get_entree'; weak:true),
+ (pvar:@isc_initialize_menu; name:'isc_initialize_menu'; weak:true),
+ (pvar:@isc_menu; name:'isc_menu'; weak:true),
+ (pvar:@isc_load_form; name:'isc_load_form'; weak:true),
+ (pvar:@isc_pop_window; name:'isc_pop_window'; weak:true),
+ (pvar:@isc_put_entree; name:'isc_put_entree'; weak:true),
+ (pvar:@isc_reset_form; name:'isc_reset_form'; weak:true),
+ (pvar:@isc_suspend_window; name:'isc_suspend_window'; weak:true)
{$ENDIF}
- end
- else
- inc(RefCount);
- Result := RefCount;
-end;
-
-function InitialiseIBase60 : integer;
+ );
+function InitializeIBase(UseEmbeddedFirebird: Boolean): Integer;
begin
- Result := 0;
- If UseEmbeddedFirebird then
- begin
- If (TryInitialiseIBase60(fbembedlib)=0) then
- Raise EInOutError.CreateFmt(SErrEmbeddedFailed,[fbembedlib]);
- end
+ if UseEmbeddedFirebird then
+ Result := InitializeLibrary(IBaseLibrary, fbembedlib)
else
- begin
- If (TryInitialiseIBase60(fbclib)=0) and
- (TryInitialiseIBase60(gdslib)=0) then
- Raise EInOutError.CreateFmt(SErrDefaultsFailed,[gdslib,fbclib]);
- end;
- Result := RefCount;
+ Result := InitializeLibrary(IBaseLibrary);
end;
-function InitialiseIBase60(Const LibraryName : String) : integer;
-
+function InitializeIBase(const LibraryName: String): Integer;
begin
- Result := TryInitialiseIBase60(LibraryName);
- If Result = 0 then
- Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName])
- else If (LibraryName<>LoadedLibrary) then
- begin
- Dec(RefCount);
- Result := RefCount;
- Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
- end;
+ Result := InitializeLibrary(IBaseLibrary, LibraryName);
end;
+function TryInitializeIBase(const LibraryName: string): Integer;
+begin
+ Result := TryInitializeLibrary(IBaseLibrary, LibraryName);
+end;
-Procedure ReleaseIBase60;
+function ReleaseIBase: Integer;
+begin
+ Result := ReleaseLibrary(IBaseLibrary);
+end;
+function InitialiseIBase60(Const LibraryName : String) : integer;
begin
- if RefCount>1 then
- Dec(RefCount)
- else if UnloadLibrary(IBaseLibraryHandle) then
- begin
- Dec(RefCount);
- IBaseLibraryHandle := NilHandle;
- LoadedLibrary:='';
- end;
+ Result := InitializeIBase(LibraryName);
end;
-{$ENDIF}
+function InitialiseIBase60: integer;
+begin
+ Result := InitializeIBase(UseEmbeddedFirebird);
+end;
-function XSQLDA_LENGTH(n: Integer): Integer;
+procedure ReleaseIBase60;
begin
- Result := SizeOf(XSQLDA) + (n - 1) * SizeOf(XSQLVAR);
+ ReleaseIBase;
end;
+initialization
+ IBaseLibrary := LibraryHandler('Interbase', [gdslib,fbclib], @ibsymbols, length(ibsymbols));
+{$ENDIF}
+
diff --git a/packages/ibase/src/ibase60.pp b/packages/ibase/src/ibase60.pp
index db7a378a2b..be365a64f6 100644
--- a/packages/ibase/src/ibase60.pp
+++ b/packages/ibase/src/ibase60.pp
@@ -2,7 +2,7 @@
}
unit ibase60;
-{$UNDEF LinkDynamically}
+{$UNDEF LOAD_DYNAMICALLY}
{$i ibase60.inc}
diff --git a/packages/ibase/src/ibase60dyn.pp b/packages/ibase/src/ibase60dyn.pp
index 139087bd1b..1e63cdaaac 100644
--- a/packages/ibase/src/ibase60dyn.pp
+++ b/packages/ibase/src/ibase60dyn.pp
@@ -11,7 +11,7 @@
unit ibase60dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$i ibase60.inc}
diff --git a/packages/imagemagick/examples/image.png b/packages/imagemagick/examples/image.png
index 8fbd918b79..6840f5f32c 100644
--- a/packages/imagemagick/examples/image.png
+++ b/packages/imagemagick/examples/image.png
Binary files differ
diff --git a/packages/imagemagick/examples/wanddemo.lpr b/packages/imagemagick/examples/wanddemo.lpr
index 25e2ec44a4..44a6e3685b 100644
--- a/packages/imagemagick/examples/wanddemo.lpr
+++ b/packages/imagemagick/examples/wanddemo.lpr
@@ -28,6 +28,7 @@ end;
var
status: MagickBooleanType;
wand: PMagickWand;
+
begin
{ Read an image. }
diff --git a/packages/imagemagick/examples/wandpixelaccess.pas b/packages/imagemagick/examples/wandpixelaccess.pas
new file mode 100644
index 0000000000..b7d1c9a762
--- /dev/null
+++ b/packages/imagemagick/examples/wandpixelaccess.pas
@@ -0,0 +1,84 @@
+{
+ Demonstration program for the ImageMagick Library
+
+ Usage: Just execute the program. It will change all black pixels
+ in the image.png image on it's directory to be transparent
+ and then it will save it as image2.png
+ The idea is to demonstrate pixel access using MagickWand.
+}
+program wandpixelaccess;
+
+{$mode objfpc}{$H+}
+
+uses SysUtils, magick_wand, ImageMagick, ctypes;
+
+procedure ThrowWandException(wand: PMagickWand);
+var
+ description: PChar;
+ severity: ExceptionType;
+begin
+ description := MagickGetException(wand, @severity);
+ WriteLn(Format('An error ocurred. Description: %s', [description]));
+ description := MagickRelinquishMemory(description);
+ Abort;
+end;
+
+var
+ status: MagickBooleanType;
+ wand: PMagickWand = nil;
+ pixel: MagickPixelPacket;
+ iterator: PPixelIterator;
+ pixels: PPPixelWand = nil;
+ x, y: Integer;
+ width: culong;
+begin
+ { Read an image. }
+
+ MagickWandGenesis;
+
+ wand := NewMagickWand();
+
+ try
+ status := MagickReadImage(wand, 'image.png');
+ if (status = MagickFalse) then ThrowWandException(wand);
+
+ iterator := NewPixelIterator(wand);
+ if (iterator = nil) then ThrowWandException(wand);
+
+ for y := 0 to MagickGetImageHeight(wand) - 1 do
+ begin
+// WriteLn(' Line ', y, ' from ', MagickGetImageHeight(wand) - 1);
+ pixels := PixelGetNextIteratorRow(iterator, width);
+ if (pixels = nil) then Break;
+
+ for x := 0 to width - 1 do
+ begin
+// WriteLn(Format(' x %d y %d r %f g %f b %f o %f',
+// [x, y, pixel.red, pixel.green, pixel.blue, pixel.opacity]));
+ PixelGetMagickColor(pixels[x], @pixel);
+ if (pixel.red = 0.0) and
+ (pixel.green = 0.0) and
+ (pixel.blue = 0.0) then
+ begin
+ pixel.opacity := QuantumRange;
+ pixel.matte := QuantumRange; // matte=alpha
+ end;
+ PixelSetMagickColor(pixels[x], @pixel);
+ end;
+ PixelSyncIterator(iterator);
+ end;
+
+// if y < MagickGetImageHeight(wand) then ThrowWandException(wand);
+ iterator := DestroyPixelIterator(iterator);
+
+ { Write the image }
+
+ status := MagickWriteImage(wand, 'image2.png');
+ if (status = MagickFalse) then ThrowWandException(wand);
+ finally
+ { Clean-up }
+ if wand <> nil then wand := DestroyMagickWand(wand);
+ MagickWandTerminus;
+ end;
+end.
+
diff --git a/packages/imagemagick/src/cache.inc b/packages/imagemagick/src/cache.inc
new file mode 100644
index 0000000000..7e69489921
--- /dev/null
+++ b/packages/imagemagick/src/cache.inc
@@ -0,0 +1,66 @@
+{
+ Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization
+ dedicated to making software imaging solutions freely available.
+
+ You may not use this file except in compliance with the License.
+ obtain a copy of the License at
+
+ http://www.imagemagick.org/script/license.php
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ MagickCore cache methods.
+}
+{
+ Based on ImageMagick 6.5.7
+}
+
+//#include "magick/blob.h"
+
+{extern MagickExport const IndexPacket
+ *GetVirtualIndexQueue(const Image *);
+
+extern MagickExport const PixelPacket
+ *GetVirtualPixels(const Image *,const long,const long,const unsigned long,
+ const unsigned long,ExceptionInfo *),
+ *GetVirtualPixelQueue(const Image *);
+
+extern MagickExport IndexPacket
+ *GetAuthenticIndexQueue(const Image *);
+
+extern MagickExport MagickBooleanType
+ GetOneVirtualMagickPixel(const Image *,const long,const long,
+ MagickPixelPacket *,ExceptionInfo *),
+ GetOneVirtualPixel(const Image *,const long,const long,PixelPacket *,
+ ExceptionInfo *),
+ GetOneVirtualMethodPixel(const Image *,const VirtualPixelMethod,const long,
+ const long,PixelPacket *,ExceptionInfo *),
+ GetOneAuthenticPixel(Image *,const long,const long,PixelPacket *,
+ ExceptionInfo *),
+ InstantiateCacheComponent(void),
+ PersistPixelCache(Image *,const char *,const MagickBooleanType,
+ MagickOffsetType *,ExceptionInfo *),
+ SyncAuthenticPixels(Image *,ExceptionInfo *);
+
+extern MagickExport MagickSizeType
+ GetImageExtent(const Image *);}
+
+//extern MagickExport PixelPacket
+function GetAuthenticPixels(_image: PImage; const x, y: clong;
+ const columns, rows: culong; exception: PExceptionInfo
+ ): PPixelPacket; cdecl; external MagickExport;
+// *GetAuthenticPixelQueue(const Image *),
+// *QueueAuthenticPixels(Image *,const long,const long,const unsigned long,
+// const unsigned long,ExceptionInfo *);
+
+{extern MagickExport VirtualPixelMethod
+ GetPixelCacheVirtualMethod(const Image *),
+ SetPixelCacheVirtualMethod(const Image *,const VirtualPixelMethod);
+
+extern MagickExport void
+ DestroyCacheFaclity(void);}
+
diff --git a/packages/imagemagick/src/imagemagick.pas b/packages/imagemagick/src/imagemagick.pas
index f44d2b3cc0..2446da2091 100644
--- a/packages/imagemagick/src/imagemagick.pas
+++ b/packages/imagemagick/src/imagemagick.pas
@@ -14,7 +14,8 @@
limitations under the License.
ImageMagick Application Programming Interface declarations.
-
+}
+{
Converted from c by: Felipe Monteiro de Carvalho Dez/2005
Bug-fixed by Ángel Eduardo García Hernández
@@ -34,10 +35,18 @@ uses SysUtils, ctypes;
{$PACKENUM 4}
+// Fix to compile in older FPC versions
+{$ifdef VER2_2}
+type
+ Pcsize_t = ^size_t;
+{$endif}
+
const
{$ifdef Win32}
+ MagickExport = 'CORE_RL_magick_.dll';
WandExport = 'CORE_RL_wand_.dll';
{$else}
+ MagickExport = 'libMagickCore';
WandExport = 'libWand';
{$endif}
@@ -50,7 +59,7 @@ const
{#$include annotate.inc}
{#$include attribute.inc}
{#$include blob.inc}
-{#$include cache.inc}
+{$include cache.inc}
{$include cache_view.inc}
{#include "magick/coder.h"
#include "magick/client.h"
diff --git a/packages/imagemagick/src/magick_wand.pas b/packages/imagemagick/src/magick_wand.pas
index bd246dbcd4..0cd7bbe742 100644
--- a/packages/imagemagick/src/magick_wand.pas
+++ b/packages/imagemagick/src/magick_wand.pas
@@ -14,7 +14,10 @@
limitations under the License.
ImageMagick MagickWand API.
-
+}
+{
+ Based on ImageMagick 6.2
+
Converted from c by: Felipe Monteiro de Carvalho Dez/2005
Bug-fixed by Ángel Eduardo García Hernández
diff --git a/packages/imagemagick/src/pixel.inc b/packages/imagemagick/src/pixel.inc
index e0138f7399..bf8ab9999c 100644
--- a/packages/imagemagick/src/pixel.inc
+++ b/packages/imagemagick/src/pixel.inc
@@ -54,6 +54,8 @@ type
type
MagickPixelPacket = record
+ storage_class: ClassType; // Added after 6.2
+
colorspace: ColorspaceType;
matte: MagickBooleanType;
diff --git a/packages/imagemagick/src/pixel_wand.inc b/packages/imagemagick/src/pixel_wand.inc
index d650ea7742..3f0194be11 100644
--- a/packages/imagemagick/src/pixel_wand.inc
+++ b/packages/imagemagick/src/pixel_wand.inc
@@ -82,7 +82,7 @@ function PixelGetYellowQuantum(const wand: PPixelWand): Quantum; cdecl; external
function PixelGetColorCount(const wand: PPixelWand): culong; cdecl; external WandExport;
procedure ClearPixelWand(wand: PPixelWand); cdecl; external WandExport;
-procedure PixelGetMagickColor(const wand: PPixelWand; packet: PMagickPixelPacket); cdecl; external WandExport;
+// PixelGetHSL(const PixelWand *,double *,double *,double *), // Added after 6.2
procedure PixelGetQuantumColor(const wand: PPixelWand; color: PPixelPacket); cdecl; external WandExport;
procedure PixelSetAlpha(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetAlphaQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
@@ -90,14 +90,18 @@ procedure PixelSetBlack(wand: PPixelWand; const opacity: Double); cdecl; externa
procedure PixelSetBlackQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
procedure PixelSetBlue(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetBlueQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
+// PixelSetColorFromWand(PixelWand *,const PixelWand *), // Added after 6.2
procedure PixelSetColorCount(wand: PPixelWand; const count: culong); cdecl; external WandExport;
procedure PixelSetCyan(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetCyanQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
+// PixelSetFuzz(PixelWand *,const double), // Added after 6.2
procedure PixelSetGreen(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetGreenQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
+// PixelSetHSL(PixelWand *,const double,const double,const double), // Added after 6.2
procedure PixelSetIndex(wand: PPixelWand; const index: IndexPacket); cdecl; external WandExport;
procedure PixelSetMagenta(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetMagentaQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
+procedure PixelSetMagickColor(wand: PPixelWand; const color: PMagickPixelPacket); cdecl; external WandExport; // Added after 6.2
procedure PixelSetOpacity(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetOpacityQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
procedure PixelSetQuantumColor(wand: PPixelWand; const color: PPixelPacket); cdecl; external WandExport;
@@ -106,4 +110,6 @@ procedure PixelSetRedQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; e
procedure PixelSetYellow(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
procedure PixelSetYellowQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
+// Considered a private method in newer versions (after 6.2)
+procedure PixelGetMagickColor(const wand: PPixelWand; packet: PMagickPixelPacket); cdecl; external WandExport;
diff --git a/packages/libxml/src/parser.inc b/packages/libxml/src/parser.inc
index 429ed99aa7..f872a86c6d 100644
--- a/packages/libxml/src/parser.inc
+++ b/packages/libxml/src/parser.inc
@@ -954,7 +954,7 @@ function xmlReadDoc(cur: xmlCharPtr; URL, encoding: pchar; options: cint): xmlDo
function xmlReadFile(filename, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
function xmlReadMemory(buffer: pchar; size: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
function xmlReadFd(fd: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
-function xmlReadIO(ioread: xmlInputReadCallback; ioclose: xmlInputCloseCallback; ioctx: pchar; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
+function xmlReadIO(ioread: xmlInputReadCallback; ioclose: xmlInputCloseCallback; ioctx: pointer; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
function xmlCtxtReadDoc(ctxt: xmlParserCtxtPtr; cur: xmlCharPtr; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
function xmlCtxtReadFile(ctxt: xmlParserCtxtPtr; filename, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
function xmlCtxtReadMemory(ctxt: xmlParserCtxtPtr; buffer: pchar; size: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib;
diff --git a/packages/libxml/src/xmlxsd.pas b/packages/libxml/src/xmlxsd.pas
index 6be8fcd7bc..3b9dff45e4 100644
--- a/packages/libxml/src/xmlxsd.pas
+++ b/packages/libxml/src/xmlxsd.pas
@@ -363,7 +363,9 @@ begin
tzUser:
begin
if Timezone^.Hour >= 0 then
- Result := Result + '+';
+ Result := Result + '+'
+ else
+ Result := Result + '-';
Result := Result + Format('%2.2d:%2.2u', [Timezone^.Hour, Timezone^.Minute]);
end;
end;
@@ -390,7 +392,9 @@ begin
tzUser:
begin
if Timezone^.Hour >= 0 then
- Result := Result + '+';
+ Result := Result + '+'
+ else
+ Result := Result + '-';
Result := Result + Format('%2.2d:%2.2u', [Timezone^.Hour, Timezone^.Minute]);
end;
end;
diff --git a/packages/mysql/src/mysql.inc b/packages/mysql/src/mysql.inc
index 36cb161f57..43cb9b7fc3 100644
--- a/packages/mysql/src/mysql.inc
+++ b/packages/mysql/src/mysql.inc
@@ -22,30 +22,25 @@
interface
uses
-{$IFDEF LinkDynamically}
- sysutils,
-{$ENDIF}
- dynlibs,ctypes;
+ dynlibs, ctypes;
-{$IFDEF Unix}
+{$IFDEF UNIX}
{$DEFINE extdecl:=cdecl}
const
mysqllib = 'libmysqlclient.'+sharedsuffix;
-
{$IF DEFINED(mysql50)}
- mysqlvlib = 'libmysqlclient.'+sharedsuffix+'.15';
+ mysqlvlib = mysqllib+'.15';
{$ELSEIF DEFINED(mysql41)}
- mysqlvlib = 'libmysqlclient.'+sharedsuffix+'.14';
+ mysqlvlib = mysqllib+'.14';
{$ELSE}
- mysqlvlib = 'libmysqlclient.'+sharedsuffix+'.12';
+ mysqlvlib = mysqllib+'.12';
{$ENDIF}
-
{$ENDIF}
-{$IFDEF Windows}
+{$IFDEF WINDOWS}
{$DEFINE extdecl:=stdcall}
const
mysqllib = 'libmysql.dll';
- mysqlvlib = 'libmysql.dll';
+ mysqlvlib = mysqllib;
{$ENDIF}
{$IFDEF mysql50}
@@ -55,17 +50,17 @@ uses
{$PACKRECORDS C}
{ Copyright (C) 2000-2003 MySQL AB
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA }
@@ -81,7 +76,7 @@ uses
Pmy_socket = ^my_socket;
my_socket = cint;
-
+
pppchar = ^ppchar;
PPByte = ^PByte;
@@ -402,7 +397,7 @@ uses
function net_new_transaction(net : st_net) : st_net;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function my_net_init(net:PNET; vio:PVio):my_bool;cdecl;external mysqllib name 'my_net_init';
procedure my_net_local_init(net:PNET);cdecl;external mysqllib name 'my_net_local_init';
procedure net_end(net:PNET);cdecl;external mysqllib name 'net_end';
@@ -423,7 +418,7 @@ uses
sockaddr = record
// undefined structure
end;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function my_connect(s:my_socket; name:Psockaddr; namelen:cuint; timeout:cuint):cint;cdecl;external mysqllib name 'my_connect';
{$ENDIF}
@@ -483,7 +478,7 @@ uses
{ These functions are used for authentication by client and server and
implemented in sql/password.c }
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
procedure randominit(_para1:Prand_struct; seed1:culong; seed2:culong);cdecl;external mysqllib name 'randominit';
function my_rnd(_para1:Prand_struct):cdouble;cdecl;external mysqllib name 'my_rnd';
procedure create_random_string(fto:Pchar; length:cuint; rand_st:Prand_struct);cdecl;external mysqllib name 'create_random_string';
@@ -523,7 +518,7 @@ uses
{$ENDIF}
{$ifdef _global_h}
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function net_field_length(packet:PPuchar):culong;extdecl;external mysqllib name 'net_field_length_ll';
function net_field_length_ll(packet:PPuchar):my_ulonglong;cdecl;external mysqllib name 'net_field_length_ll';
function net_store_length(pkg:Pchar; length:ulonglong):Pchar;cdecl;external mysqllib name 'net_store_length';
@@ -569,7 +564,7 @@ uses
{ $include "typelib.h"}
{ $include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */}
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
var
mysql_port : cuint;cvar;external;
mysql_unix_port : Pchar;cvar;external;
@@ -578,7 +573,7 @@ uses
const
CLIENT_NET_READ_TIMEOUT = 365*24*3600; // Timeout on read
CLIENT_NET_WRITE_TIMEOUT = 365*24*3600; // Timeout on write
-
+
{$ifdef NETWARE}
(** unsupported pragma#pragma pack(push, 8) /* 8 byte alignment */*)
{$endif}
@@ -709,7 +704,7 @@ uses
{$ENDIF}
{ $endif}
end;
-
+
MYSQL_DATA = st_mysql_data;
PMYSQL_DATA = ^MYSQL_DATA;
mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,
@@ -1026,7 +1021,7 @@ uses
{
Note: this info is from the mysql-5.0 version:
-
+
This structure is used to define bind information, and
internally by the client library.
Public members with their descriptions are listed below
@@ -1188,7 +1183,7 @@ uses
//#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
//#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ Set up and bring down the server; to ensure that applications will
work when linked against either the standard client library or the
embedded server library, these functions should be called. }
@@ -1286,7 +1281,7 @@ uses
mysql_use_result: function (mysql:PMYSQL):PMYSQL_RES;extdecl;
{$ENDIF}
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ perform query on master }
function mysql_master_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_master_query';
function mysql_master_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_master_send_query';
@@ -1304,7 +1299,7 @@ uses
const
LOCAL_INFILE_ERROR_LEN = 512;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{ procedure mysql_set_local_infile_handler(mysql:PMYSQL; local_infile_init:function (_para1:Ppointer; _para2:Pchar; _para3:pointer):longint; local_infile_read:function (_para1:pointer; _para2:Pchar; _para3:dword):longint; local_infile_end:procedure (_pa
_para6:pointer);cdecl;external mysqllib name 'mysql_set_local_infile_handler';}
procedure mysql_set_local_infile_default(mysql:PMYSQL);cdecl;external mysqllib name 'mysql_set_local_infile_default';
@@ -1488,7 +1483,7 @@ uses
function mysql_reload(mysql : PMySQL) : cint;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
{$ifdef USE_OLD_FUNCTIONS}
function mysql_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar):PMYSQL;extdecl;external External_library name 'mysql_connect';
function mysql_create_db(mysql:PMYSQL; DB:Pchar):cint;extdecl;external External_library name 'mysql_create_db';
@@ -1497,12 +1492,12 @@ uses
{$endif}
{$endif}
-{$define HAVE_MYSQL_REAL_CONNECT}
+{$define HAVE_MYSQL_REAL_CONNECT}
{ The following functions are mainly exported because of mysqlbinlog;
They are not for general usage }
function simple_command(mysql,command,arg,length,skip_check : cint) : cint;
-{$IFNDEF LinkDynamically}
+{$IFNDEF LOAD_DYNAMICALLY}
function net_safe_read(mysql:PMYSQL):cuint;cdecl;external mysqllib name 'net_safe_read';
{$ENDIF}
@@ -1510,245 +1505,249 @@ uses
(** unsupported pragma#pragma pack(pop) /* restore alignment */*)
{$endif}
-{$IFDEF LinkDynamically}
-Function InitialiseMysql(Const LibraryName : String; argc:cint = -1; argv:PPchar = nil; groups:PPchar = nil) : Integer;
-Function InitialiseMysql(argc:cint = -1; argv:PPchar = nil; groups:PPchar = nil) : Integer;
-Procedure ReleaseMysql;
+{$IFDEF LOAD_DYNAMICALLY}
+function InitializeMysql(const LibraryName: String = ''; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
+function TryInitializeMysql(const LibraryName: string = ''; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
+function ReleaseMysql: Integer;
-var MysqlLibraryHandle : TLibHandle;
+var
+ MysqlLibrary: TLibHandler;
+
+function InitialiseMysql(argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
+function InitialiseMysql(const LibraryName: String; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
+function TryInitialiseMysql(const LibraryName: string; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
{$ENDIF}
implementation
-{$IFDEF LinkDynamically}
-
-ResourceString
- SErrAlreadyLoaded = 'MySQL interface already initialized from library %s.';
- SErrLoadFailed = 'Can not load MySQL library "%s". Please check your installation.';
- SErrDefaultsFailed = 'Can not load default MySQL library ("%s" or "%s"). Check your installation.';
-var
- RefCount : integer;
- LoadedLibrary : String;
-
-Function TryInitialiseMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar) : Integer;
+function net_new_transaction(net : st_net) : st_net;
+begin
+ net.pkt_nr := 0;
+ result := net;
+end;
+function IS_PRI_KEY(n : longint) : boolean;
begin
- Result := 0;
- if (RefCount=0) then
- begin
- MysqlLibraryHandle := loadlibrary(LibraryName);
- if (MysqlLibraryHandle=nilhandle) then
- Exit;
- Inc(RefCount);
- LoadedLibrary:=LibraryName;
-// Only the procedure that are given in the c-library documentation are loaded, to
-// avoid problems with 'incomplete' libraries
- pointer(my_init) := GetProcedureAddress(MysqlLibraryHandle,'my_init');
- pointer(my_thread_init) := GetProcedureAddress(MysqlLibraryHandle,'my_thread_init');
- pointer(my_thread_end) := GetProcedureAddress(MysqlLibraryHandle,'my_thread_end');
-
- pointer(mysql_affected_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_affected_rows');
- pointer(mysql_autocommit) := GetProcedureAddress(MysqlLibraryHandle,'mysql_autocommit');
- pointer(mysql_change_user) := GetProcedureAddress(MysqlLibraryHandle,'mysql_change_user');
-// pointer(mysql_charset_name) := GetProcedureAddress(MysqlLibraryHandle,'mysql_charset_name');
- pointer(mysql_close) := GetProcedureAddress(MysqlLibraryHandle,'mysql_close');
- pointer(mysql_commit) := GetProcedureAddress(MysqlLibraryHandle,'mysql_commit');
-// pointer(mysql_connect) := GetProcedureAddress(MysqlLibraryHandle,'mysql_connect');
-// pointer(mysql_create_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_create_db');
- pointer(mysql_data_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_data_seek');
-// pointer(mysql_drop_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_drop_db');
- pointer(mysql_debug) := GetProcedureAddress(MysqlLibraryHandle,'mysql_debug');
- pointer(mysql_dump_debug_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_dump_debug_info');
- pointer(mysql_eof) := GetProcedureAddress(MysqlLibraryHandle,'mysql_eof');
- pointer(mysql_errno) := GetProcedureAddress(MysqlLibraryHandle,'mysql_errno');
- pointer(mysql_error) := GetProcedureAddress(MysqlLibraryHandle,'mysql_error');
- pointer(mysql_escape_string) := GetProcedureAddress(MysqlLibraryHandle,'mysql_escape_string');
- pointer(mysql_fetch_field) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_field');
- pointer(mysql_fetch_field_direct) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_field_direct');
- pointer(mysql_fetch_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_fields');
- pointer(mysql_fetch_lengths) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_lengths');
- pointer(mysql_fetch_row) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_row');
- pointer(mysql_field_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_seek');
- pointer(mysql_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_count');
- pointer(mysql_field_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_tell');
- pointer(mysql_free_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_free_result');
- pointer(mysql_get_client_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_client_info');
- pointer(mysql_get_client_version) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_client_version');
- pointer(mysql_get_host_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_host_info');
- pointer(mysql_get_server_version) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_server_version');
- pointer(mysql_get_proto_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_proto_info');
- pointer(mysql_get_server_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_server_info');
- pointer(mysql_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_info');
- pointer(mysql_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_init');
- pointer(mysql_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_insert_id');
- pointer(mysql_kill) := GetProcedureAddress(MysqlLibraryHandle,'mysql_kill');
- pointer(mysql_library_end) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_end');
- pointer(mysql_library_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_init');
- pointer(mysql_list_dbs) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_dbs');
- pointer(mysql_list_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_fields');
- pointer(mysql_list_processes) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_processes');
- pointer(mysql_list_tables) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_tables');
- pointer(mysql_more_results) := GetProcedureAddress(MysqlLibraryHandle,'mysql_more_results');
- pointer(mysql_next_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_next_result');
- pointer(mysql_num_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_num_fields');
- pointer(mysql_num_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_num_rows');
- pointer(mysql_options) := GetProcedureAddress(MysqlLibraryHandle,'mysql_options');
- pointer(mysql_ping) := GetProcedureAddress(MysqlLibraryHandle,'mysql_ping');
- pointer(mysql_query) := GetProcedureAddress(MysqlLibraryHandle,'mysql_query');
- pointer(mysql_real_connect) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_connect');
- pointer(mysql_real_escape_string) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_escape_string');
- pointer(mysql_real_query) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_query');
- pointer(mysql_refresh) := GetProcedureAddress(MysqlLibraryHandle,'mysql_refresh');
-// pointer(mysql_reload) := GetProcedureAddress(MysqlLibraryHandle,'mysql_reload');
- pointer(mysql_rollback) := GetProcedureAddress(MysqlLibraryHandle,'mysql_rollback');
- pointer(mysql_row_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_row_seek');
- pointer(mysql_row_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_row_tell');
- pointer(mysql_select_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_select_db');
- pointer(mysql_server_end) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_end');
- pointer(mysql_server_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_init');
- pointer(mysql_set_server_option) := GetProcedureAddress(MysqlLibraryHandle,'mysql_set_server_option');
- pointer(mysql_sqlstate) := GetProcedureAddress(MysqlLibraryHandle,'mysql_sqlstate');
- pointer(mysql_shutdown) := GetProcedureAddress(MysqlLibraryHandle,'mysql_shutdown');
- pointer(mysql_stat) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stat');
- pointer(mysql_store_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_store_result');
- pointer(mysql_thread_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_thread_id');
-// pointer(mysql_thread_save) := GetProcedureAddress(MysqlLibraryHandle,'mysql_thread_save');
- pointer(mysql_use_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_use_result');
- pointer(mysql_warning_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_warning_count');
- pointer(mysql_stmt_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_init');
- pointer(mysql_stmt_prepare) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_prepare');
- pointer(mysql_stmt_execute) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_execute');
- pointer(mysql_stmt_fetch) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_fetch');
- pointer(mysql_stmt_fetch_column) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_fetch_column');
- pointer(mysql_stmt_store_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_store_result');
- pointer(mysql_stmt_param_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_param_count');
- pointer(mysql_stmt_attr_set) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_attr_set');
- pointer(mysql_stmt_attr_get) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_attr_get');
- pointer(mysql_stmt_bind_param) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_bind_param');
- pointer(mysql_stmt_bind_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_bind_result');
- pointer(mysql_stmt_close) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_close');
- pointer(mysql_stmt_reset) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_reset');
- pointer(mysql_stmt_free_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_free_result');
- pointer(mysql_stmt_send_long_data) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_send_long_data');
- pointer(mysql_stmt_result_metadata) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_result_metadata');
- pointer(mysql_stmt_param_metadata) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_param_metadata');
- pointer(mysql_stmt_errno) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_errno');
- pointer(mysql_stmt_error) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_error');
- pointer(mysql_stmt_sqlstate) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_sqlstate');
- pointer(mysql_stmt_row_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_row_seek');
- pointer(mysql_stmt_row_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_row_tell');
- pointer(mysql_stmt_data_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_data_seek');
- pointer(mysql_stmt_num_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_num_rows');
- pointer(mysql_stmt_affected_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_affected_rows');
- pointer(mysql_stmt_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_insert_id');
- pointer(mysql_stmt_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_field_count');
-
- if mysql_library_init(argc, argv, groups) <> 0 then
- Exit;
- end
- else
- inc(RefCount);
+ IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
+end;
- Result:=RefCount;
+function IS_NOT_NULL(n : longint) : boolean;
+begin
+ IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
end;
-Function InitialiseMysql(argc: cint; argv: PPchar; groups: PPchar) : Integer;
+function IS_BLOB(n : longint) : boolean;
+begin
+ IS_BLOB:=(n and BLOB_FLAG)<>0;
+end;
+function IS_NUM_FIELD(f : pst_mysql_field) : boolean;
begin
- Result := 0;
- If (TryInitialiseMysql(mysqlvlib,argc,argv,groups) = 0) and
- (TryInitialiseMysql(mysqllib,argc,argv,groups) = 0) then
- Raise EInOutError.CreateFmt(SErrDefaultsFailed,[mysqlvlib,mysqllib]);
- Result := RefCount;
+ IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
end;
-Function InitialiseMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups:PPchar) : Integer;
+function IS_NUM(t : enum_field_types) : boolean;
+begin
+{$IFDEF mysql50}
+ IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR) or (t=FIELD_TYPE_NEWDECIMAL);
+{$ELSE}
+ IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR);
+{$ENDIF}
+end;
+function INTERNAL_NUM_FIELD(f : Pst_mysql_field) : boolean;
begin
- Result := TryInitialiseMysql(LibraryName,argc,argv,groups);
- If Result = 0 then
- Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName])
- else If (LibraryName<>LoadedLibrary) then
- begin
- Dec(RefCount);
- Result := RefCount;
- Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
- end;
+ INTERNAL_NUM_FIELD := (f^.ftype <= FIELD_TYPE_INT24) and ((f^.ftype <> FIELD_TYPE_TIMESTAMP)
+ or (f^.length = 14) or (f^.length=8)) or (f^.ftype=FIELD_TYPE_YEAR);
end;
-Procedure ReleaseMysql;
+function mysql_reload(mysql : PMySQL) : cint;
+begin
+ mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
+end;
+function simple_command(mysql,command,arg,length,skip_check : longint) : longint;
begin
- if RefCount> 1 then
- Dec(RefCount)
- else if RefCount = 1 then
- begin
- mysql_library_end;
- if UnloadLibrary(MysqlLibraryHandle) then
- begin
- Dec(RefCount);
- MysqlLibraryHandle := NilHandle;
- LoadedLibrary:='';
- end
- end
+ //simple_command:=mysql^.(methods^.advanced_command)(mysqlcommandNullS0arglengthskip_check);
+ result := -1;
end;
-{$ENDIF}
- function net_new_transaction(net : st_net) : st_net;
- begin
- net.pkt_nr := 0;
- result := net;
- end;
- function IS_PRI_KEY(n : longint) : boolean;
- begin
- IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
- end;
+{$IFDEF LOAD_DYNAMICALLY}
+const
+ mysql_symbols: array[0..91] of TLibSymbol = (
+ // Only the procedure that are given in the c-library documentation are loaded, to
+ // avoid problems with 'incomplete' libraries
+ (pvar:@my_init; name:'my_init'; weak:false),
+ (pvar:@my_thread_init; name:'my_thread_init'; weak:true),
+ (pvar:@my_thread_end; name:'my_thread_end'; weak:true),
+
+ (pvar:@mysql_affected_rows; name:'mysql_affected_rows'; weak:false),
+ (pvar:@mysql_autocommit; name:'mysql_autocommit'; weak:false),
+ (pvar:@mysql_change_user; name:'mysql_change_user'; weak:false),
+ // (pvar:@mysql_charset_name; name:'mysql_charset_name'; weak:false),
+ (pvar:@mysql_close; name:'mysql_close'; weak:false),
+ (pvar:@mysql_commit; name:'mysql_commit'; weak:false),
+ // (pvar:@mysql_connect; name:'mysql_connect'; weak:false),
+ // (pvar:@mysql_create_db; name:'mysql_create_db'; weak:false),
+ (pvar:@mysql_data_seek; name:'mysql_data_seek'; weak:false),
+ // (pvar:@mysql_drop_db; name:'mysql_drop_db'; weak:false),
+ (pvar:@mysql_debug; name:'mysql_debug'; weak:false),
+ (pvar:@mysql_dump_debug_info; name:'mysql_dump_debug_info'; weak:false),
+ (pvar:@mysql_eof; name:'mysql_eof'; weak:false),
+ (pvar:@mysql_errno; name:'mysql_errno'; weak:false),
+ (pvar:@mysql_error; name:'mysql_error'; weak:false),
+ (pvar:@mysql_escape_string; name:'mysql_escape_string'; weak:false),
+ (pvar:@mysql_fetch_field; name:'mysql_fetch_field'; weak:false),
+ (pvar:@mysql_fetch_field_direct; name:'mysql_fetch_field_direct'; weak:false),
+ (pvar:@mysql_fetch_fields; name:'mysql_fetch_fields'; weak:false),
+ (pvar:@mysql_fetch_lengths; name:'mysql_fetch_lengths'; weak:false),
+ (pvar:@mysql_fetch_row; name:'mysql_fetch_row'; weak:false),
+ (pvar:@mysql_field_seek; name:'mysql_field_seek'; weak:false),
+ (pvar:@mysql_field_count; name:'mysql_field_count'; weak:false),
+ (pvar:@mysql_field_tell; name:'mysql_field_tell'; weak:false),
+ (pvar:@mysql_free_result; name:'mysql_free_result'; weak:false),
+ (pvar:@mysql_get_client_info; name:'mysql_get_client_info'; weak:false),
+ (pvar:@mysql_get_client_version; name:'mysql_get_client_version'; weak:false),
+ (pvar:@mysql_get_host_info; name:'mysql_get_host_info'; weak:false),
+ (pvar:@mysql_get_server_version; name:'mysql_get_server_version'; weak:false),
+ (pvar:@mysql_get_proto_info; name:'mysql_get_proto_info'; weak:false),
+ (pvar:@mysql_get_server_info; name:'mysql_get_server_info'; weak:false),
+ (pvar:@mysql_info; name:'mysql_info'; weak:false),
+ (pvar:@mysql_init; name:'mysql_init'; weak:false),
+ (pvar:@mysql_insert_id; name:'mysql_insert_id'; weak:false),
+ (pvar:@mysql_kill; name:'mysql_kill'; weak:false),
+ (pvar:@mysql_library_end; name:'mysql_server_end'; weak:false),
+ (pvar:@mysql_library_init; name:'mysql_server_init'; weak:false),
+ (pvar:@mysql_list_dbs; name:'mysql_list_dbs'; weak:false),
+ (pvar:@mysql_list_fields; name:'mysql_list_fields'; weak:false),
+ (pvar:@mysql_list_processes; name:'mysql_list_processes'; weak:false),
+ (pvar:@mysql_list_tables; name:'mysql_list_tables'; weak:false),
+ (pvar:@mysql_more_results; name:'mysql_more_results'; weak:false),
+ (pvar:@mysql_next_result; name:'mysql_next_result'; weak:false),
+ (pvar:@mysql_num_fields; name:'mysql_num_fields'; weak:false),
+ (pvar:@mysql_num_rows; name:'mysql_num_rows'; weak:false),
+ (pvar:@mysql_options; name:'mysql_options'; weak:false),
+ (pvar:@mysql_ping; name:'mysql_ping'; weak:false),
+ (pvar:@mysql_query; name:'mysql_query'; weak:false),
+ (pvar:@mysql_real_connect; name:'mysql_real_connect'; weak:false),
+ (pvar:@mysql_real_escape_string; name:'mysql_real_escape_string'; weak:false),
+ (pvar:@mysql_real_query; name:'mysql_real_query'; weak:false),
+ (pvar:@mysql_refresh; name:'mysql_refresh'; weak:false),
+ // (pvar:@mysql_reload; name:'mysql_reload'; weak:false),
+ (pvar:@mysql_rollback; name:'mysql_rollback'; weak:false),
+ (pvar:@mysql_row_seek; name:'mysql_row_seek'; weak:false),
+ (pvar:@mysql_row_tell; name:'mysql_row_tell'; weak:false),
+ (pvar:@mysql_select_db; name:'mysql_select_db'; weak:false),
+ (pvar:@mysql_server_end; name:'mysql_server_end'; weak:false),
+ (pvar:@mysql_server_init; name:'mysql_server_init'; weak:false),
+ (pvar:@mysql_set_server_option; name:'mysql_set_server_option'; weak:false),
+ (pvar:@mysql_sqlstate; name:'mysql_sqlstate'; weak:false),
+ (pvar:@mysql_shutdown; name:'mysql_shutdown'; weak:false),
+ (pvar:@mysql_stat; name:'mysql_stat'; weak:false),
+ (pvar:@mysql_store_result; name:'mysql_store_result'; weak:false),
+ (pvar:@mysql_thread_id; name:'mysql_thread_id'; weak:false),
+ // (pvar:@mysql_thread_save; name:'mysql_thread_save'; weak:false),
+ (pvar:@mysql_use_result; name:'mysql_use_result'; weak:false),
+ (pvar:@mysql_warning_count; name:'mysql_warning_count'; weak:false),
+ (pvar:@mysql_stmt_init; name:'mysql_stmt_init'; weak:false),
+ (pvar:@mysql_stmt_prepare; name:'mysql_stmt_prepare'; weak:false),
+ (pvar:@mysql_stmt_execute; name:'mysql_stmt_execute'; weak:false),
+ (pvar:@mysql_stmt_fetch; name:'mysql_stmt_fetch'; weak:false),
+ (pvar:@mysql_stmt_fetch_column; name:'mysql_stmt_fetch_column'; weak:false),
+ (pvar:@mysql_stmt_store_result; name:'mysql_stmt_store_result'; weak:false),
+ (pvar:@mysql_stmt_param_count; name:'mysql_stmt_param_count'; weak:false),
+ (pvar:@mysql_stmt_attr_set; name:'mysql_stmt_attr_set'; weak:false),
+ (pvar:@mysql_stmt_attr_get; name:'mysql_stmt_attr_get'; weak:false),
+ (pvar:@mysql_stmt_bind_param; name:'mysql_stmt_bind_param'; weak:false),
+ (pvar:@mysql_stmt_bind_result; name:'mysql_stmt_bind_result'; weak:false),
+ (pvar:@mysql_stmt_close; name:'mysql_stmt_close'; weak:false),
+ (pvar:@mysql_stmt_reset; name:'mysql_stmt_reset'; weak:false),
+ (pvar:@mysql_stmt_free_result; name:'mysql_stmt_free_result'; weak:false),
+ (pvar:@mysql_stmt_send_long_data; name:'mysql_stmt_send_long_data'; weak:false),
+ (pvar:@mysql_stmt_result_metadata; name:'mysql_stmt_result_metadata'; weak:false),
+ (pvar:@mysql_stmt_param_metadata; name:'mysql_stmt_param_metadata'; weak:false),
+ (pvar:@mysql_stmt_errno; name:'mysql_stmt_errno'; weak:false),
+ (pvar:@mysql_stmt_error; name:'mysql_stmt_error'; weak:false),
+ (pvar:@mysql_stmt_sqlstate; name:'mysql_stmt_sqlstate'; weak:false),
+ (pvar:@mysql_stmt_row_seek; name:'mysql_stmt_row_seek'; weak:false),
+ (pvar:@mysql_stmt_row_tell; name:'mysql_stmt_row_tell'; weak:false),
+ (pvar:@mysql_stmt_data_seek; name:'mysql_stmt_data_seek'; weak:false),
+ (pvar:@mysql_stmt_num_rows; name:'mysql_stmt_num_rows'; weak:false),
+ (pvar:@mysql_stmt_affected_rows; name:'mysql_stmt_affected_rows'; weak:false),
+ (pvar:@mysql_stmt_insert_id; name:'mysql_stmt_insert_id'; weak:false),
+ (pvar:@mysql_stmt_field_count; name:'mysql_stmt_field_count'; weak:false)
+ );
+
+type
+ PMysqlArgs = ^TMysqlArgs;
+ TMysqlArgs = record
+ argc: cint;
+ argv: PPchar;
+ groups: PPchar;
+ end;
+
+function mysql_initialize(User: Pointer; Handler: PLibHandler): Boolean;
+var
+ args: PMysqlArgs absolute User;
+begin
+ if Assigned(args) then
+ Result := mysql_library_init(args^.argc, args^.argv, args^.groups) = 0
+ else
+ Result := mysql_library_init(0, nil, nil) = 0;
- function IS_NOT_NULL(n : longint) : boolean;
- begin
- IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
- end;
+ if not Result then
+ AppendLibraryError(Handler^, 'mysql_library_init failed');
+end;
- function IS_BLOB(n : longint) : boolean;
- begin
- IS_BLOB:=(n and BLOB_FLAG)<>0;
- end;
+procedure mysql_finalize(Handler: PLibHandler);
+begin
+ mysql_library_end();
+end;
- function IS_NUM_FIELD(f : pst_mysql_field) : boolean;
- begin
- IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
- end;
+function TryInitializeMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
+var
+ args: TMysqlArgs;
+begin
+ args.argc := argc;
+ args.argv := argv;
+ args.groups := groups;
+ Result := TryInitializeLibrary(MysqlLibrary, LibraryName, @args);
+end;
- function IS_NUM(t : enum_field_types) : boolean;
- begin
-{$IFDEF mysql50}
- IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR) or (t=FIELD_TYPE_NEWDECIMAL);
-{$ELSE}
- IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR);
-{$ENDIF}
- end;
+function InitializeMysql(const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
+var
+ args: TMysqlArgs;
+begin
+ args.argc := argc;
+ args.argv := argv;
+ args.groups := groups;
+ Result := InitializeLibrary(MysqlLibrary, LibraryName, @args);
+end;
- function INTERNAL_NUM_FIELD(f : Pst_mysql_field) : boolean;
- begin
- INTERNAL_NUM_FIELD := (f^.ftype <= FIELD_TYPE_INT24) and ((f^.ftype <> FIELD_TYPE_TIMESTAMP)
- or (f^.length = 14) or (f^.length=8)) or (f^.ftype=FIELD_TYPE_YEAR);
- end;
+function ReleaseMysql: Integer;
+begin
+ Result := ReleaseLibrary(MysqlLibrary);
+end;
- function mysql_reload(mysql : PMySQL) : cint;
- begin
- mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
- end;
+function InitialiseMysql(argc: cint; argv: PPchar; groups: PPchar): Integer;
+begin
+ Result := InitializeMysql('', argc, argv, groups);
+end;
- function simple_command(mysql,command,arg,length,skip_check : longint) : longint;
- begin
- //simple_command:=mysql^.(methods^.advanced_command)(mysqlcommandNullS0arglengthskip_check);
- result := -1;
- end;
+function InitialiseMysql(const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
+begin
+ Result := InitializeMysql(LibraryName, argc, argv, groups);
+end;
+
+function TryInitialiseMysql(const LibraryName: string; argc: cint; argv: PPchar; groups: PPchar): Integer;
+begin
+ Result := TryInitializeMysql(LibraryName, argc, argv, groups);
+end;
-{$IFDEF LinkDynamically}
initialization
- Refcount := 0;
+ MysqlLibrary := LibraryHandler('mysql', [mysqllib,mysqlvlib], @mysql_symbols, Length(mysql_symbols), @mysql_initialize, @mysql_finalize);
{$ENDIF}
+
end.
diff --git a/packages/mysql/src/mysql40dyn.pp b/packages/mysql/src/mysql40dyn.pp
index b8c93f1aa6..0592588970 100644
--- a/packages/mysql/src/mysql40dyn.pp
+++ b/packages/mysql/src/mysql40dyn.pp
@@ -4,7 +4,7 @@
unit mysql40dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$UNDEF MYSQL41}
{$i mysql.inc}
diff --git a/packages/mysql/src/mysql41dyn.pp b/packages/mysql/src/mysql41dyn.pp
index 06362619b7..127de1c341 100644
--- a/packages/mysql/src/mysql41dyn.pp
+++ b/packages/mysql/src/mysql41dyn.pp
@@ -4,7 +4,7 @@
unit mysql41dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$DEFINE MYSQL41}
{$i mysql.inc}
diff --git a/packages/mysql/src/mysql50dyn.pp b/packages/mysql/src/mysql50dyn.pp
index 67719e52a6..5b0fcc8119 100644
--- a/packages/mysql/src/mysql50dyn.pp
+++ b/packages/mysql/src/mysql50dyn.pp
@@ -4,7 +4,7 @@
unit mysql50dyn;
-{$DEFINE LinkDynamically}
+{$DEFINE LOAD_DYNAMICALLY}
{$DEFINE MYSQL50}
{$i mysql.inc}
diff --git a/packages/objcrtl/fpmake.pp b/packages/objcrtl/fpmake.pp
index aeb797dd47..aeb797dd47 100755..100644
--- a/packages/objcrtl/fpmake.pp
+++ b/packages/objcrtl/fpmake.pp
diff --git a/packages/pasjpeg/src/jmemnobs.pas b/packages/pasjpeg/src/jmemnobs.pas
index 48ddacb892..22c3f0edf8 100644
--- a/packages/pasjpeg/src/jmemnobs.pas
+++ b/packages/pasjpeg/src/jmemnobs.pas
@@ -27,7 +27,7 @@ uses
NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type
size_t and will be a multiple of sizeof(align_type). }
-{$IFDEF WINDOWS}
+{$IFDEF CPU16}
const
MAX_ALLOC_CHUNK = long(32752);
{$ELSE}
diff --git a/packages/paszlib/src/gzio.pas b/packages/paszlib/src/gzio.pas
index 0551642e58..28f58ed363 100644
--- a/packages/paszlib/src/gzio.pas
+++ b/packages/paszlib/src/gzio.pas
@@ -133,7 +133,9 @@ var
{$IFNDEF NO_DEFLATE}
gzheader : array [0..9] of byte;
{$ENDIF}
-
+ doseek,
+ exists,
+ writing : boolean;
begin
if (path='') or (mode='') then begin
@@ -169,6 +171,7 @@ begin
case mode[i] of
'r' : s^.mode := 'r';
'w' : s^.mode := 'w';
+ 'a' : s^.mode := 'a';
'0'..'9' : level := Ord(mode[i])-Ord('0');
'f' : strategy := Z_FILTERED;
'h' : strategy := Z_HUFFMAN_ONLY;
@@ -180,7 +183,9 @@ begin
exit;
end;
- if (s^.mode='w') then begin
+ writing:=( s^.mode='a') or (s^.mode='w');
+
+ if writing then begin
{$IFDEF NO_DEFLATE}
err := Z_STREAM_ERROR;
{$ELSE}
@@ -217,25 +222,38 @@ begin
{$IFOPT I+} {$I-} {$define IOcheck} {$ENDIF}
Assign (s^.gzfile, path);
{$ifdef unix}
- if (fpstat(path,info)<0) and (s^.mode='w') then
- ReWrite (s^.gzfile,1)
- else
- Reset (s^.gzfile,1);
+ exists:=not (fpstat(path,info)<0);
{$else}
- GetFAttr(s^.gzfile, Attr);
- if (DosError <> 0) and (s^.mode='w') then
- ReWrite (s^.gzfile,1)
- else
- Reset (s^.gzfile,1);
+ GetFAttr(s^.gzfile, Attr);
+ exists:=(DosError= 0);
{$endif}
+
+ doseek:=false;
+ if ((s^.mode='a') and not exists) or (s^.mode='w') then
+ begin
+
+ ReWrite (s^.gzfile,1)
+ end
+ else
+ begin
+ Reset (s^.gzfile,1);
+ if s^.mode='a' then
+ doseek:=true; // seek AFTER I/O check.
+ end;
+
{$IFDEF IOCheck} {$I+} {$ENDIF}
if (IOResult <> 0) then begin
destroy(s);
gzopen := gzFile(nil);
exit;
end;
+ // append binary file.
+ if doseek then
+ seek(s^.gzfile,filesize(s^.gzfile));
- if (s^.mode = 'w') then begin { Write a very simple .gz header }
+ if s^.mode='a' then
+ s^.mode:='w'; // difference append<->write doesn't matter anymore
+ if writing then begin { Write a very simple .gz header }
{$IFNDEF NO_DEFLATE}
gzheader [0] := gz_magic [0];
gzheader [1] := gz_magic [1];
diff --git a/packages/postgres/src/postgres3dyn.pp b/packages/postgres/src/postgres3dyn.pp
index 7229c27487..b3db950ac8 100644
--- a/packages/postgres/src/postgres3dyn.pp
+++ b/packages/postgres/src/postgres3dyn.pp
@@ -212,6 +212,8 @@ var
Procedure InitialisePostgres3;
Procedure ReleasePostgres3;
+function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
+
var Postgres3LibraryHandle : TLibHandle;
implementation
diff --git a/packages/pxlib/examples/ppxview.pp b/packages/pxlib/examples/ppxview.pp
index 944a7e13e0..f7d577f32d 100644
--- a/packages/pxlib/examples/ppxview.pp
+++ b/packages/pxlib/examples/ppxview.pp
@@ -81,8 +81,12 @@ begin
pxfDate:
if PX_get_data_long(Doc,fbuf,flen,@longv)>0 then
begin
+ {$ifdef windows}
+ S:=DateToStr(Longv+1721425-2415019);
+ {$else}
PX_SdnToGregorian(longv+1721425,@Y,@M,@D);
S:=DateToStr(EncodeDate(Y,M,D));
+ {$endif}
end;
pxfShort:
if PX_get_data_short(Doc,fbuf, flen, @D)>0 then
diff --git a/packages/pxlib/src/pxlib.pp b/packages/pxlib/src/pxlib.pp
index 36d237370a..589148ef52 100644
--- a/packages/pxlib/src/pxlib.pp
+++ b/packages/pxlib/src/pxlib.pp
@@ -369,7 +369,9 @@ var
PX_put_data_byte : procedure(pxdoc:Ppxdoc_t; data:pcchar; len:cint; value:cchar);cdecl;
PX_put_data_bcd : procedure(pxdoc:Ppxdoc_t; data:pcchar; len:cint; value:pcchar);cdecl;
PX_put_data_blob : function(pxdoc:Ppxdoc_t; data:pcchar; len:cint; value:pcchar; valuelen:cint):cint;cdecl;
+{$ifndef windows}
PX_SdnToGregorian : procedure(sdn:clong; pYear:pcint; pMonth:pcint; pDay:pcint);cdecl;
+{$endif}
PX_GregorianToSdn : function(year:cint; month:cint; day:cint):clong;cdecl;
PX_make_time : function(pxdoc:Ppxdoc_t; hour:cint; minute:cint; second:cint):Ppxval_t;cdecl;
PX_make_date : function(pxdoc:Ppxdoc_t; year:cint; month:cint; day:cint):Ppxval_t;cdecl;
@@ -472,7 +474,9 @@ begin
PX_put_data_byte:=nil;
PX_put_data_bcd:=nil;
PX_put_data_blob:=nil;
+{$ifndef windows}
PX_SdnToGregorian:=nil;
+{$endif}
PX_GregorianToSdn:=nil;
PX_make_time:=nil;
PX_make_date:=nil;
@@ -563,7 +567,9 @@ begin
pointer(PX_put_data_byte):=GetProcAddress(hlib,'PX_put_data_byte');
pointer(PX_put_data_bcd):=GetProcAddress(hlib,'PX_put_data_bcd');
pointer(PX_put_data_blob):=GetProcAddress(hlib,'PX_put_data_blob');
+{$ifndef windows}
pointer(PX_SdnToGregorian):=GetProcAddress(hlib,'PX_SdnToGregorian');
+{$endif windows}
pointer(PX_GregorianToSdn):=GetProcAddress(hlib,'PX_GregorianToSdn');
pointer(PX_make_time):=GetProcAddress(hlib,'PX_make_time');
pointer(PX_make_date):=GetProcAddress(hlib,'PX_make_date');
diff --git a/packages/sqlite/src/sqlite3.inc b/packages/sqlite/src/sqlite3.inc
index b86decb9cd..a9ea556cf0 100644
--- a/packages/sqlite/src/sqlite3.inc
+++ b/packages/sqlite/src/sqlite3.inc
@@ -12,23 +12,20 @@
interface
uses
- ctypes,
-{$ifdef LOAD_DYNAMICALLY}
- SysUtils, DynLibs;
-{$else}
- DynLibs;
-
-{$ifdef darwin}
-{$linklib sqlite3}
-{$endif}
-{$endif}
+ ctypes, dynlibs;
+
+{$IFNDEF LOAD_DYNAMICALLY}
+ {$IFDEF darwin}
+ {$linklib sqlite3}
+ {$ENDIF}
+{$ENDIF}
const
{$IFDEF WINDOWS}
- Sqlite3Lib = 'sqlite3.dll';
-{$else}
- Sqlite3Lib = 'libsqlite3.'+sharedsuffix;
-{$endif}
+ sqlite3lib = 'sqlite3.dll';
+{$ELSE}
+ sqlite3lib = 'libsqlite3.'+sharedsuffix;
+{$ENDIF}
{$IFDEF LOAD_DYNAMICALLY}
{$DEFINE D}
@@ -58,7 +55,7 @@ type
**
** Some of the definitions that are in this file are marked as
** "experimental". Experimental interfaces are normally new
-** features recently added to SQLite. We do not anticipate changes
+** features recently added to SQLite. We do not anticipate changes
** to experimental interfaces but reserve to make minor changes if
** experience from use "in the wild" suggest such changes are prudent.
**
@@ -116,8 +113,8 @@ const
** These features provide the same information as the [SQLITE_VERSION]
** and [SQLITE_VERSION_NUMBER] #defines in the header, but are associated
** with the library instead of the header file. Cautious programmers might
-** include a check in their application to verify that
-** sqlite3_libversion_number() always returns the value
+** include a check in their application to verify that
+** sqlite3_libversion_number() always returns the value
** [SQLITE_VERSION_NUMBER].
**
** The sqlite3_libversion() function returns the same information as is
@@ -128,17 +125,17 @@ const
** INVARIANTS:
**
** {F10021} The [sqlite3_libversion_number()] interface returns an integer
-** equal to [SQLITE_VERSION_NUMBER].
+** equal to [SQLITE_VERSION_NUMBER].
**
** {F10022} The [sqlite3_version] string constant contains the text of the
-** [SQLITE_VERSION] string.
+** [SQLITE_VERSION] string.
**
** {F10023} The [sqlite3_libversion()] function returns
** a pointer to the [sqlite3_version] string constant.
*)
//SQLITE_EXTERN const char sqlite3_version[];
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_libversion{$IFDEF D}: function{$ENDIF}(): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_libversion_number{$IFDEF D}: function{$ENDIF}(): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_libversion{$IFDEF D}: function{$ENDIF}(): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_libversion_number{$IFDEF D}: function{$ENDIF}(): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
function sqlite3_version(): pchar;
(*
@@ -165,7 +162,7 @@ function sqlite3_version(): pchar;
** SQLite was compiled with its mutexes enabled or zero
** if SQLite was compiled with mutexes disabled.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_threadsafe{$IFDEF D}: function{$ENDIF}(): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_threadsafe{$IFDEF D}: function{$ENDIF}(): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Database Connection Handle {F12000}
@@ -185,7 +182,7 @@ type
psqlite3 = ^_sqlite3;
_sqlite3 = record end;
-
+
(*
** CAPI3REF: Constants Defining Special Destructor Behavior {F10280}
**
@@ -206,7 +203,7 @@ type
const
SQLITE_STATIC = sqlite3_destructor_type(nil);
SQLITE_TRANSIENT = pointer(-1);//sqlite3_destructor_type(-1);
-
+
(*
** CAPI3REF: 64-Bit Integer Types {F10200}
@@ -243,11 +240,11 @@ type
(*
** CAPI3REF: Closing A Database Connection {F12010}
**
-** This routine is the destructor for the [sqlite3] object.
+** This routine is the destructor for the [sqlite3] object.
**
** Applications should [sqlite3_finalize | finalize] all
** [prepared statements] and
-** [sqlite3_blob_close | close] all [sqlite3_blob | BLOBs]
+** [sqlite3_blob_close | close] all [sqlite3_blob | BLOBs]
** associated with the [sqlite3] object prior
** to attempting to close the [sqlite3] object.
**
@@ -273,13 +270,13 @@ type
** LIMITATIONS:
**
** {U12015} The parameter to [sqlite3_close()] must be an [sqlite3] object
-** pointer previously obtained from [sqlite3_open()] or the
+** pointer previously obtained from [sqlite3_open()] or the
** equivalent, or NULL.
**
** {U12016} The parameter to [sqlite3_close()] must not have been previously
** closed.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_close{$IFDEF D}: function{$ENDIF}(ref: psqlite3): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_close{$IFDEF D}: function{$ENDIF}(ref: psqlite3): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** The type for a callback function.
@@ -309,7 +306,7 @@ type
** The sqlite3_exec() is just a convenient wrapper.
**
** INVARIANTS:
-**
+**
** {F12101} The [sqlite3_exec()] interface evaluates zero or more UTF-8
** encoded, semicolon-separated, SQL statements in the
** zero-terminated string of its 2nd parameter within the
@@ -318,7 +315,7 @@ type
** {F12104} The return value of [sqlite3_exec()] is SQLITE_OK if all
** SQL statements run successfully.
**
-** {F12105} The return value of [sqlite3_exec()] is an appropriate
+** {F12105} The return value of [sqlite3_exec()] is an appropriate
** non-zero error code if any SQL statement fails.
**
** {F12107} If one or more of the SQL statements handed to [sqlite3_exec()]
@@ -339,7 +336,7 @@ type
** callback to be the number of columns in the current row of
** result.
**
-** {F12119} The [sqlite3_exec()] routine sets the 3rd parameter of its
+** {F12119} The [sqlite3_exec()] routine sets the 3rd parameter of its
** callback to be an array of pointers to strings holding the
** values for each column in the current result set row as
** obtained from [sqlite3_column_text()].
@@ -376,7 +373,7 @@ type
**
** {U12142} The database connection must not be closed while
** [sqlite3_exec()] is running.
-**
+**
** {U12143} The calling function is should use [sqlite3_free()] to free
** the memory that *errmsg is left pointing at once the error
** message is no longer needed.
@@ -390,7 +387,7 @@ type
cb: sqlite3_callback; (* Callback function *)
user: pointer; (* 1st argument to callback *)
errmsg: ppchar (* Error msg written here *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Result Codes {F10210}
@@ -448,7 +445,7 @@ const
** about errors. The extended result codes are enabled or disabled
** for each database connection using the [sqlite3_extended_result_codes()]
** API.
-**
+**
** Some of the available extended result codes are listed here.
** One may expect the number of extended result codes will be expand
** over time. Software that uses extended result codes should expect
@@ -456,7 +453,7 @@ const
**
** The SQLITE_OK result code will never be extended. It will always
** be exactly zero.
-**
+**
** INVARIANTS:
**
** {F10223} The symbolic name for an extended result code always contains
@@ -558,8 +555,8 @@ const
**
** When the SQLITE_SYNC_DATAONLY flag is used, it means that the
** sync operation only needs to flush data to mass storage. Inode
-** information need not be flushed. The SQLITE_SYNC_NORMAL flag means
-** to use normal fsync() semantics. The SQLITE_SYNC_FULL flag means
+** information need not be flushed. The SQLITE_SYNC_NORMAL flag means
+** to use normal fsync() semantics. The SQLITE_SYNC_FULL flag means
** to use Mac OS-X style fullsync instead of fsync().
*)
SQLITE_SYNC_NORMAL = $00002;
@@ -598,7 +595,7 @@ type
** OS-X style fullsync. The SQLITE_SYNC_DATA flag may be ORed in to
** indicate that only the data of the file and not its inode needs to be
** synced.
-**
+**
** The integer values to xLock() and xUnlock() are one of
** <ul>
** <li> [SQLITE_LOCK_NONE],
@@ -607,13 +604,13 @@ type
** <li> [SQLITE_LOCK_PENDING], or
** <li> [SQLITE_LOCK_EXCLUSIVE].
** </ul>
-** xLock() increases the lock. xUnlock() decreases the lock.
+** xLock() increases the lock. xUnlock() decreases the lock.
** The xCheckReservedLock() method looks
** to see if any database connection, either in this
** process or in some other process, is holding an RESERVED,
** PENDING, or EXCLUSIVE lock on the file. It returns true
** if such a lock exists and false if not.
-**
+**
** The xFileControl() method is a generic interface that allows custom
** VFS implementations to directly control an open file using the
** [sqlite3_file_control()] interface. The second "op" argument
@@ -624,9 +621,9 @@ type
** functions to enable blocking locks with timeouts, to change the
** locking strategy (for example to use dot-file locks), to inquire
** about the status of a lock, or to break stale locks. The SQLite
-** core reserves opcodes less than 100 for its own use.
+** core reserves opcodes less than 100 for its own use.
** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
-** Applications that define a custom xFileControl method should use opcodes
+** Applications that define a custom xFileControl method should use opcodes
** greater than 100 to avoid conflicts.
**
** The xSectorSize() method returns the sector size of the
@@ -732,7 +729,7 @@ type
** in a thread-safe way. The [sqlite3_vfs_find()] interface
** searches the list.
**
-** The pNext field is the only field in the sqlite3_vfs
+** The pNext field is the only field in the sqlite3_vfs
** structure that SQLite will ever modify. SQLite will only access
** or modify this field while holding a particular static mutex.
** The application should never modify anything within the sqlite3_vfs
@@ -754,10 +751,10 @@ type
** If xOpen() opens a file read-only then it sets *pOutFlags to
** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be
** set.
-**
+**
** {F11143} SQLite will also add one of the following flags to the xOpen()
** call, depending on the object being opened:
-**
+**
** <ul>
** <li> [SQLITE_OPEN_MAIN_DB]
** <li> [SQLITE_OPEN_MAIN_JOURNAL]
@@ -772,46 +769,46 @@ type
** changes the way it deals with files. For example, an application
** that does not care about crash recovery or rollback might make
** the open of a journal file a no-op. Writes to this journal would
-** also be no-ops, and any attempt to read the journal would return
-** SQLITE_IOERR. Or the implementation might recognize that a database
-** file will be doing page-aligned sector reads and writes in a random
+** also be no-ops, and any attempt to read the journal would return
+** SQLITE_IOERR. Or the implementation might recognize that a database
+** file will be doing page-aligned sector reads and writes in a random
** order and set up its I/O subsystem accordingly.
-**
+**
** SQLite might also add one of the following flags to the xOpen
** method:
-**
+**
** <ul>
** <li> [SQLITE_OPEN_DELETEONCLOSE]
** <li> [SQLITE_OPEN_EXCLUSIVE]
** </ul>
-**
+**
** {F11145} The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
** deleted when it is closed. {F11146} The [SQLITE_OPEN_DELETEONCLOSE]
-** will be set for TEMP databases, journals and for subjournals.
+** will be set for TEMP databases, journals and for subjournals.
** {F11147} The [SQLITE_OPEN_EXCLUSIVE] flag means the file should be opened
** for exclusive access. This flag is set for all files except
** for the main database file. {END}
-**
-** {F11148} At least szOsFile bytes of memory are allocated by SQLite
-** to hold the [sqlite3_file] structure passed as the third
+**
+** {F11148} At least szOsFile bytes of memory are allocated by SQLite
+** to hold the [sqlite3_file] structure passed as the third
** argument to xOpen. {END} The xOpen method does not have to
** allocate the structure; it should just fill it in.
-**
-** {F11149} The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
+**
+** {F11149} The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
** to test for the existance of a file,
** or [SQLITE_ACCESS_READWRITE] to test to see
** if a file is readable and writable, or [SQLITE_ACCESS_READ]
-** to test to see if a file is at least readable. {END} The file can be a
+** to test to see if a file is at least readable. {END} The file can be a
** directory.
-**
+**
** {F11150} SQLite will always allocate at least mxPathname+1 bytes for
** the output buffers for xGetTempname and xFullPathname. {F11151} The exact
-** size of the output buffer is also passed as a parameter to both
+** size of the output buffer is also passed as a parameter to both
** methods. {END} If the output buffer is not large enough, SQLITE_CANTOPEN
** should be returned. As this is handled as a fatal error by SQLite,
-** vfs implementations should endeavor to prevent this by setting
+** vfs implementations should endeavor to prevent this by setting
** mxPathname to a sufficiently large value.
-**
+**
** The xRandomness(), xSleep(), and xCurrentTime() interfaces
** are not strictly a part of the filesystem, but they are
** included in the VFS structure for completeness.
@@ -876,16 +873,16 @@ const
**
** INVARIANTS:
**
-** {F12201} Each new [database connection] has the
+** {F12201} Each new [database connection] has the
** [extended result codes] feature
** disabled by default.
**
** {F12202} The [sqlite3_extended_result_codes(D,F)] interface will enable
-** [extended result codes] for the
+** [extended result codes] for the
** [database connection] D if the F parameter
** is true, or disable them if F is false.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_extended_result_codes{$IFDEF D}: function{$ENDIF}(db: psqlite3; onoff: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_extended_result_codes{$IFDEF D}: function{$ENDIF}(db: psqlite3; onoff: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Last Insert Rowid {F12220}
@@ -912,11 +909,11 @@ const
** successful insert and does not change the value returned by this
** routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
** and INSERT OR ABORT make no changes to the return value of this
-** routine when their insertion fails. When INSERT OR REPLACE
+** routine when their insertion fails. When INSERT OR REPLACE
** encounters a constraint violation, it does not fail. The
** INSERT continues to completion after deleting rows that caused
** the constraint problem so INSERT OR REPLACE will always change
-** the return value of this interface.
+** the return value of this interface.
**
** For the purposes of this routine, an insert is considered to
** be successful even if it is subsequently rolled back.
@@ -942,7 +939,7 @@ const
** unpredictable and might not equal either the old or the new
** last insert rowid.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_last_insert_rowid{$IFDEF D}: function{$ENDIF}(db: psqlite3): sqlite3_int64; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_last_insert_rowid{$IFDEF D}: function{$ENDIF}(db: psqlite3): sqlite3_int64; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Count The Number Of Rows Modified {F12240}
@@ -1008,7 +1005,7 @@ const
** while [sqlite3_changes()] is running then the value returned
** is unpredictable and unmeaningful.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_changes{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_changes{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Total Number Of Rows Modified {F12260}
@@ -1020,8 +1017,8 @@ const
** implement REPLACE constraints, do rollbacks or ABORT processing,
** or DROP table processing.
** The changes
-** are counted as soon as the statement that makes them is completed
-** (when the statement handle is passed to [sqlite3_reset()] or
+** are counted as soon as the statement that makes them is completed
+** (when the statement handle is passed to [sqlite3_reset()] or
** [sqlite3_finalize()]).
**
** SQLite implements the command "DELETE FROM table" without
@@ -1036,7 +1033,7 @@ const
** See also the [sqlite3_changes()] interface.
**
** INVARIANTS:
-**
+**
** {F12261} The [sqlite3_total_changes()] returns the total number
** of row changes caused by INSERT, UPDATE, and/or DELETE
** statements on the same [database connection], in any
@@ -1046,10 +1043,10 @@ const
** LIMITATIONS:
**
** {U12264} If a separate thread makes changes on the same database connection
-** while [sqlite3_total_changes()] is running then the value
+** while [sqlite3_total_changes()] is running then the value
** returned is unpredictable and unmeaningful.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_total_changes{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_total_changes{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Interrupt A Long-Running Query {F12270}
@@ -1070,7 +1067,7 @@ const
** It might continue to completion.
** An SQL operation that is interrupted will return
** [SQLITE_INTERRUPT]. If the interrupted SQL operation is an
-** INSERT, UPDATE, or DELETE that is inside an explicit transaction,
+** INSERT, UPDATE, or DELETE that is inside an explicit transaction,
** then the entire transaction will be rolled back automatically.
** A call to sqlite3_interrupt() has no effect on SQL statements
** that are started after sqlite3_interrupt() returns.
@@ -1090,7 +1087,7 @@ const
** {U12279} If the database connection closes while [sqlite3_interrupt()]
** is running then bad things will likely happen.
*)
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_interrupt{$IFDEF D}: procedure{$ENDIF}(db: psqlite3); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_interrupt{$IFDEF D}: procedure{$ENDIF}(db: psqlite3); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Determine If An SQL Statement Is Complete {F10510}
@@ -1125,14 +1122,14 @@ const
** {U10513} The input to sqlite3_complete16() must be a zero-terminated
** UTF-16 string in native byte order.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_complete{$IFDEF D}: function{$ENDIF}(sql: pchar): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_complete16{$IFDEF D}: function{$ENDIF}(sql: pchar): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_complete{$IFDEF D}: function{$ENDIF}(sql: pchar): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_complete16{$IFDEF D}: function{$ENDIF}(sql: pchar): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors {F12310}
**
** This routine identifies a callback function that might be
-** invoked whenever an attempt is made to open a database table
+** invoked whenever an attempt is made to open a database table
** that another thread or process has locked.
** If the busy callback is NULL, then [SQLITE_BUSY]
** or [SQLITE_IOERR_BLOCKED]
@@ -1181,9 +1178,9 @@ const
** <a href="http://www.sqlite.org/cvstrac/wiki?p=CorruptionFollowingBusyError">
** CorruptionFollowingBusyError</a> wiki page for a discussion of why
** this is important.
-**
+**
** There can only be a single busy handler defined for each database
-** connection. Setting a new busy handler clears any previous one.
+** connection. Setting a new busy handler clears any previous one.
** Note that calling [sqlite3_busy_timeout()] will also set or clear
** the busy handler.
**
@@ -1217,14 +1214,14 @@ const
type
busyhandler_callback = function(user: pointer; cnt: cint): cint; cdecl;
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_busy_handler{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: busyhandler_callback; user: pointer): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_busy_handler{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: busyhandler_callback; user: pointer): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Set A Busy Timeout {F12340}
**
** This routine sets a [sqlite3_busy_handler | busy handler]
** that sleeps for a while when a
-** table is locked. The handler will sleep multiple times until
+** table is locked. The handler will sleep multiple times until
** at least "ms" milliseconds of sleeping have been done. {F12343} After
** "ms" milliseconds of sleeping, the handler returns 0 which
** causes [sqlite3_step()] to return [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED].
@@ -1233,7 +1230,7 @@ type
** turns off all busy handlers.
**
** There can only be a single busy handler for a particular database
-** connection. If another busy handler was defined
+** connection. If another busy handler was defined
** (using [sqlite3_busy_handler()]) prior to calling
** this routine, that other busy handler is cleared.
**
@@ -1253,7 +1250,7 @@ type
** lock clears or until the cumulative sleep time reported back
** by xSleep() exceeds N milliseconds.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_busy_timeout{$IFDEF D}: function{$ENDIF}(db: psqlite3; ms: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_busy_timeout{$IFDEF D}: function{$ENDIF}(db: psqlite3; ms: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Convenience Routines For Running Queries {F12370}
@@ -1268,8 +1265,8 @@ type
** and M be the number of columns.
**
** A result table is an array of pointers to zero-terminated
-** UTF-8 strings. There are (N+1)*M elements in the array.
-** The first M pointers point to zero-terminated strings that
+** UTF-8 strings. There are (N+1)*M elements in the array.
+** The first M pointers point to zero-terminated strings that
** contain the names of the columns.
** The remaining entries all point to query results. NULL
** values are give a NULL pointer. All other values are in
@@ -1311,11 +1308,11 @@ type
** string of its 2nd parameter. It returns a result table to the
** pointer given in its 3rd parameter.
**
-** After the calling function has finished using the result, it should
-** pass the pointer to the result table to sqlite3_free_table() in order to
-** release the memory that was malloc-ed. Because of the way the
+** After the calling function has finished using the result, it should
+** pass the pointer to the result table to sqlite3_free_table() in order to
+** release the memory that was malloc-ed. Because of the way the
** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
-** function must not try to call [sqlite3_free()] directly. Only
+** function must not try to call [sqlite3_free()] directly. Only
** [sqlite3_free_table()] is able to release the memory properly and safely.
**
** The sqlite3_get_table() interface is implemented as a wrapper around
@@ -1355,9 +1352,9 @@ type
nrow: pcint; (* Number of result rows written here *)
ncolumn: pcint; (* Number of result columns written here *)
errmsg: ppchar (* Error msg written here *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_free_table{$IFDEF D}: procedure{$ENDIF}(result: ppchar); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_free_table{$IFDEF D}: procedure{$ENDIF}(result: ppchar); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Formatted String Printing Functions {F17400}
@@ -1431,7 +1428,7 @@ type
** </pre></blockquote>
**
** This second example is an SQL syntax error. As a general rule you
-** should always use %q instead of %s when inserting text into a string
+** should always use %q instead of %s when inserting text into a string
** literal.
**
** The %Q option works like %q except it also adds single quotes around
@@ -1468,7 +1465,7 @@ type
** of 0 through N-1 (where N is the first parameter)
** regardless of the length of the string
** requested by the format specification.
-**
+**
*)
//char *sqlite3_mprintf(const char*,...);
//char *sqlite3_vmprintf(const char*, va_list);
@@ -1522,7 +1519,7 @@ type
**
** The default implementation
** of the memory allocation subsystem uses the malloc(), realloc()
-** and free() provided by the standard C library. {F17382} However, if
+** and free() provided by the standard C library. {F17382} However, if
** SQLite is compiled with the following C preprocessor macro
**
** <blockquote> SQLITE_MEMORY_SIZE=<i>NNN</i> </blockquote>
@@ -1548,9 +1545,9 @@ type
**
** INVARIANTS:
**
-** {F17303} The [sqlite3_malloc(N)] interface returns either a pointer to
+** {F17303} The [sqlite3_malloc(N)] interface returns either a pointer to
** newly checked-out block of at least N bytes of memory
-** that is 8-byte aligned,
+** that is 8-byte aligned,
** or it returns NULL if it is unable to fulfill the request.
**
** {F17304} The [sqlite3_malloc(N)] interface returns a NULL pointer if
@@ -1593,14 +1590,14 @@ type
** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that has
** not been released.
**
-** {U17351} The application must not read or write any part of
+** {U17351} The application must not read or write any part of
** a block of memory after it has been released using
** [sqlite3_free()] or [sqlite3_realloc()].
**
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_malloc{$IFDEF D}: function{$ENDIF}(size: cint): pointer;cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_realloc{$IFDEF D}: function{$ENDIF}(ptr: pointer; size: cint): pointer;cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_free{$IFDEF D}: procedure{$ENDIF}(ptr: pointer);cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_malloc{$IFDEF D}: function{$ENDIF}(size: cint): pointer;cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_realloc{$IFDEF D}: function{$ENDIF}(ptr: pointer; size: cint): pointer;cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_free{$IFDEF D}: procedure{$ENDIF}(ptr: pointer);cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Memory Allocator Statistics {F17370}
@@ -1612,11 +1609,11 @@ type
** INVARIANTS:
**
** {F17371} The [sqlite3_memory_used()] routine returns the
-** number of bytes of memory currently outstanding
+** number of bytes of memory currently outstanding
** (malloced but not freed).
**
** {F17373} The [sqlite3_memory_highwater()] routine returns the maximum
-** value of [sqlite3_memory_used()]
+** value of [sqlite3_memory_used()]
** since the highwater mark was last reset.
**
** {F17374} The values returned by [sqlite3_memory_used()] and
@@ -1624,15 +1621,15 @@ type
** added by SQLite in its implementation of [sqlite3_malloc()],
** but not overhead added by the any underlying system library
** routines that [sqlite3_malloc()] may call.
-**
+**
** {F17375} The memory highwater mark is reset to the current value of
** [sqlite3_memory_used()] if and only if the parameter to
** [sqlite3_memory_highwater()] is true. The value returned
** by [sqlite3_memory_highwater(1)] is the highwater mark
** prior to the reset.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_memory_used{$IFDEF D}: function{$ENDIF}(): sqlite3_int64; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_memory_highwater{$IFDEF D}: function{$ENDIF}(resetFlag: cint): sqlite3_int64; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_memory_used{$IFDEF D}: function{$ENDIF}(): sqlite3_int64; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_memory_highwater{$IFDEF D}: function{$ENDIF}(resetFlag: cint): sqlite3_int64; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Pseudo-Random Number Generator {F17390}
@@ -1657,7 +1654,7 @@ type
** {F17392} The [sqlite3_randomness(N,P)] interface writes N bytes of
** high-quality pseudo-randomness into buffer P.
*)
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_randomness{$IFDEF D}: procedure{$ENDIF}(N: cint; P: pointer); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_randomness{$IFDEF D}: procedure{$ENDIF}(N: cint; P: pointer); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Compile-Time Authorization Callbacks {F12500}
@@ -1692,10 +1689,10 @@ type
**
** The first parameter to the authorizer callback is a copy of
** the third parameter to the sqlite3_set_authorizer() interface.
-** The second parameter to the callback is an integer
+** The second parameter to the callback is an integer
** [SQLITE_COPY | action code] that specifies the particular action
** to be authorized. The third through sixth
-** parameters to the callback are zero-terminated strings that contain
+** parameters to the callback are zero-terminated strings that contain
** additional details about the action to be authorized.
**
** An authorizer is used when [sqlite3_prepare | preparing]
@@ -1720,7 +1717,7 @@ type
** previous call. Disable the authorizer by installing a NULL callback.
** The authorizer is disabled by default.
**
-** Note that the authorizer callback is invoked only during
+** Note that the authorizer callback is invoked only during
** [sqlite3_prepare()] or its variants. Authorization is not
** performed during statement evaluation in [sqlite3_step()].
**
@@ -1755,17 +1752,17 @@ type
**
** {F12507} If the authorizer code (the 2nd parameter to the authorizer
** callback) is anything other than [SQLITE_READ], then
-** a return of [SQLITE_IGNORE] has the same effect as [SQLITE_DENY].
+** a return of [SQLITE_IGNORE] has the same effect as [SQLITE_DENY].
**
** {F12510} The first parameter to the authorizer callback is a copy of
** the third parameter to the [sqlite3_set_authorizer()] interface.
**
-** {F12511} The second parameter to the callback is an integer
+** {F12511} The second parameter to the callback is an integer
** [SQLITE_COPY | action code] that specifies the particular action
** to be authorized.
**
** {F12512} The third through sixth parameters to the callback are
-** zero-terminated strings that contain
+** zero-terminated strings that contain
** additional details about the action to be authorized.
**
** {F12520} Each call to [sqlite3_set_authorizer()] overrides the
@@ -1783,7 +1780,7 @@ type
db: psqlite3;
cb: xAuth;
pUserData: pointer
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Authorizer Return Codes {F12590}
@@ -1807,26 +1804,26 @@ const
** what action is being authorized. These are the integer action codes that
** the authorizer callback may be passed.
**
-** These action code values signify what kind of operation is to be
+** These action code values signify what kind of operation is to be
** authorized. The 3rd and 4th parameters to the authorization
** callback function will be parameters or NULL depending on which of these
** codes is used as the second parameter. The 5th parameter to the
-** authorizer callback is the name of the database ("main", "temp",
+** authorizer callback is the name of the database ("main", "temp",
** etc.) if applicable. The 6th parameter to the authorizer callback
** is the name of the inner-most trigger or view that is responsible for
-** the access attempt or NULL if this access attempt is directly from
+** the access attempt or NULL if this access attempt is directly from
** top-level SQL code.
**
** INVARIANTS:
**
-** {F12551} The second parameter to an
+** {F12551} The second parameter to an
** [sqlite3_set_authorizer | authorizer callback is always an integer
** [SQLITE_COPY | authorizer code] that specifies what action
** is being authorized.
**
-** {F12552} The 3rd and 4th parameters to the
+** {F12552} The 3rd and 4th parameters to the
** [sqlite3_set_authorizer | authorization callback function]
-** will be parameters or NULL depending on which
+** will be parameters or NULL depending on which
** [SQLITE_COPY | authorizer code] is used as the second parameter.
**
** {F12553} The 5th parameter to the
@@ -1836,7 +1833,7 @@ const
** {F12554} The 6th parameter to the
** [sqlite3_set_authorizer | authorizer callback] is the name
** of the inner-most trigger or view that is responsible for
-** the access attempt or NULL if this access attempt is directly from
+** the access attempt or NULL if this access attempt is directly from
** top-level SQL code.
*)
(******************************************* 3rd ************ 4th ***********)
@@ -1886,7 +1883,7 @@ const
** as the statement first begins executing. Additional callbacks occur
** as each triggersubprogram is entered. The callbacks for triggers
** contain a UTF-8 SQL comment that identifies the trigger.
-**
+**
** The callback function registered by sqlite3_profile() is invoked
** as each SQL statement finishes. The profile callback contains
** the original statement text and an estimate of wall-clock time
@@ -1897,7 +1894,7 @@ const
**
** The trigger reporting feature of the trace callback is considered
** experimental and is subject to change or removal in future releases.
-** Future versions of SQLite might also add new trace callback
+** Future versions of SQLite might also add new trace callback
** invocations.
**
** INVARIANTS:
@@ -1940,8 +1937,8 @@ type
xTrace = procedure(user: pointer; s: pchar); cdecl;
xProfile = procedure(user: pointer; s: char; i: sqlite3_uint64); cdecl;
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_trace{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: xTrace; user: pointer): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_profile{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: xProfile; user: pointer): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_trace{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: xTrace; user: pointer): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_profile{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: xProfile; user: pointer): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Query Progress Callbacks {F12910}
@@ -1949,7 +1946,7 @@ type
** This routine configures a callback function - the
** progress callback - that is invoked periodically during long
** running calls to [sqlite3_exec()], [sqlite3_step()] and
-** [sqlite3_get_table()]. An example use for this
+** [sqlite3_get_table()]. An example use for this
** interface is to keep a GUI updated during a large query.
**
** If the progress callback returns non-zero, the opertion is
@@ -1963,7 +1960,7 @@ type
** [sqlite3_step()].
**
** {F12912} The progress callback is invoked once for every N virtual
-** machine opcodes, where N is the second argument to
+** machine opcodes, where N is the second argument to
** the [sqlite3_progress_handler()] call that registered
** the callback. <todo>What if N is less than 1?</todo>
**
@@ -1977,7 +1974,7 @@ type
** {F12915} If a call to [sqlite3_step()] results in fewer than
** N opcodes being executed,
** then the progress callback is never invoked. {END}
-**
+**
** {F12916} Every call to [sqlite3_progress_handler()]
** overwrites any previously registere progress handler.
**
@@ -1990,7 +1987,7 @@ type
type
progress_callback = function(user: pointer): cint; cdecl;
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_progress_handler{$IFDEF D}: procedure{$ENDIF}(db: psqlite3; i: cint; cb: progress_callback; user: pointer); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_progress_handler{$IFDEF D}: procedure{$ENDIF}(db: psqlite3; i: cint; cb: progress_callback; user: pointer); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Opening A New Database Connection {F12700}
@@ -2018,7 +2015,7 @@ type
** associated with the [db: psqlite3] handle should be released by passing it
** to [sqlite3_close()] when it is no longer required.
**
-** The [sqlite3_open_v2()] interface works like [sqlite3_open()]
+** The [sqlite3_open_v2()] interface works like [sqlite3_open()]
** except that it acccepts two additional parameters for additional control
** over the new database connection. The flags parameter can be
** one of:
@@ -2029,7 +2026,7 @@ type
** <li> [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
** </ol>
**
-** The first value opens the database read-only.
+** The first value opens the database read-only.
** If the database does not previously exist, an error is returned.
** The second option opens
** the database for reading and writing if possible, or reading only if
@@ -2047,7 +2044,7 @@ type
** in-memory database is created for the connection. This in-memory
** database will vanish when the database connection is closed. Future
** version of SQLite might make use of additional special filenames
-** that begin with the ":" character. It is recommended that
+** that begin with the ":" character. It is recommended that
** when a database filename really does begin with
** ":" that you prefix the filename with a pathname like "./" to
** avoid ambiguity.
@@ -2057,7 +2054,7 @@ type
** automatically deleted as soon as the database connection is closed.
**
** The fourth parameter to sqlite3_open_v2() is the name of the
-** [sqlite3_vfs] object that defines the operating system
+** [sqlite3_vfs] object that defines the operating system
** interface that the new database connection should use. If the
** fourth parameter is a NULL pointer then the default [sqlite3_vfs]
** object is used.
@@ -2079,7 +2076,7 @@ type
** for [sqlite3_open()] and [sqlite3_open_v2()] and as UTF-16
** in the native byte order for [sqlite3_open16()].
**
-** {F12703} A successful invocation of [sqlite3_open()], [sqlite3_open16()],
+** {F12703} A successful invocation of [sqlite3_open()], [sqlite3_open16()],
** or [sqlite3_open_v2()] writes a pointer to a new
** [database connection] into *ppDb.
**
@@ -2126,7 +2123,7 @@ type
** <todo>Is SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE required
** in sqlite3_open_v2()?</todo>
**
-** {F12721} The [database connection] created by
+** {F12721} The [database connection] created by
** [sqlite3_open_v2(F,D,G,V)] will use the
** [sqlite3_vfs] object identified by the V parameter, or
** the default [sqlite3_vfs] object is V is a NULL pointer.
@@ -2134,19 +2131,19 @@ type
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_open{$IFDEF D}: function{$ENDIF}(
filename: pchar; (* Database filename (UTF-8) *)
ppDb: ppsqlite3 (* OUT: SQLite db handle *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_open16{$IFDEF D}: function{$ENDIF}(
filename: pwidechar; (* Database filename (UTF-16) *)
ppDb: ppsqlite3 (* OUT: SQLite db handle *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_open_v2{$IFDEF D}: function{$ENDIF}(
filename: pchar; (* Database filename (UTF-8) *)
ppDb: ppsqlite3; (* OUT: SQLite db handle *)
flags: cint; (* Flags *)
zVfs: pchar (* Name of VFS module to use *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Error Codes And Messages {F12800}
@@ -2192,18 +2189,18 @@ type
** do not change the values returned by
** [sqlite3_errcode()], [sqlite3_errmsg()], or [sqlite3_errmsg16()].
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_errcode{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_errmsg{$IFDEF D}: function{$ENDIF}(db: psqlite3): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_errmsg16{$IFDEF D}: function{$ENDIF}(db: psqlite3): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_errcode{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_errmsg{$IFDEF D}: function{$ENDIF}(db: psqlite3): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_errmsg16{$IFDEF D}: function{$ENDIF}(db: psqlite3): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: SQL Statement Object {F13000}
** KEYWORDS: {prepared statement} {prepared statements}
**
** An instance of this object represent single SQL statements. This
-** object is variously known as a "prepared statement" or a
+** object is variously known as a "prepared statement" or a
** "compiled SQL statement" or simply as a "statement".
-**
+**
** The life of a statement object goes something like this:
**
** <ol>
@@ -2273,12 +2270,12 @@ type
** value of the limit on the size of construct C in
** in [database connection] D as it was prior to the call.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_limit{$IFDEF D}: function{$ENDIF}(db: psqlite3; id: cint; newVal: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_limit{$IFDEF D}: function{$ENDIF}(db: psqlite3; id: cint; newVal: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Run-Time Limit Categories {F12790}
** KEYWORDS: {limit category} {limit categories}
-**
+**
** These constants define various aspects of a [database connection]
** that can be limited in size by calls to [sqlite3_limit()].
** The meanings of the various limits are as follows:
@@ -2337,11 +2334,11 @@ const
** CAPI3REF: Compiling An SQL Statement {F13010}
**
** To execute an SQL query, it must first be compiled into a byte-code
-** program using one of these routines.
+** program using one of these routines.
**
-** The first argument "db" is an [database connection]
+** The first argument "db" is an [database connection]
** obtained from a prior call to [sqlite3_open()], [sqlite3_open_v2()]
-** or [sqlite3_open16()].
+** or [sqlite3_open16()].
** The second argument "zSql" is the statement to be compiled, encoded
** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2()
** interfaces uses UTF-8 and sqlite3_prepare16() and sqlite3_prepare16_v2()
@@ -2349,13 +2346,13 @@ const
**
** If the nByte argument is less
** than zero, then zSql is read up to the first zero terminator.
-** If nByte is non-negative, then it is the maximum number of
+** If nByte is non-negative, then it is the maximum number of
** bytes read from zSql. When nByte is non-negative, the
-** zSql string ends at either the first '\000' or '\u0000' character or
+** zSql string ends at either the first '\000' or '\u0000' character or
** the nByte-th byte, whichever comes first. If the caller knows
** that the supplied string is nul-terminated, then there is a small
-** performance advantage to be had by passing an nByte parameter that
-** is equal to the number of bytes in the input string <i>including</i>
+** performance advantage to be had by passing an nByte parameter that
+** is equal to the number of bytes in the input string <i>including</i>
** the nul-terminator bytes.{END}
**
** *pzTail is made to point to the first byte past the end of the
@@ -2371,14 +2368,14 @@ const
** compiled SQL statement
** using [sqlite3_finalize()] after it has finished with it.
**
-** On success, [SQLITE_OK] is returned. Otherwise an
+** On success, [SQLITE_OK] is returned. Otherwise an
** [error code] is returned.
**
** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are
** recommended for all new programs. The two older interfaces are retained
** for backwards compatibility, but their use is discouraged.
** In the "v2" interfaces, the prepared statement
-** that is returned (the [sqlite3_stmt] object) contains a copy of the
+** that is returned (the [sqlite3_stmt] object) contains a copy of the
** original SQL text. {END} This causes the [sqlite3_step()] interface to
** behave a differently in two ways:
**
@@ -2388,7 +2385,7 @@ const
** always used to do, [sqlite3_step()] will automatically recompile the SQL
** statement and try to run it again. If the schema has changed in
** a way that makes the statement no longer valid, [sqlite3_step()] will still
-** return [SQLITE_SCHEMA]. But unlike the legacy behavior,
+** return [SQLITE_SCHEMA]. But unlike the legacy behavior,
** [SQLITE_SCHEMA] is now a fatal error. Calling
** [sqlite3_prepare_v2()] again will not make the
** error go away. Note: use [sqlite3_errmsg()] to find the text
@@ -2396,9 +2393,9 @@ const
** </li>
**
** <li>
-** When an error occurs,
-** [sqlite3_step()] will return one of the detailed
-** [error codes] or [extended error codes].
+** When an error occurs,
+** [sqlite3_step()] will return one of the detailed
+** [error codes] or [extended error codes].
** The legacy behavior was that [sqlite3_step()] would only return a generic
** [SQLITE_ERROR] result code and you would have to make a second call to
** [sqlite3_reset()] in order to find the underlying cause of the problem.
@@ -2434,7 +2431,7 @@ const
** {F13016} A successful call to [sqlite3_prepare_v2(db,zSql,N,ppStmt,...)]
** or one of its variants writes into *ppStmt a pointer to a new
** [prepared statement] or a pointer to NULL
-** if zSql contains nothing other than whitespace or comments.
+** if zSql contains nothing other than whitespace or comments.
**
** {F13019} The [sqlite3_prepare_v2()] interface and its variants return
** [SQLITE_OK] or an appropriate [error code] upon failure.
@@ -2449,7 +2446,7 @@ const
nByte: cint; (* Maximum length of zSql in bytes. *)
ppStmt: ppsqlite3_stmt; (* OUT: Statement handle *)
pzTail: ppchar (* OUT: Pointer to unused portion of zSql *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_prepare_v2{$IFDEF D}: function{$ENDIF}(
db: psqlite3; (* Database handle *)
@@ -2457,7 +2454,7 @@ const
nByte: cint; (* Maximum length of zSql in bytes. *)
ppStmt: ppsqlite3_stmt; (* OUT: Statement handle *)
pzTail: ppchar (* OUT: Pointer to unused portion of zSql *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_prepare16{$IFDEF D}: function{$ENDIF}(
db: psqlite3; (* Database handle *)
@@ -2465,7 +2462,7 @@ const
nByte: cint; (* Maximum length of zSql in bytes. *)
ppStmt: ppsqlite3_stmt; (* OUT: Statement handle *)
pzTail: ppwidechar (* OUT: Pointer to unused portion of zSql *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_prepare16_v2{$IFDEF D}: function{$ENDIF}(
db: psqlite3; (* Database handle *)
@@ -2473,7 +2470,7 @@ const
nByte: cint; (* Maximum length of zSql in bytes. *)
ppStmt: ppsqlite3_stmt; (* OUT: Statement handle *)
pzTail: ppwidechar (* OUT: Pointer to unused portion of zSql *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPIREF: Retrieving Statement SQL {F13100}
@@ -2483,7 +2480,7 @@ const
**
** INVARIANTS:
**
-** {F13101} If the [prepared statement] passed as
+** {F13101} If the [prepared statement] passed as
** the an argument to [sqlite3_sql()] was compiled
** compiled using either [sqlite3_prepare_v2()] or
** [sqlite3_prepare16_v2()],
@@ -2491,7 +2488,7 @@ const
** zero-terminated string containing a UTF-8 rendering
** of the original SQL statement.
**
-** {F13102} If the [prepared statement] passed as
+** {F13102} If the [prepared statement] passed as
** the an argument to [sqlite3_sql()] was compiled
** compiled using either [sqlite3_prepare()] or
** [sqlite3_prepare16()],
@@ -2500,7 +2497,7 @@ const
** {F13103} The string returned by [sqlite3_sql(S)] is valid until the
** [prepared statement] S is deleted using [sqlite3_finalize(S)].
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_sql{$IFDEF D}: function{$ENDIF}(pStmt: psqlite3_stmt): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_sql{$IFDEF D}: function{$ENDIF}(pStmt: psqlite3_stmt): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Dynamically Typed Value Object {F15000}
@@ -2508,14 +2505,14 @@ const
**
** SQLite uses the sqlite3_value object to represent all values
** that can be stored in a database table.
-** SQLite uses dynamic typing for the values it stores.
+** SQLite uses dynamic typing for the values it stores.
** Values stored in sqlite3_value objects can be
** be integers, floating point values, strings, BLOBs, or NULL.
**
** An sqlite3_value object may be either "protected" or "unprotected".
** Some interfaces require a protected sqlite3_value. Other interfaces
** will accept either a protected or an unprotected sqlite3_value.
-** Every interface that accepts sqlite3_value arguments specifies
+** Every interface that accepts sqlite3_value arguments specifies
** whether or not it requires a protected sqlite3_value.
**
** The terms "protected" and "unprotected" refer to whether or not
@@ -2580,7 +2577,7 @@ type
** argument is the index of the parameter to be set. The
** first parameter has an index of 1. When the same named
** parameter is used more than once, second and subsequent
-** occurrences have the same index as the first occurrence.
+** occurrences have the same index as the first occurrence.
** The index for named parameters can be looked up using the
** [sqlite3_bind_parameter_name()] API if desired. The index
** for "?NNN" parameters is the value of NNN.
@@ -2592,7 +2589,7 @@ type
** In those
** routines that have a fourth argument, its value is the number of bytes
** in the parameter. To be clear: the value is the number of <u>bytes</u>
-** in the value, not the number of characters.
+** in the value, not the number of characters.
** If the fourth parameter is negative, the length of the string is
** number of bytes up to the first zero terminator.
**
@@ -2609,7 +2606,7 @@ type
** is filled with zeros. A zeroblob uses a fixed amount of memory
** (just an integer to hold it size) while it is being processed.
** Zeroblobs are intended to serve as place-holders for BLOBs whose
-** content is later written using
+** content is later written using
** [sqlite3_blob_open | increment BLOB I/O] routines. A negative
** value for the zeroblob results in a zero-length BLOB.
**
@@ -2638,7 +2635,7 @@ type
** {F13506} The [sqlite3_prepare | SQL statement compiler] recognizes
** tokens of the forms "?", "?NNN", "$VVV", ":VVV", and "@VVV"
** as SQL parameters, where NNN is any sequence of one or more
-** digits and where VVV is any sequence of one or more
+** digits and where VVV is any sequence of one or more
** alphanumeric characters or "::" optionally followed by
** a string containing no spaces and contained within parentheses.
**
@@ -2690,7 +2687,7 @@ type
** {F13542} In calls to [sqlite3_bind_blob(S,N,V,L,D)],
** [sqlite3_bind_text(S,N,V,L,D)], or
** [sqlite3_bind_text16(S,N,V,L,D)] when D is the special
-** constant [SQLITE_TRANSIENT], the routine makes a
+** constant [SQLITE_TRANSIENT], the routine makes a
** private copy of V value before it returns.
**
** {F13545} In calls to [sqlite3_bind_blob(S,N,V,L,D)],
@@ -2706,15 +2703,15 @@ type
** be either a [protected sqlite3_value] object or an
** [unprotected sqlite3_value] object.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_blob{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: pointer; L: cint; D: sqlite3_destructor_type): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_double{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: cdouble): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_int{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_int64{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: sqlite3_int64): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_null{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_text{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: pchar; L: cint; D: sqlite3_destructor_type): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_text16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: pwidechar; L: cint; D: sqlite3_destructor_type): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_value{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: psqlite3_value): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_zeroblob{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_blob{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: pointer; L: cint; D: sqlite3_destructor_type): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_double{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: cdouble): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_int{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_int64{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: sqlite3_int64): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_null{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_text{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: pchar; L: cint; D: sqlite3_destructor_type): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_text16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: pwidechar; L: cint; D: sqlite3_destructor_type): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_value{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: psqlite3_value): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_zeroblob{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint; V: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Number Of SQL Parameters {F13600}
@@ -2741,7 +2738,7 @@ type
** [prepared statement] S, or 0 if S
** contains no SQL parameters.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_parameter_count{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_parameter_count{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Name Of A Host Parameter {F13620}
@@ -2775,7 +2772,7 @@ type
** NULL if there is no SQL parameter with index N or if the
** parameter with index N is an anonymous parameter "?".
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_parameter_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_parameter_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Index Of A Parameter With A Given Name {F13640}
@@ -2798,13 +2795,13 @@ type
** S whose name matches the UTF-8 string N, or 0 if there is
** no match.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_parameter_index{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; zName: pchar): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_bind_parameter_index{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; zName: pchar): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Reset All Bindings On A Prepared Statement {F13660}
**
** Contrary to the intuition of many, [sqlite3_reset()] does not
-** reset the [sqlite3_bind_blob | bindings] on a
+** reset the [sqlite3_bind_blob | bindings] on a
** [prepared statement]. Use this routine to
** reset all host parameters to NULL.
**
@@ -2814,14 +2811,14 @@ type
** SQL parameter bindings in [prepared statement] S
** back to NULL.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_clear_bindings{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_clear_bindings{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Number Of Columns In A Result Set {F13710}
**
-** Return the number of columns in the result set returned by the
+** Return the number of columns in the result set returned by the
** [prepared statement]. This routine returns 0
-** if pStmt is an SQL statement that does not return data (for
+** if pStmt is an SQL statement that does not return data (for
** example an UPDATE).
**
** INVARIANTS:
@@ -2831,7 +2828,7 @@ type
** [prepared statement] S, or 0 if S does not generate
** a result set.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_count{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_count{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Column Names In A Result Set {F13720}
@@ -2845,7 +2842,7 @@ type
** The second parameter is the column number. The left-most column is
** number 0.
**
-** The returned string pointer is valid until either the
+** The returned string pointer is valid until either the
** [prepared statement] is destroyed by [sqlite3_finalize()]
** or until the next call sqlite3_column_name() or sqlite3_column_name16()
** on the same column.
@@ -2880,7 +2877,7 @@ type
** {F13725} If the N parameter to [sqlite3_column_name(S,N)] or
** [sqlite3_column_name16(S,N)] is out of range, then the
** interfaces returns a NULL pointer.
-**
+**
** {F13726} The strings returned by [sqlite3_column_name(S,N)] and
** [sqlite3_column_name16(S,N)] are valid until the next
** call to either routine with the same S and N parameters
@@ -2890,8 +2887,8 @@ type
** an AS clause, the name of that column is the indentifier
** to the right of the AS keyword.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Source Of Data In A Query Result {F13740}
@@ -2911,20 +2908,20 @@ type
** database, table, and column.
**
** The first argument to the following calls is a [prepared statement].
-** These functions return information about the Nth column returned by
+** These functions return information about the Nth column returned by
** the statement, where N is the second function argument.
**
** If the Nth column returned by the statement is an expression
** or subquery and is not a column value, then all of these functions
** return NULL. These routine might also return NULL if a memory
-** allocation error occurs. Otherwise, they return the
+** allocation error occurs. Otherwise, they return the
** name of the attached database, table and column that query result
** column was extracted from.
**
** As with all other SQLite APIs, those postfixed with "16" return
** UTF-16 encoded strings, the other functions return UTF-8. {END}
**
-** These APIs are only available if the library was compiled with the
+** These APIs are only available if the library was compiled with the
** SQLITE_ENABLE_COLUMN_METADATA preprocessor symbol defined.
**
** {U13751}
@@ -2935,50 +2932,50 @@ type
** INVARIANTS:
**
** {F13741} The [sqlite3_column_database_name(S,N)] interface returns either
-** the UTF-8 zero-terminated name of the database from which the
-** Nth result column of [prepared statement] S
+** the UTF-8 zero-terminated name of the database from which the
+** Nth result column of [prepared statement] S
** is extracted, or NULL if the the Nth column of S is a
** general expression or if unable to allocate memory
** to store the name.
-**
+**
** {F13742} The [sqlite3_column_database_name16(S,N)] interface returns either
** the UTF-16 native byte order
-** zero-terminated name of the database from which the
-** Nth result column of [prepared statement] S
+** zero-terminated name of the database from which the
+** Nth result column of [prepared statement] S
** is extracted, or NULL if the the Nth column of S is a
** general expression or if unable to allocate memory
** to store the name.
-**
+**
** {F13743} The [sqlite3_column_table_name(S,N)] interface returns either
-** the UTF-8 zero-terminated name of the table from which the
-** Nth result column of [prepared statement] S
+** the UTF-8 zero-terminated name of the table from which the
+** Nth result column of [prepared statement] S
** is extracted, or NULL if the the Nth column of S is a
** general expression or if unable to allocate memory
** to store the name.
-**
+**
** {F13744} The [sqlite3_column_table_name16(S,N)] interface returns either
** the UTF-16 native byte order
-** zero-terminated name of the table from which the
-** Nth result column of [prepared statement] S
+** zero-terminated name of the table from which the
+** Nth result column of [prepared statement] S
** is extracted, or NULL if the the Nth column of S is a
** general expression or if unable to allocate memory
** to store the name.
-**
+**
** {F13745} The [sqlite3_column_origin_name(S,N)] interface returns either
-** the UTF-8 zero-terminated name of the table column from which the
-** Nth result column of [prepared statement] S
+** the UTF-8 zero-terminated name of the table column from which the
+** Nth result column of [prepared statement] S
** is extracted, or NULL if the the Nth column of S is a
** general expression or if unable to allocate memory
** to store the name.
-**
+**
** {F13746} The [sqlite3_column_origin_name16(S,N)] interface returns either
** the UTF-16 native byte order
-** zero-terminated name of the table column from which the
-** Nth result column of [prepared statement] S
+** zero-terminated name of the table column from which the
+** Nth result column of [prepared statement] S
** is extracted, or NULL if the the Nth column of S is a
** general expression or if unable to allocate memory
** to store the name.
-**
+**
** {F13748} The return values from
** [sqlite3_column_database_name|column metadata interfaces]
** are valid
@@ -2993,23 +2990,23 @@ type
** the same [prepared statement] and result column
** at the same time then the results are undefined.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_database_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_database_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_table_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_table_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_origin_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_origin_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_database_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_database_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_table_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_table_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_origin_name{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_origin_name16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Declared Datatype Of A Query Result {F13760}
**
-** The first parameter is a [prepared statement].
-** If this statement is a SELECT statement and the Nth column of the
+** The first parameter is a [prepared statement].
+** If this statement is a SELECT statement and the Nth column of the
** returned result set of that SELECT is a table column (not an
** expression or subquery) then the declared type of the table
** column is returned. If the Nth column of the result set is an
** expression or subquery, then a NULL pointer is returned.
-** The returned string is always UTF-8 encoded. {END}
+** The returned string is always UTF-8 encoded. {END}
** For example, in the database schema:
**
** CREATE TABLE t1(c1 VARIANT);
@@ -3051,8 +3048,8 @@ type
** calls to [sqlite3_column_decltype(S,N)] or
** [sqlite3_column_decltype16(S,N)] return NULL.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_decltype{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_decltype16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_decltype{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_decltype16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; N: cint): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Evaluate An SQL Statement {F13200}
@@ -3060,7 +3057,7 @@ type
** After an [prepared statement] has been prepared with a call
** to either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or to one of
** the legacy interfaces [sqlite3_prepare()] or [sqlite3_prepare16()],
-** then this function must be called one or more times to evaluate the
+** then this function must be called one or more times to evaluate the
** statement.
**
** The details of the behavior of this sqlite3_step() interface depend
@@ -3088,12 +3085,12 @@ type
** machine without first calling [sqlite3_reset()] to reset the virtual
** machine back to its initial state.
**
-** If the SQL statement being executed returns any data, then
+** If the SQL statement being executed returns any data, then
** [SQLITE_ROW] is returned each time a new row of data is ready
** for processing by the caller. The values may be accessed using
** the [sqlite3_column_cint | column access functions].
** sqlite3_step() is called again to retrieve the next row of data.
-**
+**
** [SQLITE_ERROR] means that a run-time error (such as a constracint
** violation) has occurred. sqlite3_step() should not be called again on
** the VM. More information may be found by calling [sqlite3_errmsg()].
@@ -3105,7 +3102,7 @@ type
**
** [SQLITE_MISUSE] means that the this routine was called inappropriately.
** Perhaps it was called on a [prepared statement] that has
-** already been [sqlite3_finalize | finalized] or on one that had
+** already been [sqlite3_finalize | finalized] or on one that had
** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could
** be the case that the same database connection is being used by two or
** more threads at the same moment in time.
@@ -3120,7 +3117,7 @@ type
** We admit that this is a goofy design. The problem has been fixed
** with the "v2" interface. If you prepare all of your SQL statements
** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead
-** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()], then the
+** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()], then the
** more specific [error codes] are returned directly
** by sqlite3_step(). The use of the "v2" interface is recommended.
**
@@ -3131,7 +3128,7 @@ type
** until to completion or until it is ready to return another
** row of the result set or an cinterrupt or run-time error occurs.
**
-** {F15304} When a call to [sqlite3_step(S)] causes the
+** {F15304} When a call to [sqlite3_step(S)] causes the
** [prepared statement] S to run to completion,
** the function returns [SQLITE_DONE].
**
@@ -3151,7 +3148,7 @@ type
** [sqlite3_prepare16()] then the function returns either
** [SQLITE_ERROR], [SQLITE_BUSY], or [SQLITE_MISUSE].
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_step{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_step{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Number of columns in a result set {F13770}
@@ -3166,13 +3163,13 @@ type
** [sqlite3_column_count(S)] function.
**
** {F13772} After [sqlite3_step(S)] has returned any value other than
-** [SQLITE_ROW] or before [sqlite3_step(S)] has been
+** [SQLITE_ROW] or before [sqlite3_step(S)] has been
** called on the [prepared statement] for
** the first time since it was [sqlite3_prepare|prepared]
** or [sqlite3_reset|reset], the [sqlite3_data_count(S)]
** routine returns zero.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_data_count{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_data_count{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Fundamental Datatypes {F10265}
@@ -3214,12 +3211,12 @@ const
** [prepared statement] that is being
** evaluated (the [stmt: psqlite3_stmt] that was returned from
** [sqlite3_prepare_v2()] or one of its variants) and
-** the second argument is the index of the column for which information
+** the second argument is the index of the column for which information
** should be returned. The left-most column of the result set
** has an index of 0.
**
** If the SQL statement is not currently point to a valid row, or if the
-** the column index is out of range, the result is undefined.
+** the column index is out of range, the result is undefined.
** These routines may only be called when the most recent call to
** [sqlite3_step()] has returned [SQLITE_ROW] and neither
** [sqlite3_reset()] nor [sqlite3_finalize()] has been call subsequently.
@@ -3228,9 +3225,9 @@ const
** something other than [SQLITE_ROW], the results are undefined.
** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()]
** are called from a different thread while any of these routines
-** are pending, then the results are undefined.
+** are pending, then the results are undefined.
**
-** The sqlite3_column_type() routine returns
+** The sqlite3_column_type() routine returns
** [SQLITE_INTEGER | datatype code] for the initial data type
** of the result column. The returned value is one of [SQLITE_INTEGER],
** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value
@@ -3240,7 +3237,7 @@ const
** versions of SQLite may change the behavior of sqlite3_column_type()
** following a type conversion.
**
-** If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
+** If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
** routine returns the number of bytes in that BLOB or string.
** If the result is a UTF-16 string, then sqlite3_column_bytes() converts
** the string to UTF-8 and then returns the number of bytes.
@@ -3257,7 +3254,7 @@ const
** pointer, possibly even a NULL pointer.
**
** The sqlite3_column_bytes16() routine is similar to sqlite3_column_bytes()
-** but leaves the result in UTF-16 in native byte order instead of UTF-8.
+** but leaves the result in UTF-16 in native byte order instead of UTF-8.
** The zero terminator is not included in this count.
**
** The object returned by [sqlite3_column_value()] is an
@@ -3265,7 +3262,7 @@ const
** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()].
** If the [unprotected sqlite3_value] object returned by
** [sqlite3_column_value()] is used in any other way, including calls
-** to routines like
+** to routines like
** [sqlite3_value_cint()], [sqlite3_value_text()], or [sqlite3_value_bytes()],
** then the behavior is undefined.
**
@@ -3306,12 +3303,12 @@ const
**
** Note that when type conversions occur, pointers returned by prior
** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
-** sqlite3_column_text16() may be invalidated.
+** sqlite3_column_text16() may be invalidated.
** Type conversions and pointer invalidations might occur
** in the following cases:
**
** <ul>
-** <li><p> The initial content is a BLOB and sqlite3_column_text()
+** <li><p> The initial content is a BLOB and sqlite3_column_text()
** or sqlite3_column_text16() is called. A zero-terminator might
** need to be added to the string.</p></li>
**
@@ -3414,33 +3411,33 @@ const
** Nth column in the current row of the result set for
** [prepared statement] S.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_blob{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_bytes{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_bytes16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_double{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cdouble; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_int{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_int64{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): sqlite3_int64; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_text{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_text16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_type{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_value{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): psqlite3_value; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_blob{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_bytes{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_bytes16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_double{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cdouble; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_int{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_int64{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): sqlite3_int64; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_text{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_text16{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_type{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_column_value{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; iCol: cint): psqlite3_value; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Destroy A Prepared Statement Object {F13300}
**
-** The sqlite3_finalize() function is called to delete a
+** The sqlite3_finalize() function is called to delete a
** [prepared statement]. If the statement was
** executed successfully, or not executed at all, then SQLITE_OK is returned.
-** If execution of the statement failed then an
+** If execution of the statement failed then an
** [error code] or [extended error code]
-** is returned.
+** is returned.
**
** This routine can be called at any point during the execution of the
-** [prepared statement]. If the virtual machine has not
+** [prepared statement]. If the virtual machine has not
** completed execution when this routine is called, that is like
** encountering an error or an cinterrupt. (See [sqlite3_cinterrupt()].)
-** Incomplete updates may be rolled back and transactions cancelled,
-** depending on the circumstances, and the
+** Incomplete updates may be rolled back and transactions cancelled,
+** depending on the circumstances, and the
** [error code] returned will be [SQLITE_ABORT].
**
** INVARIANTS:
@@ -3453,12 +3450,12 @@ const
** [prepared statement] S returned an error,
** then [sqlite3_finalize(S)] returns that same error.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_finalize{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_finalize{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Reset A Prepared Statement Object {F13330}
**
-** The sqlite3_reset() function is called to reset a
+** The sqlite3_reset() function is called to reset a
** [prepared statement] object.
** back to its initial state, ready to be re-executed.
** Any SQL statement variables that had values bound to them using
@@ -3468,7 +3465,7 @@ const
** {F11332} The [sqlite3_reset(S)] interface resets the [prepared statement] S
** back to the beginning of its program.
**
-** {F11334} If the most recent call to [sqlite3_step(S)] for
+** {F11334} If the most recent call to [sqlite3_step(S)] for
** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE],
** or if [sqlite3_step(S)] has never before been called on S,
** then [sqlite3_reset(S)] returns [SQLITE_OK].
@@ -3480,11 +3477,11 @@ const
** {F11338} The [sqlite3_reset(S)] interface does not change the values
** of any [sqlite3_bind_blob|bindings] on [prepared statement] S.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_reset{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_reset{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Create Or Redefine SQL Functions {F16100}
-** KEYWORDS: {function creation routines}
+** KEYWORDS: {function creation routines}
**
** These two functions (collectively known as
** "function creation routines") are used to add SQL functions or aggregates
@@ -3500,7 +3497,7 @@ const
**
** The second parameter is the name of the SQL function to be created
** or redefined.
-** The length of the name is limited to 255 bytes, exclusive of the
+** The length of the name is limited to 255 bytes, exclusive of the
** zero-terminator. Note that the name length limit is in bytes, not
** characters. Any attempt to create a function with a longer name
** will result in an SQLITE_ERROR error.
@@ -3509,7 +3506,7 @@ const
** aggregate takes. If this parameter is negative, then the SQL function or
** aggregate may take any number of arguments.
**
-** The fourth parameter, eTextRep, specifies what
+** The fourth parameter, eTextRep, specifies what
** [SQLITE_UTF8 | text encoding] this SQL function prefers for
** its parameters. Any SQL function implementation should be able to work
** work with UTF-8, UTF-16le, or UTF-16be. But some implementations may be
@@ -3621,7 +3618,7 @@ type
funccb: xFunc;
stepcb: xStep;
finalcb: xFinal
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_create_function16{$IFDEF D}: function{$ENDIF}(
db: psqlite3;
@@ -3632,7 +3629,7 @@ type
funccb: xFunc;
stepcb: xStep;
finalcb: xFinal
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Text Encodings {F10267}
@@ -3661,12 +3658,12 @@ const
type
memory_alarm_cb = function(user: pointer; i64: sqlite3_int64; i: cint): pointer; cdecl;
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_aggregate_count{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_expired{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_transfer_bindings{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; stmt2: psqlite3_stmt): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_global_recover{$IFDEF D}: function{$ENDIF}(): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_thread_cleanup{$IFDEF D}: procedure{$ENDIF}(); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_memory_alarm{$IFDEF D}: function{$ENDIF}(cb: memory_alarm_cb; user: pointer; i64: sqlite3_int64): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_aggregate_count{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_expired{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_transfer_bindings{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt; stmt2: psqlite3_stmt): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_global_recover{$IFDEF D}: function{$ENDIF}(): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_thread_cleanup{$IFDEF D}: procedure{$ENDIF}(); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_memory_alarm{$IFDEF D}: function{$ENDIF}(cb: memory_alarm_cb; user: pointer; i64: sqlite3_int64): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$ENDIF}
(*
@@ -3688,8 +3685,8 @@ type
** Any attempt to use these routines on an [unprotected sqlite3_value]
** object results in undefined behavior.
**
-** These routines work just like the corresponding
-** [sqlite3_column_blob | sqlite3_column_* routines] except that
+** These routines work just like the corresponding
+** [sqlite3_column_blob | sqlite3_column_* routines] except that
** these routines take a single [protected sqlite3_value] object pointer
** instead of an [stmt: psqlite3_stmt] pointer and an INTEGER column number.
**
@@ -3703,14 +3700,14 @@ type
** made to convert the value to an INTEGER or floating point. If
** such a conversion is possible without loss of information (in other
** words if the value is a string that looks like a number)
-** then the conversion is done. Otherwise no conversion occurs. The
+** then the conversion is done. Otherwise no conversion occurs. The
** [SQLITE_INTEGER | datatype] after conversion is returned.
**
** Please pay particular attention to the fact that the pointer that
** is returned from [sqlite3_value_blob()]; [sqlite3_value_text()]; or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
** [sqlite3_value_bytes()]; [sqlite3_value_bytes16()]; [sqlite3_value_text()];
-** or [sqlite3_value_text16()].
+** or [sqlite3_value_text16()].
**
** These routines must be called from the same thread as
** the SQL function that supplied the [sqlite3_value*] parameters.
@@ -3778,24 +3775,24 @@ type
** [SQLITE_BLOB] as appropriate for
** the [protected sqlite3_value] object V after the conversion attempt.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_blob{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_bytes{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_bytes16{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_double{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cdouble; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_cint{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_cint64{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): sqlite3_int64; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pchar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text16{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text16le{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text16be{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pwidechar; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_type{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_numeric_type{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_blob{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_bytes{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_bytes16{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_double{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cdouble; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_int{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_int64{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): sqlite3_int64; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pchar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text16{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text16le{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_text16be{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): pwidechar; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_type{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_value_numeric_type{$IFDEF D}: function{$ENDIF}(val: psqlite3_value): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Obtain Aggregate Function Context {F16210}
**
** The implementation of aggregate SQL functions use this routine to allocate
-** a structure for storing their state.
+** a structure for storing their state.
** The first time the sqlite3_aggregate_context() routine is
** is called for a particular aggregate; SQLite allocates nBytes of memory
** zeros that memory; and returns a pointer to it.
@@ -3807,7 +3804,7 @@ type
** SQLite automatically frees the allocated buffer when the aggregate
** query concludes.
**
-** The first parameter should be a copy of the
+** The first parameter should be a copy of the
** [sqlite3_context | SQL function context] that is the first
** parameter to the callback routine that implements the aggregate
** function.
@@ -3836,7 +3833,7 @@ type
** or [sqlite3_finalize()] for the [prepared statement] containing
** the aggregate function associated with context C.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_aggregate_context{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context; nBytes: cint): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_aggregate_context{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context; nBytes: cint): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: User Data For Functions {F16240}
@@ -3855,10 +3852,10 @@ type
** {F16243} The [sqlite3_user_data(C)] interface returns a copy of the
** P pointer from the [sqlite3_create_function(D;X;N;E;P;F;S;L)]
** or [sqlite3_create_function16(D;X;N;E;P;F;S;L)] call that
-** registered the SQL function associated with
+** registered the SQL function associated with
** [sqlite3_context] C.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_user_data{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_user_data{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Database Connection For Functions {F16250}
@@ -3874,10 +3871,10 @@ type
** {F16253} The [sqlite3_context_db_handle(C)] interface returns a copy of the
** D pointer from the [sqlite3_create_function(D;X;N;E;P;F;S;L)]
** or [sqlite3_create_function16(D;X;N;E;P;F;S;L)] call that
-** registered the SQL function associated with
+** registered the SQL function associated with
** [sqlite3_context] C.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_context_db_handle{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context): psqlite3; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_context_db_handle{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context): psqlite3; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Function Auxiliary Data {F16270}
@@ -3905,7 +3902,7 @@ type
** pointed to by its 3rd parameter as the meta-data for the N-th
** argument of the application-defined function. Subsequent
** calls to sqlite3_get_auxdata() might return this data; if it has
-** not been destroyed.
+** not been destroyed.
** If it is not NULL; SQLite will invoke the destructor
** function given by the 4th parameter to sqlite3_set_auxdata() on
** the meta-data when the corresponding function parameter changes
@@ -3953,8 +3950,8 @@ type
type
set_auxdata_cb = function(p: pointer): pointer; cdecl;
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_get_auxdata{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context; N: cint): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_set_auxdata{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; N: cint; P: pointer; cb: set_auxdata_cb); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_get_auxdata{$IFDEF D}: function{$ENDIF}(ctx: psqlite3_context; N: cint): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_set_auxdata{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; N: cint; P: pointer; cb: set_auxdata_cb); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
@@ -3965,7 +3962,7 @@ type
** [sqlite3_create_function()] and [sqlite3_create_function16()]
** for additional information.
**
-** These functions work very much like the
+** These functions work very much like the
** [sqlite3_bind_blob | sqlite3_bind_*] family of functions used
** to bind values to host parameters in prepared statements.
** Refer to the
@@ -3975,7 +3972,7 @@ type
** The sqlite3_result_blob() interface sets the result from
** an application defined function to be the BLOB whose content is pointed
** to by the second parameter and which is N bytes long where N is the
-** third parameter.
+** third parameter.
** The sqlite3_result_zeroblob() inerfaces set the result of
** the application defined function to be a BLOB containing all zero
** bytes and N bytes in size; where N is the value of the 2nd parameter.
@@ -4060,7 +4057,7 @@ type
** [unprotected sqlite3_value] object is required; so either
** kind of [sqlite3_value] object can be used with this interface.
**
-** If these routines are called from within the different thread
+** If these routines are called from within the different thread
** than the one containing the application-defined function that recieved
** the [sqlite3_context] pointer; the results are undefined.
**
@@ -4156,26 +4153,26 @@ type
** [sqlite3_result_text(C;V;N;D)]; [sqlite3_result_text16(C;V;N;D)];
** [sqlite3_result_text16be(C;V;N;D)]; or
** [sqlite3_result_text16le(C;V;N;D)] is some value other than
-** the constants [SQLITE_STATIC] and [SQLITE_TRANSIENT] then
+** the constants [SQLITE_STATIC] and [SQLITE_TRANSIENT] then
** SQLite will invoke the destructor D with V as its only argument
** when it has finished with the V value.
*)
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_blob{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pointer; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_double{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cdouble); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pchar; N: cint); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error16{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error_toobig{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error_nomem{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error_code{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cint); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_cint{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cint); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_cint64{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: sqlite3_int64); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_null{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pchar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text16{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text16le{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text16be{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_value{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: psqlite3_value); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_zeroblob{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cint); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_blob{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pointer; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_double{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cdouble); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pchar; N: cint); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error16{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error_toobig{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error_nomem{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_error_code{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cint); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_int{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cint); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_int64{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: sqlite3_int64); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_null{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pchar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text16{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text16le{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_text16be{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: pwidechar; N: cint; D: sqlite3_destructor_type); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_value{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: psqlite3_value); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_result_zeroblob{$IFDEF D}: procedure{$ENDIF}(ctx: psqlite3_context; V: cint); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Define New Collating Sequences {F16600}
@@ -4280,7 +4277,7 @@ type
eTextRep: cint;
user: pointer;
xcomparecb: xCompare
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_create_collation_v2{$IFDEF D}: function{$ENDIF}(
db: psqlite3;
@@ -4289,7 +4286,7 @@ type
user: pointer;
xcomparecb: xCompare;
xdestroycb: xDestroy
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_create_collation16{$IFDEF D}: function{$ENDIF}(
db: psqlite3;
@@ -4297,7 +4294,7 @@ type
eTextRep: cint;
user: pointer;
xcomparecb: xCompare
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Collation Needed Callbacks {F16700}
@@ -4345,7 +4342,7 @@ type
** is in UTF-16 native byte order if the callback was
** registered using [sqlite3_collation_needed16()].
**
-**
+**
*)
type
collation_needed_cb = function(user: pointer; db: psqlite3; eTextRep: cint; s: pchar): pointer; cdecl;
@@ -4354,13 +4351,13 @@ type
db: psqlite3;
user: pointer;
cb: collation_needed_cb
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_collation_needed16{$IFDEF D}: function{$ENDIF}(
db: psqlite3;
user: pointer;
cb: collation_needed_cb
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** Specify the key for an encrypted database. This routine should be
@@ -4372,7 +4369,7 @@ type
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_key{$IFDEF D}: function{$ENDIF}(
db: psqlite3; (* Database to be rekeyed *)
pKey: pointer; nKey: cint (* The key *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** Change the key on an open database. If the current database is not
@@ -4385,7 +4382,7 @@ type
{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_rekey{$IFDEF D}: function{$ENDIF}(
db: psqlite3; (* Database to be rekeyed *)
pKey: pointer; nKey: cint (* The new key *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Suspend Execution For A Short Time {F10530}
@@ -4394,9 +4391,9 @@ type
** causes the current thread to suspend execution
** for at least a number of milliseconds specified in its parameter.
**
-** If the operating system does not support sleep requests with
+** If the operating system does not support sleep requests with
** millisecond time resolution; then the time will be rounded up to
-** the nearest second. The number of milliseconds of sleep actually
+** the nearest second. The number of milliseconds of sleep actually
** requested from the operating system is returned.
**
** SQLite implements this interface by calling the xSleep()
@@ -4413,7 +4410,7 @@ type
** milliseconds of sleep actually requested of the operating
** system; which might be larger than the parameter M.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_sleep{$IFDEF D}: function{$ENDIF}(M: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_sleep{$IFDEF D}: function{$ENDIF}(M: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Name Of The Folder Holding Temporary Files {F10310}
@@ -4431,7 +4428,7 @@ type
*)
{$ifndef win32}
var
- sqlite3_temp_directory: pchar; cvar; external {Sqlite3Lib};
+ sqlite3_temp_directory: pchar; cvar; external {sqlite3lib};
{$endif}
(*
@@ -4462,7 +4459,7 @@ var
**
** {F12934} Autocommit mode is enabled by a successful [COMMIT] or [ROLLBACK]
** statement.
-**
+**
**
** LIMITATIONS:
***
@@ -4470,7 +4467,7 @@ var
** connection while this routine is running; then the return value
** is undefined.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_get_autocommit{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_get_autocommit{$IFDEF D}: function{$ENDIF}(db: psqlite3): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Find The Database Handle Of A Prepared Statement {F13120}
@@ -4489,7 +4486,7 @@ var
** to the [database connection] associated with
** [prepared statement] S.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_db_handle{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): psqlite3; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_db_handle{$IFDEF D}: function{$ENDIF}(stmt: psqlite3_stmt): psqlite3; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
@@ -4504,7 +4501,7 @@ var
** Any callback set by a previous call to sqlite3_commit_hook()
** for the same database connection is overridden.
** The pArg argument is passed through
-** to the callback. If the callback on a commit hook function
+** to the callback. If the callback on a commit hook function
** returns non-zero; then the commit is converted cinto a rollback.
**
** If another function was previously registered; its
@@ -4530,7 +4527,7 @@ var
** a transaction commits on [database connection] D.
**
** {F12952} The [sqlite3_commit_hook(D;F;P)] interface returns the P
-** argument from the previous call with the same
+** argument from the previous call with the same
** [database connection ] D ; or NULL on the first call
** for a particular [database connection] D.
**
@@ -4549,7 +4546,7 @@ var
** a transaction rolls back on [database connection] D.
**
** {F12962} The [sqlite3_rollback_hook(D;F;P)] interface returns the P
-** argument from the previous call with the same
+** argument from the previous call with the same
** [database connection ] D ; or NULL on the first call
** for a particular [database connection] D.
**
@@ -4563,29 +4560,29 @@ var
type
commit_callback = function(user: pointer): cint; cdecl;
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_commit_hook{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: commit_callback; user: pointer): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_rollback_hook{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: sqlite3_destructor_type; user: pointer): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_commit_hook{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: commit_callback; user: pointer): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_rollback_hook{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: sqlite3_destructor_type; user: pointer): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Data Change Notification Callbacks {F12970}
**
** The sqlite3_update_hook() interface
-** registers a callback function with the database connection identified by the
+** registers a callback function with the database connection identified by the
** first argument to be invoked whenever a row is updated; inserted or deleted.
-** Any callback set by a previous call to this function for the same
+** Any callback set by a previous call to this function for the same
** database connection is overridden.
**
** The second argument is a pointer to the function to invoke when a
** row is updated; inserted or deleted.
** The first argument to the callback is
** a copy of the third argument to sqlite3_update_hook().
-** The second callback
+** The second callback
** argument is one of [SQLITE_INSERT]; [SQLITE_DELETE] or [SQLITE_UPDATE];
** depending on the operation that caused the callback to be invoked.
-** The third and
+** The third and
** fourth arguments to the callback contain pointers to the database and
** table name containing the affected row.
-** The final callback parameter is
+** The final callback parameter is
** the rowid of the row.
** In the case of an update; this is the rowid after
** the update takes place.
@@ -4616,7 +4613,7 @@ type
** {F12979} The update hook callback is not invoked when cinternal system
** tables such as sqlite_master and sqlite_sequence are modified.
**
-** {F12981} The second parameter to the update callback
+** {F12981} The second parameter to the update callback
** is one of [SQLITE_INSERT]; [SQLITE_DELETE] or [SQLITE_UPDATE];
** depending on the operation that caused the callback to be invoked.
**
@@ -4630,7 +4627,7 @@ type
type
update_callback = procedure(user: pointer; event: cint; database, table: pchar; rowid: sqlite3_int64); cdecl;
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_update_hook{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: update_callback; user: pointer): pointer; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_update_hook{$IFDEF D}: function{$ENDIF}(db: psqlite3; cb: update_callback; user: pointer): pointer; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Enable Or Disable Shared Pager Cache {F10330}
@@ -4663,7 +4660,7 @@ type
** cache setting should set it explicitly.
**
** INVARIANTS:
-**
+**
** {F10331} A successful invocation of [sqlite3_enable_shared_cache(B)]
** will enable or disable shared cache mode for any subsequently
** created [database connection] in the same process.
@@ -4676,7 +4673,7 @@ type
**
** {F10339} Shared cache is disabled by default.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_enable_shared_cache{$IFDEF D}: function{$ENDIF}(B: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_enable_shared_cache{$IFDEF D}: function{$ENDIF}(B: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Attempt To Free Heap Memory {F17340}
@@ -4699,7 +4696,7 @@ type
** of bytes actually freed; which might be more or less
** than the amount requested.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_release_memory{$IFDEF D}: function{$ENDIF}(N: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_release_memory{$IFDEF D}: function{$ENDIF}(N: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Impose A Limit On Heap Size {F17350}
@@ -4720,9 +4717,9 @@ type
** [sqlite3_release_memory()] will only be called when memory is exhausted.
** The default value for the soft heap limit is zero.
**
-** SQLite makes a best effort to honor the soft heap limit.
+** SQLite makes a best effort to honor the soft heap limit.
** But if the soft heap limit cannot honored; execution will
-** continue without error or notification. This is why the limit is
+** continue without error or notification. This is why the limit is
** called a "soft" limit. It is advisory only.
**
** Prior to SQLite version 3.5.0; this routine only constrained the memory
@@ -4761,29 +4758,29 @@ type
** {F16358} Each call to [sqlite3_soft_heap_limit(N)] overrides the
** values set by all prior calls.
*)
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_soft_heap_limit{$IFDEF D}: procedure{$ENDIF}(N: cint); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_soft_heap_limit{$IFDEF D}: procedure{$ENDIF}(N: cint); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Extract Metadata About A Column Of A Table {F12850}
**
** This routine
** returns meta-data about a specific column of a specific database
-** table accessible using the connection handle passed as the first function
+** table accessible using the connection handle passed as the first function
** argument.
**
** The column is identified by the second; third and fourth parameters to
** this function. The second parameter is either the name of the database
** (i.e. "main"; "temp" or an attached database) containing the specified
** table or NULL. If it is NULL; then all attached databases are searched
-** for the table using the same algorithm as the database engine uses to
+** for the table using the same algorithm as the database engine uses to
** resolve unqualified table references.
**
-** The third and fourth parameters to this function are the table and column
+** The third and fourth parameters to this function are the table and column
** name of the desired column; respectively. Neither of these parameters
** may be NULL.
**
** Meta information is returned by writing to the memory locations passed as
-** the 5th and subsequent parameters to this function. Any of these
+** the 5th and subsequent parameters to this function. Any of these
** arguments may be NULL; in which case the corresponding element of meta
** information is ommitted.
**
@@ -4792,7 +4789,7 @@ type
** -----------------------------------
**
** 5th const char* Data type
-** 6th const char* Name of the default collation sequence
+** 6th const char* Name of the default collation sequence
** 7th cint True if the column has a NOT NULL constracint
** 8th cint True if the column is part of the PRIMARY KEY
** 9th cint True if the column is AUTOINCREMENT
@@ -4800,7 +4797,7 @@ type
**
**
** The memory pointed to by the character pointers returned for the
-** declaration type and collation sequence is valid only until the next
+** declaration type and collation sequence is valid only until the next
** call to any sqlite API function.
**
** If the specified table is actually a view; then an error is returned.
@@ -4837,7 +4834,7 @@ type
pNotNull: pcint; (* OUTPUT: True if NOT NULL constracint exists *)
pPrimaryKey: pcint; (* OUTPUT: True if column part of PK *)
pAutoinc: pcint (* OUTPUT: True if column is auto-increment *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Load An Extension {F12600}
@@ -4867,7 +4864,7 @@ type
zFile: pchar; (* Name of the shared library containing extension *)
zProc: pchar; (* Entry point. Derived from zFile if 0 *)
pzErrMsg: ppchar (* Put error message here if not 0 *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Enable Or Disable Extension Loading {F12620}
@@ -4882,7 +4879,7 @@ type
** with onoff==1 to turn extension loading on
** and call it with onoff==0 to turn it back off again. {END}
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_enable_load_extension{$IFDEF D}: function{$ENDIF}(db: psqlite3; onoff: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_enable_load_extension{$IFDEF D}: function{$ENDIF}(db: psqlite3; onoff: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Make Arrangements To Automatically Load An Extension {F12640}
@@ -4910,7 +4907,7 @@ type
** This interface is experimental and is subject to change or
** removal in future releases of SQLite.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_auto_extension{$IFDEF D}: function{$ENDIF}(xEntrypoint: pointer): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_auto_extension{$IFDEF D}: function{$ENDIF}(xEntrypoint: pointer): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
@@ -4926,7 +4923,7 @@ type
** This interface is experimental and is subject to change or
** removal in future releases of SQLite.
*)
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_reset_auto_extension{$IFDEF D}: procedure{$ENDIF}(); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_reset_auto_extension{$IFDEF D}: procedure{$ENDIF}(); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
@@ -5091,7 +5088,7 @@ const
zName: pchar; (* Name of the module *)
module: psqlite3_module; (* Methods for the module *)
user: pointer (* Client data for xCreate/xConnect *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Register A Virtual Table Implementation {F18210}
@@ -5106,7 +5103,7 @@ const
module: psqlite3_module; (* Methods for the module *)
user: pointer; (* Client data for xCreate/xConnect *)
xdestroycb: xDestroy (* Module destructor function *)
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Virtual Table Instance Object {F18010}
@@ -5164,7 +5161,7 @@ type
** to declare the format (the names and datatypes of the columns) of
** the virtual tables they implement.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_declare_vtab{$IFDEF D}: function{$ENDIF}(db: psqlite3; zCreateTable: pchar): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_declare_vtab{$IFDEF D}: function{$ENDIF}(db: psqlite3; zCreateTable: pchar): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Overload A Function For A Virtual Table {F18300}
@@ -5184,7 +5181,7 @@ type
** This API should be considered part of the virtual table interface;
** which is experimental and subject to change.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_overload_function{$IFDEF D}: function{$ENDIF}(db: psqlite3; zFuncName: pchar; nArg: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_overload_function{$IFDEF D}: function{$ENDIF}(db: psqlite3; zFuncName: pchar; nArg: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** The interface to the virtual-table mechanism defined above (back up
@@ -5237,12 +5234,12 @@ type
** TEMP tables; the database name is "temp".
**
** On success; [SQLITE_OK] is returned and the new
-** [sqlite3_blob | blob handle] is written to *ppBlob.
-** Otherwise an error code is returned and
+** [sqlite3_blob | blob handle] is written to *ppBlob.
+** Otherwise an error code is returned and
** any value written to *ppBlob should not be used by the caller.
** This function sets the database-handle error code and message
** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()].
-**
+**
** INVARIANTS:
**
** {F17813} A successful invocation of the [sqlite3_blob_open(D;B;T;C;R;F;P)]
@@ -5273,7 +5270,7 @@ type
iRow: sqlite3_int64;
flags: cint;
ppBlob: ppsqlite3_blob
-): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Close A BLOB Handle {F17830}
@@ -5309,14 +5306,14 @@ type
** {F17839} The [sqlite3_blob_close(P)] interfaces closes the
** [sqlite3_blob] object P unconditionally; even if
** [sqlite3_blob_close(P)] returns something other than [SQLITE_OK].
-**
+**
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_close{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_close{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Return The Size Of An Open BLOB {F17840}
**
-** Return the size in bytes of the blob accessible via the open
+** Return the size in bytes of the blob accessible via the open
** [sqlite3_blob] object in its only argument.
**
** INVARIANTS:
@@ -5325,12 +5322,12 @@ type
** in bytes of the BLOB that the [sqlite3_blob] object P
** refers to.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_bytes{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_bytes{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Read Data From A BLOB Incrementally {F17850}
**
-** This function is used to read data from an open
+** This function is used to read data from an open
** [sqlite3_blob | blob-handle] cinto a caller supplied buffer.
** N bytes of data are copied cinto buffer
** Z from the open blob; starting at offset iOffset.
@@ -5370,7 +5367,7 @@ type
** information approprate for that error; where D is the
** database handle that was used to open blob handle P.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_read{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob; Z: pointer; N: cint; iOffset: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_read{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob; Z: pointer; N: cint; iOffset: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Write Data cinto A BLOB Incrementally {F17870}
@@ -5424,7 +5421,7 @@ type
** [sqlite3_errmsg(D)]; and [sqlite3_errmsg16(D)] will return
** information approprate for that error.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_write{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob; Z: pointer; N: cint; iOffset: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_blob_write{$IFDEF D}: function{$ENDIF}(blob: psqlite3_blob; Z: pointer; N: cint; iOffset: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Virtual File System Objects {F11200}
@@ -5441,7 +5438,7 @@ type
** Names are zero-terminated UTF-8 strings.
** If there is no match; a NULL
** pointer is returned. If zVfsName is NULL then the default
-** VFS is returned.
+** VFS is returned.
**
** New VFSes are registered with sqlite3_vfs_register().
** Each new VFS becomes the default VFS if the makeDflt flag is set.
@@ -5451,7 +5448,7 @@ type
** same name are registered; the behavior is undefined. If a
** VFS is registered with a name that is NULL or an empty string;
** then the behavior is undefined.
-**
+**
** Unregister a VFS with the sqlite3_vfs_unregister() interface.
** If the default VFS is unregistered; another VFS is chosen as
** the default. The choice for the new VFS is arbitrary.
@@ -5483,9 +5480,9 @@ type
** [sqlite3_vfs] object P so that it is no longer returned by
** subsequent calls to [sqlite3_vfs_find()].
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_vfs_find{$IFDEF D}: function{$ENDIF}(zVfsName: pchar): psqlite3_vfs; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_vfs_register{$IFDEF D}: function{$ENDIF}(vfs: psqlite3_vfs; makeDflt: cint): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_vfs_unregister{$IFDEF D}: function{$ENDIF}(vfs: psqlite3_vfs): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_vfs_find{$IFDEF D}: function{$ENDIF}(zVfsName: pchar): psqlite3_vfs; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_vfs_register{$IFDEF D}: function{$ENDIF}(vfs: psqlite3_vfs; makeDflt: cint): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_vfs_unregister{$IFDEF D}: function{$ENDIF}(vfs: psqlite3_vfs): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Mutexes {F17000}
@@ -5495,7 +5492,7 @@ type
** use by SQLite; code that links against SQLite is
** permitted to use any of these routines.
**
-** The SQLite source code contains multiple implementations
+** The SQLite source code contains multiple implementations
** of these mutex routines. An appropriate implementation
** is selected automatically at compile-time. The following
** implementations are available in the SQLite core:
@@ -5507,12 +5504,12 @@ type
** <li> SQLITE_MUTEX_NOOP
** </ul>
**
-** The SQLITE_MUTEX_NOOP implementation is a set of routines
-** that does no real locking and is appropriate for use in
+** The SQLITE_MUTEX_NOOP implementation is a set of routines
+** that does no real locking and is appropriate for use in
** a single-threaded application. The SQLITE_MUTEX_OS2;
** SQLITE_MUTEX_PTHREAD; and SQLITE_MUTEX_W32 implementations
** are appropriate for use on os/2; unix; and windows.
-**
+**
** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"); then no mutex
** implementation is included with the library. The
@@ -5559,13 +5556,13 @@ type
**
** {F17018} Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
-** returns a different mutex on every call. {F17034} But for the static
+** returns a different mutex on every call. {F17034} But for the static
** mutex types; the same mutex is returned on every call that has
** the same type number. {END}
**
** {F17019} The sqlite3_mutex_free() routine deallocates a previously
** allocated dynamic mutex. {F17020} SQLite is careful to deallocate every
-** dynamic mutex that it allocates. {U17021} The dynamic mutexes must not be in
+** dynamic mutex that it allocates. {U17021} The dynamic mutexes must not be in
** use when they are deallocated. {U17022} Attempting to deallocate a static
** mutex results in undefined behavior. {F17023} SQLite never deallocates
** a static mutex. {END}
@@ -5596,11 +5593,11 @@ type
**
** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_alloc{$IFDEF D}: function{$ENDIF}(n: cint): psqlite3_mutex; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_mutex_free{$IFDEF D}: procedure{$ENDIF}(mtx: psqlite3_mutex); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_mutex_ente{$IFDEF D}: procedure{$ENDIF}(mtx: psqlite3_mutex); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_try{$IFDEF D}: function{$ENDIF}(mtx: psqlite3_mutex): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_mutex_leave{$IFDEF D}: procedure{$ENDIF}(mtx: psqlite3_mutex); cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_alloc{$IFDEF D}: function{$ENDIF}(n: cint): psqlite3_mutex; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_mutex_free{$IFDEF D}: procedure{$ENDIF}(mtx: psqlite3_mutex); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_mutex_enter{$IFDEF D}: procedure{$ENDIF}(mtx: psqlite3_mutex); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_try{$IFDEF D}: function{$ENDIF}(mtx: psqlite3_mutex): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}sqlite3_mutex_leave{$IFDEF D}: procedure{$ENDIF}(mtx: psqlite3_mutex); cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Mutex Verifcation Routines {F17080}
@@ -5630,11 +5627,11 @@ type
** the reason the mutex does not exist is because the build is not
** using mutexes. And we do not want the assert() containing the
** call to sqlite3_mutex_held() to fail; so a non-zero return is
-** the appropriate thing to do. {F17086} The sqlite3_mutex_notheld()
+** the appropriate thing to do. {F17086} The sqlite3_mutex_notheld()
** interface should also return 1 when given a NULL pointer.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_held{$IFDEF D}: function{$ENDIF}(mtx: psqlite3_mutex): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_notheld{$IFDEF D}: function{$ENDIF}(mtx: psqlite3_mutex): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_held{$IFDEF D}: function{$ENDIF}(mtx: psqlite3_mutex): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_mutex_notheld{$IFDEF D}: function{$ENDIF}(mtx: psqlite3_mutex): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Mutex Types {F17001}
@@ -5676,7 +5673,7 @@ const
**
** See also: [SQLITE_FCNTL_LOCKSTATE]
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_file_control{$IFDEF D}: function{$ENDIF}(db: psqlite3; zDbName: pchar; op: cint; p: pointer): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_file_control{$IFDEF D}: function{$ENDIF}(db: psqlite3; zDbName: pchar; op: cint; p: pointer): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Testing interface {F11400}
@@ -5695,7 +5692,7 @@ const
** Unlike most of the SQLite API; this function is not guaranteed to
** operate consistently from one release to the next.
*)
-{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_test_control{$IFDEF D}: function{$ENDIF}(op: cint; args: array of const): cint; cdecl;{$IFDEF S}external Sqlite3Lib;{$ENDIF}
+{$IFDEF S}function{$ELSE}var{$ENDIF}sqlite3_test_control{$IFDEF D}: function{$ENDIF}(op: cint; args: array of const): cint; cdecl;{$IFDEF S}external sqlite3lib;{$ENDIF}
(*
** CAPI3REF: Testing interface Operation Codes {F11410}
@@ -5719,14 +5716,19 @@ const
SQLITE_TESTCTRL_BITVEC_TEST = 8;
{$IFDEF LOAD_DYNAMICALLY}
-procedure InitialiseSQLite;
-procedure InitialiseSQLite(LibraryName: String);
-procedure ReleaseSQLite;
+function InitializeSqlite(const LibraryName: String = ''): Integer;
+function TryInitializeSqlite(const LibraryName: string = ''): Integer;
+function ReleaseSqlite: Integer;
var
- SQLiteLibraryHandle: TLibHandle;
- SQLiteDefaultLibrary: String = Sqlite3Lib;
-{$ENDIF LOAD_DYNAMICALLY}
+ SqliteLibrary: TLibHandler;
+
+
+{ deprecated }
+function InitialiseSqlite: Integer; deprecated;
+function InitialiseSqlite(const LibraryName: String): Integer; deprecated;
+function TryInitialiseSqlite(const LibraryName: string): Integer; deprecated;
+{$ENDIF}
implementation
@@ -5737,222 +5739,203 @@ end;
{$IFDEF LOAD_DYNAMICALLY}
-resourcestring
- SErrLoadFailed = 'Can not load SQLite client library "%s". Check your installation.';
- SErrAlreadyLoaded = 'SQLIte interface already initialized from library %s.';
-
-procedure LoadAddresses(LibHandle: TLibHandle);
+const
+ sqlite3_symbols: array[0..152{$IFDEF SQLITE_OBSOLETE}+6{$ENDIF}] of TLibSymbol = (
+ (pvar:@sqlite3_libversion; name:'sqlite3_libversion'; weak:false),
+ (pvar:@sqlite3_libversion_number; name:'sqlite3_libversion_number'; weak:false),
+ (pvar:@sqlite3_threadsafe; name:'sqlite3_threadsafe'; weak:false),
+ (pvar:@sqlite3_close; name:'sqlite3_close'; weak:false),
+ (pvar:@sqlite3_exec; name:'sqlite3_exec'; weak:false),
+ (pvar:@sqlite3_extended_result_codes; name:'sqlite3_extended_result_codes'; weak:false),
+ (pvar:@sqlite3_last_insert_rowid; name:'sqlite3_last_insert_rowid'; weak:false),
+ (pvar:@sqlite3_changes; name:'sqlite3_changes'; weak:false),
+ (pvar:@sqlite3_total_changes; name:'sqlite3_total_changes'; weak:false),
+ (pvar:@sqlite3_complete; name:'sqlite3_complete'; weak:false),
+ (pvar:@sqlite3_complete16; name:'sqlite3_complete16'; weak:false),
+ (pvar:@sqlite3_busy_handler; name:'sqlite3_busy_handler'; weak:false),
+ (pvar:@sqlite3_busy_timeout; name:'sqlite3_busy_timeout'; weak:false),
+ (pvar:@sqlite3_get_table; name:'sqlite3_get_table'; weak:false),
+ (pvar:@sqlite3_malloc; name:'sqlite3_malloc'; weak:false),
+ (pvar:@sqlite3_realloc; name:'sqlite3_realloc'; weak:false),
+ (pvar:@sqlite3_memory_used; name:'sqlite3_memory_used'; weak:false),
+ (pvar:@sqlite3_memory_highwater; name:'sqlite3_memory_highwater'; weak:false),
+ (pvar:@sqlite3_set_authorizer; name:'sqlite3_set_authorizer'; weak:false),
+ (pvar:@sqlite3_trace; name:'sqlite3_trace'; weak:false),
+ (pvar:@sqlite3_profile; name:'sqlite3_profile'; weak:false),
+ (pvar:@sqlite3_open; name:'sqlite3_open'; weak:false),
+ (pvar:@sqlite3_open16; name:'sqlite3_open16'; weak:false),
+ (pvar:@sqlite3_open_v2; name:'sqlite3_open_v2'; weak:false),
+ (pvar:@sqlite3_errcode; name:'sqlite3_errcode'; weak:false),
+ (pvar:@sqlite3_errmsg; name:'sqlite3_errmsg'; weak:false),
+ (pvar:@sqlite3_errmsg16; name:'sqlite3_errmsg16'; weak:false),
+ (pvar:@sqlite3_limit; name:'sqlite3_limit'; weak:false),
+ (pvar:@sqlite3_prepare; name:'sqlite3_prepare'; weak:false),
+ (pvar:@sqlite3_prepare_v2; name:'sqlite3_prepare_v2'; weak:false),
+ (pvar:@sqlite3_prepare16; name:'sqlite3_prepare16'; weak:false),
+ (pvar:@sqlite3_prepare16_v2; name:'sqlite3_prepare16_v2'; weak:false),
+ (pvar:@sqlite3_sql; name:'sqlite3_sql'; weak:false),
+ (pvar:@sqlite3_bind_blob; name:'sqlite3_bind_blob'; weak:false),
+ (pvar:@sqlite3_bind_double; name:'sqlite3_bind_double'; weak:false),
+ (pvar:@sqlite3_bind_int; name:'sqlite3_bind_int'; weak:false),
+ (pvar:@sqlite3_bind_int64; name:'sqlite3_bind_int64'; weak:false),
+ (pvar:@sqlite3_bind_null; name:'sqlite3_bind_null'; weak:false),
+ (pvar:@sqlite3_bind_text; name:'sqlite3_bind_text'; weak:false),
+ (pvar:@sqlite3_bind_text16; name:'sqlite3_bind_text16'; weak:false),
+ (pvar:@sqlite3_bind_value; name:'sqlite3_bind_value'; weak:false),
+ (pvar:@sqlite3_bind_zeroblob; name:'sqlite3_bind_zeroblob'; weak:false),
+ (pvar:@sqlite3_bind_parameter_count; name:'sqlite3_bind_parameter_count'; weak:false),
+ (pvar:@sqlite3_bind_parameter_name; name:'sqlite3_bind_parameter_name'; weak:false),
+ (pvar:@sqlite3_bind_parameter_index; name:'sqlite3_bind_parameter_index'; weak:false),
+ (pvar:@sqlite3_clear_bindings; name:'sqlite3_clear_bindings'; weak:false),
+ (pvar:@sqlite3_column_count; name:'sqlite3_column_count'; weak:false),
+ (pvar:@sqlite3_column_name; name:'sqlite3_column_name'; weak:false),
+ (pvar:@sqlite3_column_name16; name:'sqlite3_column_name16'; weak:false),
+ (pvar:@sqlite3_column_database_name; name:'sqlite3_column_database_name'; weak:false),
+ (pvar:@sqlite3_column_database_name16; name:'sqlite3_column_database_name16'; weak:false),
+ (pvar:@sqlite3_column_table_name; name:'sqlite3_column_table_name'; weak:false),
+ (pvar:@sqlite3_column_table_name16; name:'sqlite3_column_table_name16'; weak:false),
+ (pvar:@sqlite3_column_origin_name; name:'sqlite3_column_origin_name'; weak:false),
+ (pvar:@sqlite3_column_origin_name16; name:'sqlite3_column_origin_name16'; weak:false),
+ (pvar:@sqlite3_column_decltype; name:'sqlite3_column_decltype'; weak:false),
+ (pvar:@sqlite3_column_decltype16; name:'sqlite3_column_decltype16'; weak:false),
+ (pvar:@sqlite3_step; name:'sqlite3_step'; weak:false),
+ (pvar:@sqlite3_data_count; name:'sqlite3_data_count'; weak:false),
+ (pvar:@sqlite3_column_blob; name:'sqlite3_column_blob'; weak:false),
+ (pvar:@sqlite3_column_bytes; name:'sqlite3_column_bytes'; weak:false),
+ (pvar:@sqlite3_column_bytes16; name:'sqlite3_column_bytes16'; weak:false),
+ (pvar:@sqlite3_column_double; name:'sqlite3_column_double'; weak:false),
+ (pvar:@sqlite3_column_int; name:'sqlite3_column_int'; weak:false),
+ (pvar:@sqlite3_column_int64; name:'sqlite3_column_int64'; weak:false),
+ (pvar:@sqlite3_column_text; name:'sqlite3_column_text'; weak:false),
+ (pvar:@sqlite3_column_text16; name:'sqlite3_column_text16'; weak:false),
+ (pvar:@sqlite3_column_type; name:'sqlite3_column_type'; weak:false),
+ (pvar:@sqlite3_column_value; name:'sqlite3_column_value'; weak:false),
+ (pvar:@sqlite3_finalize; name:'sqlite3_finalize'; weak:false),
+ (pvar:@sqlite3_reset; name:'sqlite3_reset'; weak:false),
+ (pvar:@sqlite3_create_function; name:'sqlite3_create_function'; weak:false),
+ (pvar:@sqlite3_create_function16; name:'sqlite3_create_function16'; weak:false),
+ (pvar:@sqlite3_value_blob; name:'sqlite3_value_blob'; weak:false),
+ (pvar:@sqlite3_value_bytes; name:'sqlite3_value_bytes'; weak:false),
+ (pvar:@sqlite3_value_bytes16; name:'sqlite3_value_bytes16'; weak:false),
+ (pvar:@sqlite3_value_double; name:'sqlite3_value_double'; weak:false),
+ (pvar:@sqlite3_value_int; name:'sqlite3_value_int'; weak:false),
+ (pvar:@sqlite3_value_int64; name:'sqlite3_value_int64'; weak:false),
+ (pvar:@sqlite3_value_text; name:'sqlite3_value_text'; weak:false),
+ (pvar:@sqlite3_value_text16; name:'sqlite3_value_text16'; weak:false),
+ (pvar:@sqlite3_value_text16le; name:'sqlite3_value_text16le'; weak:false),
+ (pvar:@sqlite3_value_text16be; name:'sqlite3_value_text16be'; weak:false),
+ (pvar:@sqlite3_value_type; name:'sqlite3_value_type'; weak:false),
+ (pvar:@sqlite3_value_numeric_type; name:'sqlite3_value_numeric_type'; weak:false),
+ (pvar:@sqlite3_aggregate_context; name:'sqlite3_aggregate_context'; weak:false),
+ (pvar:@sqlite3_user_data; name:'sqlite3_user_data'; weak:false),
+ (pvar:@sqlite3_context_db_handle; name:'sqlite3_context_db_handle'; weak:false),
+ (pvar:@sqlite3_get_auxdata; name:'sqlite3_get_auxdata'; weak:false),
+ (pvar:@sqlite3_create_collation; name:'sqlite3_create_collation'; weak:false),
+ (pvar:@sqlite3_create_collation_v2; name:'sqlite3_create_collation_v2'; weak:false),
+ (pvar:@sqlite3_create_collation16; name:'sqlite3_create_collation16'; weak:false),
+ (pvar:@sqlite3_collation_needed; name:'sqlite3_collation_needed'; weak:false),
+ (pvar:@sqlite3_collation_needed16; name:'sqlite3_collation_needed16'; weak:false),
+ (pvar:@sqlite3_key; name:'sqlite3_key'; weak:True),
+ (pvar:@sqlite3_rekey; name:'sqlite3_rekey'; weak:True),
+ (pvar:@sqlite3_sleep; name:'sqlite3_sleep'; weak:false),
+ (pvar:@sqlite3_get_autocommit; name:'sqlite3_get_autocommit'; weak:false),
+ (pvar:@sqlite3_db_handle; name:'sqlite3_db_handle'; weak:false),
+ (pvar:@sqlite3_commit_hook; name:'sqlite3_commit_hook'; weak:false),
+ (pvar:@sqlite3_rollback_hook; name:'sqlite3_rollback_hook'; weak:false),
+ (pvar:@sqlite3_update_hook; name:'sqlite3_update_hook'; weak:false),
+ (pvar:@sqlite3_enable_shared_cache; name:'sqlite3_enable_shared_cache'; weak:false),
+ (pvar:@sqlite3_release_memory; name:'sqlite3_release_memory'; weak:false),
+ (pvar:@sqlite3_table_column_metadata; name:'sqlite3_table_column_metadata'; weak:false),
+ (pvar:@sqlite3_load_extension; name:'sqlite3_load_extension'; weak:True),
+ (pvar:@sqlite3_enable_load_extension; name:'sqlite3_enable_load_extension'; weak:True),
+ (pvar:@sqlite3_auto_extension; name:'sqlite3_auto_extension'; weak:false),
+ (pvar:@sqlite3_create_module; name:'sqlite3_create_module'; weak:false),
+ (pvar:@sqlite3_create_module_v2; name:'sqlite3_create_module_v2'; weak:false),
+ (pvar:@sqlite3_declare_vtab; name:'sqlite3_declare_vtab'; weak:false),
+ (pvar:@sqlite3_overload_function; name:'sqlite3_overload_function'; weak:false),
+ (pvar:@sqlite3_blob_open; name:'sqlite3_blob_open'; weak:false),
+ (pvar:@sqlite3_blob_close; name:'sqlite3_blob_close'; weak:false),
+ (pvar:@sqlite3_blob_bytes; name:'sqlite3_blob_bytes'; weak:false),
+ (pvar:@sqlite3_blob_read; name:'sqlite3_blob_read'; weak:false),
+ (pvar:@sqlite3_blob_write; name:'sqlite3_blob_write'; weak:false),
+ (pvar:@sqlite3_vfs_find; name:'sqlite3_vfs_find'; weak:false),
+ (pvar:@sqlite3_vfs_register; name:'sqlite3_vfs_register'; weak:false),
+ (pvar:@sqlite3_vfs_unregister; name:'sqlite3_vfs_unregister'; weak:false),
+ (pvar:@sqlite3_mutex_alloc; name:'sqlite3_mutex_alloc'; weak:false),
+ (pvar:@sqlite3_mutex_try; name:'sqlite3_mutex_try'; weak:false),
+ (pvar:@sqlite3_mutex_held; name:'sqlite3_mutex_held'; weak:True),
+ (pvar:@sqlite3_mutex_notheld; name:'sqlite3_mutex_notheld'; weak:True),
+ (pvar:@sqlite3_file_control; name:'sqlite3_file_control'; weak:false),
+ (pvar:@sqlite3_test_control; name:'sqlite3_test_control'; weak:false),
+ (pvar:@sqlite3_interrupt; name:'sqlite3_interrupt'; weak:false),
+ (pvar:@sqlite3_free_table; name:'sqlite3_free_table'; weak:false),
+ (pvar:@sqlite3_free; name:'sqlite3_free'; weak:false),
+ (pvar:@sqlite3_randomness; name:'sqlite3_randomness'; weak:false),
+ (pvar:@sqlite3_progress_handler; name:'sqlite3_progress_handler'; weak:false),
+ (pvar:@sqlite3_set_auxdata; name:'sqlite3_set_auxdata'; weak:false),
+ (pvar:@sqlite3_result_blob; name:'sqlite3_result_blob'; weak:false),
+ (pvar:@sqlite3_result_double; name:'sqlite3_result_double'; weak:false),
+ (pvar:@sqlite3_result_error; name:'sqlite3_result_error'; weak:false),
+ (pvar:@sqlite3_result_error16; name:'sqlite3_result_error16'; weak:false),
+ (pvar:@sqlite3_result_error_toobig; name:'sqlite3_result_error_toobig'; weak:false),
+ (pvar:@sqlite3_result_error_nomem; name:'sqlite3_result_error_nomem'; weak:false),
+ (pvar:@sqlite3_result_error_code; name:'sqlite3_result_error_code'; weak:false),
+ (pvar:@sqlite3_result_int; name:'sqlite3_result_int'; weak:false),
+ (pvar:@sqlite3_result_int64; name:'sqlite3_result_int64'; weak:false),
+ (pvar:@sqlite3_result_null; name:'sqlite3_result_null'; weak:false),
+ (pvar:@sqlite3_result_text; name:'sqlite3_result_text'; weak:false),
+ (pvar:@sqlite3_result_text16; name:'sqlite3_result_text16'; weak:false),
+ (pvar:@sqlite3_result_text16le; name:'sqlite3_result_text16le'; weak:false),
+ (pvar:@sqlite3_result_text16be; name:'sqlite3_result_text16be'; weak:false),
+ (pvar:@sqlite3_result_value; name:'sqlite3_result_value'; weak:false),
+ (pvar:@sqlite3_result_zeroblob; name:'sqlite3_result_zeroblob'; weak:false),
+ (pvar:@sqlite3_soft_heap_limit; name:'sqlite3_soft_heap_limit'; weak:false),
+ (pvar:@sqlite3_reset_auto_extension; name:'sqlite3_reset_auto_extension'; weak:false),
+ (pvar:@sqlite3_mutex_free; name:'sqlite3_mutex_free'; weak:false),
+ (pvar:@sqlite3_mutex_enter; name:'sqlite3_mutex_enter'; weak:false),
+ (pvar:@sqlite3_mutex_leave; name:'sqlite3_mutex_leave'; weak:false)
+ {$IFDEF SQLITE_OBSOLETE}
+ ,(pvar:@sqlite3_aggregate_count; name:'sqlite3_aggregate_count'; weak:false),
+ (pvar:@sqlite3_expired; name:'sqlite3_expired'; weak:false),
+ (pvar:@sqlite3_transfer_bindings; name:'sqlite3_transfer_bindings'; weak:false),
+ (pvar:@sqlite3_global_recover; name:'sqlite3_global_recover'; weak:false),
+ (pvar:@sqlite3_memory_alarm; name:'sqlite3_memory_alarm'; weak:false),
+ (pvar:@sqlite3_thread_cleanup; name:'sqlite3_thread_cleanup'; weak:false)
+ {$ENDIF}
+ );
+
+function TryInitializeSqlite(const LibraryName: string): Integer;
begin
- pointer(sqlite3_libversion) := GetProcedureAddress(LibHandle,'sqlite3_libversion');
- pointer(sqlite3_libversion_number) := GetProcedureAddress(LibHandle,'sqlite3_libversion_number');
- pointer(sqlite3_threadsafe) := GetProcedureAddress(LibHandle,'sqlite3_threadsafe');
- pointer(sqlite3_close) := GetProcedureAddress(LibHandle,'sqlite3_close');
- pointer(sqlite3_exec) := GetProcedureAddress(LibHandle,'sqlite3_exec');
- pointer(sqlite3_extended_result_codes) := GetProcedureAddress(LibHandle,'sqlite3_extended_result_codes');
- pointer(sqlite3_last_insert_rowid) := GetProcedureAddress(LibHandle,'sqlite3_last_insert_rowid');
- pointer(sqlite3_changes) := GetProcedureAddress(LibHandle,'sqlite3_changes');
- pointer(sqlite3_total_changes) := GetProcedureAddress(LibHandle,'sqlite3_total_changes');
- pointer(sqlite3_complete) := GetProcedureAddress(LibHandle,'sqlite3_complete');
- pointer(sqlite3_complete16) := GetProcedureAddress(LibHandle,'sqlite3_complete16');
- pointer(sqlite3_busy_handler) := GetProcedureAddress(LibHandle,'sqlite3_busy_handler');
- pointer(sqlite3_busy_timeout) := GetProcedureAddress(LibHandle,'sqlite3_busy_timeout');
- pointer(sqlite3_get_table) := GetProcedureAddress(LibHandle,'sqlite3_get_table');
- pointer(sqlite3_malloc) := GetProcedureAddress(LibHandle,'sqlite3_malloc');
- pointer(sqlite3_realloc) := GetProcedureAddress(LibHandle,'sqlite3_realloc');
- pointer(sqlite3_memory_used) := GetProcedureAddress(LibHandle,'sqlite3_memory_used');
- pointer(sqlite3_memory_highwater) := GetProcedureAddress(LibHandle,'sqlite3_memory_highwater');
- pointer(sqlite3_set_authorizer) := GetProcedureAddress(LibHandle,'sqlite3_set_authorizer');
- pointer(sqlite3_trace) := GetProcedureAddress(LibHandle,'sqlite3_trace');
- pointer(sqlite3_profile) := GetProcedureAddress(LibHandle,'sqlite3_profile');
- pointer(sqlite3_open) := GetProcedureAddress(LibHandle,'sqlite3_open');
- pointer(sqlite3_open16) := GetProcedureAddress(LibHandle,'sqlite3_open16');
- pointer(sqlite3_open_v2) := GetProcedureAddress(LibHandle,'sqlite3_open_v2');
- pointer(sqlite3_errcode) := GetProcedureAddress(LibHandle,'sqlite3_errcode');
- pointer(sqlite3_errmsg) := GetProcedureAddress(LibHandle,'sqlite3_errmsg');
- pointer(sqlite3_errmsg16) := GetProcedureAddress(LibHandle,'sqlite3_errmsg16');
- pointer(sqlite3_limit) := GetProcedureAddress(LibHandle,'sqlite3_limit');
- pointer(sqlite3_prepare) := GetProcedureAddress(LibHandle,'sqlite3_prepare');
- pointer(sqlite3_prepare_v2) := GetProcedureAddress(LibHandle,'sqlite3_prepare_v2');
- pointer(sqlite3_prepare16) := GetProcedureAddress(LibHandle,'sqlite3_prepare16');
- pointer(sqlite3_prepare16_v2) := GetProcedureAddress(LibHandle,'sqlite3_prepare16_v2');
- pointer(sqlite3_sql) := GetProcedureAddress(LibHandle,'sqlite3_sql');
- pointer(sqlite3_bind_blob) := GetProcedureAddress(LibHandle,'sqlite3_bind_blob');
- pointer(sqlite3_bind_double) := GetProcedureAddress(LibHandle,'sqlite3_bind_double');
- pointer(sqlite3_bind_int) := GetProcedureAddress(LibHandle,'sqlite3_bind_int');
- pointer(sqlite3_bind_int64) := GetProcedureAddress(LibHandle,'sqlite3_bind_int64');
- pointer(sqlite3_bind_null) := GetProcedureAddress(LibHandle,'sqlite3_bind_null');
- pointer(sqlite3_bind_text) := GetProcedureAddress(LibHandle,'sqlite3_bind_text');
- pointer(sqlite3_bind_text16) := GetProcedureAddress(LibHandle,'sqlite3_bind_text16');
- pointer(sqlite3_bind_value) := GetProcedureAddress(LibHandle,'sqlite3_bind_value');
- pointer(sqlite3_bind_zeroblob) := GetProcedureAddress(LibHandle,'sqlite3_bind_zeroblob');
- pointer(sqlite3_bind_parameter_count) := GetProcedureAddress(LibHandle,'sqlite3_bind_parameter_count');
- pointer(sqlite3_bind_parameter_name) := GetProcedureAddress(LibHandle,'sqlite3_bind_parameter_name');
- pointer(sqlite3_bind_parameter_index) := GetProcedureAddress(LibHandle,'sqlite3_bind_parameter_index');
- pointer(sqlite3_clear_bindings) := GetProcedureAddress(LibHandle,'sqlite3_clear_bindings');
- pointer(sqlite3_column_count) := GetProcedureAddress(LibHandle,'sqlite3_column_count');
- pointer(sqlite3_column_name) := GetProcedureAddress(LibHandle,'sqlite3_column_name');
- pointer(sqlite3_column_name16) := GetProcedureAddress(LibHandle,'sqlite3_column_name16');
- pointer(sqlite3_column_database_name) := GetProcedureAddress(LibHandle,'sqlite3_column_database_name');
- pointer(sqlite3_column_database_name16) := GetProcedureAddress(LibHandle,'sqlite3_column_database_name16');
- pointer(sqlite3_column_table_name) := GetProcedureAddress(LibHandle,'sqlite3_column_table_name');
- pointer(sqlite3_column_table_name16) := GetProcedureAddress(LibHandle,'sqlite3_column_table_name16');
- pointer(sqlite3_column_origin_name) := GetProcedureAddress(LibHandle,'sqlite3_column_origin_name');
- pointer(sqlite3_column_origin_name16) := GetProcedureAddress(LibHandle,'sqlite3_column_origin_name16');
- pointer(sqlite3_column_decltype) := GetProcedureAddress(LibHandle,'sqlite3_column_decltype');
- pointer(sqlite3_column_decltype16) := GetProcedureAddress(LibHandle,'sqlite3_column_decltype16');
- pointer(sqlite3_step) := GetProcedureAddress(LibHandle,'sqlite3_step');
- pointer(sqlite3_data_count) := GetProcedureAddress(LibHandle,'sqlite3_data_count');
- pointer(sqlite3_column_blob) := GetProcedureAddress(LibHandle,'sqlite3_column_blob');
- pointer(sqlite3_column_bytes) := GetProcedureAddress(LibHandle,'sqlite3_column_bytes');
- pointer(sqlite3_column_bytes16) := GetProcedureAddress(LibHandle,'sqlite3_column_bytes16');
- pointer(sqlite3_column_double) := GetProcedureAddress(LibHandle,'sqlite3_column_double');
- pointer(sqlite3_column_int) := GetProcedureAddress(LibHandle,'sqlite3_column_int');
- pointer(sqlite3_column_int64) := GetProcedureAddress(LibHandle,'sqlite3_column_int64');
- pointer(sqlite3_column_text) := GetProcedureAddress(LibHandle,'sqlite3_column_text');
- pointer(sqlite3_column_text16) := GetProcedureAddress(LibHandle,'sqlite3_column_text16');
- pointer(sqlite3_column_type) := GetProcedureAddress(LibHandle,'sqlite3_column_type');
- pointer(sqlite3_column_value) := GetProcedureAddress(LibHandle,'sqlite3_column_value');
- pointer(sqlite3_finalize) := GetProcedureAddress(LibHandle,'sqlite3_finalize');
- pointer(sqlite3_reset) := GetProcedureAddress(LibHandle,'sqlite3_reset');
- pointer(sqlite3_create_function) := GetProcedureAddress(LibHandle,'sqlite3_create_function');
- pointer(sqlite3_create_function16) := GetProcedureAddress(LibHandle,'sqlite3_create_function16');
- pointer(sqlite3_value_blob) := GetProcedureAddress(LibHandle,'sqlite3_value_blob');
- pointer(sqlite3_value_bytes) := GetProcedureAddress(LibHandle,'sqlite3_value_bytes');
- pointer(sqlite3_value_bytes16) := GetProcedureAddress(LibHandle,'sqlite3_value_bytes16');
- pointer(sqlite3_value_double) := GetProcedureAddress(LibHandle,'sqlite3_value_double');
- pointer(sqlite3_value_cint) := GetProcedureAddress(LibHandle,'sqlite3_value_cint');
- pointer(sqlite3_value_cint64) := GetProcedureAddress(LibHandle,'sqlite3_value_cint64');
- pointer(sqlite3_value_text) := GetProcedureAddress(LibHandle,'sqlite3_value_text');
- pointer(sqlite3_value_text16) := GetProcedureAddress(LibHandle,'sqlite3_value_text16');
- pointer(sqlite3_value_text16le) := GetProcedureAddress(LibHandle,'sqlite3_value_text16le');
- pointer(sqlite3_value_text16be) := GetProcedureAddress(LibHandle,'sqlite3_value_text16be');
- pointer(sqlite3_value_type) := GetProcedureAddress(LibHandle,'sqlite3_value_type');
- pointer(sqlite3_value_numeric_type) := GetProcedureAddress(LibHandle,'sqlite3_value_numeric_type');
- pointer(sqlite3_aggregate_context) := GetProcedureAddress(LibHandle,'sqlite3_aggregate_context');
- pointer(sqlite3_user_data) := GetProcedureAddress(LibHandle,'sqlite3_user_data');
- pointer(sqlite3_context_db_handle) := GetProcedureAddress(LibHandle,'sqlite3_context_db_handle');
- pointer(sqlite3_get_auxdata) := GetProcedureAddress(LibHandle,'sqlite3_get_auxdata');
- pointer(sqlite3_create_collation) := GetProcedureAddress(LibHandle,'sqlite3_create_collation');
- pointer(sqlite3_create_collation_v2) := GetProcedureAddress(LibHandle,'sqlite3_create_collation_v2');
- pointer(sqlite3_create_collation16) := GetProcedureAddress(LibHandle,'sqlite3_create_collation16');
- pointer(sqlite3_collation_needed) := GetProcedureAddress(LibHandle,'sqlite3_collation_needed');
- pointer(sqlite3_collation_needed16) := GetProcedureAddress(LibHandle,'sqlite3_collation_needed16');
- pointer(sqlite3_key) := GetProcedureAddress(LibHandle,'sqlite3_key');
- pointer(sqlite3_rekey) := GetProcedureAddress(LibHandle,'sqlite3_rekey');
- pointer(sqlite3_sleep) := GetProcedureAddress(LibHandle,'sqlite3_sleep');
- pointer(sqlite3_get_autocommit) := GetProcedureAddress(LibHandle,'sqlite3_get_autocommit');
- pointer(sqlite3_db_handle) := GetProcedureAddress(LibHandle,'sqlite3_db_handle');
- pointer(sqlite3_commit_hook) := GetProcedureAddress(LibHandle,'sqlite3_commit_hook');
- pointer(sqlite3_rollback_hook) := GetProcedureAddress(LibHandle,'sqlite3_rollback_hook');
- pointer(sqlite3_update_hook) := GetProcedureAddress(LibHandle,'sqlite3_update_hook');
- pointer(sqlite3_enable_shared_cache) := GetProcedureAddress(LibHandle,'sqlite3_enable_shared_cache');
- pointer(sqlite3_release_memory) := GetProcedureAddress(LibHandle,'sqlite3_release_memory');
- pointer(sqlite3_table_column_metadata) := GetProcedureAddress(LibHandle,'sqlite3_table_column_metadata');
- pointer(sqlite3_load_extension) := GetProcedureAddress(LibHandle,'sqlite3_load_extension');
- pointer(sqlite3_enable_load_extension) := GetProcedureAddress(LibHandle,'sqlite3_enable_load_extension');
- pointer(sqlite3_auto_extension) := GetProcedureAddress(LibHandle,'sqlite3_auto_extension');
- pointer(sqlite3_create_module) := GetProcedureAddress(LibHandle,'sqlite3_create_module');
- pointer(sqlite3_create_module_v2) := GetProcedureAddress(LibHandle,'sqlite3_create_module_v2');
- pointer(sqlite3_declare_vtab) := GetProcedureAddress(LibHandle,'sqlite3_declare_vtab');
- pointer(sqlite3_overload_function) := GetProcedureAddress(LibHandle,'sqlite3_overload_function');
- pointer(sqlite3_blob_open) := GetProcedureAddress(LibHandle,'sqlite3_blob_open');
- pointer(sqlite3_blob_close) := GetProcedureAddress(LibHandle,'sqlite3_blob_close');
- pointer(sqlite3_blob_bytes) := GetProcedureAddress(LibHandle,'sqlite3_blob_bytes');
- pointer(sqlite3_blob_read) := GetProcedureAddress(LibHandle,'sqlite3_blob_read');
- pointer(sqlite3_blob_write) := GetProcedureAddress(LibHandle,'sqlite3_blob_write');
- pointer(sqlite3_vfs_find) := GetProcedureAddress(LibHandle,'sqlite3_vfs_find');
- pointer(sqlite3_vfs_register) := GetProcedureAddress(LibHandle,'sqlite3_vfs_register');
- pointer(sqlite3_vfs_unregister) := GetProcedureAddress(LibHandle,'sqlite3_vfs_unregister');
- pointer(sqlite3_mutex_alloc) := GetProcedureAddress(LibHandle,'sqlite3_mutex_alloc');
- pointer(sqlite3_mutex_try) := GetProcedureAddress(LibHandle,'sqlite3_mutex_try');
- pointer(sqlite3_mutex_held) := GetProcedureAddress(LibHandle,'sqlite3_mutex_held');
- pointer(sqlite3_mutex_notheld) := GetProcedureAddress(LibHandle,'sqlite3_mutex_notheld');
- pointer(sqlite3_file_control) := GetProcedureAddress(LibHandle,'sqlite3_file_control');
- pointer(sqlite3_test_control) := GetProcedureAddress(LibHandle,'sqlite3_test_control');
- pointer(sqlite3_interrupt) := GetProcedureAddress(LibHandle,'sqlite3_interrupt');
- pointer(sqlite3_free_table) := GetProcedureAddress(LibHandle,'sqlite3_free_table');
- pointer(sqlite3_free) := GetProcedureAddress(LibHandle,'sqlite3_free');
- pointer(sqlite3_randomness) := GetProcedureAddress(LibHandle,'sqlite3_randomness');
- pointer(sqlite3_progress_handler) := GetProcedureAddress(LibHandle,'sqlite3_progress_handler');
- pointer(sqlite3_set_auxdata) := GetProcedureAddress(LibHandle,'sqlite3_set_auxdata');
- pointer(sqlite3_result_blob) := GetProcedureAddress(LibHandle,'sqlite3_result_blob');
- pointer(sqlite3_result_double) := GetProcedureAddress(LibHandle,'sqlite3_result_double');
- pointer(sqlite3_result_error) := GetProcedureAddress(LibHandle,'sqlite3_result_error');
- pointer(sqlite3_result_error16) := GetProcedureAddress(LibHandle,'sqlite3_result_error16');
- pointer(sqlite3_result_error_toobig) := GetProcedureAddress(LibHandle,'sqlite3_result_error_toobig');
- pointer(sqlite3_result_error_nomem) := GetProcedureAddress(LibHandle,'sqlite3_result_error_nomem');
- pointer(sqlite3_result_error_code) := GetProcedureAddress(LibHandle,'sqlite3_result_error_code');
- pointer(sqlite3_result_cint) := GetProcedureAddress(LibHandle,'sqlite3_result_cint');
- pointer(sqlite3_result_cint64) := GetProcedureAddress(LibHandle,'sqlite3_result_cint64');
- pointer(sqlite3_result_null) := GetProcedureAddress(LibHandle,'sqlite3_result_null');
- pointer(sqlite3_result_text) := GetProcedureAddress(LibHandle,'sqlite3_result_text');
- pointer(sqlite3_result_text16) := GetProcedureAddress(LibHandle,'sqlite3_result_text16');
- pointer(sqlite3_result_text16le) := GetProcedureAddress(LibHandle,'sqlite3_result_text16le');
- pointer(sqlite3_result_text16be) := GetProcedureAddress(LibHandle,'sqlite3_result_text16be');
- pointer(sqlite3_result_value) := GetProcedureAddress(LibHandle,'sqlite3_result_value');
- pointer(sqlite3_result_zeroblob) := GetProcedureAddress(LibHandle,'sqlite3_result_zeroblob');
- pointer(sqlite3_soft_heap_limit) := GetProcedureAddress(LibHandle,'sqlite3_soft_heap_limit');
- pointer(sqlite3_reset_auto_extension) := GetProcedureAddress(LibHandle,'sqlite3_reset_auto_extension');
- pointer(sqlite3_mutex_free) := GetProcedureAddress(LibHandle,'sqlite3_mutex_free');
- pointer(sqlite3_mutex_ente) := GetProcedureAddress(LibHandle,'sqlite3_mutex_ente');
- pointer(sqlite3_mutex_leave) := GetProcedureAddress(LibHandle,'sqlite3_mutex_leave');
-{$IFDEF SQLITE_OBSOLETE}
- pointer(sqlite3_aggregate_count) := GetProcedureAddress(LibHandle,'sqlite3_aggregate_count');
- pointer(sqlite3_expired) := GetProcedureAddress(LibHandle,'sqlite3_expired');
- pointer(sqlite3_transfer_bindings) := GetProcedureAddress(LibHandle,'sqlite3_transfer_bindings');
- pointer(sqlite3_global_recover) := GetProcedureAddress(LibHandle,'sqlite3_global_recover');
- pointer(sqlite3_memory_alarm) := GetProcedureAddress(LibHandle,'sqlite3_memory_alarm');
- pointer(sqlite3_thread_cleanup) := GetProcedureAddress(LibHandle,'sqlite3_thread_cleanup');
-{$ENDIF}
+ Result := TryInitializeLibrary(SqliteLibrary, LibraryName);
end;
-var
- RefCount: Integer;
- LoadedLibrary: String;
-
-function TryInitialiseSqlite(const LibraryName: string): Boolean;
+function InitializeSqlite(const LibraryName: String): Integer;
begin
- if InterlockedIncrement(RefCount) = 1 then
- begin
- SQLiteLibraryHandle := LoadLibrary(LibraryName);
- Result := (SQLiteLibraryHandle <> NilHandle);
- if not Result then
- begin
- RefCount := 0;
- Exit;
- end;
- LoadedLibrary := LibraryName;
- LoadAddresses(SQLiteLibraryHandle);
- end else
- Result := True;
+ Result := InitializeLibrary(SqliteLibrary, LibraryName);
end;
-procedure InitialiseSQLite;
+function ReleaseSqlite: Integer;
begin
- InitialiseSQLite(SQLiteDefaultLibrary);
+ Result := ReleaseLibrary(SqliteLibrary);
end;
-procedure InitialiseSQLite(LibraryName: String);
+function InitialiseSqlite: Integer;
begin
- if (LoadedLibrary <> '') and (LoadedLibrary <> LibraryName) then
- raise EInoutError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
+ Result := InitializeSqlite('');
+end;
- if not TryInitialiseSQLIte(LibraryName) then
- raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName]);
+function InitialiseSqlite(const LibraryName: String): Integer;
+begin
+ Result := InitializeSqlite(LibraryName);
end;
-procedure ReleaseSQLite;
+function TryInitialiseSqlite(const LibraryName: string): Integer;
begin
- if InterlockedDecrement(RefCount) <= 0 then
- begin
- if SQLiteLibraryHandle <> NilHandle then
- UnloadLibrary(SQLiteLibraryHandle);
- SQLiteLibraryHandle := NilHandle;
- LoadedLibrary := '';
- RefCount := 0;
- end;
+ Result := TryInitializeSqlite(LibraryName);
end;
+initialization
+ SqliteLibrary := LibraryHandler('sqlite', [sqlite3lib], @sqlite3_symbols, Length(sqlite3_symbols));
{$ENDIF}
end.
diff --git a/packages/unzip/src/unzipdll.pp b/packages/unzip/src/unzipdll.pp
index 06efc20f79..b477c0a946 100644
--- a/packages/unzip/src/unzipdll.pp
+++ b/packages/unzip/src/unzipdll.pp
@@ -52,7 +52,7 @@ uses
Windows,
{$ENDIF WIN32}
{$ENDIF OS2}
- Unzip, Dos;
+ Unzip51g, Dos;
type
UzpMainFunc = function (ArgC: longint; var ArgV: TArgV): longint; cdecl;
@@ -237,6 +237,6 @@ begin
WriteLn ('under some conditions (e.g. for long names and drives not supporting them).');
Write (#13#10'Do you want to continue now (y/N)? ');
ReadLn (C);
- if UpCase (C) = 'Y' then FileUnzipEx := TFileUnzipEx (@Unzip.FileUnzipEx) else Halt (255);
+ if UpCase (C) = 'Y' then FileUnzipEx := TFileUnzipEx (@Unzip51g.FileUnzipEx) else Halt (255);
end;
end.
diff --git a/packages/winceunits/src/commctrl.pp b/packages/winceunits/src/commctrl.pp
index 931bbefeef..5e84f54e07 100644
--- a/packages/winceunits/src/commctrl.pp
+++ b/packages/winceunits/src/commctrl.pp
@@ -467,6 +467,9 @@ const
RBHT_CLIENT = $0003;
RBHT_GRABBER = $0004;
+ CMDBAR_HELP = $000B;
+ CMDBAR_OK = $F000;
+
//*****************************************************************************
// types
//*****************************************************************************
diff --git a/packages/winunits-base/Makefile b/packages/winunits-base/Makefile
index 3b4b1d42d7..43a4da1227 100644
--- a/packages/winunits-base/Makefile
+++ b/packages/winunits-base/Makefile
@@ -1,5 +1,5 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/11]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -441,178 +441,178 @@ ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_UNITS+=buildwinutilsbase
endif
ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
endif
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_RSTS+=jwawintype comconst
@@ -1508,6 +1508,37 @@ endif
else
CROSSBINDIR=
endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifeq ($(CPU_TARGET),powerpc64)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
BATCHEXT=.bat
LOADEREXT=.as
EXEEXT=.exe
@@ -2078,180 +2109,372 @@ else
TAROPT=vz
TAREXT=.tar.gz
endif
-override REQUIRE_PACKAGES=rtl
+override REQUIRE_PACKAGES=rtl fcl-registry fcl-base
ifeq ($(FULL_TARGET),i386-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-go32v2)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-win32)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-os2)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-freebsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-beos)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-haiku)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-netbsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-solaris)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-qnx)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-netware)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-openbsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-wdosx)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-darwin)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-emx)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-watcom)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-wince)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),i386-symbian)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-amiga)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-atari)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-palmos)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),m68k-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-macos)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),sparc-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),sparc-solaris)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),sparc-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),x86_64-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),x86_64-win64)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-palmos)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-darwin)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-wince)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-gba)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-nds)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),arm-symbian)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),avr-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),armeb-linux)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifeq ($(FULL_TARGET),armeb-embedded)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
endif
ifdef REQUIRE_PACKAGES_RTL
PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
@@ -2279,6 +2502,110 @@ ifdef UNITDIR_RTL
override COMPILER_UNITDIR+=$(UNITDIR_RTL)
endif
endif
+ifdef REQUIRE_PACKAGES_FCL-BASE
+PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-BASE),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-BASE)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-BASE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-BASE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-BASE=
+UNITDIR_FCL-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-BASE),)
+UNITDIR_FCL-BASE:=$(firstword $(UNITDIR_FCL-BASE))
+else
+UNITDIR_FCL-BASE=
+endif
+endif
+ifdef UNITDIR_FCL-BASE
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-BASE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_ICONVENC
+PACKAGEDIR_ICONVENC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /iconvenc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_ICONVENC),)
+ifneq ($(wildcard $(PACKAGEDIR_ICONVENC)/units/$(TARGETSUFFIX)),)
+UNITDIR_ICONVENC=$(PACKAGEDIR_ICONVENC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_ICONVENC=$(PACKAGEDIR_ICONVENC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_ICONVENC)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_ICONVENC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_ICONVENC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_ICONVENC=
+UNITDIR_ICONVENC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /iconvenc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_ICONVENC),)
+UNITDIR_ICONVENC:=$(firstword $(UNITDIR_ICONVENC))
+else
+UNITDIR_ICONVENC=
+endif
+endif
+ifdef UNITDIR_ICONVENC
+override COMPILER_UNITDIR+=$(UNITDIR_ICONVENC)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-XML
+PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-XML),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-XML=
+UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-XML),)
+UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
+else
+UNITDIR_FCL-XML=
+endif
+endif
+ifdef UNITDIR_FCL-XML
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-REGISTRY
+PACKAGEDIR_FCL-REGISTRY:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-registry/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-REGISTRY),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-REGISTRY)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-REGISTRY=$(PACKAGEDIR_FCL-REGISTRY)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-REGISTRY=$(PACKAGEDIR_FCL-REGISTRY)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-REGISTRY)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-REGISTRY) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-REGISTRY)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-REGISTRY=
+UNITDIR_FCL-REGISTRY:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-registry/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-REGISTRY),)
+UNITDIR_FCL-REGISTRY:=$(firstword $(UNITDIR_FCL-REGISTRY))
+else
+UNITDIR_FCL-REGISTRY=
+endif
+endif
+ifdef UNITDIR_FCL-REGISTRY
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-REGISTRY)
+endif
+endif
ifndef NOCPUDEF
override FPCOPTDEF=$(ARCH)
endif
@@ -2398,6 +2725,12 @@ endif
endif
ifdef LINKSHARED
endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
ifdef OPT
override FPCOPT+=$(OPT)
endif
diff --git a/packages/winunits-base/Makefile.fpc b/packages/winunits-base/Makefile.fpc
index 1e7e683733..e3bf5d8ead 100644
--- a/packages/winunits-base/Makefile.fpc
+++ b/packages/winunits-base/Makefile.fpc
@@ -6,10 +6,13 @@
name=winunits-base
version=2.5.1
+[require]
+packages=fcl-registry fcl-base
+
[target]
units=buildwinutilsbase
implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \
- shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp
+ shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv
examples=examples
diff --git a/packages/winunits-base/src/activex.pp b/packages/winunits-base/src/activex.pp
index 1f05ade661..2b8161c4fc 100644
--- a/packages/winunits-base/src/activex.pp
+++ b/packages/winunits-base/src/activex.pp
@@ -29,6 +29,8 @@ type
POleStr = Types.POleStr;
PPOleStr = Types.PPOleStr;
TBStr = POleStr;
+ TBStrList = array[0..(high(integer) div sizeof(TBSTR))-1] of TBstr;
+ PBStrList = ^TBStrList;
PBStr = ^TBStr;
TOleEnum = type LongWord;
LargeInt = Types.LargeInt;
@@ -53,6 +55,8 @@ type
CY = CURRENCY;
DATE = DOUBLE;
BSTR = POLESTR;
+ TOleDate = DATE;
+ POleDate = ^TOleDate;
CONST
GUID_NULL : TGUID = '{00000000-0000-0000-0000-000000000000}';
@@ -1201,6 +1205,9 @@ TYPE
End;
TBind_Opts = tagBIND_OPTS;
PBind_Opts = ^TBind_Opts;
+ TBindOpts = tagBIND_OPTS;
+ PBindOpts = ^TBindOpts;
+ Bind_Opts = tagBind_opts;
tagBIND_OPTS2_CPP = Record
dwTrackFlags,
@@ -1448,6 +1455,7 @@ TYPE
pTYPEDESC = ^TYPEDESC;
tagTYPEKIND = Dword;
TYPEKIND = tagTYPEKIND;
+ TTYPEKIND = TYPEKIND;
INVOKEKIND = Dword;
tagTYPEDESC = Record
Case Integer OF
@@ -1500,6 +1508,7 @@ TYPE
End;
VARDESC = tagVARDESC;
LPVARDESC = ^VARDESC;
+ pVARDESC = LPVARDESC;
tagDISPPARAMS = Record
rgvarg : lpVARIANTARG;
rgdispidNamedArgs : lpDISPID;
@@ -1560,6 +1569,7 @@ TYPE
TYPEATTR = tagTYPEATTR;
LPTYPEATTR = ^TYPEATTR;
+ PTYPEAttr = LPTYPEATTR;
tagTLIBATTR = Record
GUID : guid;
@@ -1575,6 +1585,7 @@ TYPE
PTLIBAttr = LPTLIBATTR;
LPFUNCDESC = ^FUNCDESC;
+ PFUNCDESC = LPFUNCDESC;
tagFUNCDESC = Record
memid : MEMBERID;
@@ -2816,11 +2827,11 @@ TYPE
{$ifndef Call_as}
Function GetFuncDesc(index: UINT; OUT ppFuncDesc: lpFUNCDESC):HResult;StdCall;
Function GetVarDesc(index: UINT; OUT ppVarDesc: lpVARDESC):HResult;StdCall;
- Function GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+ Function GetNames(memid: MEMBERID; rgBstrNames: PBStrList; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
{$else}
Function GetFuncDesc(index: UINT; OUT ppFuncDesc: LPFUNCDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
Function GetVarDesc(index: UINT; OUT ppVarDesc: LPVARDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
- Function GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+ Function GetNames(memid: MEMBERID; rgBstrNames: PBStrList; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
{$endif}
Function GetRefTypeOfImplType(index: UINT; OUT pRefType: HREFTYPE):HResult;StdCall;
Function GetImplTypeFlags(index: UINT; OUT pImplTypeFlags: WINT):HResult;StdCall;
@@ -2835,9 +2846,10 @@ TYPE
Function LocalInvoke ():HResult;StdCall;
{$endif}
{$ifndef Call_as}
- Function GetDocumentation(memid: MEMBERID; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+ //Function GetDocumentation(memid: MEMBERID; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+ Function GetDocumentation(memid: MEMBERID; pBstrName: PWideString; pBstrDocString: PWideString; pdwHelpContext: PDWORD; pBstrHelpFile: PWideString):HResult;StdCall;
{$else}
- Function GetDocumentation(memid: MEMBERID; refPtrFlags: DWORD; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+ Function GetDocumentation(memid: MEMBERID; refPtrFlags: DWORD; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
{$endif}
{$ifndef Call_as}
@@ -2866,18 +2878,18 @@ TYPE
Function GetContainingTypeLib(OUT ppTLib: ITypeLib; OUT pIndex: UINT):HResult;StdCall;
{$endif}
{$ifndef Call_as}
- Procedure ReleaseTypeAttr(Const pTypeAttr: TypeAttr); StdCall;
+ Procedure ReleaseTypeAttr( pTypeAttr: pTypeAttr); StdCall;
{$else}
Function ReleaseTypeAttr():HResult;StdCall;
{$endif}
{$ifndef Call_as}
- Procedure ReleaseFuncDesc(const pFuncDesc : FUNCDESC); StdCall;
+ Procedure ReleaseFuncDesc( pFuncDesc : lpFUNCDESC); StdCall;
{$else}
Function LocalReleaseFuncDesc():HResult;StdCall;
{$endif}
{$ifndef Call_as}
- Procedure ReleaseVarDesc(Const pVarDesc : VarDesc);
+ Procedure ReleaseVarDesc( pVarDesc : lpVarDesc); stdcall;
{$else}
Function LocalReleaseVarDesc():HResult;StdCall;
{$endif}
diff --git a/packages/winunits-base/src/buildwinutilsbase.pp b/packages/winunits-base/src/buildwinutilsbase.pp
index 9ada8f9333..3561a422fc 100644
--- a/packages/winunits-base/src/buildwinutilsbase.pp
+++ b/packages/winunits-base/src/buildwinutilsbase.pp
@@ -23,7 +23,7 @@ interface
uses
flatsb, winver, mmsystem, comconst, commctrl, comobj, commdlg,
ole2, activex, shellapi, shlobj, oleserver, shfolder, richedit,
- imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp;
+ imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,comserv;
implementation
diff --git a/packages/winunits-base/src/comobj.pp b/packages/winunits-base/src/comobj.pp
index 8c30a84fa3..0bdd8aa1a9 100644
--- a/packages/winunits-base/src/comobj.pp
+++ b/packages/winunits-base/src/comobj.pp
@@ -18,8 +18,10 @@ unit comobj;
interface
+{ $define DEBUG_COM}
+{ $define DUMMY_REG}
uses
- Windows,Types,Variants,Sysutils,ActiveX;
+ Windows,Types,Variants,Sysutils,ActiveX,classes;
type
EOleError = class(Exception);
@@ -44,6 +46,10 @@ unit comobj;
EOleRegistrationError = class(EOleError);
+ TOleStream = Class(TProxyStream)
+ procedure Check(err:integer);override;
+ end;
+
TComServerObject = class(TObject)
protected
function CountObject(Created: Boolean): Integer; virtual; abstract;
@@ -68,9 +74,16 @@ unit comobj;
TFactoryProc = procedure(Factory: TComObjectFactory) of object;
+ { TComClassManager }
+
TComClassManager = class(TObject)
+ private
+ fClassFactoryList: TList;
+ public
constructor Create;
destructor Destroy; override;
+ procedure AddObjectFactory(factory: TComObjectFactory);
+ procedure RemoveObjectFactory(factory: TComObjectFactory);
procedure ForEachFactory(ComServer: TComServerObject; FactoryProc: TFactoryProc);
function GetFactoryFromClass(ComClass: TClass): TComObjectFactory;
function GetFactoryFromClassID(const ClassID: TGUID): TComObjectFactory;
@@ -123,18 +136,22 @@ unit comobj;
TClassInstancing = (ciInternal, ciSingleInstance, ciMultiInstance);
TThreadingModel = (tmSingle, tmApartment, tmFree, tmBoth, tmNeutral);
+ { TComObjectFactory }
+
TComObjectFactory = class(TObject, IUnknown, IClassFactory, IClassFactory2)
private
- Next: TComObjectFactory;
+ FRefCount : Integer;
+ //Next: TComObjectFactory;
FComServer: TComServerObject;
FComClass: TClass;
FClassID: TGUID;
FClassName: string;
+ FClassVersion : String;
FDescription: string;
FErrorIID: TGUID;
FInstancing: TClassInstancing;
FLicString: WideString;
- FRegister: Longint;
+ //FRegister: Longint;
FShowErrors: Boolean;
FSupportsLicensing: Boolean;
FThreadingModel: TThreadingModel;
@@ -157,12 +174,16 @@ unit comobj;
constructor Create(ComServer: TComServerObject; ComClass: TComClass;
const ClassID: TGUID; const Name, Description: string;
Instancing: TClassInstancing; ThreadingModel: TThreadingModel = tmSingle);
+ constructor Create(ComServer: TComServerObject; ComClass: TComClass;
+ const ClassID: TGUID; const Name, Version, Description: string;
+ Instancing: TClassInstancing; ThreadingModel: TThreadingModel = tmSingle);
destructor Destroy; override;
function CreateComObject(const Controller: IUnknown): TComObject; virtual;
procedure RegisterClassObject;
procedure UpdateRegistry(Register: Boolean); virtual;
property ClassID: TGUID read FClassID;
property ClassName: string read FClassName;
+ property ClassVersion: string read FClassVersion;
property ComClass: TClass read FComClass;
property ComServer: TComServerObject read FComServer;
property Description: string read FDescription;
@@ -196,6 +217,48 @@ unit comobj;
property ClassInfo : ITypeInfo read FClassInfo;
end;
+ { TAutoObject }
+
+ TAutoObject = class(TTypedComObject, IDispatch)
+ protected
+ { IDispatch }
+ function GetTypeInfoCount(out count : longint) : HResult;stdcall;
+ function GetTypeInfo(Index,LocaleID : longint; out TypeInfo): HResult;stdcall;
+ function GetIDsOfNames(const iid: TGUID; names: Pointer; NameCount, LocaleID: LongInt; DispIDs: Pointer) : HResult;stdcall;
+ function Invoke(DispID: LongInt;const iid : TGUID; LocaleID : longint; Flags: Word;var params; VarResult,ExcepInfo,ArgErr : pointer) : HResult;stdcall;
+ public
+
+ end;
+
+ TAutoClass = class of TAutoObject;
+
+ { TAutoObjectFactory }
+ TAutoObjectFactory = class(TTypedComObjectFactory)
+ public
+ constructor Create(AComServer: TComServerObject; AutoClass: TAutoClass; const AClassID: TGUID;
+ AInstancing: TClassInstancing; AThreadingModel: TThreadingModel = tmSingle);
+ end;
+
+ { TAutoIntfObject }
+
+ //example of how to implement IDispatch: http://www.opensource.apple.com/source/vim/vim-34/vim/src/if_ole.cpp
+ TAutoIntfObject = class(TInterfacedObject, IDispatch, ISupportErrorInfo)
+ private
+ fTypeInfo: ITypeInfo;
+ fInterfacePointer: Pointer;
+ protected
+ { IDispatch }
+ function GetTypeInfoCount(out count : longint) : HResult;stdcall;
+ function GetTypeInfo(Index,LocaleID : longint; out TypeInfo): HResult;stdcall;
+ function GetIDsOfNames(const iid: TGUID; names: Pointer; NameCount, LocaleID: LongInt; DispIDs: Pointer) : HResult;stdcall;
+ function Invoke(DispID: LongInt;const iid : TGUID; LocaleID : longint; Flags: Word;var params; VarResult,ExcepInfo,ArgErr : pointer) : HResult;stdcall;
+
+ { ISupportErrorInfo }
+ function InterfaceSupportsErrorInfo(CONST riid: TIID):HResult;StdCall;
+ public
+ function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override;
+ constructor Create(TypeLib: ITypeLib; const Guid: TGuid);
+ end;
function CreateClassID : ansistring;
@@ -242,7 +305,7 @@ unit comobj;
implementation
uses
- ComConst,Ole2;
+ ComConst, Ole2, Registry, RtlConsts;
var
Uninitializing : boolean;
@@ -360,7 +423,6 @@ implementation
OleCheck(CoCreateInstance(id,nil,CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,IDispatch,result));
end;
-
function GetActiveOleObject(const ClassName : string) : IDispatch;
{$ifndef wince}
var
@@ -377,6 +439,79 @@ implementation
end;
{$endif wince}
+ procedure CreateRegKey(const Key, ValueName, Value: string);
+{$ifndef DUMMY_REG}
+ var
+ Reg: TRegistry;
+{$endif}
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('CreateRegKey: ', Key, ': ', ValueName, ': ', Value );
+{$endif}
+{$ifndef DUMMY_REG}
+ Reg := TRegistry.Create;
+ try
+ Reg.RootKey := HKEY_CLASSES_ROOT;
+ if Reg.OpenKey(Key, True) then
+ begin
+ try
+ Reg.WriteString(ValueName, Value);
+ finally
+ Reg.CloseKey;
+ end;
+ end
+ else
+ raise ERegistryException.CreateResFmt(@SRegCreateFailed, [Key]);
+ finally
+ Reg.Free;
+ end;
+{$endif}
+{$ifdef DEBUG_COM}
+ WriteLn('CreateRegKey exit: ', Key, ': ', ValueName, ': ', Value );
+{$endif}
+ end;
+
+ procedure DeleteRegKey(const Key: string);
+{$ifndef DUMMY_REG}
+ var
+ Reg: TRegistry;
+{$endif}
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('DeleteRegKey: ', Key);
+{$endif}
+{$ifndef DUMMY_REG}
+ Reg := TRegistry.Create;
+ try
+ Reg.RootKey := HKEY_CLASSES_ROOT;
+ Reg.DeleteKey(Key);
+ finally
+ Reg.Free;
+ end;
+{$endif}
+ end;
+
+ function GetRegStringValue(const Key, ValueName: string): string;
+ var
+ Reg: TRegistry;
+ begin
+ Reg := TRegistry.Create();
+ try
+ Reg.RootKey := HKEY_CLASSES_ROOT;
+ if Reg.OpenKeyReadOnly(Key) then
+ begin
+ try
+ Result := Reg.ReadString(ValueName)
+ finally
+ Reg.CloseKey;
+ end;
+ end
+ else
+ Result := '';
+ finally
+ Reg.Free;
+ end;
+ end;
procedure OleError(Code: HResult);
begin
@@ -452,34 +587,89 @@ implementation
constructor TComClassManager.Create;
begin
- RunError(217);
+ fClassFactoryList := TList.create({true});
end;
destructor TComClassManager.Destroy;
+ var i : integer;
begin
- RunError(217);
+ if fClassFactoryList.count>0 Then
+ begin
+ for i:=fClassFactoryList.count-1 downto 0 do
+ tobject(fClassFactoryList[i]).Free;
+ end;
+ fClassFactoryList.Free;
end;
+ procedure TComClassManager.AddObjectFactory(factory: TComObjectFactory);
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('AddObjectFactory: ', GUIDToString(factory.FClassID), ' ', factory.FClassName);
+{$endif}
+ fClassFactoryList.Add(factory);
+ end;
+
+ procedure TComClassManager.RemoveObjectFactory(
+ factory: TComObjectFactory);
+ begin
+ fClassFactoryList.Remove(factory);
+ end;
procedure TComClassManager.ForEachFactory(ComServer: TComServerObject;
FactoryProc: TFactoryProc);
+ var
+ i: Integer;
+ obj: TComObjectFactory;
begin
- RunError(217);
+{$ifdef DEBUG_COM}
+ WriteLn('ForEachFactory');
+{$endif}
+ for i := 0 to fClassFactoryList.Count - 1 do
+ begin
+ obj := TComObjectFactory(fClassFactoryList[i]);
+ if obj.ComServer = ComServer then
+ FactoryProc(obj);
+ end;
end;
function TComClassManager.GetFactoryFromClass(ComClass: TClass
): TComObjectFactory;
+ var
+ i: Integer;
begin
- RunError(217);
+{$ifdef DEBUG_COM}
+ WriteLn('GetFactoryFromClass: ', ComClass.ClassName);
+{$endif}
+ for i := 0 to fClassFactoryList.Count - 1 do
+ begin
+ Result := TComObjectFactory(fClassFactoryList[i]);
+ if ComClass = Result.ComClass then
+ Exit();
+ end;
+ Result := nil;
end;
function TComClassManager.GetFactoryFromClassID(const ClassID: TGUID
): TComObjectFactory;
+ var
+ i: Integer;
begin
- RunError(217);
+{$ifdef DEBUG_COM}
+ WriteLn('GetFactoryFromClassID: ', GUIDToString(ClassId));
+{$endif}
+ for i := 0 to fClassFactoryList.Count - 1 do
+ begin
+ Result := TComObjectFactory(fClassFactoryList[i]);
+ if IsEqualGUID(ClassID, Result.ClassID) then
+ Exit();
+ end;
+{$ifdef DEBUG_COM}
+ WriteLn('GetFactoryFromClassID not found: ', GUIDToString(ClassId));
+{$endif}
+ Result := nil;
end;
@@ -616,49 +806,72 @@ implementation
function TComObjectFactory.GetProgID: string;
begin
- RunError(217);
+ Result := FComServer.GetServerName + '.' + FClassName;
end;
function TComObjectFactory.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
begin
- RunError(217);
+ if GetInterface(IID,Obj) then
+ Result:=S_OK
+ else
+ Result:=E_NOINTERFACE;
end;
function TComObjectFactory._AddRef: Integer; stdcall;
begin
- RunError(217);
+ Result:=InterlockedIncrement(FRefCount);
end;
function TComObjectFactory._Release: Integer; stdcall;
begin
- RunError(217);
+ Result:=InterlockedDecrement(FRefCount);
+ if Result=0 then
+ Self.Destroy;
end;
function TComObjectFactory.CreateInstance(const UnkOuter: IUnknown;
const IID: TGUID; out Obj): HResult; stdcall;
+ var
+ comObject: TComObject;
begin
- RunError(217);
+{$ifdef DEBUG_COM}
+ WriteLn('CreateInstance: ', GUIDToString(IID));
+{$endif}
+ comObject := CreateComObject(UnkOuter);
+ if comObject.GetInterface(IID, Obj) then
+ Result := S_OK
+ else
+ Result := E_NOINTERFACE;
end;
function TComObjectFactory.LockServer(fLock: BOOL): HResult; stdcall;
begin
+{$ifdef DEBUG_COM}
+ WriteLn('LockServer: ', fLock);
+{$endif}
RunError(217);
end;
function TComObjectFactory.GetLicInfo(var licInfo: TLicInfo): HResult; stdcall;
begin
+{$ifdef DEBUG_COM}
+ WriteLn('GetLicInfo');
+{$endif}
RunError(217);
end;
function TComObjectFactory.RequestLicKey(dwResrved: DWORD; out bstrKey: WideString): HResult; stdcall;
begin
+{$ifdef DEBUG_COM}
+ WriteLn('RequestLicKey');
+{$endif}
RunError(217);
end;
@@ -667,6 +880,9 @@ implementation
const unkReserved: IUnknown; const iid: TIID; const bstrKey: WideString; out
vObject): HResult; stdcall;
begin
+{$ifdef DEBUG_COM}
+ WriteLn('CreateInstanceLic');
+{$endif}
RunError(217);
end;
@@ -676,32 +892,150 @@ implementation
Description: string; Instancing: TClassInstancing;
ThreadingModel: TThreadingModel);
begin
- RunError(217);
+ Create(ComServer, ComClass, ClassID, Name, '', Description, Instancing, ThreadingModel);
+ end;
+
+ constructor TComObjectFactory.Create(ComServer: TComServerObject;
+ ComClass: TComClass; const ClassID: TGUID; const Name, Version, Description: string; Instancing: TClassInstancing;
+ ThreadingModel: TThreadingModel);
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TComObjectFactory.Create');
+{$endif}
+ FRefCount := 1;
+ FClassID := ClassID;
+ FThreadingModel := ThreadingModel;
+ FDescription := Description;
+ FClassName := Name;
+ FClassVersion := Version;
+ FComServer := ComServer;
+ FComClass := ComClass;
+ FInstancing := Instancing;;
+ ComClassManager.AddObjectFactory(Self);
end;
destructor TComObjectFactory.Destroy;
begin
- RunError(217);
+ ComClassManager.RemoveObjectFactory(Self);
+ //RunError(217);
end;
function TComObjectFactory.CreateComObject(const Controller: IUnknown
): TComObject;
begin
- RunError(217);
+{$ifdef DEBUG_COM}
+ WriteLn('TComObjectFactory.CreateComObject');
+{$endif}
+ Result := TComClass(FComClass).Create();
end;
procedure TComObjectFactory.RegisterClassObject;
begin
+ {$ifdef DEBUG_COM}
+ WriteLn('TComObjectFactory.RegisterClassObject');
+ {$endif}
RunError(217);
end;
+(* Copy from Sample.RGS (http://www.codeproject.com/KB/atl/RegistryMap.aspx)
+HKCR
+{
+ %PROGID%.%VERSION% = s '%DESCRIPTION%'
+ {
+ CLSID = s '%CLSID%'
+ }
+ %PROGID% = s '%DESCRIPTION%'
+ {
+ CLSID = s '%CLSID%'
+ CurVer = s '%PROGID%.%VERSION%'
+ }
+ NoRemove CLSID
+ {
+ ForceRemove %CLSID% = s '%DESCRIPTION%'
+ {
+ ProgID = s '%PROGID%.%VERSION%'
+ VersionIndependentProgID = s '%PROGID%'
+ ForceRemove 'Programmable'
+ InprocServer32 = s '%MODULE%'
+ {
+ val ThreadingModel = s '%THREADING%'
+ }
+ 'TypeLib' = s '%LIBID%'
+ }
+ }
+}
+*)
+
procedure TComObjectFactory.UpdateRegistry(Register: Boolean);
+ var
+ reg: TRegistry;
+ classidguid: String;
+
+ function ThreadModelToString(model: TThreadingModel): String;
+ begin
+ case model of
+ tmSingle: Result := '';
+ tmApartment: Result := 'Apartment';
+ tmFree: Result := 'Free';
+ tmBoth: Result := 'Both';
+ tmNeutral: Result := 'Neutral';
+ end;
+ end;
+
begin
- RunError(217);
+{$ifdef DEBUG_COM}
+ WriteLn('UpdateRegistry begin');
+{$endif}
+ if Instancing = ciInternal then Exit;
+
+ if Register then
+ begin
+ classidguid := GUIDToString(ClassID);
+ CreateRegKey('CLSID\' + classidguid, '', Description);
+ if ClassVersion <> '' then
+ begin
+ CreateRegKey('CLSID\' + classidguid + '\ProgID', '', ProgID + '.' + ClassVersion);
+ CreateRegKey('CLSID\' + classidguid + '\VersionIndependentProgID', '', ProgID + '.' + ClassVersion);
+ end
+ else
+ CreateRegKey('CLSID\' + classidguid + '\ProgID', '', ProgID);
+
+ CreateRegKey('CLSID\' + classidguid + '\InprocServer32', '', FComServer.ServerFileName);
+
+ //tmSingle, tmApartment, tmFree, tmBoth, tmNeutral
+ CreateRegKey('CLSID\' + classidguid + '\InprocServer32', 'ThreadingModel', ThreadModelToString(ThreadingModel));
+
+ CreateRegKey(ProgID, '', Description);
+ CreateRegKey(ProgID + '\CLSID', '', GUIDToString(ClassID));
+ if ClassVersion <> '' then
+ begin
+ CreateRegKey(ProgID + '\CurVer', '', ProgID + '.' + ClassVersion);
+ CreateRegKey(ProgID + '.' + ClassVersion, '', Description);
+ CreateRegKey(ProgID + '.' + ClassVersion + '\CLSID', '', GUIDToString(ClassID));
+ end;
+
+ end else
+ begin
+ classidguid := GUIDToString(ClassID);
+ DeleteRegKey('CLSID\' + classidguid + '\InprocServer32');
+ DeleteRegKey('CLSID\' + classidguid + '\VersionIndependentProgID');
+ DeleteRegKey('CLSID\' + classidguid + '\ProgID');
+ DeleteRegKey('CLSID\' + classidguid);
+ DeleteRegKey(ProgID + '\CLSID');
+ DeleteRegKey(ProgID);
+ if ClassVersion <> '' then
+ begin
+ DeleteRegKey(ProgID + '.' + ClassVersion + '\CLSID');
+ DeleteRegKey(ProgID + '.' + ClassVersion);
+ end;
+ end;
+{$ifdef DEBUG_COM}
+ WriteLn('UpdateRegistry end');
+{$endif}
end;
@@ -1087,8 +1421,29 @@ implementation
constructor TTypedComObjectFactory.Create(AComServer: TComServerObject; TypedComClass: TTypedComClass; const AClassID: TGUID;
AInstancing: TClassInstancing; AThreadingModel: TThreadingModel = tmSingle);
+ var
+ TypedName, TypedDescription, TypedVersion: WideString;
+ ppTypeAttr: lpTYPEATTR;
begin
- RunError(217);
+ //TDB get name and description from typelib (check if this is a valid guid)
+ OleCheck(AComServer.GetTypeLib.GetTypeInfoOfGuid(AClassID, FClassInfo));
+
+ //bug FPC 0010569 - http://msdn2.microsoft.com/en-us/library/ms221396(VS.85).aspx
+ OleCheck(FClassInfo.GetDocumentation(-1, @TypedName, @TypedDescription, nil, nil));
+ FClassInfo.GetTypeAttr(ppTypeAttr);
+ try
+ TypedVersion := '';
+ if (ppTypeAttr^.wMajorVerNum <> 0) or (ppTypeAttr^.wMinorVerNum <> 0) then
+ begin
+ TypedVersion := IntToStr(ppTypeAttr^.wMajorVerNum);
+ if ppTypeAttr^.wMinorVerNum <> 0 then
+ TypedVersion := TypedVersion + '.' + IntToStr(ppTypeAttr^.wMinorVerNum)
+ end;
+ finally
+ FClassInfo.ReleaseTypeAttr(ppTypeAttr);
+ end;
+
+ inherited Create(AComServer, TypedComClass, AClassID, TypedName, TypedVersion, TypedDescription, AInstancing, AThreadingModel);
end;
@@ -1099,10 +1454,205 @@ implementation
procedure TTypedComObjectFactory.UpdateRegistry(Register: Boolean);
+ var
+ ptla: PTLibAttr;
begin
- RunError(217);
+ if Instancing = ciInternal then
+ Exit;
+
+ if Register then
+ begin
+ inherited UpdateRegistry(Register);
+
+ //http://www.experts-exchange.com/Programming/Misc/Q_20634807.html
+ //There seems to also be Version according to Process Monitor
+ //http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
+ if FComServer.TypeLib = nil then
+ raise Exception.Create('TypeLib is not set!');
+
+ OleCheck(FComServer.TypeLib.GetLibAttr(ptla));
+ try
+ CreateRegKey('CLSID\' + GUIDToString(ClassID) + '\TypeLib', '', GUIDToString(ptla^.GUID));
+ finally
+ FComServer.TypeLib.ReleaseTLibAttr(ptla);
+ end;
+ end else
+ begin
+ DeleteRegKey('CLSID\' + GUIDToString(ClassID) + '\TypeLib');
+ inherited UpdateRegistry(Register);
+ end;
+ end;
+
+ { TAutoIntfObject }
+
+ function TAutoIntfObject.GetTypeInfoCount(out count: longint): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.GetTypeInfoCount');
+{$endif}
+ count := 1;
+ Result := S_OK;
end;
+ function TAutoIntfObject.GetTypeInfo(Index, LocaleID: longint; out TypeInfo
+ ): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.GetTypeInfo: ', Index);
+{$endif}
+ if Index <> 0 then
+ Result := DISP_E_BADINDEX
+ else
+ begin
+ ITypeInfo(TypeInfo) := fTypeInfo;
+ Result := S_OK;
+ end;
+ end;
+
+ function TAutoIntfObject.GetIDsOfNames(const iid: TGUID; names: Pointer;
+ NameCount, LocaleID: LongInt; DispIDs: Pointer): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.GetIDsOfNames: ', GUIDToString(iid));
+{$endif}
+ //return typeinfo->GetIDsOfNames(names, n, dispids);
+ Result := fTypeInfo.GetIDsOfNames(names, NameCount, lpDISPID(DispIDs)^);
+ end;
+
+ function TAutoIntfObject.Invoke(DispID: LongInt; const iid: TGUID;
+ LocaleID: longint; Flags: Word; var params; VarResult, ExcepInfo,
+ ArgErr: pointer): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.Invoke: ', DispID, ': ', Flags, ': ', TDispParams(params).cArgs, ': ', GUIDToString(iid));
+ //WriteLn('TAutoIntfObject.Invoke: ', DispID, ': ', Flags, ': ', TDispParams(params).cArgs, ': ', TDispParams(params).rgvarg^, ': ', GUIDToString(iid));
+{$endif}
+ if not IsEqualGUID(iid, GUID_NULL) then
+ Result := DISP_E_UNKNOWNINTERFACE
+ else
+ // Function Invoke(pvInstance: Pointer; memid: MEMBERID; wFlags: WORD; VAR pDispParams: DISPPARAMS; OUT pVarResult: VARIANT; OUT pExcepInfo: EXCEPINFO; OUT puArgErr: UINT):HResult;StdCall;
+ // Result := fTypeInfo.Invoke(IDispatch(Self), DispID, Flags, TDispParams(params), PVariant(VarResult)^, PExcepInfo(ExcepInfo)^, PUINT(ArgErr)^);
+ Result := fTypeInfo.Invoke(fInterfacePointer, DispID, Flags, TDispParams(params), PVariant(VarResult)^, PExcepInfo(ExcepInfo)^, PUINT(ArgErr)^);
+ end;
+
+ function TAutoIntfObject.InterfaceSupportsErrorInfo(const riid: TIID): HResult;
+ StdCall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.InterfaceSupportsErrorInfo: ', GUIDToString(riid));
+{$endif}
+ if assigned(GetInterfaceEntry(riid)) then
+ Result:=S_OK
+ else
+ Result:=S_FALSE;
+ end;
+
+ function TAutoIntfObject.SafeCallException(ExceptObject: TObject;
+ ExceptAddr: Pointer): HResult;
+ var
+ //Message: string;
+ Handled: Integer;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.SafeCallException');
+{$endif}
+ Handled:=0;
+ Result:=0;
+ //TODO: DO WE NEED THIS ?
+ //if assigned(ServerExceptionHandler) then
+ // begin
+ // if ExceptObject is Exception then
+ // Message:=Exception(ExceptObject).Message;
+ //
+ // ServerExceptionHandler.OnException(ClassName,ExceptObject.ClassName,
+ // Message,PtrInt(ExceptAddr),WideString(GUIDToString(FFactory.ErrorIID)),
+ // FFactory.ProgID,Handled,Result);
+ // end;
+ if Handled=0 then
+ Result:=HandleSafeCallException(ExceptObject,ExceptAddr,StringToGuid('{7C538328-8A75-4EC4-A02E-FB3B27FAA411}'),
+ '','');
+ end;
+
+ constructor TAutoIntfObject.Create(TypeLib: ITypeLib; const Guid: TGuid);
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.Create: ', GUIDToString(Guid));
+{$endif}
+ OleCheck(TypeLib.GetTypeInfoOfGuid(Guid, fTypeInfo));
+ OleCheck(QueryInterface(Guid, fInterfacePointer));
+ end;
+
+ { TAutoObject }
+
+ function TAutoObject.GetTypeInfoCount(out count: longint): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoObject.GetTypeInfoCount');
+{$endif}
+ count := 1;
+ Result := S_OK;
+ end;
+
+ function TAutoObject.GetTypeInfo(Index, LocaleID: longint; out TypeInfo
+ ): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.GetTypeInfo: ', Index);
+{$endif}
+ if Index <> 0 then
+ Result := DISP_E_BADINDEX
+ else
+ begin
+ ITypeInfo(TypeInfo) := TAutoObjectFactory(Factory).ClassInfo;
+ Result := S_OK;
+ end;
+ end;
+
+ function TAutoObject.GetIDsOfNames(const iid: TGUID; names: Pointer; NameCount,
+ LocaleID: LongInt; DispIDs: Pointer): HResult; stdcall;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.GetIDsOfNames: ', GUIDToString(iid));
+{$endif}
+ //return typeinfo->GetIDsOfNames(names, n, dispids);
+ Result := TAutoObjectFactory(Factory).ClassInfo.GetIDsOfNames(names, NameCount, lpDISPID(DispIDs)^);
+ end;
+
+ function TAutoObject.Invoke(DispID: LongInt; const iid: TGUID;
+ LocaleID: longint; Flags: Word; var params; VarResult, ExcepInfo,
+ ArgErr: pointer): HResult; stdcall;
+ var
+ fInterfacePointer: Pointer;
+ begin
+{$ifdef DEBUG_COM}
+ WriteLn('TAutoIntfObject.Invoke: ', DispID, ': ', Flags, ': ', TDispParams(params).cArgs, ': ', GUIDToString(iid));
+ //WriteLn('TAutoIntfObject.Invoke: ', DispID, ': ', Flags, ': ', TDispParams(params).cArgs, ': ', TDispParams(params).rgvarg^, ': ', GUIDToString(iid));
+{$endif}
+ if not IsEqualGUID(iid, GUID_NULL) then
+ Result := DISP_E_UNKNOWNINTERFACE
+ else
+ begin
+ // Function Invoke(pvInstance: Pointer; memid: MEMBERID; wFlags: WORD; VAR pDispParams: DISPPARAMS; OUT pVarResult: VARIANT; OUT pExcepInfo: EXCEPINFO; OUT puArgErr: UINT):HResult;StdCall;
+ // Result := fTypeInfo.Invoke(IDispatch(Self), DispID, Flags, TDispParams(params), PVariant(VarResult)^, PExcepInfo(ExcepInfo)^, PUINT(ArgErr)^);
+ OleCheck(QueryInterface(TAutoObjectFactory(Factory).ClassID, fInterfacePointer));
+ Result := TAutoObjectFactory(Factory).ClassInfo.Invoke(fInterfacePointer, DispID, Flags, TDispParams(params), PVariant(VarResult)^, PExcepInfo(ExcepInfo)^, PUINT(ArgErr)^);
+ end;
+ end;
+
+ { TAutoObjectFactory }
+
+ constructor TAutoObjectFactory.Create(AComServer: TComServerObject;
+ AutoClass: TAutoClass; const AClassID: TGUID; AInstancing: TClassInstancing;
+ AThreadingModel: TThreadingModel);
+ begin
+ inherited Create(AComServer, AutoClass, AClassID, AInstancing, AThreadingModel);
+ end;
+
+procedure TOleStream.Check(err:integer);
+begin
+ OleCheck(err);
+end;
+
const
Initialized : boolean = false;
@@ -1143,4 +1693,3 @@ finalization
CoUninitialize;
end.
-
diff --git a/packages/winunits-base/src/comserv.pp b/packages/winunits-base/src/comserv.pp
new file mode 100644
index 0000000000..069ebc636f
--- /dev/null
+++ b/packages/winunits-base/src/comserv.pp
@@ -0,0 +1,344 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2006 by Florian Klaempfl
+ member of the Free Pascal development team.
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+{$mode objfpc}
+{$H+}
+{$inline on}
+unit comserv;
+
+interface
+
+uses
+ Classes, SysUtils, comobj, ActiveX;
+
+{ $define DEBUG_COM}
+
+//according to doc
+// * ComServer Variable
+// * DllCanUnloadNow Routine
+// * DllGetClassObject Routine
+// * DllRegisterServer Routine
+// * DllUnregisterServer Routine
+// * TComServer Class
+
+//TODO Fix this
+const
+ CLASS_E_CLASSNOTAVAILABLE = -1;
+ SELFREG_E_CLASS = -2;
+
+type
+
+ { TComServer }
+
+ TComServer = class(TComServerObject)
+ private
+ fCountObject: Integer;
+ fCountFactory: Integer;
+ fTypeLib: ITypeLib;
+ fServerName,
+ fServerFileName: String;
+ protected
+ function CountObject(Created: Boolean): Integer; override;
+ function CountFactory(Created: Boolean): Integer; override;
+ function GetHelpFileName: string; override;
+ function GetServerFileName: string; override;
+ function GetServerKey: string; override;
+ function GetServerName: string; override;
+ function GetStartSuspended: Boolean; override;
+ function GetTypeLib: ITypeLib; override;
+ procedure SetHelpFileName(const Value: string); override;
+
+
+ procedure RegisterServerFactory(Factory: TComObjectFactory);
+ procedure UnregisterServerFactory(Factory: TComObjectFactory);
+ public
+ constructor Create;
+ destructor Destroy; override;
+ function CanUnloadNow: Boolean;
+ procedure RegisterServer;
+ procedure UnRegisterServer;
+ end;
+
+var
+ ComServer: TComServer = nil;
+
+//http://msdn.microsoft.com/en-us/library/ms690368%28VS.85%29.aspx
+//If the function succeeds, the return value is S_OK. Otherwise, it is S_FALSE.
+function DllCanUnloadNow: HResult; stdcall;
+
+
+//S_OK - The object was retrieved successfully.
+//CLASS_E_CLASSNOTAVAILABLE - The DLL does not support the class (object definition).
+function DllGetClassObject(const rclsid: REFIID {should be REFCLSID}; const riid: REFIID; out ppv: Pointer): HResult; stdcall;
+
+//S_OK - The registry entries were created successfully.
+//SELFREG_E_TYPELIB - The server was unable to complete the registration of all the type libraries used by its classes.
+//SELFREG_E_CLASS - The server was unable to complete the registration of all the object classes.
+function DllRegisterServer: HResult; stdcall;
+
+//S_OK - The registry entries were deleted successfully.
+//S_FALSE - Unregistration of this server's known entries was successful, but other entries still exist for this server's classes.
+//SELFREG_E_TYPELIB - The server was unable to remove the entries of all the type libraries used by its classes.
+//SELFREG_E_CLASS - The server was unable to remove the entries of all the object classes.
+function DllUnregisterServer: HResult; stdcall;
+
+implementation
+
+uses
+ Windows;
+
+function DllCanUnloadNow: HResult; stdcall;
+begin
+{$ifdef DEBUG_COM}
+ WriteLn('DllCanUnloadNow called');
+{$endif}
+ if ComServer.CanUnloadNow then
+ Result := S_OK
+ else
+ Result := S_FALSE;
+{$ifdef DEBUG_COM}
+ WriteLn('DllCanUnloadNow return: ', Result);
+{$endif}
+end;
+
+{
+ //FROM MSDN (Error messages are different in MSDN.DllGetClassObject)
+
+ HRESULT hres = E_OUTOFMEMORY;
+ *ppvObj = NULL;
+
+ CClassFactory *pClassFactory = new CClassFactory(rclsid);
+ if (pClassFactory != NULL) {
+ hRes = pClassFactory->QueryInterface(riid, ppvObj);
+ pClassFactory->Release();
+ }
+ return hRes;
+}
+
+function DllGetClassObject(const rclsid: REFIID {should be REFCLSID}; const riid: REFIID; out ppv: Pointer): HResult; stdcall;
+var
+ factory: TComObjectFactory;
+begin
+{$ifdef DEBUG_COM}
+ WriteLn('DllGetClassObject called: ', GUIDToString(rclsid), ' ', GUIDToString(riid));
+{$endif}
+
+ factory := ComClassManager.GetFactoryFromClassID(rclsid);
+ if factory = nil then
+ Result := CLASS_E_CLASSNOTAVAILABLE
+ else
+ begin
+ if factory.GetInterface(riid,ppv) then
+ Result := S_OK
+ else
+ Result := CLASS_E_CLASSNOTAVAILABLE;
+{$ifdef DEBUG_COM}
+ WriteLn('DllGetClassObject return: ', Result);
+{$endif}
+ end;
+end;
+
+function DllRegisterServer: HResult; stdcall;
+begin
+{$ifdef DEBUG_COM}
+ WriteLn('DllRegisterServer called');
+{$endif}
+ try
+ ComServer.RegisterServer;
+ Result := S_OK;
+ except
+ Result := SELFREG_E_CLASS;
+ end;
+
+end;
+
+function DllUnregisterServer: HResult; stdcall;
+begin
+{$ifdef DEBUG_COM}
+ WriteLn('DllUnregisterServer called');
+{$endif}
+ try
+ ComServer.UnregisterServer;
+ Result := S_OK;
+ except
+ Result := SELFREG_E_CLASS;
+ end;
+end;
+
+function GetModuleFileName: String;
+const
+ MAX_PATH_SIZE = 2048;
+begin
+ SetLength(Result, MAX_PATH_SIZE);
+ SetLength(Result, Windows.GetModuleFileName(HInstance, @Result[1], MAX_PATH_SIZE));
+end;
+
+function GetModuleName: String;
+begin
+ Result := ExtractFileName(GetModuleFileName);
+ Result := Copy(Result, 1,LastDelimiter('.', Result)-1);
+end;
+
+procedure RegisterTypeLib(TypeLib: ITypeLib; const ModuleName: string);
+var
+ FullPath: WideString;
+begin
+ FullPath := ModuleName;
+ //according to MSDN helpdir can be null
+ OleCheck(ActiveX.RegisterTypeLib(TypeLib, @FullPath[1], nil));
+end;
+
+procedure UnRegisterTypeLib(TypeLib: ITypeLib);
+var
+ ptla: PTLibAttr;
+begin
+ //http://www.experts-exchange.com/Programming/Misc/Q_20634807.html
+ OleCheck(TypeLib.GetLibAttr(ptla));
+ try
+ OleCheck(ActiveX.UnRegisterTypeLib(ptla^.guid, ptla^.wMajorVerNum, ptla^.wMinorVerNum, ptla^.lcid, ptla^.syskind));
+ finally
+ TypeLib.ReleaseTLibAttr(ptla);
+ end;
+end;
+
+
+{ TComServer }
+
+function TComServer.CountObject(Created: Boolean): Integer;
+begin
+ if Created then
+ InterLockedIncrement(fCountObject)
+ else
+ InterLockedDecrement(fCountObject);
+end;
+
+function TComServer.CountFactory(Created: Boolean): Integer;
+begin
+ if Created then
+ InterLockedIncrement(fCountFactory)
+ else
+ InterLockedDecrement(fCountFactory);
+end;
+
+function TComServer.GetHelpFileName: string;
+begin
+ RunError(217);
+end;
+
+function TComServer.GetServerFileName: string;
+begin
+ Result := fServerFileName;
+end;
+
+function TComServer.GetServerKey: string;
+begin
+ RunError(217);
+end;
+
+function TComServer.GetServerName: string;
+begin
+ Result := fServerName;
+end;
+
+function TComServer.GetStartSuspended: Boolean;
+begin
+ RunError(217);
+end;
+
+function TComServer.GetTypeLib: ITypeLib;
+begin
+ Result := fTypeLib;
+end;
+
+procedure TComServer.SetHelpFileName(const Value: string);
+begin
+ RunError(217);
+end;
+
+procedure TComServer.RegisterServerFactory(Factory: TComObjectFactory);
+begin
+ Factory.UpdateRegistry(True);
+end;
+
+procedure TComServer.UnregisterServerFactory(Factory: TComObjectFactory);
+begin
+ Factory.UpdateRegistry(False);
+end;
+
+constructor TComServer.Create;
+var
+ name: WideString;
+begin
+ inherited Create;
+{$ifdef DEBUG_COM}
+ WriteLn('TComServer.Create');
+{$endif}
+ fCountFactory := 0;
+ fCountObject := 0;
+
+ fServerFileName := GetModuleFileName();
+
+ name := fServerFileName;
+ if not(Succeeded(LoadTypeLib(@name[1], fTypeLib))) then
+ fTypeLib := nil;
+
+ if FTypeLib <> nil then
+ begin
+ fTypeLib.GetDocumentation(-1, @name, nil, nil, nil);
+ fServerName := name;
+ end
+ else
+ fServerName := GetModuleName;
+end;
+
+destructor TComServer.Destroy;
+begin
+ inherited Destroy;
+{$ifdef DEBUG_COM}
+ WriteLn('TComServer.Destroy');
+{$endif}
+end;
+
+function TComServer.CanUnloadNow: Boolean;
+begin
+ Result := False;
+end;
+
+procedure TComServer.RegisterServer;
+begin
+ if fTypeLib <> nil then
+ RegisterTypeLib(fTypeLib, fServerFileName);
+
+ ComClassManager.ForEachFactory(self, @RegisterServerFactory);
+end;
+
+procedure TComServer.UnRegisterServer;
+begin
+ if fTypeLib <> nil then
+ UnRegisterTypeLib(fTypeLib);
+
+ ComClassManager.ForEachFactory(self, @UnregisterServerFactory);
+end;
+
+initialization
+{$ifdef DEBUG_COM}
+ WriteLn('comserv initialization begin');
+{$endif}
+ ComServer := TComServer.Create;
+{$ifdef DEBUG_COM}
+ WriteLn('comserv initialization end');
+{$endif}
+finalization
+ ComServer.Free;
+end.
+
diff --git a/packages/winunits-base/src/winutils.pp b/packages/winunits-base/src/winutils.pp
new file mode 100644
index 0000000000..bb6c4b3d35
--- /dev/null
+++ b/packages/winunits-base/src/winutils.pp
@@ -0,0 +1,82 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2009 by the Free Pascal development team
+
+ Misc windows utility functions
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{$mode objfpc}
+unit winutils;
+
+Interface
+
+Uses Windows;
+
+// returns True if the currently logged Windows user has Administrator rights. Delphi.about.com
+// From Delphi.about.com with permission, http://delphi.about.com/od/delphitips2007/qt/is_win_admin.htm
+function IsWindowsAdmin: Boolean;
+
+implementation
+
+const
+ SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)) ;
+
+const
+ SECURITY_BUILTIN_DOMAIN_RID = $00000020;
+ DOMAIN_ALIAS_RID_ADMINS = $00000220;
+
+
+function IsWindowsAdmin: Boolean;
+var
+ hAccessToken: THandle;
+ ptgGroups: PTokenGroups;
+ dwInfoBufferSize: DWORD;
+ psidAdministrators: PSID;
+ g: Integer;
+ bSuccess: BOOL;
+begin
+ Result := False;
+
+ bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken) ;
+ if not bSuccess then
+ begin
+ if GetLastError = ERROR_NO_TOKEN then
+ bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken) ;
+ end;
+
+
+ if bSuccess then
+ begin
+ GetMem(ptgGroups, 1024) ;
+
+ bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize) ;
+
+ CloseHandle(hAccessToken) ;
+
+ if bSuccess then
+ begin
+ AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators) ;
+
+ for g := 0 to ptgGroups^.GroupCount - 1 do
+ if EqualSid(psidAdministrators, ptgGroups^.Groups[g].Sid) then
+ begin
+ Result := True;
+ Break;
+ end;
+
+ FreeSid(psidAdministrators) ;
+ end;
+
+ FreeMem(ptgGroups) ;
+ end;
+end;
+
+end.
diff --git a/packages/winunits-jedi/Makefile b/packages/winunits-jedi/Makefile
index 84631c0856..c437196642 100644
--- a/packages/winunits-jedi/Makefile
+++ b/packages/winunits-jedi/Makefile
@@ -1,5 +1,5 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/11]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -2435,6 +2435,9 @@ REQUIRE_PACKAGES_RTL=1
endif
ifeq ($(FULL_TARGET),i386-win32)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
REQUIRE_PACKAGES_WINUNITS-BASE=1
endif
ifeq ($(FULL_TARGET),i386-os2)
@@ -2556,6 +2559,9 @@ REQUIRE_PACKAGES_RTL=1
endif
ifeq ($(FULL_TARGET),x86_64-win64)
REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-REGISTRY=1
REQUIRE_PACKAGES_WINUNITS-BASE=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
@@ -2629,6 +2635,84 @@ ifdef UNITDIR_RTL
override COMPILER_UNITDIR+=$(UNITDIR_RTL)
endif
endif
+ifdef REQUIRE_PACKAGES_FCL-BASE
+PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-BASE),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-BASE)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-BASE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-BASE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-BASE=
+UNITDIR_FCL-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-BASE),)
+UNITDIR_FCL-BASE:=$(firstword $(UNITDIR_FCL-BASE))
+else
+UNITDIR_FCL-BASE=
+endif
+endif
+ifdef UNITDIR_FCL-BASE
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-BASE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-XML
+PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-XML),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-XML=
+UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-XML),)
+UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
+else
+UNITDIR_FCL-XML=
+endif
+endif
+ifdef UNITDIR_FCL-XML
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-REGISTRY
+PACKAGEDIR_FCL-REGISTRY:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-registry/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-REGISTRY),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-REGISTRY)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-REGISTRY=$(PACKAGEDIR_FCL-REGISTRY)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-REGISTRY=$(PACKAGEDIR_FCL-REGISTRY)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-REGISTRY)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FCL-REGISTRY) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-REGISTRY)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-REGISTRY=
+UNITDIR_FCL-REGISTRY:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-registry/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-REGISTRY),)
+UNITDIR_FCL-REGISTRY:=$(firstword $(UNITDIR_FCL-REGISTRY))
+else
+UNITDIR_FCL-REGISTRY=
+endif
+endif
+ifdef UNITDIR_FCL-REGISTRY
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-REGISTRY)
+endif
+endif
ifdef REQUIRE_PACKAGES_WINUNITS-BASE
PACKAGEDIR_WINUNITS-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits-base/Makefile.fpc,$(PACKAGESDIR))))))
ifneq ($(PACKAGEDIR_WINUNITS-BASE),)
diff --git a/packages/winunits-jedi/Makefile.fpc b/packages/winunits-jedi/Makefile.fpc
index 04f467be5b..2ad94aaf35 100644
--- a/packages/winunits-jedi/Makefile.fpc
+++ b/packages/winunits-jedi/Makefile.fpc
@@ -7,8 +7,8 @@ name=winunits-jedi
version=2.5.1
[require]
-packages_win32=winunits-base
-packages_win64=winunits-base
+packages_win32=winunits-base fcl-registry fcl-base
+packages_win64=winunits-base fcl-registry fcl-base
[target]
units=buildjwa
diff --git a/packages/zorba/Makefile b/packages/zorba/Makefile
new file mode 100644
index 0000000000..380112b857
--- /dev/null
+++ b/packages/zorba/Makefile
@@ -0,0 +1,2354 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/11/01]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifeq ($(OS_TARGET),darwin)
+ifeq ($(OS_SOURCE),darwin)
+DARWIN2DARWIN=1
+endif
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+ifndef DARWIN2DARWIN
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=zorba
+override PACKAGE_VERSION=0.9.9
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_UNITS+=zorba zorbadyn
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+override SHARED_BUILD=n
+override SHARED_BUILD=n
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+ @$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+ $(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+ $(MAKE) all DEBUG=1
+fpc_release:
+ $(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+ $(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+ $(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(PPUEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.lpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.dpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%.res: %.rc
+ windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+ $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+ $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+ @$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+ $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+ $(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+ -$(UPXPROG) $(INSTALLEXEFILES)
+endif
+ $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+ $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+ $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+ $(MKDIR) $(INSTALL_LIBDIR)
+ $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+ ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+ $(MKDIR) $(INSTALL_DATADIR)
+ $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+ $(MKDIR) $(INSTALL_SOURCEDIR)
+ $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+ $(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+ $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+ $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+ $(MKDIR) $(DIST_DESTDIR)
+ $(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+ echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+ echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+ echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+ /bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+ $(RUNBATCH) $(ZIPWRAPPER)
+else
+ $(ZIPWRAPPER)
+endif
+endif
+ $(DEL) $(ZIPWRAPPER)
+else
+ $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+ $(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+ $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+ -$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+ -$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+ -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ -$(DELTREE) units
+ -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+ -$(DEL) *.o *.ppu *.a
+endif
+ -$(DELTREE) *$(SMARTEXT)
+ -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+ -$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+ -$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+ @$(ECHO)
+ @$(ECHO) == Package info ==
+ @$(ECHO) Package Name..... $(PACKAGE_NAME)
+ @$(ECHO) Package Version.. $(PACKAGE_VERSION)
+ @$(ECHO)
+ @$(ECHO) == Configuration info ==
+ @$(ECHO)
+ @$(ECHO) FPC.......... $(FPC)
+ @$(ECHO) FPC Version.. $(FPC_VERSION)
+ @$(ECHO) Source CPU... $(CPU_SOURCE)
+ @$(ECHO) Target CPU... $(CPU_TARGET)
+ @$(ECHO) Source OS.... $(OS_SOURCE)
+ @$(ECHO) Target OS.... $(OS_TARGET)
+ @$(ECHO) Full Source.. $(FULL_SOURCE)
+ @$(ECHO) Full Target.. $(FULL_TARGET)
+ @$(ECHO) SourceSuffix. $(SOURCESUFFIX)
+ @$(ECHO) TargetSuffix. $(TARGETSUFFIX)
+ @$(ECHO)
+ @$(ECHO) == Directory info ==
+ @$(ECHO)
+ @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES)
+ @$(ECHO)
+ @$(ECHO) Basedir......... $(BASEDIR)
+ @$(ECHO) FPCDir.......... $(FPCDIR)
+ @$(ECHO) CrossBinDir..... $(CROSSBINDIR)
+ @$(ECHO) UnitsDir........ $(UNITSDIR)
+ @$(ECHO) PackagesDir..... $(PACKAGESDIR)
+ @$(ECHO)
+ @$(ECHO) GCC library..... $(GCCLIBDIR)
+ @$(ECHO) Other library... $(OTHERLIBDIR)
+ @$(ECHO)
+ @$(ECHO) == Tools info ==
+ @$(ECHO)
+ @$(ECHO) As........ $(AS)
+ @$(ECHO) Ld........ $(LD)
+ @$(ECHO) Ar........ $(AR)
+ @$(ECHO) Rc........ $(RC)
+ @$(ECHO)
+ @$(ECHO) Mv........ $(MVPROG)
+ @$(ECHO) Cp........ $(CPPROG)
+ @$(ECHO) Rm........ $(RMPROG)
+ @$(ECHO) GInstall.. $(GINSTALL)
+ @$(ECHO) Echo...... $(ECHO)
+ @$(ECHO) Shell..... $(SHELL)
+ @$(ECHO) Date...... $(DATE)
+ @$(ECHO) FPCMake... $(FPCMAKE)
+ @$(ECHO) PPUMove... $(PPUMOVE)
+ @$(ECHO) Upx....... $(UPXPROG)
+ @$(ECHO) Zip....... $(ZIPPROG)
+ @$(ECHO)
+ @$(ECHO) == Object info ==
+ @$(ECHO)
+ @$(ECHO) Target Loaders........ $(TARGET_LOADERS)
+ @$(ECHO) Target Units.......... $(TARGET_UNITS)
+ @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS)
+ @$(ECHO) Target Programs....... $(TARGET_PROGRAMS)
+ @$(ECHO) Target Dirs........... $(TARGET_DIRS)
+ @$(ECHO) Target Examples....... $(TARGET_EXAMPLES)
+ @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+ @$(ECHO)
+ @$(ECHO) Clean Units......... $(CLEAN_UNITS)
+ @$(ECHO) Clean Files......... $(CLEAN_FILES)
+ @$(ECHO)
+ @$(ECHO) Install Units....... $(INSTALL_UNITS)
+ @$(ECHO) Install Files....... $(INSTALL_FILES)
+ @$(ECHO)
+ @$(ECHO) == Install info ==
+ @$(ECHO)
+ @$(ECHO) DateStr.............. $(DATESTR)
+ @$(ECHO) ZipName.............. $(ZIPNAME)
+ @$(ECHO) ZipPrefix............ $(ZIPPREFIX)
+ @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+ @$(ECHO) ZipSuffix............ $(ZIPSUFFIX)
+ @$(ECHO) FullZipName.......... $(FULLZIPNAME)
+ @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE)
+ @$(ECHO)
+ @$(ECHO) Install base dir..... $(INSTALL_BASEDIR)
+ @$(ECHO) Install binary dir... $(INSTALL_BINDIR)
+ @$(ECHO) Install library dir.. $(INSTALL_LIBDIR)
+ @$(ECHO) Install units dir.... $(INSTALL_UNITDIR)
+ @$(ECHO) Install source dir... $(INSTALL_SOURCEDIR)
+ @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR)
+ @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR)
+ @$(ECHO) Install data dir..... $(INSTALL_DATADIR)
+ @$(ECHO)
+ @$(ECHO) Dist destination dir. $(DIST_DESTDIR)
+ @$(ECHO) Dist zip name........ $(DIST_ZIPNAME)
+ @$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+ fpc_makefile_dirs
+fpc_makefile:
+ $(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
diff --git a/packages/zorba/Makefile.fpc b/packages/zorba/Makefile.fpc
new file mode 100644
index 0000000000..837ff75cb5
--- /dev/null
+++ b/packages/zorba/Makefile.fpc
@@ -0,0 +1,29 @@
+#
+# Makefile.fpc for sqlite implementation
+#
+
+[package]
+name=zorba
+version=0.9.9
+
+[target]
+units=zorba zorbadyn
+
+[require]
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[compiler]
+includedir=src
+sourcedir=src tests examples
+
+[shared]
+build=n
+
+[rules]
+.NOTPARALLEL:
+
diff --git a/packages/zorba/Package.fpc b/packages/zorba/Package.fpc
new file mode 100644
index 0000000000..7c7e588731
--- /dev/null
+++ b/packages/zorba/Package.fpc
@@ -0,0 +1,6 @@
+[package]
+name=zorba
+version=0.9.9
+[require]
+packages=rtl
+packages_linux_x86_64=
diff --git a/packages/zorba/examples/simple/simple.lpi b/packages/zorba/examples/simple/simple.lpi
new file mode 100644
index 0000000000..eb0d6988ab
--- /dev/null
+++ b/packages/zorba/examples/simple/simple.lpi
@@ -0,0 +1,170 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <MainUnitHasTitleStatement Value="False"/>
+ </Flags>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ <ActiveEditorIndexAtStart Value="0"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ <Language Value=""/>
+ <CharSet Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <Units Count="9">
+ <Unit0>
+ <Filename Value="simple.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="simple"/>
+ <CursorPos X="1" Y="12"/>
+ <TopLine Value="1"/>
+ <EditorIndex Value="0"/>
+ <UsageCount Value="20"/>
+ <Loaded Value="True"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="../../src/zorba.pas"/>
+ <UnitName Value="zorba"/>
+ <CursorPos X="7" Y="3"/>
+ <TopLine Value="1"/>
+ <UsageCount Value="10"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="../../src/zorba.inc"/>
+ <CursorPos X="5" Y="937"/>
+ <TopLine Value="915"/>
+ <UsageCount Value="10"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="../../../../../zorba/zorba/include/simplestore/simplestorec.h"/>
+ <CursorPos X="1" Y="25"/>
+ <TopLine Value="1"/>
+ <UsageCount Value="10"/>
+ <SyntaxHighlighter Value="C++"/>
+ </Unit3>
+ <Unit4>
+ <Filename Value="../../src/zorba_error.inc"/>
+ <CursorPos X="5" Y="28"/>
+ <TopLine Value="1"/>
+ <UsageCount Value="10"/>
+ </Unit4>
+ <Unit5>
+ <Filename Value="../../../../../zorba/zorba/include/zorba/zorbac.h"/>
+ <CursorPos X="17" Y="262"/>
+ <TopLine Value="312"/>
+ <EditorIndex Value="4"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ <SyntaxHighlighter Value="C++"/>
+ </Unit5>
+ <Unit6>
+ <Filename Value="../../src/zorba_options.inc"/>
+ <CursorPos X="3" Y="104"/>
+ <TopLine Value="82"/>
+ <EditorIndex Value="3"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit6>
+ <Unit7>
+ <Filename Value="../../../../rtl/inc/strings.pp"/>
+ <UnitName Value="strings"/>
+ <CursorPos X="1" Y="1"/>
+ <TopLine Value="1"/>
+ <EditorIndex Value="2"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit7>
+ <Unit8>
+ <Filename Value="../../../../rtl/inc/systemh.inc"/>
+ <CursorPos X="11" Y="513"/>
+ <TopLine Value="491"/>
+ <EditorIndex Value="1"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit8>
+ </Units>
+ <JumpHistory Count="9" HistoryIndex="8">
+ <Position1>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="16" Column="23" TopLine="2"/>
+ </Position1>
+ <Position2>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="22" Column="11" TopLine="1"/>
+ </Position2>
+ <Position3>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="21" Column="20" TopLine="1"/>
+ </Position3>
+ <Position4>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="20" Column="4" TopLine="1"/>
+ </Position4>
+ <Position5>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="79" Column="30" TopLine="52"/>
+ </Position5>
+ <Position6>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="92" Column="5" TopLine="59"/>
+ </Position6>
+ <Position7>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="83" Column="18" TopLine="59"/>
+ </Position7>
+ <Position8>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="62" Column="1" TopLine="25"/>
+ </Position8>
+ <Position9>
+ <Filename Value="simple.lpr"/>
+ <Caret Line="84" Column="18" TopLine="60"/>
+ </Position9>
+ </JumpHistory>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="simple"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/packages/zorba/examples/simple/simple.lpr b/packages/zorba/examples/simple/simple.lpr
new file mode 100644
index 0000000000..e9ab34e576
--- /dev/null
+++ b/packages/zorba/examples/simple/simple.lpr
@@ -0,0 +1,120 @@
+program simple;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes,
+ zorba,
+ ctypes;
+
+{$IFDEF WINDOWS}{$R simple.rc}{$ENDIF}
+
+procedure stream_write(stream: XQC_OutputStream; const buf: pchar; length: cuint); cdecl;
+var
+ S: String;
+begin
+ SetLength(S, length);
+ Move(buf^, S[1], length);
+ WriteLn(S);
+end;
+
+procedure stream_free(stream: XQC_OutputStream); cdecl;
+begin
+end;
+
+const
+ streamdef: XQC_OutputStream_s = (
+ write:@stream_write;
+ free:@stream_free;
+ data:nil
+ );
+
+var
+ stream: XQC_OutputStream = @streamdef;
+
+
+
+
+(**
+ * A simple C API example
+ * Compile a query and print the result. No error checking is done.
+ *)
+function example_1(impl: XQC_Implementation): boolean;
+var
+ lXQuery: XQC_Query;
+begin
+ // compile the query
+ impl^.prepare(impl, '(1+2, 3, 4)', nil, nil, lXQuery);
+
+ // execute it and print the result on standard out
+ lXQuery^.serialize_stream(lXQuery, nil, stream);
+
+ // release the query
+ lXQuery^.free(lXQuery);
+
+ Result := True;
+end;
+
+
+
+(**
+ * A simple C API example
+ * Compile a query, iterate over the item sequence, and print the string value for each item.
+ * No error checking is done.
+ *)
+function example_2(impl: XQC_Implementation): boolean;
+var
+ lXQuery : XQC_Query;
+ lItem : XQC_Item;
+ lResult : XQC_Sequence;
+ lStringValue : pchar;
+begin
+ impl^.create_item(impl, lItem);
+
+ // compile the query and get the result as a sequence
+ impl^.prepare(impl, 'for $i in 1 to 10 return $i', nil, nil, lXQuery);
+
+ lXQuery^.sequence(lXQuery, lResult);
+
+ while lResult^.next(lResult, lItem) = XQ_NO_ERROR do
+ begin
+ lItem^.string_value(lItem, &lStringValue);
+ write(lStringValue, ' ');
+ end;
+ writeln;
+
+ // release all aquired resources
+ lItem^.free(lItem);
+ lResult^.free(lResult);
+ lXQuery^.free(lXQuery);
+
+ Result := True;
+end;
+
+
+
+var
+ impl: XQC_Implementation;
+ store: Pointer;
+begin
+ store := create_simple_store();
+ if zorba_implementation(impl, store) <> XQ_NO_ERROR then
+ Exit;
+
+ writeln('executing PASCAL example 1');
+ if not example_1(impl) then
+ Exit;
+ writeln;
+
+ writeln('executing PASCAL example 2');
+ if not example_2(impl) then
+ Exit;
+ writeln;
+
+ impl^.free(impl);
+ shutdown_simple_store(store);
+end.
+
diff --git a/packages/zorba/fpmake.pp b/packages/zorba/fpmake.pp
new file mode 100644
index 0000000000..b5acd158ce
--- /dev/null
+++ b/packages/zorba/fpmake.pp
@@ -0,0 +1,48 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+ P : TPackage;
+ T : TTarget;
+begin
+ With Installer do
+ begin
+{$endif ALLPACKAGES}
+
+ P:=AddPackage('zorba');
+{$ifdef ALLPACKAGES}
+ P.Directory:='zorba';
+{$endif ALLPACKAGES}
+ P.Version:='0.9.9';
+ P.SourcePath.Add('src');
+ P.IncludePath.Add('src');
+
+ T:=P.Targets.AddUnit('zorbadyn.pas');
+ with T.Dependencies do
+ begin
+ AddInclude('zorba.inc');
+ AddInclude('zorba_error.inc');
+ AddInclude('zorba_options.inc');
+ AddInclude('zorba_static_context_consts.inc');
+ end;
+ T:=P.Targets.AddUnit('zorba.pas');
+ with T.Dependencies do
+ begin
+ AddInclude('zorba.inc');
+ AddInclude('zorba_error.inc');
+ AddInclude('zorba_options.inc');
+ AddInclude('zorba_static_context_consts.inc');
+ end;
+
+// P.ExamplePath.Add('tests/');
+// P.Targets.AddExampleProgram('testapiv3x.pp');
+// P.Targets.AddExampleProgram('test.pas');
+
+{$ifndef ALLPACKAGES}
+ Run;
+ end;
+end.
+{$endif ALLPACKAGES}
diff --git a/packages/zorba/src/zorba.inc b/packages/zorba/src/zorba.inc
new file mode 100644
index 0000000000..8366f58972
--- /dev/null
+++ b/packages/zorba/src/zorba.inc
@@ -0,0 +1,2123 @@
+{$mode objfpc}{$H+}
+{$PACKRECORDS C}
+{$MACRO ON}
+
+interface
+
+uses
+ ctypes, dynlibs;
+
+{$IFDEF UNIX}
+ {$DEFINE extdecl:=cdecl}
+ const
+ zorbalib = 'libzorba_simplestore.'+sharedsuffix;
+ zorbavlib = zorbalib+'.0.9.9';
+{$ENDIF}
+{$IFDEF WINDOWS}
+ {$DEFINE extdecl:=stdcall}
+ const
+ zorbalib = 'zorba_simplestore.dll';
+ zorbavlib = zorbalib;
+{$ENDIF}
+
+{$IFDEF LOAD_DYNAMICALLY}
+ {$DEFINE D}
+{$ELSE}
+ {$DEFINE S}
+{$ENDIF}
+
+
+(*
+ * Copyright 2006-2008 The FLWOR Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+{.$i zorba_config.inc}
+{$i zorba_error.inc}
+{$i zorba_static_context_consts.inc}
+{$i zorba_options.inc}
+
+type
+ pfile = pointer;
+
+ XQC_Implementation = ^XQC_Implementation_s;
+ XQC_Implementation_Ref = ^XQC_Implementation;
+
+ XQC_Query = ^XQC_Query_s;
+ XQC_Query_Ref = ^XQC_Query;
+
+ XQC_StaticContext = ^XQC_StaticContext_s;
+ XQC_StaticContext_Ref = ^XQC_StaticContext;
+
+ XQC_DynamicContext = ^XQC_DynamicContext_s;
+ XQC_DynamicContext_Ref = ^XQC_DynamicContext;
+
+ XQC_Sequence = ^XQC_Sequence_s;
+ XQC_Sequence_Ref = ^XQC_Sequence;
+
+ XQC_Item = ^XQC_Item_s;
+ XQC_Item_Ref = ^XQC_Item;
+
+ XQC_ItemFactory = ^XQC_ItemFactory_s;
+ XQC_ItemFactory_Ref = ^XQC_ItemFactory;
+
+ XQC_Collection = ^XQC_Collection_s;
+ XQC_Collection_Ref = ^XQC_Collection;
+
+ XQC_DataManager = ^XQC_DataManager_s;
+ XQC_DataManager_Ref = ^XQC_DataManager;
+
+ XQC_OutputStream = ^XQC_OutputStream_s;
+ XQC_InputStream = ^XQC_InputStream_s;
+ XQC_ErrorHandler = ^XQC_ErrorHandler_s;
+
+
+// external functions
+ external_function_init = procedure(user_data: PPointer; global_user_data: Pointer); extdecl;
+
+ external_function_next = function(args: XQC_Sequence; argc: cint; result: XQC_Item_Ref;
+ user_data: Pointer; global_user_data: Pointer): XQUERY_ERROR; extdecl;
+
+ external_function_release = procedure(user_data: Pointer; global_user_data: Pointer); extdecl;
+
+
+(**
+ * The ::XQC_Implementation struct provides factory functions for parsing queries.
+ * An XQC_Implementation object is thread-safe and can be used by multiple threads
+ * of execution at the same time.
+ *
+ * Creating an XQC_Implementation object can be done using the zorba_implementation function.
+ * Once created, the user is responsible for freeing the object by calling
+ * the free() function.
+ * The XQC_Implementation object should not be freed before all objects created using it's
+ * functions have been freed - doing so causes undefined behaviour.
+ *)
+ XQC_Implementation_s = record
+ (**
+ * Creates a static context suitable for use in the parse() and parse_file()
+ * functions. The user is responsible for freeing the ::XQC_StaticContext object returned by calling
+ * XQC_StaticContext::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of
+ * \param[out] context The newly created XQC_StaticContext object.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ create_context: function(impl: XQC_Implementation; out context: XQC_StaticContext): XQUERY_ERROR; extdecl;
+
+ (**
+ * Prepares a query from a string, returning an ::XQC_Query object.
+ * The user is responsible for freeing the ::XQC_Query object
+ * returned by calling XQC_Query::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of.
+ * \param string The query to prepare as a string.
+ * \param context The initial static context for this query, or null to use the default
+ * static context.
+ * \param handler An optional error handler whose <code>error</code> function is called
+ * if preparing the query fails.
+ * \param[out] expression The resulting prepared expression.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval An XQuery static or type error (e.g. XPST*, XPTY* )
+ *)
+ prepare: function(impl: XQC_Implementation; query_string: pchar; context: XQC_StaticContext;
+ handler: XQC_ErrorHandler; out query: XQC_Query): XQUERY_ERROR; extdecl;
+
+ (**
+ * Prepares a query from a FILE pointer, returning an ::XQC_Query object.
+ * The user remains responsible for closing the file after parsing.
+ * The user is responsible for freeing the ::XQC_Query object returned by
+ * calling XQC_Query::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of.
+ * \param file The file containing the query to prepare.
+ * \param context The initial static context for this query, or null to use the default
+ * static context.
+ * \param handler An optional error handler whose <code>error</code> function is called
+ * if preparing the query fails.
+ * \param[out] expression The resulting prepared expression.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval An XQuery static or type error (e.g. XPST*, XPTY* )
+ *)
+ prepare_file: function(impl: XQC_Implementation; query_file: pfile; context: XQC_StaticContext;
+ handler: XQC_ErrorHandler; out query: XQC_Query): XQUERY_ERROR; extdecl;
+
+ (**
+ * Prepares a query from a ::XQC_InputStream, returning an ::XQC_Query object.
+ * The user is responsible for freeing the ::XQC_Query object returned by
+ * calling XQC_Query::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of.
+ * \param stream The input stream returning the query to prepare.
+ * free will be called on the XQC_InputStream after the query has been read.
+ * \param context The initial static context for this query, or null to use the default
+ * static context.
+ * \param handler An optional error handler whose <code>error</code> function is called
+ * if preparing the query fails.
+ * \param[out] expression The resulting prepared expression.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval An XQuery static or type error (e.g. XPST*, XPTY* )
+ *)
+ prepare_stream: function(impl: XQC_Implementation; stream: XQC_InputStream; context: XQC_StaticContext;
+ handler: XQC_ErrorHandler; out query: XQC_Query): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an item wrapper suitable for use in the ::XQC_Sequence::next function or
+ * the ::XQC_ItemFactory::create functions.
+ * The user is responsible for freeing the XQC_Item object returned by calling
+ * XQC_Item::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of
+ * \param[out] item The newly created XQC_Item wrapper object.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ create_item: function(impl: XQC_Implementation; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a XQC_ItemFactory that can be used for creating items, i.e. instances of the
+ * XQuery data model (XDM).
+ * The user is responsible for freeing the XQC_ItemFactory object returned by calling
+ * XQC_ItemFactory::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of
+ * \param[out] factory The newly created XQC_ItemFactory object.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ item_factory: function(impl: XQC_Implementation; out factory: XQC_ItemFactory): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a XQC_DataManager that can be used for managing collections and documents.
+ * The user is responsible for freeing the XQC_DataManager object returned by calling
+ * XQC_DataManager::free().
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of
+ * \param[out] data_manager The newly created XQC_DataManager object.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ data_manager: function(impl: XQC_Implementation; out data_manager: XQC_DataManager): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_Implementation.
+ *
+ * \param implementation The XQC_Implementation that this function pointer is a member of
+ *)
+ free: procedure(impl: XQC_Implementation); extdecl;
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * The ::XQC_Expression struct represents a pre-parsed query, and allows the user to execute
+ * that query any number of times. An ::XQC_Expression object is thread-safe and
+ * can be used by multiple threads of execution at the same time.
+ *
+ * ::XQC_Expression objects are created by calling the XQC_Implementation::prepare() or
+ * XQC_Implementation::prepare_file() functions.
+ * Once created, the user is responsible for freeing the object by calling the free() function.
+ * The ::XQC_Expression object should be freed before the ::XQC_Implementation object
+ * that created it.
+ *)
+ XQC_Query_s = record
+ (**
+ * This function returns the dynamic context that belongs to this query and
+ * is used during query execution.
+ * The context can be used, for example, to set values of external variables,
+ * the default collation, or the current datetime.
+ * It is only available if the query has been compiled, otherwise
+ * an error is reported. Moreover, the context must not be modified during the
+ * execution of a query (i.e. if a ResultIterator is opened).
+ * The user is responsible for freeing the ::XQC_DynamicContext object returned by calling
+ * XQC_DynamicContext::free().
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ get_dynamic_context: function(query: XQC_Query; out context: XQC_DynamicContext): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * This function returns the static context that belongs to this query.
+ * The static context is only available if the query has been compiled, otherwise
+ * an error is reported.
+ * The context has all the components and values that have been set by the either
+ * the static context that was passed when creating the query and and those that
+ * were set in the prolog of the query.
+ * Note that after compilation of the query the static context is a read only structure.
+ * The user is responsible for freeing the ::XQC_StaticContext object returned by calling
+ * XQC_StaticContext::free().
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ get_static_context: function(query: XQC_Query; out context: XQC_StaticContext): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Executes the query represented by the XQC_Query object and prints the serialized XML
+ * output to the given FILE pointer. The user remains responsible for closing
+ * the file.
+ *
+ * \param query The XQC_Query that this function pointer is a member of.
+ * \param file The FILE pointer to print the serialized result to.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0023_CANNOT_SERIALIZE_UPDATE_QUERY
+ * \retval An XQuery dynamic or type error (e.g. XPDY*, XPTY* )
+ *)
+ execute: function(query: XQC_Query; fileptr: pfile): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Executes the query represented by the XQC_Query object and prints the serialized
+ * output to the given FILE pointer. The target format of the serialization is
+ * specified by the passed serializer options.
+ *
+ * \param query The XQC_Query that this function pointer is a member of.
+ * \param options The Zorba_SerializerOptions_t that specifies serializer options.
+ * \param file The FILE pointer to print the serialized result to.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0023_CANNOT_SERIALIZE_UPDATE_QUERY
+ * \retval An XQuery dynamic or type error (e.g. XPDY*, XPTY* )
+ *)
+ serialize_file: function(query: XQC_Query; options: pZorba_SerializerOptions_t; fileptr: pfile): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Executes the query represented by the XQC_Query object and writes the serialized
+ * output to the given ::XQC_OutputStream. The target format of the serialization is
+ * specified by the passed serializer options.
+ *
+ * \param query The XQC_Query that this function pointer is a member of.
+ * \param options The Zorba_SerializerOptions_t that specifies serializer options.
+ * \param file The XQC_OutputStream to print the serialized result to.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0023_CANNOT_SERIALIZE_UPDATE_QUERY
+ * \retval An XQuery dynamic or type error (e.g. XPDY*, XPTY*)
+ serialize_stream: function(query: XQC_Query; options: pZorba_SerializerOptions_t; stream: XQC_OutputStream): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Checks if the query is an updating query.
+ *
+ * \param query The XQC_Query that this function pionter is a member of.
+ *
+ * \retval 1 if query is updating query, else 0
+ *)
+ is_update_query: function(query: XQC_Query): cint; extdecl;
+
+
+ (**
+ * Applies the updates declared in the query represented by the XQC_Query object.
+ *
+ * \param query The XQC_Query that this function pointer is a member of.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0023_CANNOT_SERIALIZE_UPDATE_QUERY
+ * \retval An XQuery dynamic or type error (e.g. XPDY*, XPTY*)
+ apply_updates: function(query: XQC_Query): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Executes the query represented by the XQC_Query object.
+ * An ::XQC_Sequence object is returned which can be used to examine the results
+ * of the query execution. The user is responsible for freeing the
+ * ::XQC_Sequence object returned by calling XQC_Sequence::free().
+ *
+ * \param query The XQC_Query that this function pointer is a member of.
+ * \param[out] sequence The newly created XQC_Sequence object.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0024_CANNOT_ITERATE_OVER_UPDATE_QUERY
+ * \retval An XQuery dynamic or type error (e.g. XPDY*, XPTY* )
+ *)
+ sequence: function(query: XQC_Query; out sequence: XQC_Sequence): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the error handler whose <code>error</code> function is called
+ * if an error occurs when executing the query.
+ * The user keeps the ownership of this object and is required to freeing
+ * the aquired resources.
+ *)
+ set_error_handler: procedure(query: XQC_Query; handler: XQC_ErrorHandler); extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_Query.
+ *
+ * \param query The XQC_Query that this function pointer is a member of.
+ *)
+ free: procedure(query: XQC_Query); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * The ::XQC_StaticContext struct provides a way to specify values for the static context of
+ * the query to be prepared. An ::XQC_StaticContext object is not thread-safe - threads should
+ * each use their own instance of a ::XQC_StaticContext object (see create_child_context).
+ *
+ * ::XQC_StaticContext objects are created by calling the XQC_Implementation::create_context()
+ * function. Once created, the user is responsible for freeing the object by calling
+ * the free() function.
+ * The ::XQC_StaticContext object should be freed before the ::XQC_Implementation object that
+ * created it.
+ *)
+ XQC_StaticContext_s = record
+ (**
+ * Creates a child context of the given static context.
+ * A child context contains the same information as it's parent context but
+ * it allows the user to override and add information.
+ * The user is responsible for freeing the ::XQC_StaticContext object returned by calling
+ * XQC_StaticContext::free().
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] child_context The newly created XQC_StaticContext object which is
+ * a child of the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ create_child_context: function(context: XQC_StaticContext; out child_context: XQC_StaticContext): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Adds a (prefix, uri) pair to the set of statically known namespaces of
+ * the given context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of.
+ * \param prefix The prefix of the namespace to add to the given XQC_StaticContext.
+ * \param uri The uri of the namespace to add to the given XQC_StaticContext.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ declare_ns: function(context: XQC_StaticContext; const prefix: pchar; const uri: ppchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the namespace uri that belongs to the given prefix.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param prefix The prefix of the namespace to add to the given XQC_StaticContext.
+ * \param[out] result_ns The namespace uri of the namespace registered with the given prefix.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_ns_by_prefix: function(context: XQC_StaticContext; const prefix: pchar; out result_ns: ppchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the value of the default namespace for elements and types.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param uri The uri of the default element and type namespace to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_default_element_and_type_ns: function(context: XQC_StaticContext; const uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the default namespace for elements and types.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] uri The uri of the default element and type namespace that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_default_element_and_type_ns: function(context: XQC_StaticContext; out uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the default namespace for functions.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param uri The uri of the default function namespace to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_default_function_ns: function(context: XQC_StaticContext; const uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the default namespace for functions set in this static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] uri The uri of the default function namespace that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_default_function_ns: function(context: XQC_StaticContext; out uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Add a collation URI.
+ * The URI specifies the locale and collation strength of the collation that is added.
+ * A valid collation URI must begin with http://www.flworfound.org/collations/.
+ * This prefix is followed by a collation strength (i.e. PRIMARY, SECONDARY, TERTIARY,
+ * QUATTERNARY, or IDENTICAL) followed by a '/'.
+ * After the strength a lower-case two- or three-letter ISO-639 language code must follow.
+ * The URI may end with an upper-case two-letter ISO-3166.
+ * For example, http://www.flworfound.org/collations/PRIMARY/en/US
+ * specifies an english language with US begin the country..
+ *
+ * Internally, ICU is used for comparing strings. For detailed description see
+ * http://www.icu-project.org/apiref/icu4c/classCollator.html
+ * and http://www.icu-project.org/apiref/icu4c/classLocale.html
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param uri The URI of the collation to add.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQST0038
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ add_collation: function(context: XQC_StaticContext; const uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Set the URI of the default collation.
+ * (see http://www.w3.org/TR/xquery/#static_context)
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param uri The URI of the default collation to set
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQST0038
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_default_collation: function(context: XQC_StaticContext; const uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the URI of the default collation. The uri returned is valid
+ * as long as the corresponding XQC_StaticContext object is valid.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] uri The URI of the default collation that is currently set in the given context.
+ *)
+ get_default_collation: function(context: XQC_StaticContext; out uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the XQuery processor's version to either xquery_version_1_0 or xquery_version_1_1.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param mode The xquery_version_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_xquery_version: function(context: XQC_StaticContext; mode: xquery_version_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the XQuery processor's version that is set in the given static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] mode The xquery_version_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_xquery_version: function(context: XQC_StaticContext; out mode: xquery_version_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the XPath 1.0 compatibility mode to either xpath1_0 or xpath2_0.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param mode The xpath1_0compatib_mode_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_xpath1_0_mode: function(context: XQC_StaticContext; mode: xpath1_0compatib_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the XPath 1.0 compatibility that is set in the given static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] mode The xpath1_0compatib_mode_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_xpath1_0_mode: function(context: XQC_StaticContext; out mode: xpath1_0compatib_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the construction mode to either preserve_cons or strip_cons.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param mode The construction_mode_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_construction_mode: function(context: XQC_StaticContext; mode: construction_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the construction mode that is set in the given static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] mode The construction_mode_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_construction_mode: function(context: XQC_StaticContext; out mode: construction_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the ordering mode to either order or unordered.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param mode The ordering_mode_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_ordering_mode: function(context: XQC_StaticContext; mode: ordering_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the ordering mode that is set in the given static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] mode The ordering_mode_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_ordering_mode: function(context: XQC_StaticContext; out mode: ordering_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the default order mode for empty sequences to either empty_least or
+ * empty_greatest
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param mode The order_empty_mode_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_default_order_empty_sequences: function(context: XQC_StaticContext; mode: order_empty_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the default order mode for empty sequences that is set in the given
+ * static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] mode The order_empty_mode_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_default_order_empty_sequences: function(context: XQC_StaticContext; out mode: order_empty_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the boundary space policy to either preserve_space or strip_space.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param mode The boundary_space_mode_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_boundary_space_policy: function(context: XQC_StaticContext; mode: boundary_space_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the boundary space policy that is set in the given static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] mode The boundary_space_mode_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_boundary_space_policy: function(context: XQC_StaticContext; out mode: boundary_space_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the copy namespace mode which consists of the preserve and the inherit mode.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param preserve The preserve_mode_t to set in the given context.
+ * \param inherit The inherit_mode_t to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_copy_ns_mode: function(context: XQC_StaticContext; mode: preserve_mode_t; inherit: inherit_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the copy namespace mode as a pair consisting of the preserve and the inherit
+ * mode.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] preserve The preserve_mode_t that is set in the given context.
+ * \param[out] inherit The inherit_mode_t that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_copy_ns_mode: function(context: XQC_StaticContext; out mode: preserve_mode_t; out inherit: inherit_mode_t): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the base uri in the given static context.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param base_uri The base uri to set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_base_uri: function(context: XQC_StaticContext; const base_uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Returns the base uri that is set in the given static context.
+ * The returned base uri is only valid as long as the corresponding static context
+ * is valid.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param[out] base_uri The base uri that is set in the given context.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_base_uri: function(context: XQC_StaticContext; out base_uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Register an external function that can be called within a query.
+ * One external function consists of three function parameters, i.e. init, next, and release.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ * \param uri The URI of the external function to add.
+ * \param localname The localname of the function to add.
+ * \param init A callback function pointer that is called once when the external function
+ * is initialized. The init function gets the global_user_data pointer
+ * as parameter.
+ * \param next A callback function pointer that is called each time the corresponding
+ * XQuery function is executed.
+ * \param release A callback function pointer that is called once when the external function
+ * is deinitialized.
+ * \param global_user_data User specific data that is passed to the init function as a parameter.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::API0019_FUNCTION_ALREADY_REGISTERED,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ register_external_function: function(context: XQC_StaticContext; const uri, localname: pchar; init: external_function_init;
+ next: external_function_next; release: external_function_release; global_user_data: pointer): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_StaticContext.
+ *
+ * \param context The XQC_StaticContext that this function pointer is a member of
+ *)
+ free: procedure(context: XQC_StaticContext); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: Pointer;
+ end;
+
+
+(**
+ * An object of the type ::XQC_DynamicContext contains the information that is available at the
+ * time the query is executed. It contains the information that is defined in the %XQuery
+ * specification (see http://www.w3.org/TR/xquery/#eval_context).
+ * An instance of this struct can be retrieved by calling the <code>get_dynamic_context</code> function
+ * of an ::XQC_Query object.
+ *)
+ XQC_DynamicContext_s = record
+ (**
+ * Sets the context item to the given ::XQC_Item.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param value The XQC_Item for the context item.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_context_item: function(context: XQC_DynamicContext; value: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the context item to the document given by the FILE pointer.
+ * The provided document is accessible by the provided doc_uri.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param doc_uri The URI referencing the given document
+ * \param document The document to which the context item should be set as a FILE pointer.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0016_LOADER_IO_ERROR,
+ * \retval ::XQP0017_LOADER_PARSING_ERROR,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_context_document: function(context: XQC_DynamicContext; const doc_uri: pchar; document: pfile): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the external variable to the value given.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param qname The qname of the external variable to set
+ * \param value The XQC_Item value for the variable.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_variable_item: function(context: XQC_DynamicContext; const qname: pchar; value: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the external variable to the sequence given.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param qname The qname of the external variable to set
+ * \param value The XQC_Sequence value for the variable.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_variable_sequence: function(context: XQC_DynamicContext; const qname: pchar; value: XQC_Sequence): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the external variable to the document given by the FILE pointer.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param var_qname The qname of the external variable to set
+ * \param doc_uri The URI referencing the given document
+ * \param document The document to which the context item should be set as a FILE pointer.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0016_LOADER_IO_ERROR,
+ * \retval ::XQP0017_LOADER_PARSING_ERROR,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_variable_document: function(context: XQC_DynamicContext; const var_qname, doc_uri: pchar; document: pfile): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Sets the implicit timezone parameter.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param timezone The implicit timezone to set
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_implicit_timezone: function(context: XQC_DynamicContext; timezone: cint): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Defines the value of the default collection that is used when calling the
+ * fn:collection function without a parameter.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ * \param collection_uri the URI of the collection used by the fn:collection function.
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ set_default_collection: function(context: XQC_DynamicContext; collection_uri: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_DynamicContext.
+ *
+ * \param context The XQC_DynamicContext that this function pointer is a member of
+ *)
+ free: procedure(context: XQC_DynamicContext); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * This struct is Zorba's representation of an Item as defined in the
+ * XQuery 1.0 and XPath 2.0 Data Model (XDM); see http://www.w3.org/TR/xpath-datamodel/.
+ *
+ * Instances of the XDM are a sequence, i.e. an ordered collection of zero or more items.
+ * In the Zorba API, a sequence is represented by the XQC_Sequence struct.
+ *
+ * The Item class is the union of all XQuery node and atomic types.
+ * The class provides functions to access the information of an Item. Note that not
+ * all functions are defined on every Item kind. If a function is called on an Item that
+ * does not provide the function called, an XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE error
+ * is raised.
+ *
+ * A new atomic Item can be created using the ItemFactory. A new node Item should be created
+ * by the result of a query.
+ *)
+ XQC_Item_s = record
+ (**
+ * The string value is the string that is extracted by calling the fn:string function
+ * on the Item (see http://www.w3.org/TR/xpath-functions/#func-string).
+ * Note that this function is available for all types of Items.
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] string_value The string-value of the given item.
+ * This string is valid as long as the given item is valid.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ string_value: function(item: XQC_Item; out string_value: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the (optional) value of a QName's prefix.
+ * Note that this function is only available for Items of type QName.
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] prefix The prefix of the given QName item.
+ * This string is valid as long as the given item is valid.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ prefix: function(item: XQC_Item; out prefix: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the (optional) value of a QName's namespace.
+ * Note that this function is only available for Items of type QName.
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] namespace The namespace of the given QName item.
+ * This string is valid as long as the given item is valid.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ ns: function(item: XQC_Item; out ns: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the value of a QName's localname.
+ * Note that this function is only available for Items of type QName.
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] localname The localname of the given QName item.
+ * This string is valid as long as the given item is valid.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ localname: function(item: XQC_Item; out local_name: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the bool value of the boolean Item.
+ * Note that this function is only available for Items of type boolean.
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] bool_value 1 if the boolean value of the given item is true, 0 otherwise.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ boolean_value: function(item: XQC_Item; out bool_value: cint): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Check if the value of the Item is not a number (NaN).
+ * Note that this function is implemented for all item types but may only return
+ * 1 for a numeric item (e.g. Double or Float).
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] is_nan 1 if the given item is not a number, 0 otherwise.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ nan: function(item: XQC_Item; out is_nan: cint): XQUERY_ERROR; extdecl;
+
+
+ (**
+ Check if the value of the Item is positive or negative infinity.
+ * Note that this function is only available for numeric items (e.g. Double or Float).
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ * \param[out] inf 1 if the given item is +/-INF, 0 otherwise.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0024_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE
+ *)
+ pos_or_neg_inf: function(item: XQC_Item; out pos_or_neg_inf: cint): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_Item.
+ *
+ * \param item The XQC_Item that this function pointer is a member of
+ *)
+ free: procedure(item: XQC_Item); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * An instance of this class can be obtained by calling <code>item_factory</code> function
+ * of an ::XQC_Implementation object.
+ *
+ * Each <code>create_XXX</code> function of this struct creates an ::XQC_Item of an XML Schema item.
+ * Each of the functions takes either NULL or a valid XQC_Item wrapper. The latter is created
+ * by calling <code>XQC_Implementation::create_item</code>. In both cases, the user is responsible
+ * for freeing the object by calling the XQC_Item::free() function.
+ *)
+ XQC_ItemFactory_s = record
+ (**
+ * Creates a String Item see [http://www.w3.org/TR/xmlschema-2/#string].
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param str The string as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_string: function(factory: XQC_ItemFactory; const str: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an AnyURI Item see [http://www.w3.org/TR/xmlschema-2/#anyURI]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param str The uri as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_anyuri: function(factory: XQC_ItemFactory; const str: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a QName Item see [http://www.w3.org/TR/xmlschema-2/#QName]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param str The uri as a char pointer.
+ * \param localname The localname as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_qname2: function(factory: XQC_ItemFactory; const uri, localname: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a QName Item see [http://www.w3.org/TR/xmlschema-2/#QName]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param str The uri as a char pointer.
+ * \param prefix The prefix as a char pointer.
+ * \param localname The localname as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_qname3: function(factory: XQC_ItemFactory; const uri, prefix, localname: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Boolean Item see [http://www.w3.org/TR/xmlschema-2/#bool]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param boolean 0 for a boolean <code>false</code> boolean item, 1 otherwise.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_boolean: function(factory: XQC_ItemFactory; boolean: cint; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a NCName Item see [http://www.w3.org/TR/xmlschema-2/#NCName]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param ncname The NCName as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_ncname: function(factory: XQC_ItemFactory; const ncname: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Base64Binary Item see [http://www.w3.org/TR/xmlschema-2/#base64Binary]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param binary_data The binary data as a char pointer.
+ * \param letter The length of the binary data.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_base64binary: function(factory: XQC_ItemFactory; const binary_data: pchar; length: csize_t; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Decimal Item see [http://www.w3.org/TR/xmlschema-2/#decimal]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The value as a doule
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_decimal: function(factory: XQC_ItemFactory; value: cdouble; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Decimal Item see [http://www.w3.org/TR/xmlschema-2/#decimal]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The value as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_decimal_char: function(factory: XQC_ItemFactory; const value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an Integer Item see [http://www.w3.org/TR/xmlschema-2/#integer]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param integer_value The value as a long long.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_integer: function(factory: XQC_ItemFactory; const integer_value: clonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an Integer Item see [http://www.w3.org/TR/xmlschema-2/#integer]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param integer_value The value as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_integer_char: function(factory: XQC_ItemFactory; const integer_value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Long Item see [http://www.w3.org/TR/xmlschema-2/#long]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param long_value The value as a long long.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_long: function(factory: XQC_ItemFactory; const long_value: clonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Int Item see [http://www.w3.org/TR/xmlschema-2/#int]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param int_value The value as an int.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_int: function(factory: XQC_ItemFactory; const int_value: cint; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Short Item see [http://www.w3.org/TR/xmlschema-2/#short]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param short_value The value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_short: function(factory: XQC_ItemFactory; const short_value: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Byte Item see [http://www.w3.org/TR/xmlschema-2/#byte]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param byte_value The byte value as a char.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_byte: function(factory: XQC_ItemFactory; const byte_value: cchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Date Item see [http://www.w3.org/TR/xmlschema-2/#date]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param date_value The date value as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_date_char: function(factory: XQC_ItemFactory; const date_value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Date Item see [http://www.w3.org/TR/xmlschema-2/#date]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param year The year value as a short.
+ * \param month The month value as a short.
+ * \param day The day value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_date: function(factory: XQC_ItemFactory; const year, month, day: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a DateTime Item see [http://www.w3.org/TR/xmlschema-2/#dateTime]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param year The year value as a short.
+ * \param month The month value as a short.
+ * \param day The day value as a short.
+ * \param hour The hour value as a short.
+ * \param minute The minute value as a short.
+ * \param seconds The seconds value as a short.
+ * \param timezone_hours The timezone as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_datetime: function(factory: XQC_ItemFactory; const year, month, day, hour, minute: cshort;
+ seconds: cdouble; timezone_hours: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a DateTime Item see [http://www.w3.org/TR/xmlschema-2/#dateTime]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param datetime_value The string representation of the datetime value as a char pointer
+ * (for example, 2002-10-10T12:00:00-05:00).
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_datetime_char: function(factory: XQC_ItemFactory; const datetime_value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Double Item see [http://www.w3.org/TR/xmlschema-2/#double]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_double: function(factory: XQC_ItemFactory; const value: cdouble; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Double Item see [http://www.w3.org/TR/xmlschema-2/#double]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The value as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_double_char: function(factory: XQC_ItemFactory; const value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Duration Item see [http://www.w3.org/TR/xmlschema-2/#duration]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param year The year value as a short.
+ * \param month The month value as a short.
+ * \param day The day value as a short.
+ * \param hour The hour value as a short.
+ * \param minute The minute value as a short.
+ * \param seconds The seconds value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_duration: function(factory: XQC_ItemFactory; const year, month, day, hour, minute: cshort;
+ seconds: cdouble; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Float Item see [http://www.w3.org/tr/xmlschema-2/#float]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The float value as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_float: function(factory: XQC_ItemFactory; const value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a gDay Item see [http://www.w3.org/TR/xmlschema-2/#gDay]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param day The day value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_gday: function(factory: XQC_ItemFactory; day: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a gMonth Item see [http://www.w3.org/TR/xmlschema-2/#gMonth]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param month The month value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_gmonth: function(factory: XQC_ItemFactory; month: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a gMonthDay Item see [http://www.w3.org/TR/xmlschema-2/#gMonthDay]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param month The month value as a short.
+ * \param day The day value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_gmonthday: function(factory: XQC_ItemFactory; month, day: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a gYear Item see [http://www.w3.org/TR/xmlschema-2/#gYear]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param year The year value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_gyear: function(factory: XQC_ItemFactory; year: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a gYearMonth Item see [http://www.w3.org/TR/xmlschema-2/#gYearMonth]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param year The year value as a short.
+ * \param month The month value as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_gyearmonth: function(factory: XQC_ItemFactory; year, month: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a HexBinary Item see [http://www.w3.org/TR/xmlschema-2/#hexBinary]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param hex_data The hex data as a char pointer.
+ * \param size The size of the hex data.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_hexbinary: function(factory: XQC_ItemFactory; const hex_data: pchar; size: csize_t; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a negativeInteger Item see [http://www.w3.org/TR/xmlschema-2/#negativeInteger]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The negative integer as a long long value.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_negativeinteger: function(factory: XQC_ItemFactory; value: clonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a nonNegativeInteger Item see [http://www.w3.org/TR/xmlschema-2/#nonNegativeInteger]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The non-negative integer as an unsigned long long value.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_nonnegativeinteger: function(factory: XQC_ItemFactory; value: culonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a nonPositiveInteger Item see [http://www.w3.org/TR/xmlschema-2/#nonPositiveInteger]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The non-positive integer as a long long value.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_nonpositiveinteger: function(factory: XQC_ItemFactory; value: clonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a positiveInteger Item see [http://www.w3.org/TR/xmlschema-2/#positiveInteger]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The positive integer as an unsigned long long value.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_positiveinteger: function(factory: XQC_ItemFactory; value: culonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Time Item see [http://www.w3.org/TR/xmlschema-2/#time]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The time as a char pointer.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_time_char: function(factory: XQC_ItemFactory; const value: pchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Time Item see [http://www.w3.org/TR/xmlschema-2/#time]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param hour The hour as a short.
+ * \param minute The minute as a short.
+ * \param second The second as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_time: function(factory: XQC_ItemFactory; hour, minute: cshort; second: cdouble; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a Time Item see [http://www.w3.org/TR/xmlschema-2/#time]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param hour The hour as a short.
+ * \param minute The minute as a short.
+ * \param second The second as a double.
+ * \param timezone_hours The timezone hours as a short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_time_timezone: function(factory: XQC_ItemFactory; hour, minute: cshort; second: cdouble;
+ timezone_hours: cshort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an Unsigned Byte Item see [http://www.w3.org/TR/xmlschema-2/#unsignedByte]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The unsigned byte value as an unsigned char.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_unsignedbyte: function(factory: XQC_ItemFactory; value: cuchar; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an unsigned int Item see [http://www.w3.org/TR/xmlschema-2/#unsignedInt]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The unsigned int value as an unsigned int.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_unsignedint: function(factory: XQC_ItemFactory; value: cuint; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates an unsignedLong Item see [http://www.w3.org/TR/xmlschema-2/#unsignedLong]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The unsigned long value as an unsigned long long.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_unsignedlong: function(factory: XQC_ItemFactory; value: culonglong; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Creates a unsignedShort Item see [http://www.w3.org/TR/xmlschema-2/#unsignedShort]
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param value The unsigned short value as an unsigned short.
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::XQP0025_COULD_NOT_CREATE_ITEM
+ *)
+ create_unsignedshort: function(factory: XQC_ItemFactory; value: cushort; out item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_ItemFactory.
+ *
+ * \param factory The XQC_ItemFactory that this function pointer is a member of
+ * \param[out] item The item to create. This can either be a wrapper created using
+ * ::XQC_ItemFactory::create_item or a pointer initialized to 0.
+ *)
+ free: procedure(factory: XQC_ItemFactory); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * This struct represents an instance of the XQuery 1.0 and XPath 2.0 Data Model (XDM).
+ *
+ * See http://www.w3.org/TR/xpath-datamodel/.
+ *)
+ XQC_Sequence_s = record
+ (**
+ * Get the next item of the sequence.
+ *
+ * \param sequence The XQC_Sequence_s that this function pointer is a member of
+ * \param[out] item The item wrapper that should contain the next item if XQ_NO_ERROR is returned
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval any XQuery type or dynamic error
+ *)
+ next: function(sequence: XQC_Sequence; item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * called to free the resources associated with the xqc_itemfactory.
+ *
+ * \param sequence the XQC_Sequence that this function pointer is a member of
+ *)
+ free: procedure(sequence: XQC_Sequence); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * A Collection is a sequence of Node Items.
+ *
+ * Each Collection is created by the XmlDataManager and referenced by a URI.
+ * The URI can be accessed in a query's fn:collection function.
+ *)
+ XQC_Collection_s = record
+ (**
+ * Get the URI of a collection as an anyURI Item.
+ *
+ * \param collection the XQC_Collection_s that this function pointer is a member of
+ * \param[out] uri_item The uri item of the given collection. The user is responsible
+ * for freeing the object by calling the XQC_Item::free() function.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+ get_name: function(collection: XQC_Collection; out name_item: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Adds a Node Item to the Collection
+ *
+ * \param collection the XQC_Collection_s that this function pointer is a member of
+ * \param node The node item to add to the given collection.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0007_COLLECTION_ITEM_MUST_BE_A_NODE
+ *)
+ add_node: function(collection: XQC_Collection; node: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Deletes a Node Item from the given Collection
+ *
+ * \param collection the XQC_Collection_s that this function pointer is a member of
+ * \param node The node item to delete from the given collection.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0007_COLLECTION_ITEM_MUST_BE_A_NODE
+ *)
+ delete_node: function(collection: XQC_Collection; node: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Adds a sequence of Node Items to the Collection
+ *
+ * \param collection the XQC_Collection_s that this function pointer is a member of
+ * \param sequence The sequence of node items to add to the given collection.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ * \retval ::API0007_COLLECTION_ITEM_MUST_BE_A_NODE
+ *)
+ add_sequence: function(collection: XQC_Collection; sequence: XQC_Sequence): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Adds a document given by the FILE pointer to this collection.
+ *
+ * \param collection the XQC_Collection_s that this function pointer is a member of
+ * \param doc The document to add as a FILE pointer.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0016_LOADER_IO_ERROR,
+ * \retval ::XQP0017_LOADER_PARSING_ERROR,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ add_document: function(collection: XQC_Collection; doc: pfile): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Adds a document given by the char pointer to this collection.
+ *
+ * \param collection the XQC_Collection_s that this function pointer is a member of
+ * \param doc The document to add as a char pointer.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0016_LOADER_IO_ERROR,
+ * \retval ::XQP0017_LOADER_PARSING_ERROR,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ add_document_char: function(collection: XQC_Collection; const doc: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * called to free the resources associated with the xqc_itemfactory.
+ *
+ * \param collection the XQC_Collection that this function pointer is a member of
+ *)
+ free: procedure(collection: XQC_Collection); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * Using the XmlDataManager one can manage documents and collections.
+ *
+ * The XmlDataManager is a singelton instance. The instance can be accessed by calling
+ * XQC_Implementation::data_manager. The XmlDataManager is thread-safe.
+ *)
+ XQC_DataManager_s = record
+ (**
+ * This function loads a document from the given FILE pointer. The document
+ * is identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param doc_uri The URI of the document to load.
+ * \param document The document to load as a FILE pointer.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0016_LOADER_IO_ERROR,
+ * \retval ::XQP0017_LOADER_PARSING_ERROR,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ load_document: function(data_manager: XQC_DataManager; const doc_uri: pchar; document: pfile): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * This function loads a document that is retrieved from the given URI location. The document
+ * is identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param location The URI of the document to load.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0016_LOADER_IO_ERROR,
+ * \retval ::XQP0017_LOADER_PARSING_ERROR,
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ load_document_uri: function(data_manager: XQC_DataManager; const location: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the document identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param document_uri The URI of the document to retrieve.
+ * \param[out] doc The Item of the document to get. The user is responsible
+ * for freeing the object by calling the XQC_Item::free() function.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_document: function(data_manager: XQC_DataManager; const document_uri: pchar; out doc: XQC_Item): XQUERY_ERROR; extdecl;
+
+
+ (*
+ * Delete the document identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param document_uri The URI of the document to delete.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ delete_document: function(data_manager: XQC_DataManager; const document_uri: pchar): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Create a new collection that is identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param document_uri The URI of the collection to create.
+ * \param[out] col The collection to create. The user is responsible
+ * for freeing the object by calling the XQC_Item::free() function.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ create_collection: function(data_manager: XQC_DataManager; const collection_uri: pchar; out col: XQC_Collection): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Get the collection that is identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param document_uri The URI of the collection to retrieve.
+ * \param[out] col The collection to retrieve. The user is responsible
+ * for freeing the object by calling the XQC_Item::free() function.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ get_collection: function(data_manager: XQC_DataManager; const collection_uri: pchar; out col: XQC_Collection): XQUERY_ERROR; extdecl;
+
+
+ (**
+ * Delete the collection that is identified by the given URI.
+ *
+ * \param data_manager The XQC_DataManager that this function pointer is a member of
+ * \param document_uri The URI of the collection to delete.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQC_INTERNAL_ERROR
+ *)
+ delete_collection: function(data_manager: XQC_DataManager; const collection_uri: pchar): XQUERY_ERROR; extdecl;
+
+ (**
+ * Called to free the resources associated with the XQC_DataManager.
+ *
+ * \param context The XQC_DataManager that this function pointer is a member of
+ *)
+ free: procedure(data_manager: XQC_DataManager); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * The ::XQC_OutputStream struct is designed to be passed to an XQC implementation in order
+ * to return streaming data (i.e. the result of a query).
+ *)
+ XQC_OutputStream_s = record
+ (**
+ * The function is called to provide the streaming result of a query
+ * in the buffer provided.
+ *
+ * \param stream The XQC_OutputStream that this function pointer is a member of
+ * \param buf The buffer that contains the data
+ * \param length The length of the contents in the buffer
+ *)
+ write: procedure(stream: XQC_OutputStream; const buf: pchar; length: cuint); extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_OutputStream.
+ * Free is called by the implementation if it finished writing to the stream.
+ *
+ * \param stream The XQC_OutputStream that this function pointer is a member of
+ *
+ *)
+ free: procedure(stream: XQC_OutputStream); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * The ::XQC_InputStream struct is designed to be populated by users for the purpose
+ * of streaming data into an XQC implementation.
+ *)
+ XQC_InputStream_s = record
+ (**
+ * The function called to read more of the input (e.g. the query). The function should read
+ * the next chunk of input into the buffer provided, returning the length of the
+ * data read.
+ *
+ * \param stream The XQC_InputStream that this function pointer is a member of
+ * \param[out] buffer The buffer to read the data into
+ * \param length The length of the buffer
+ *
+ * \return The number of bytes read - this will be less than length if the end of the input is reached
+ * or -1 if an error occured
+ *
+ *)
+ read: function(stream: XQC_InputStream; const buf: pchar; length: cuint): cint; extdecl;
+
+
+ (**
+ * Called to free the resources associated with the XQC_InputStream.
+ * The free function is called by the implementation if it finished reading from the stream.
+ * This allows for lazy evaluation without the user needing to know when reading from the
+ * stream has finished.
+ *
+ * \param stream The XQC_InputStream that this function pointer is a member of
+ *
+ *)
+ free: procedure(stream: XQC_InputStream); extdecl;
+
+
+ (**
+ * for internal use only
+ *)
+ data: pointer;
+ end;
+
+
+(**
+ * The ::XQC_ErrorHandler struct is designed to be populated by users for the purpose
+ * of collecting more detailed error messages from an XQC implementation. An XQC_ErrorHandler
+ * can be set for a query using the XQC_Query::set_error_handler() function.
+ *
+ * The XQC_ErrorHandler struct has no free() function pointer because the user remains
+ * responsible for freeing the resources associated with this struct.
+ *)
+ XQC_ErrorHandler_s = record
+ (**
+ * The function is called when an error occurs. The function receives the components of the
+ * error as arguments. When this function returns, the implementation will exit query parsing or
+ * execution with the error enumeration value passed as an argument.
+ *
+ * \param handler The XQC_ErrorHandler that this function pointer is a member of
+ * \param error The error as a value of the XQUERY_ERROR enum.
+ * \param local_name The local name of the error or an empty string if no local_name is given
+ * (e.g. for errors not defined in the spec).
+ * \param description A detailed description of the error or an empty string if no description is available.
+ * \param query_uri The uri of the query causing the error or an empty string if no uri is available for the query.
+ * \param line The line number of the query where the error occured.
+ * \param components The column number in the line in the query where the error occured.
+ *)
+ error: procedure(handler: XQC_ErrorHandler; error: XQUERY_ERROR; const local_name, description,
+ query_uri: pchar; line, column: cuint); extdecl;
+
+
+ (**
+ * Can be used for user specific purposes.
+ *)
+ user_data: pointer;
+ end;
+
+
+(**
+ * The zorba_implementation function creates a new ::XQC_Implementation object.
+ * Thereby, the Zorba processor is initialized.
+ * The user is responsible for freeing the object by calling the free() function
+ * of the XQC_Implementation struct.
+ *
+ * \param store A pointer to the store that is being used by the Zorba instance that is created
+ * by this call.
+ * \param[out] impl The newly created XQC_Implementation object.
+ *
+ * \retval ::XQC_NO_ERROR
+ * \retval ::XQP0019_INTERNAL_ERROR
+ *)
+{$IFDEF S}function{$ELSE}var{$ENDIF}zorba_implementation{$IFDEF D}: function{$ENDIF}(out impl: XQC_Implementation; store: Pointer): XQUERY_ERROR; extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
+
+
+(* simplestorec.h *)
+{$IFDEF S}function{$ELSE}var{$ENDIF}create_simple_store{$IFDEF D}: function{$ENDIF}: Pointer; extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}shutdown_simple_store{$IFDEF D}: procedure{$ENDIF}(store: Pointer); extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
+
+
+
+{$IFDEF LOAD_DYNAMICALLY}
+function InitializeZorba(const LibraryName: String = ''): Integer;
+function TryInitializeZorba(const LibraryName: string = ''): Integer;
+function ReleaseZorba: Integer;
+
+var
+ ZorbaLibrary: TLibHandler;
+{$ENDIF LOAD_DYNAMICALLY}
+
+implementation
+
+{$IFDEF LOAD_DYNAMICALLY}
+const
+ zorba_symbols: array[0..6] of TLibSymbol = (
+ (pvar:@create_simple_store; name:'create_simple_store'; weak:false),
+ (pvar:@shutdown_simple_store; name:'shutdown_simple_store'; weak:false),
+ (pvar:@zorba_implementation; name:'zorba_implementation'; weak:false),
+ (pvar:@Zorba_CompilerHints_default; name:'Zorba_CompilerHints_default'; weak:false),
+ (pvar:@Zorba_SerializerOptions_default; name:'Zorba_SerializerOptions_default'; weak:false),
+ (pvar:@Zorba_SerializerOptions_free; name:'Zorba_SerializerOptions_free'; weak:false),
+ (pvar:@Zorba_SerializerOptions_set; name:'Zorba_SerializerOptions_set'; weak:false)
+ );
+
+function TryInitializeZorba(const LibraryName: string): Integer;
+begin
+ Result := TryInitializeLibrary(ZorbaLibrary, LibraryName);
+end;
+
+function InitializeZorba(const LibraryName: String): Integer;
+begin
+ Result := InitializeLibrary(ZorbaLibrary, LibraryName);
+end;
+
+function ReleaseZorba: Integer;
+begin
+ Result := ReleaseLibrary(ZorbaLibrary);
+end;
+
+initialization
+ ZorbaLibrary := LibraryHandler('zorba', [zorbalib,zorbavlib], @zorba_symbols, Length(zorba_symbols));
+{$ENDIF}
+
+end.
diff --git a/packages/zorba/src/zorba.pas b/packages/zorba/src/zorba.pas
new file mode 100644
index 0000000000..c574de27ef
--- /dev/null
+++ b/packages/zorba/src/zorba.pas
@@ -0,0 +1,6 @@
+unit zorba;
+
+{$i zorba.inc}
+
+end.
+
diff --git a/packages/zorba/src/zorba_error.inc b/packages/zorba/src/zorba_error.inc
new file mode 100644
index 0000000000..e815ed3b41
--- /dev/null
+++ b/packages/zorba/src/zorba_error.inc
@@ -0,0 +1,911 @@
+(*
+ * Copyright 2006-2008 The FLWOR Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+(** \brief The ErrorCode enum contains all error codes that can be reported by the XQuery
+ * processor.
+ *
+ * Error codes are either the error codes defined by the %XQuery 1.0 or the
+ * XQuery 1.0 and XPath 2.0 Functions and Operators Specification or error codes
+ * specifically related to %Zorba.
+ *)
+type
+ XQUERY_ERROR = (
+
+ // no error
+ XQ_NO_ERROR = 0,
+
+ //
+ // XPath dynamic errors
+ //
+ XPDY0002,
+ // evaluation of an expression relies on some part of the dynamic context
+ // that has not been assigned a value.
+
+ XPDY0021,
+ // (Not currently used.)
+
+ XPDY0050,
+ // the dynamic type of the operand of a treat expression does not match the
+ // sequence type specified by the treat expression. This error might also
+ // be raised by a path expression beginning with "/" or "// " if the context
+ // node is not in a tree that is rooted at a document node. This is because
+ // a leading "/" or "// " in a path expression is an abbreviation for an
+ // initial step that includes the clause treat as document-node().
+
+ //
+ // XPath static errors
+ //
+
+ XPST0001,
+ // analysis of an expression relies on some component of the static context
+ // that has not been assigned a value.
+
+ XPST0003,
+ // an expression is not a valid instance of the grammar.
+
+ XPST0005,
+ // During the analysis phase, it is a static error if the static type
+ // assigned to an expression other than the expression () or data(()) is
+ // empty-sequence().
+
+ XPST0008,
+ // an expression refers to an element name, attribute name, schema type
+ // name, namespace prefix, or variable name that is not defined in the
+ // static context, except for an ElementName in an ElementTest or an
+ // AttributeName in an AttributeTest.
+
+ XPST0010,
+ // An implementation must raise a static error if it encounters a reference
+ // to an axis that it does not support.
+
+ XPST0017,
+ // the expanded QName and number of arguments in a function call do not
+ // match the name and arity of a function signature in the static context.
+
+ XPST0051, // = 10,
+ // a QName that is used as an AtomicType in a SequenceType is not defined
+ // in the in-scope schema types as an atomic type.
+
+ XPST0080,
+ // the target type of a cast or castable expression is xs:NOTATION or
+ // xs:anyAtomicType.
+
+ XPST0081,
+ // a QName used in a query contains a namespace prefix that cannot be
+ // expanded into a namespace URI by using the statically known namespaces.
+
+ XPST0083,
+ // (Not currently used.)
+
+ //
+ // XPath type errors
+ //
+
+ XPTY0004,
+ // during the static analysis phase, an expression is found to have a
+ // static type that is not appropriate for the context in which the
+ // expression occurs, or during the dynamic evaluation phase, the dynamic
+ // type of a value does not match a required type as specified by the
+ // matching rules in 2.5.4, // SequenceType Matching.
+
+ XPTY0006,
+ // (Not currently used.)
+
+ XPTY0007,
+ // (Not currently used.)
+
+ XPTY0018,
+ // the result of the last step in a path expression contains both nodes
+ // and atomic values.
+
+ XPTY0019,
+ // the result of a step (other than the last step) in a path expression
+ // contains an atomic value.
+
+ XPTY0020,
+ // in an axis step, the context item is not a node.
+
+ //
+ // XQuery dynamic errors
+ //
+
+ XQDY0025, // = 20,
+ // any attribute of a constructed element does not have a name that is
+ // distinct from the names of all other attributes of the constructed
+ // element.
+
+ XQDY0026,
+ // a constructor or replace expression results in a processing instruction
+ // node whose content includes the string "?>".
+
+ XQDY0027,
+ // In a validate expression, it is a dynamic error if the root element
+ // information item in the PSVI resulting from validation does not have
+ // the expected validity property: valid if validation mode is strict,
+ // or either valid or notKnown if validation mode is lax.
+
+ XQDY0029,
+ // (Not currently used.)
+
+ XQDY0041,
+ // the value of the name expression in a computed processing instruction
+ // constructor cannot be cast to the type xs:NCName.
+
+ XQDY0044,
+ // the node-name property of the node constructed by a computed attribute
+ // constructor is in the namespace http:// www.w3.org/2000/xmlns/
+ // (corresponding to namespace prefix xmlns), or is in no namespace and
+ // has local name xmlns.
+
+ XQDY0052,
+ // (Not currently used.)
+
+ XQDY0061,
+ // the operand of a validate expression is a document node whose children
+ // do not consist of exactly one element node and zero or more comment and
+ // processing instruction nodes, in any order.
+
+ XQDY0062,
+ // (Not currently used.)
+
+ XQDY0064,
+ // the value of the name expression in a computed processing instruction
+ // constructor is equal to "XML" (in any combination of upper and lower case).
+
+ XQDY0072, // = 30,
+ // a constructor or replace expression results in a comment node whose
+ // content ends with a hyphen or contains two adjacent hyphens.
+
+ XQDY0074,
+ // the value of the name expression in a computed element or attribute
+ // constructor or rename expression cannot be converted to an expanded
+ // QName (for example, because it contains a namespace prefix not found
+ // in statically known namespaces.)
+
+ XQDY0084,
+ // the element validated by a validate statement does not have a top-level
+ // element declaration in the in-scope element declarations, if validation
+ // mode is strict.
+
+ XQDY0091,
+ // An implementation MAY raise a dynamic error if an xml:id error, as
+ // defined in [XML ID], is encountered during construction of an attribute
+ // named xml:id.
+
+ XQDY0092,
+ // An implementation MAY raise a dynamic error if a constructed attribute
+ // named xml:space has a value other than preserve or default.
+
+ //
+ // XQuery static errors
+ //
+
+ XQST0009,
+ // An implementation that does not support the Schema Import Feature must
+ // raise a static error if a Prolog contains a schema import.
+
+ XQST0012,
+ // the set of definitions contained in all schemas imported by a Prolog do
+ // not satisfy the conditions for schema validity specified in Sections 3,
+ // // and 5, // of [XML Schema] Part 1--i.e., each definition must be
+ // valid, complete, and unique.
+
+ XQST0013,
+ // an implementation recognizes a pragma but determines that its content
+ // is invalid.
+
+ XQST0014,
+ // (Not currently used.)
+
+ XQST0015,
+ // (Not currently used.)
+
+ XQST0016, // = 40,
+ // An implementation that does not support the Module Feature raises a
+ // static error if it encounters a module declaration or a module import.
+
+ XQST0022,
+ // the value of a namespace declaration attribute is not a URILiteral.
+
+ XQST0031,
+ // the version number specified in a version declaration is not supported by
+ // the implementation.
+
+ XQST0032,
+ // A static error is raised if a Prolog contains more than one base URI
+ // declaration.
+
+ XQST0033,
+ // a module contains multiple bindings for the same namespace prefix.
+
+ XQST0034,
+ // multiple functions declared or imported by a module have the number of
+ // arguments and their expanded QNames are equal (as defined by the eq
+ // operator).
+
+ XQST0035,
+ // It is a static error to import two schema components that both define
+ // the same name in the same symbol space and in the same scope.
+
+ XQST0036,
+ // It is a static error to import a module if the importing module's in-scope
+ // schema types do not include definitions for the schema type names that
+ // appear in the declarations of variables and functions (whether in an
+ // argument type or return type) that are present in the imported module and
+ // are referenced in the importing module.
+
+ XQST0037,
+ // (Not currently used.)
+
+ XQST0038,
+ // a Prolog contains more than one default collation declaration, or the
+ //value specified by a default collation declaration is not present in
+ // statically known collations.
+
+ XQST0039, // = 50,
+ // It is a static error for a function declaration to have more than one
+ // parameter with the same name.
+
+ XQST0040,
+ // the attributes specified by a direct element constructor do not have
+ // distinct expanded QNames.
+
+ XQST0042,
+ // (Not currently used.)
+
+ XQST0043,
+ // (Not currently used.)
+
+ XQST0045,
+ // the function name in a function declaration is in one of the following
+ // namespaces:
+ // http://www.w3.org/XML/1998/namespace,
+ // http://www.w3.org/2001/XMLSchema,
+ // http:// www.w3.org/2001/XMLSchema-instance,
+ // http://www.w3.org/2005/xpath-functions.
+
+ XQST0046,
+ // An implementation MAY raise a static error if the value of a URILiteral
+ // is of nonzero length and is not in the lexical space of xs:anyURI.
+
+ XQST0047,
+ // multiple module imports in the same Prolog specify the same target
+ // namespace.
+
+ XQST0048,
+ // a function or variable declared in a library module is not in the
+ // target namespace of the library module.
+
+ XQST0049,
+ // two or more variables declared or imported by a module have equal
+ // expanded QNames (as defined by the eq operator.)
+
+ XQST0053,
+ // (Not currently used.)
+
+ XQST0054, // = 60,
+ // a variable depends on itself.
+
+ XQST0055,
+ // a Prolog contains more than one copy-namespaces declaration.
+
+ XQST0056,
+ // (Not currently used.)
+
+ XQST0057,
+ // a schema import binds a namespace prefix but does not specify a target
+ // namespace other than a zero-length string.
+
+ XQST0058,
+ // multiple schema imports specify the same target namespace.
+
+ XQST0059,
+ // an implementation is unable to process a schema or module import by
+ // finding a schema or module with the specified target namespace.
+
+ XQST0060,
+ // the name of a function in a function declaration is not in a namespace
+ // (expanded QName has a null namespace URI).
+
+ XQST0063,
+ // (Not currently used.)
+
+ XQST0065,
+ // A static error is raised if a Prolog contains more than one ordering
+ // mode declaration.
+
+ XQST0066,
+ // A static error is raised if a Prolog contains more than one default
+ // element/type namespace declaration, or more than one default function
+ // namespace declaration.
+
+ XQST0067, // = 70,
+ // A static error is raised if a Prolog contains more than one construction declaration.
+
+ XQST0068,
+ // A static error is raised if a Prolog contains more than one boundary-space
+ // declaration.
+
+ XQST0069,
+ // A static error is raised if a Prolog contains more than one empty order declaration.
+
+ XQST0070,
+ // A static error is raised if a namespace URI is bound to the predefined
+ // prefix xmlns, or if a namespace URI other than
+ // http:// www.w3.org/XML/1998/namespace is bound to the prefix xml, or if
+ // the prefix xml is bound to a namespace URI other
+ // than http:// www.w3.org/XML/1998/namespace.
+
+ XQST0071,
+ // A static error is raised if the namespace declaration attributes of a
+ // direct element constructor do not have distinct names.
+
+ XQST0073,
+ // the graph of module imports contains a cycle (that is, if there exists a
+ // sequence of modules M1, ... Mn such that each Mi imports Mi+1, and Mn
+ // imports M1), unless all the modules in the cycle share a common namespace.
+
+ XQST0075,
+ // An implementation that does not support the Validation Feature must raise
+ // a static error if it encounters a validate expression.
+
+ XQST0076,
+ // a collation subclause in an order by clause of a FLWOR expression does
+ // not identify a collation that is present in statically known collations.
+
+ XQST0077,
+ // (Not currently used.)
+
+ XQST0078,
+ // (Not currently used.)
+
+ XQST0079, // = 80,
+ // an extension expression contains neither a pragma that is recognized by
+ // the implementation nor an expression enclosed in curly braces.
+
+ XQST0082,
+ // (Not currently used.)
+
+ XQST0085,
+ // the namespace URI in a namespace declaration attribute is a zero-length
+ // string, and the implementation does not support [XML Names 1.1].
+
+ XQST0087,
+ // the encoding specified in a Version Declaration does not conform to the
+ // definition of EncName specified in [XML 1.0].
+
+ XQST0088,
+ // the literal that specifies the target namespace in a module import or a
+ // module declaration is of zero length.
+
+ XQST0089,
+ // a variable bound in a for clause of a FLWOR expression, and its associated
+ // positional variable, do not have distinct names (expanded QNames).
+
+ XQST0090,
+ // a character reference does not identify a valid character in the version
+ // of XML that is in use.
+
+ XQST0093,
+ // It is a static error to import a module M1, // if there exists a sequence
+ // of modules M1, ... Mi ... M1, such that each module directly depends on
+ // the next module in the sequence (informally, if M1, depends on itself
+ // through some chain of module dependencies.)
+
+ //
+ // XQuery Type erros
+ //
+
+ XQTY0023,
+ // (Not currently used.)
+
+ XQTY0024,
+ // the content sequence in an element constructor contains an attribute node
+ // following a node that is not an attribute node.
+
+ XQTY0028, // = 90,
+ // (Not currently used.)
+
+ XQTY0030,
+ // the argument of a validate expression does not evaluate to exactly one
+ // document or element node.
+
+ XQTY0086,
+ // the typed value of a copied element or attribute node is namespace-
+ // sensitive when construction mode is preserve and copy-namespaces mode
+ // is no-preserve.
+
+ //
+ // XQuery Update Facility
+ //
+
+ XUST0001,
+ // It is a static error if an updating expression is used in any position
+ // other than one of the following:
+ // 1. The topmost expression in the body of a query.
+ // 2. The modify clause of a transform expression.
+ // 3. The return clause of a FLWOR expression.
+ // 4. The return clauses of a typeswitch expression in which every return
+ // clause contains an updating expression, an empty expression ( ), or
+ // a call to the fn:error function.
+ // 5. The then and else clauses of a conditional statement in which both
+ // the then and else clauses contain either an updating expression, an
+ // empty expression ( ), or a call to the fn:error function.
+ // 6. An operand of a comma expression in which each operand is either an
+ // updating expression, an empty expression ( ), or a call to the
+ // fn:error function.
+ // 7. The content of a parenthesized expression.
+ // 8. The body of a function declaration in which the keyword updating
+ // is specified.
+
+ XUST0002,
+ // It is a static error if an non-updating expression other than an
+ // empty expression ( ) or a call to the fn:error function is used in
+ // one of the following positions:
+ // 1. The modify clause of a transform expression.
+ // 2. The top-level expression in the body of a function declaration in
+ // which the keyword updating is specified.
+
+ XUST0003,
+ // It is a static error if a Prolog contains more than one revalidation
+ // declaration.
+
+ XUTY0004,
+ // It is a type error if the insertion sequence of an insert expression
+ // contains an attribute node following a node that is not an attribute node.
+
+ XUTY0005,
+ // In an insert expression where into, as first into, or as last into
+ // is specified, it is a type error if the target expression returns a
+ // non-empty result that does not consist of a single element or document
+ // node.
+
+ XUTY0006,
+ // In an insert expression where before or after is specified, it is a
+ // type error if the target expression returns a non-empty result that
+ // does not consist of a single element, text, comment, or processing
+ // instruction node.
+
+ XUTY0007,
+ // It is a type error if the target expression of a delete expression
+ // does not return a sequence of zero or more nodes.
+
+ XUTY0008, // = 100,
+ // In a replace expression, it is a type error if the target expression
+ // returns a non-empty result that does not consist of a single element,
+ // attribute, text, comment, or processing instruction node.
+
+ XUDY0009,
+ // In a replace expression where value of is not specified, it is a
+ // dynamic error if the node returned by the target expression does not
+ // have a parent.
+
+ XUTY0010,
+ // In a replace expression where value of is not specified and the
+ // target is an element, text, comment, or processing instruction node,
+ // it is a type error if the replacement sequence does not consist of
+ // zero or more element, text, comment, or processing instruction nodes.
+
+ XUTY0011,
+ // In a replace expression where value of is not specified and the target
+ // is an attribute node, it is a type error if the replacement sequence
+ // does not consist of zero or more attribute nodes.
+
+ XUTY0012,
+ // In a rename expression, it is a type error if the target expression
+ // returns a non-empty result that does not consist of a single element,
+ // attribute, or processing instruction node.
+
+ XUTY0013,
+ // In a transform expression, it is a type error if a source expression
+ // in the copy clause does not return a single node.
+
+ XUDY0014,
+ // In a transform expression, it is a dynamic error if the modify clause
+ // modifies any node that was not created by the copy clause.
+
+ XUDY0015,
+ // It is a dynamic error if any node is the target of more than one
+ // rename expression within the same query.
+
+ XUDY0016,
+ // It is a dynamic error if any node is the target of more than one
+ // replace expression (without value of being specified) within the
+ // same query.
+
+ XUDY0017,
+ // It is a dynamic error if any node is the target of more than one
+ // replace value of expression within the same query.
+
+ XUDY0018, // = 110,
+ // It is a dynamic error if a function that was declared to be external
+ // but not updating returns a non-empty pending update list.
+
+ XUDY0019,
+ // It is a dynamic error if a function that was declared to be both
+ // external and updating returns a non-empty data model instance.
+
+ XUDY0020,
+ // An implementation may (but is not required to) raise a dynamic error
+ // if a node is deleted that had no parent before execution of the query
+ // began.
+
+ XUDY0021,
+ // It is a dynamic error if the XDM instance that would result from
+ // applying all the updates in a query violates any constraint specified
+ // in [XQuery/XPath Data Model (XDM)]. In this case, none of the updates
+ // in the query are made effective.
+
+ XUTY0022,
+ // It is a type error if an insert expression specifies the insertion
+ // of an attribute node into a document node.
+
+ XUDY0023,
+ // It is a dynamic error if an insert, replace, or rename expression
+ // affects an element node by introducing a new namespace binding that
+ // conflicts with one of its existing namespace bindings.
+
+ XUDY0024,
+ // It is a dynamic error if the effect of a set of updating expressions
+ // is to introduce conflicting namespace bindings into an element node.
+
+ XUDY0025,
+ // It is a dynamic error if the target of a rename expression is a
+ // processing instruction node, and the new name expression returns a
+ // QName with a non-empty namespace prefix.
+
+ XUST0026,
+ // It is a static error if a revalidation declaration in a Prolog
+ // specifies a revalidation mode that is not supported by the current
+ // implementation.
+
+ XUDY0027,
+ // It is a dynamic error if the target expression of an insert, replace,
+ // or rename expression evaluates to an empty sequence.
+
+ XUST0028, // = 120,
+ // It is a static error if a function declaration specifies both updating
+ // and a return type.
+
+ XUDY0029,
+ // In an insert expression where before or after is specified, it is a
+ // dynamic error if node returned by the target expression does not have
+ // a parent.
+
+ XUDY0030,
+ // It is a dynamic error if an insert expression specifies the insertion
+ // of an attribute node before or after a child of a document node.
+
+ XUDY0031,
+ // It is a dynamic error if multiple calls to fn:put in the same snapshot
+ // specify the same URI (after resolution of relative URIs).
+
+ //
+ // XQuery 1.0 and XPath 2.0 Functions and Operators
+ //
+
+ FOER0000, //Unidentified error.
+
+ FOAR0001, //Division by zero. This error is raised whenever an attempt is made to divide by zero.
+
+ FOAR0002, //Numeric operation overflow/underflow. This error is raised whenever numeric operations result in an overflow or underflow.
+
+ FOCA0001, //Input value too large for decimal.
+
+ FOCA0002, //Invalid lexical value.
+
+ FOCA0003, //Input value too large for integer.
+
+ FOCA0005, //NaN supplied as float/double value.
+
+ FOCA0006, //String to be cast to decimal has too many digits of precision.
+
+ FOCH0001, //Code point not valid.
+
+ FOCH0002, //Unsupported collation.
+
+ FOCH0003, //Unsupported normalization form.
+
+ FOCH0004, //Collation does not support collation units.
+
+ FODC0001, //No context document.
+
+ FODC0002, //Error retrieving resource.
+
+ FODC0003, //Function stability not defined.
+
+ FODC0004, //Invalid argument to fn:collection.
+
+ FODC0005, //Invalid argument to fn:doc or fn:doc-available.
+
+ FODT0001, // = 140, //Overflow/underflow in date/time operation.
+
+ FODT0002, //Overflow/underflow in duration operation.
+
+ FODT0003, //Invalid timezone value.
+
+ FONS0004, //No namespace found for prefix.
+
+ FONS0005, //Base-uri not defined in the static context.
+
+ FORG0001, //Invalid value for cast/constructor.
+
+ FORG0002, //Invalid argument to fn:resolve-uri().
+
+ FORG0003, //fn:zero-or-one called with a sequence containing more than one item.
+
+ FORG0004, //fn:one-or-more called with a sequence containing no items.
+
+ FORG0005, //fn:exactly-one called with a sequence containing zero or more than one item.
+
+ FORG0006, //Invalid argument type.
+
+ FORG0008, //Both arguments to fn:dateTime have a specified timezone.
+
+ FORG0009, //Error in resolving a relative URI against a base URI in fn:resolve-uri.
+
+ FORX0001, //Invalid regular expression. flags
+
+ FORX0002, //Invalid regular expression.
+
+ FORX0003, //Regular expression matches zero-length string.
+
+ FORX0004, //Invalid replacement string.
+
+ FOTY0012, //Argument node does not have a typed value.
+
+ FOUP0001,
+ // It is a dynamic error if the first operand of fn:put is not a node of
+ // a supported kind.
+
+ FOUP0002,
+ // It is a dynamic error if the second operand of fn:put is not a valid
+ // lexical representation of the xs:anyURI type.
+
+ //
+ // Serialization errors
+ //
+ SENR0001, // = 160,
+ // It is an error if an item in S6 in sequence normalization is an attribute node or a namespace node.
+
+ SERE0003,
+ // It is an error if the serializer is unable to satisfy the rules for
+ // either a well-formed XML document entity or a well-formed XML external
+ // general parsed entity, or both, except for content modified by the
+ // character expansion phase of serialization.
+
+ SEPM0004,
+ // It is an error to specify the doctype-system parameter, or to specify
+ // the standalone parameter with a value other than omit, if the instance
+ // of the data model contains text nodes or multiple element nodes as
+ // children of the root node.
+
+ SERE0005,
+ // It is an error if the serialized result would contain an NCName Names
+ // that contains a character that is not permitted by the version of
+ // Namespaces in XML specified by the version parameter.
+
+ SERE0006,
+ // It is an error if the serialized result would contain a character
+ // that is not permitted by the version of XML specified by the version
+ // parameter.
+
+ SESU0007,
+ // It is an error if an output encoding other than UTF-8 or UTF-16 is requested and the serializer
+ // does not support that encoding.
+
+ SERE0008,
+ // It is an error if a character that cannot be represented in the encoding that the serializer is using
+ // for output appears in a context where character references are not allowed (for example if the character
+ // occurs in the name of an element).
+
+ SEPM0009,
+ // It is an error if the omit-xml-declaration parameter has the value yes, and the standalone attribute
+ // has a value other than omit; or the version parameter has a value other than 1.0 and the doctype-system
+ // parameter is specified.
+
+ SEPM0010,
+ // It is an error if the output method is xml, the value of the undeclare-prefixes parameter is yes, and
+ // the value of the version parameter is 1.0.
+
+ SESU0011,
+ // It is an error if the value of the normalization-form parameter specifies a normalization form that
+ // is not supported by the serializer.
+
+ SERE0012, // = 170,
+ // It is an error if the value of the normalization-form parameter is fully-normalized and any relevant
+ // construct of the result begins with a combining character.
+
+ SESU0013,
+ // It is an error if the serializer does not support the version of XML or HTML specified by the version parameter.
+
+ SERE0014,
+ // It is an error to use the HTML output method when characters which are legal in XML but not in HTML,
+ // specifically the control characters #x7F-#x9F, appear in the instance of the data model.
+
+ SERE0015,
+ // It is an error to use the HTML output method when > appears within a processing instruction in the data model
+ // instance being serialized.
+
+ SEPM0016,
+ // It is a an error if a parameter value is invalid for the defined domain.
+
+ XTDE1310,
+ // It is a non-recoverable dynamic error if the picture string does not satisfy the format-number function rules.
+
+ XTDE1340,
+ // It is a non-recoverable dynamic error if the syntax of the picture is incorrect.
+
+ XTDE1350,
+ // It is a non-recoverable dynamic error if a component specifier within the picture refers to components that are not available in the given type of $value.
+
+ //
+ // ZORBA errors
+ //
+ XQP0000_DYNAMIC_RUNTIME_ERROR,
+ XQP0001_DYNAMIC_ITERATOR_OVERRUN,
+ XQP0002_DYNAMIC_ILLEGAL_NODE_CHILD, // = 180,
+ XQP0003_DYNAMIC_TARGET_NAMESPACE_NOT_FOUND,
+ XQP0004_SYSTEM_NOT_SUPPORTED,
+ XQP0005_SYSTEM_ASSERT_FAILED,
+ XQP0006_SYSTEM_HASH_ERROR_KEYLEN_EXCEEDS_MAXKEYLEN,
+ XQP0007_SYSTEM_VECTOR_OUT_OF_RANGE,
+ XQP0008_SYSTEM_READ_LOCK_FAILED,
+ XQP0009_SYSTEM_WRITE_LOCK_FAILED,
+ XQP0010_SYSTEM_POP_FROM_EMPTY_LIST,
+ XQP0011_SYSTEM_FILE_ERROR_IN_FUNCTION,
+ XQP0012_SYSTEM_FXCHARHEAP_IOEXCEPTION, // = 190,
+ XQP0013_SYSTEM_MMFILE_IOEXCEPTION,
+ XQP0015_SYSTEM_NOT_YET_IMPLEMENTED,
+ XQP0019_INTERNAL_ERROR,
+ XQP0020_INVALID_URI,
+ XQP0021_USER_ERROR,
+ XQP0022_GET_RESULTS_AS_DOM_FAILED,
+ XQP0023_GET_RESULTS_AS_SAX_FAILED,
+ XQP0025_COULD_NOT_CREATE_ITEM,
+ XQP0026_COULD_NOT_CREATE_THREAD,
+ XQP0026_CANNOT_INIT_STORE, // = 200,
+ XQP0027_MS_DOM_ERROR,
+ XQP0028_FUNCTION_IMPL_NOT_FOUND,
+ XQP0030_DEADLOCK,
+
+ XQP0031_MALFORMED_XQUERYX_INPUT,
+ XQP0032_ERROR_TRANSFORMING_XQUERYX_TO_XQUERY,
+
+ XQP0033_INDEX_DOES_NOT_EXIST,
+ XQP0034_INDEX_ALREADY_EXISTS,
+ XQP0035_MULTI_VALUED_INDEX_KEY,
+ XQP0036_NON_ATOMIC_INDEX_KEY,
+ XQP0037_INDEX_IS_NOT_DECLARED,
+ XQP0038_INDEX_IS_ALREADY_DECLARED,
+ XQP0039_INDEX_IN_NON_DATA_MODULE,
+ XQP0040_INDEX_HAS_FREE_VARS,
+ XQP0041_INDEX_HAS_INVALID_DATA_SOURCE,
+ XQP0042_INDEX_NOT_DETERMINISTIC,
+
+ //
+ // Zorba API errors
+ //
+ API0001_XQUERY_STRING_IS_EMPTY,
+ API0002_COMPILE_FAILED,
+ API0003_XQUERY_NOT_COMPILED, // = 210,
+ API0004_XQUERY_ALREADY_COMPILED,
+ API0005_COLLECTION_ALREADY_EXISTS,
+ API0006_COLLECTION_NOT_FOUND,
+ API0007_COLLECTION_ITEM_MUST_BE_A_NODE,
+ API0009_THREAD_NOT_INITIALIZED,
+ API0010_XQUERY_EXECUTION_NOT_STARTED,
+ API0011_INVALID_VARIABLE_QNAME,
+ API0012_INVALID_INDEX,
+ API0013_INAPPROPRIATE_VARIABLE_VALUE,
+ API0014_INVALID_ARGUMENT, // = 220,
+ API0015_CANNOT_OPEN_FILE,
+ API0016_CANNOT_CREATE_COLLECTION,
+ API0017_CANNOT_LOAD_DOCUMENT,
+ API0018_CANNOT_ACCESS_FILE,
+ API0019_FUNCTION_ALREADY_REGISTERED,
+ API0020_DOCUMENT_ALREADY_EXISTS,
+ API0021_ITEM_TO_LOAD_IS_NOT_NODE,
+ API0022_QUERY_ALREADY_CLOSED,
+ API0023_CANNOT_SERIALIZE_UPDATE_QUERY,
+ API0024_CANNOT_ITERATE_OVER_UPDATE_QUERY, // = 230,
+ API0025_END_OF_SEQUENCE,
+ API0026_CANNOT_CLOSE_QUERY_WITH_ITERATORS,
+ API0027_CANNOT_UPDATE_DCTX_WITH_ITERATORS,
+ API0028_INVALID_NODE_URI,
+ API0029_NODE_DOES_NOT_BELONG_TO_COLLECTION,
+ API0030_NO_NODE_AT_GIVEN_POSITION,
+ API0031_NODE_ALREADY_IN_COLLECTION,
+ API0032_NON_ROOT_NODE_IN_COLLECTION,
+ API0032_QUERY_NOT_COMPILED_IN_DEBUG_MODE,
+ API0033_FILE_OR_FOLDER_DOES_NOT_EXIST,
+ API0034_FILE_OR_FOLDER_CANNOT_BE_OPENED,
+ API0035_COLLECTION_CANNOT_BE_SERIALIZED,
+ API0036_TIDY_ERROR,
+ API0037_TIDY_ERROR_SET_OPTION,
+ {$IFDEF ZORBA_WITH_EMAIL}
+ API0038_SMTP_SEVER_ERROR_SET_OPTION,
+ API0039_RECIPIENT_SET_OPTION,
+ API0040_MAIL_NOT_SENT,
+ {$ENDIF} (* ZORBA_WITH_EMAIL *)
+ API0050_REST_ERROR_HEADER,
+ API0051_REST_ERROR_PAYLOAD,
+ API0060_CONV_JSON_PARSE,
+ API0061_CONV_JSON_SERIALIZE,
+ API0062_CONV_JSON_PARAM,
+ API0063_CONV_JSON_ML_PARSE,
+ API0064_CONV_JSON_ML_SERIALIZE,
+ API0065_CONV_JSON_ML_PARAM,
+ API0066_JSON_SEQUENCE_CANNOT_BE_SERIALIZED,
+
+ //
+ // Store Errors
+ //
+ STR0001_INDEX_ALREADY_EXISTS,
+ STR0002_INDEX_DOES_NOT_EXIST,
+ STR0003_INDEX_PARTIAL_KEY_INSERT,
+ STR0004_INDEX_PARTIAL_KEY_REMOVE, // = 250,
+ STR0005_INDEX_PARTIAL_KEY_PROBE,
+ STR0006_INDEX_INVALID_BOX_PROBE,
+ STR0007_INDEX_UNSUPPORTED_PROBE_CONDITION,
+ STR0020_LOADER_IO_ERROR,
+ STR0021_LOADER_PARSING_ERROR,
+ STR0030_NODEID_ERROR,
+ STR0040_TYPE_ERROR, // = 257,
+ STR0050_FUNCTION_NOT_IMPLEMENTED_FOR_ITEMTYPE,
+
+ //Class Serialization errors
+ SRL0001_INEXISTENT_INPUT_FIELD,
+ SRL0002_INCOMPATIBLE_INPUT_FIELD,
+ SRL0003_UNRECOGNIZED_CLASS_FIELD,
+ SRL0004_UNRESOLVED_FIELD_REFERENCE,
+ SRL0005_CLASS_VERSION_IS_TOO_NEW,
+ SRL0006_CLASS_VERSION_IS_TOO_OLD,
+ SRL0007_INPUT_ARCHIVE_USED_FOR_OUT_SERIALIZATION,
+ SRL0008_OUTPUT_ARCHIVE_USED_FOR_IN_SERIALIZATION,
+ SRL0009_CLASS_NOT_SERIALIZABLE,
+ SRL0010_ITEM_TYPE_NOT_SERIALIZABLE,
+ SRL0011_INPUT_ARCHIVE_NOT_ZORBA_ARCHIVE,
+ SRL0012_INCOMPATIBLE_ARCHIVE_VERSION,
+ SRL0013_UNABLE_TO_LOAD_QUERY,
+
+ //
+ // XQuery Data Definition Facility:w
+ //
+ XDST0001,
+ XDST0002,
+ XDST0007,
+ XDST0008,
+ XDST0010,
+
+ XDDY0003,
+ XDDY0004,
+ XDDY0005,
+ XDDY0006,
+ XDDY0009,
+ XDDY0011,
+ XDDY0012,
+ XDDY0013,
+ XDDY0014,
+
+ MAX_ZORBA_ERROR_CODE
+ );
+
+(*
+ * Local variables:
+ * mode: c++
+ * End:
+ *)
diff --git a/packages/zorba/src/zorba_options.inc b/packages/zorba/src/zorba_options.inc
new file mode 100644
index 0000000000..1aabc41f56
--- /dev/null
+++ b/packages/zorba/src/zorba_options.inc
@@ -0,0 +1,142 @@
+(*
+ * Copyright 2006-2008 The FLWOR Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+
+(** \brief The optimization level used for optimizing the query. *)
+ Zorba_opt_level_t = (
+ ZORBA_OPT_LEVEL_O0, (**< Don't use any optimization. *)
+ ZORBA_OPT_LEVEL_O1 (**< Use basic optimizations
+ (e.g.\ removing sorting, removing duplicate elimination,
+ or constant folding). *)
+ );
+
+(** \brief Set of hints that can be passed to the query compiler.
+ *
+ * An instance of this class can be passed to the compileQuery function
+ * of the Zorba class or the compile function of this class.
+ * The members of this class represent hints that are passed to the
+ * query compiler. For example, whether optimization of the query
+ * should be done (O1) or not (O0).
+ *
+ * example_6 in file \link simple.cpp \endlink shows an example
+ * how CompilerHints can be used.
+ *)
+ pZorba_CompilerHints_t = ^Zorba_CompilerHints_t;
+ Zorba_CompilerHints_t = record
+ (** \brief The optimization level that is used *)
+ opt_level: Zorba_opt_level_t;
+ (** \brief Treat the query as a library module *)
+ lib_module: cbool;
+ end;
+
+ Zorba_serialization_method_t = (
+ ZORBA_SERIALIZATION_METHOD_XML,
+ ZORBA_SERIALIZATION_METHOD_HTML,
+ ZORBA_SERIALIZATION_METHOD_XHTML,
+ ZORBA_SERIALIZATION_METHOD_TEXT,
+ ZORBA_SERIALIZATION_METHOD_JSON,
+ ZORBA_SERIALIZATION_METHOD_JSONML
+ );
+
+ Zorba_byte_order_mark_t = (
+ ZORBA_BYTE_ORDER_MARK_YES,
+ ZORBA_BYTE_ORDER_MARK_NO
+ );
+
+ Zorba_escape_uri_attributes_t = (
+ ZORBA_ESCAPE_URI_ATTRIBUTES_YES,
+ ZORBA_ESCAPE_URI_ATTRIBUTES_NO
+ );
+
+ Zorba_include_content_type_t = (
+ ZORBA_INCLUDE_CONTENT_TYPE_YES,
+ ZORBA_INCLUDE_CONTENT_TYPE_NO
+ );
+
+ Zorba_indent_t = (
+ ZORBA_INDENT_YES,
+ ZORBA_INDENT_NO
+ );
+
+ Zorba_normalization_form_t = (
+ ZORBA_NORMALIZATION_FORM_NFC,
+ ZORBA_NORMALIZATION_FORM_NFD,
+ ZORBA_NORMALIZATION_FORM_NFKC,
+ ZORBA_NORMALIZATION_FORM_NFKD,
+ ZORBA_NORMALIZATION_FORM_FULLY_normalized,
+ ZORBA_NORMALIZATION_FORM_NONE
+ );
+
+ Zorba_omit_xml_declaration_t = (
+ ZORBA_OMIT_XML_DECLARATION_YES,
+ ZORBA_OMIT_XML_DECLARATION_NO
+ );
+
+ Zorba_standalone_t = (
+ ZORBA_STANDALONE_YES,
+ ZORBA_STANDALONE_NO,
+ ZORBA_STANDALONE_OMIT
+ );
+
+ Zorba_undeclare_prefixes_t = (
+ ZORBA_UNDECLARE_PREFIXES_YES,
+ ZORBA_UNDECLARE_PREFIXES_NO
+ );
+
+ Zorba_binary_plan_format_t = (
+ ZORBA_USE_BINARY_ARCHIVE,
+ ZORBA_USE_XML_ARCHIVE
+ );
+
+ pZorba_SerializerOptions_t = ^Zorba_SerializerOptions_t;
+ Zorba_SerializerOptions_t = record end;
+
+
+(** \brief Helper function for C to set default values ComplilerHints struct.
+ *
+ * \retval Zorba_CompilerHints_t with default member values
+ *)
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}Zorba_CompilerHints_default{$IFDEF D}: procedure{$ENDIF}
+ (p: pZorba_CompilerHints_t); extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
+
+
+(** \brief Helper function to create a Zorba_SerializerOptions_t struct because
+ * of missing default constructor. C++ code can delete the
+ * returned Zorba_SerializerOptions_t* struct, while C code
+ * must call Zorba_SerializerOptions_free().
+ *
+ * \retval Zorba_CompilerHints_t with default member values
+ *)
+{$IFDEF S}function{$ELSE}var{$ENDIF}Zorba_SerializerOptions_default{$IFDEF D}: function{$ENDIF}:
+ pZorba_SerializerOptions_t; extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
+
+
+(** \brief Helper function to delete a Zorba_SerializerOptions_t struct
+ *
+ * \retval Zorba_CompilerHints_t with default member values
+ *)
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}Zorba_SerializerOptions_free{$IFDEF D}: procedure{$ENDIF}
+ (serializerOptions: pZorba_SerializerOptions_t); extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
+
+
+(** \brief Helper function to set an option in a Zorba_SerializerOptions_t structure
+ *
+ * \param parameter the serializer parameter to be configured
+ * \param value the value to which the parameter should be set
+ * \retval Zorba_CompilerHints_t with default member values
+ *)
+{$IFDEF S}procedure{$ELSE}var{$ENDIF}Zorba_SerializerOptions_set{$IFDEF D}: procedure{$ENDIF}
+ (serializerOptions: pZorba_SerializerOptions_t; const parameter: pcchar; const value: pcchar); extdecl;{$IFDEF S}external zorbalib;{$ENDIF}
diff --git a/packages/zorba/src/zorba_static_context_consts.inc b/packages/zorba/src/zorba_static_context_consts.inc
new file mode 100644
index 0000000000..b66dfc290d
--- /dev/null
+++ b/packages/zorba/src/zorba_static_context_consts.inc
@@ -0,0 +1,60 @@
+(*
+ * Copyright 2006-2008 The FLWOR Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *)
+
+
+type
+
+(** \brief XPath 1.0 compatibility mode as defined in
+ * http://www.w3.org/TR/xquery/#static_context
+ *)
+ xpath1_0compatib_mode_t = (xpath2_0, xpath1_0);
+
+(** \brief Ordering mode as defined in http://www.w3.org/TR/xquery/#static_context.
+ *)
+ ordering_mode_t = (ordered, unordered);
+
+(** \brief Default order for empty sequences as defined in
+ * http://www.w3.org/TR/xquery/#static_context.
+ *)
+ order_empty_mode_t = (empty_greatest, empty_least);
+
+(** \brief Inherit part of the Copy-namespace mode as defined in
+ * http://www.w3.org/TR/xquery/#static_context.
+ *)
+ inherit_mode_t = (inherit_ns, no_inherit_ns);
+
+(** \brief Preserve part of the Copy-namespace mode as defined in
+ * http://www.w3.org/TR/xquery/#static_context.
+ *)
+ preserve_mode_t = (preserve_ns, no_preserve_ns);
+
+(** \brief Boundary-space policy as defined in http://www.w3.org/TR/xquery/#static_context.
+ *)
+ boundary_space_mode_t = (preserve_space, strip_space);
+
+(** \brief Construction mode as defined in http://www.w3.org/TR/xquery/#static_context.
+ *)
+ construction_mode_t = (preserve_cons, strip_cons);
+
+(** \brief The XQuery version, taken from the version declaration, an XQuery 1.1 feature.
+ *)
+ xquery_version_t = (xquery_version_1_0 = 100, xquery_version_1_1 = 110);
+
+(** \brief Revalidation mode as defined in
+ * http://www.w3.org/TR/xquery-update-10/#id-revalidation-declaration
+ *)
+ validation_mode_t = (validate_skip, validate_lax, validate_strict);
+
diff --git a/packages/zorba/src/zorbadyn.pas b/packages/zorba/src/zorbadyn.pas
new file mode 100644
index 0000000000..62a0a97671
--- /dev/null
+++ b/packages/zorba/src/zorbadyn.pas
@@ -0,0 +1,7 @@
+unit zorbadyn;
+
+{$DEFINE LOAD_DYNAMICALLY}
+{$i zorba.inc}
+
+end.
+
diff --git a/rtl/arm/divide.inc b/rtl/arm/divide.inc
index 0fb79bffc8..f12753d890 100644
--- a/rtl/arm/divide.inc
+++ b/rtl/arm/divide.inc
@@ -41,6 +41,10 @@
function fpc_div_dword(n,z:dword):dword;[public,alias: 'FPC_DIV_DWORD'];assembler;nostackframe;
asm
+ {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)}
+ {$ifdef CPUCORTEXM3}
+ udiv r0, r1, r0
+ {$else}
mov r3, #0
rsbs r2, r0, r1, LSR#3
bcc .Ldiv_3bits
@@ -55,6 +59,7 @@ asm
mov r0, r0, LSL#8
orr r3, r3, #0x00FF0000
rsbs r2, r0, r1, LSR#8
+ itt cs
movcs r0, r0, LSL#8
orrcs r3, r3, #0x0000FF00
rsbs r2, r0, r1, LSR#4
@@ -62,32 +67,41 @@ asm
rsbs r2, r0, #0
bcs .Ldiv_by_0
.Ldiv_loop:
+ it cs
movcs r0, r0, LSR#8
.Ldiv_8bits:
rsbs r2, r0, r1, LSR#7
+ it cs
subcs r1, r1, r0, LSL#7
adc r3, r3, r3
rsbs r2, r0, r1, LSR#6
+ it cs
subcs r1, r1, r0, LSL#6
adc r3, r3, r3
rsbs r2, r0, r1, LSR#5
+ it cs
subcs r1, r1, r0, LSL#5
adc r3, r3, r3
rsbs r2, r0, r1, LSR#4
+ it cs
subcs r1, r1, r0, LSL#4
adc r3, r3, r3
.Ldiv_4bits:
rsbs r2, r0, r1, LSR#3
+ it cs
subcs r1, r1, r0, LSL#3
adc r3, r3, r3
.Ldiv_3bits:
rsbs r2, r0, r1, LSR#2
+ it cs
subcs r1, r1, r0, LSL#2
adc r3, r3, r3
rsbs r2, r0, r1, LSR#1
+ it cs
subcs r1, r1, r0, LSL#1
adc r3, r3, r3
rsbs r2, r0, r1
+ it cs
subcs r1, r1, r0
adcs r3, r3, r3
.Ldiv_next:
@@ -99,6 +113,67 @@ asm
mov r1, r11
bl handleerrorframe
mov pc, lr
+ {$endif}
+ {$else}
+ mov r3, #0
+ rsbs r2, r0, r1, LSR#3
+ bcc .Ldiv_3bits
+ rsbs r2, r0, r1, LSR#8
+ bcc .Ldiv_8bits
+ mov r0, r0, LSL#8
+ orr r3, r3, #0xFF000000
+ rsbs r2, r0, r1, LSR#4
+ bcc .Ldiv_4bits
+ rsbs r2, r0, r1, LSR#8
+ bcc .Ldiv_8bits
+ mov r0, r0, LSL#8
+ orr r3, r3, #0x00FF0000
+ rsbs r2, r0, r1, LSR#8
+ movcs r0, r0, LSL#8
+ orrcs r3, r3, #0x0000FF00
+ rsbs r2, r0, r1, LSR#4
+ bcc .Ldiv_4bits
+ rsbs r2, r0, #0
+ bcs .Ldiv_by_0
+.Ldiv_loop:
+ movcs r0, r0, LSR#8
+.Ldiv_8bits:
+ rsbs r2, r0, r1, LSR#7
+ subcs r1, r1, r0, LSL#7
+ adc r3, r3, r3
+ rsbs r2, r0, r1, LSR#6
+ subcs r1, r1, r0, LSL#6
+ adc r3, r3, r3
+ rsbs r2, r0, r1, LSR#5
+ subcs r1, r1, r0, LSL#5
+ adc r3, r3, r3
+ rsbs r2, r0, r1, LSR#4
+ subcs r1, r1, r0, LSL#4
+ adc r3, r3, r3
+.Ldiv_4bits:
+ rsbs r2, r0, r1, LSR#3
+ subcs r1, r1, r0, LSL#3
+ adc r3, r3, r3
+.Ldiv_3bits:
+ rsbs r2, r0, r1, LSR#2
+ subcs r1, r1, r0, LSL#2
+ adc r3, r3, r3
+ rsbs r2, r0, r1, LSR#1
+ subcs r1, r1, r0, LSL#1
+ adc r3, r3, r3
+ rsbs r2, r0, r1
+ subcs r1, r1, r0
+ adcs r3, r3, r3
+.Ldiv_next:
+ bcs .Ldiv_loop
+ mov r0, r3
+ mov pc, lr
+.Ldiv_by_0:
+ mov r0, #200
+ mov r1, r11
+ bl handleerrorframe
+ mov pc, lr
+ {$endif}
end;
{It is a compilerproc (systemh.inc), make an alias for internal use.}
@@ -110,6 +185,26 @@ function fpc_div_dword(n,z:dword):dword;external name 'FPC_DIV_DWORD';
function fpc_div_longint(n,z:longint):longint;[public,alias: 'FPC_DIV_LONGINT'];assembler;nostackframe;
asm
+ {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)}
+ {$ifdef CPUCORTEXM3}
+ sdiv r0, r1, r0
+ {$else}
+ stmfd sp!, {lr}
+ ands r12, r0, #1<<31 (* r12:=r0 and $80000000 *)
+ it mi
+ rsbmi r0, r0, #0 (* if signed(r0) then r0:=0-r0 *)
+ eors r12, r12, r1, ASR#32 (* r12:=r12 xor (r1 asr 32) *)
+ it cs
+ rsbcs r1, r1, #0 (* if signed(r12) then r1:=0-r1 *)
+ bl fpc_div_dword
+ movs r12, r12, LSL#1 (* carry:=sign(r12) *)
+ it cs
+ rsbcs r0, r0, #0
+ it mi
+ rsbmi r1, r1, #0
+ ldmfd sp!, {pc}
+ {$endif}
+ {$else}
stmfd sp!, {lr}
ands r12, r0, #1<<31 (* r12:=r0 and $80000000 *)
rsbmi r0, r0, #0 (* if signed(r0) then r0:=0-r0 *)
@@ -120,6 +215,7 @@ asm
rsbcs r0, r0, #0
rsbmi r1, r1, #0
ldmfd sp!, {pc}
+ {$endif}
end;
{It is a compilerproc (systemh.inc), make an alias for internal use.}
diff --git a/rtl/arm/setjump.inc b/rtl/arm/setjump.inc
index 120a3ef1b8..f723e7bdc4 100644
--- a/rtl/arm/setjump.inc
+++ b/rtl/arm/setjump.inc
@@ -16,18 +16,38 @@
function setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP'];nostackframe;
asm
+ {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)}
+ stmia r0!, {v1-v6, sl, fp}
+ mov r2, sp
+ stmia r0!, {r2, lr}
+
+ mov r0,#0
+ mov pc,lr
+ {$else}
stmia r0,{v1-v6, sl, fp, sp, lr}
mov r0,#0
mov pc,lr
+ {$endif}
end;
procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP'];
asm
- mov ip, r0
- movs r0, r1
- moveq r0, #1
- ldmia ip,{v1-v6, sl, fp, sp, pc}
+ {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)}
+ mov ip, r0
+ movs r0, r1
+ it eq
+ moveq r0, #1
+ ldmia ip,{v1-v6, sl, fp}
+ ldr sp, [ip]
+ add ip, ip, #4
+ ldr pc, [ip]
+ {$else}
+ mov ip, r0
+ movs r0, r1
+ moveq r0, #1
+ ldmia ip,{v1-v6, sl, fp, sp, pc}
+ {$endif}
end;
diff --git a/rtl/arm/thumb2.inc b/rtl/arm/thumb2.inc
new file mode 100644
index 0000000000..2012503393
--- /dev/null
+++ b/rtl/arm/thumb2.inc
@@ -0,0 +1,659 @@
+{
+
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2003 by the Free Pascal development team.
+
+ Processor dependent implementation for the system unit for
+ ARM
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{$asmmode gas}
+
+{$ifndef FPC_SYSTEM_HAS_MOVE}
+{$define FPC_SYSTEM_FPC_MOVE}
+{$endif FPC_SYSTEM_HAS_MOVE}
+
+{$ifdef FPC_SYSTEM_FPC_MOVE}
+const
+ cpu_has_edsp : boolean = false;
+ in_edsp_test : boolean = false;
+{$endif FPC_SYSTEM_FPC_MOVE}
+
+{$if not(defined(wince)) and not(defined(gba)) and not(defined(nds)) and not(defined(FPUSOFT)) and not(defined(FPULIBGCC))}
+{$define FPC_SYSTEM_HAS_SYSINITFPU}
+Procedure SysInitFPU;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+ { Enable FPU exceptions, but disable INEXACT, UNDERFLOW, DENORMAL }
+ asm
+ rfs r0
+ and r0,r0,#0xffe0ffff
+ orr r0,r0,#0x00070000
+ wfs r0
+ end;
+end;
+{$endif}
+
+procedure fpc_cpuinit;
+begin
+ SysInitFPU;
+end;
+
+{$ifdef wince}
+function _controlfp(new: DWORD; mask: DWORD): DWORD; cdecl; external 'coredll';
+
+{$define FPC_SYSTEM_HAS_SYSRESETFPU}
+Procedure SysResetFPU;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+ softfloat_exception_flags:=0;
+end;
+
+{$define FPC_SYSTEM_HAS_SYSINITFPU}
+Procedure SysInitFPU;{$ifdef SYSTEMINLINE}inline;{$endif}
+begin
+ softfloat_exception_mask:=float_flag_underflow or float_flag_inexact or float_flag_denormal;
+ { Enable FPU exceptions, but disable INEXACT, UNDERFLOW, DENORMAL }
+ { FPU precision 64 bit, rounding to nearest, affine infinity }
+ _controlfp($000C0003, $030F031F);
+end;
+{$endif wince}
+
+{****************************************************************************
+ stack frame related stuff
+****************************************************************************}
+
+{$IFNDEF INTERNAL_BACKTRACE}
+{$define FPC_SYSTEM_HAS_GET_FRAME}
+function get_frame:pointer;assembler;nostackframe;
+asm
+ mov r0,r11
+end;
+{$ENDIF not INTERNAL_BACKTRACE}
+
+{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
+function get_caller_addr(framebp:pointer):pointer;assembler;
+asm
+ movs r0,r0
+ beq .Lg_a_null
+ ldr r0,[r0,#-4]
+.Lg_a_null:
+end;
+
+
+{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
+function get_caller_frame(framebp:pointer):pointer;assembler;
+asm
+ movs r0,r0
+ beq .Lgnf_null
+ ldr r0,[r0,#-12]
+.Lgnf_null:
+end;
+
+
+{$define FPC_SYSTEM_HAS_SPTR}
+Function Sptr : pointer;assembler;
+asm
+ mov r0,sp
+end;
+
+
+{$ifndef FPC_SYSTEM_HAS_FILLCHAR}
+{$define FPC_SYSTEM_HAS_FILLCHAR}
+Procedure FillChar(var x;count:longint;value:byte);assembler;nostackframe;
+asm
+ // less than 0?
+ cmp r1,#0
+ it lt
+ movlt pc,lr
+ mov r3,r0
+ cmp r1,#8 // at least 8 bytes to do?
+ blt .LFillchar2
+ orr r2,r2,r2,lsl #8
+ orr r2,r2,r2,lsl #16
+.LFillchar0:
+ tst r3,#3 // aligned yet?
+ itt ne
+ strneb r2,[r3],#1
+ subne r1,r1,#1
+ bne .LFillchar0
+ mov ip,r2
+.LFillchar1:
+ cmp r1,#8 // 8 bytes still to do?
+ blt .LFillchar2
+ stmia r3!,{r2,ip}
+ sub r1,r1,#8
+ cmp r1,#8 // 8 bytes still to do?
+ blt .LFillchar2
+ stmia r3!,{r2,ip}
+ sub r1,r1,#8
+ cmp r1,#8 // 8 bytes still to do?
+ blt .LFillchar2
+ stmia r3!,{r2,ip}
+ sub r1,r1,#8
+ cmp r1,#8 // 8 bytes still to do?
+ itt ge
+ stmgeia r3!,{r2,ip}
+ subge r1,r1,#8
+ bge .LFillchar1
+.LFillchar2:
+ movs r1,r1 // anything left?
+ it eq
+ moveq pc,lr
+ rsb r1,r1,#7
+ add pc,pc,r1,lsl #2
+ mov r0,r0
+ strb r2,[r3],#1
+ strb r2,[r3],#1
+ strb r2,[r3],#1
+ strb r2,[r3],#1
+ strb r2,[r3],#1
+ strb r2,[r3],#1
+ strb r2,[r3],#1
+ mov pc,lr
+end;
+{$endif FPC_SYSTEM_HAS_FILLCHAR}
+
+{$ifndef FPC_SYSTEM_HAS_MOVE}
+{$define FPC_SYSTEM_HAS_MOVE}
+procedure Move_pld(const source;var dest;count:longint);assembler;nostackframe;
+asm
+ pld [r0]
+ pld [r1]
+ // count <=0 ?
+ cmp r2,#0
+ it le
+ movle pc,lr
+ // overlap?
+ cmp r1,r0
+ bls .Lnooverlap
+ add r3,r0,r2
+ cmp r3,r1
+ bls .Lnooverlap
+ // overlap, copy backward
+.Loverlapped:
+ subs r2,r2,#1
+ ldrb r3,[r0,r2]
+ strb r3,[r1,r2]
+ bne .Loverlapped
+ mov pc,lr
+.Lnooverlap:
+ // less then 16 bytes to copy?
+ cmp r2,#8
+ // yes, the forget about the whole optimizations
+ // and do a bytewise copy
+ blt .Lbyteloop
+
+ // both aligned?
+ orr r3,r0,r1
+ tst r3,#3
+
+ bne .Lbyteloop
+(*
+ // yes, then align
+ // alignment to 4 byte boundries is enough
+ ldrb ip,[r0],#1
+ sub r2,r2,#1
+ stb ip,[r1],#1
+ tst r3,#2
+ bne .Ldifferentaligned
+ ldrh ip,[r0],#2
+ sub r2,r2,#2
+ sth ip,[r1],#2
+
+.Ldifferentaligned
+ // qword aligned?
+ orrs r3,r0,r1
+ tst r3,#7
+ bne .Ldwordloop
+*)
+ pld [r0,#32]
+ pld [r1,#32]
+.Ldwordloop:
+ sub r2,r2,#4
+ ldr r3,[r0],#4
+ // preload
+ pld [r0,#64]
+ pld [r1,#64]
+ cmp r2,#4
+ str r3,[r1],#4
+ bcs .Ldwordloop
+ cmp r2,#0
+ it eq
+ moveq pc,lr
+.Lbyteloop:
+ subs r2,r2,#1
+ ldrb r3,[r0],#1
+ strb r3,[r1],#1
+ bne .Lbyteloop
+ mov pc,lr
+end;
+
+procedure Move_blended(const source;var dest;count:longint);assembler;nostackframe;
+asm
+ // count <=0 ?
+ cmp r2,#0
+ it le
+ movle pc,lr
+ // overlap?
+ cmp r1,r0
+ bls .Lnooverlap
+ add r3,r0,r2
+ cmp r3,r1
+ bls .Lnooverlap
+ // overlap, copy backward
+.Loverlapped:
+ subs r2,r2,#1
+ ldrb r3,[r0,r2]
+ strb r3,[r1,r2]
+ bne .Loverlapped
+ mov pc,lr
+.Lnooverlap:
+ // less then 16 bytes to copy?
+ cmp r2,#8
+ // yes, the forget about the whole optimizations
+ // and do a bytewise copy
+ blt .Lbyteloop
+
+ // both aligned?
+ orr r3,r0,r1
+ tst r3,#3
+
+ bne .Lbyteloop
+(*
+ // yes, then align
+ // alignment to 4 byte boundries is enough
+ ldrb ip,[r0],#1
+ sub r2,r2,#1
+ stb ip,[r1],#1
+ tst r3,#2
+ bne .Ldifferentaligned
+ ldrh ip,[r0],#2
+ sub r2,r2,#2
+ sth ip,[r1],#2
+
+.Ldifferentaligned
+ // qword aligned?
+ orrs r3,r0,r1
+ tst r3,#7
+ bne .Ldwordloop
+*)
+.Ldwordloop:
+ sub r2,r2,#4
+ ldr r3,[r0],#4
+ cmp r2,#4
+ str r3,[r1],#4
+ bcs .Ldwordloop
+ cmp r2,#0
+ it eq
+ moveq pc,lr
+.Lbyteloop:
+ subs r2,r2,#1
+ ldrb r3,[r0],#1
+ strb r3,[r1],#1
+ bne .Lbyteloop
+ mov pc,lr
+end;
+
+
+const
+ moveproc : pointer = @move_blended;
+
+procedure Move(const source;var dest;count:longint);[public, alias: 'FPC_MOVE'];assembler;nostackframe;
+asm
+ ldr ip,.Lmoveproc
+ ldr pc,[ip]
+.Lmoveproc:
+ .long moveproc
+end;
+
+{$endif FPC_SYSTEM_HAS_MOVE}
+
+{****************************************************************************
+ String
+****************************************************************************}
+
+{$ifndef FPC_SYSTEM_HAS_FPC_SHORTSTR_ASSIGN}
+{$define FPC_SYSTEM_HAS_FPC_SHORTSTR_ASSIGN}
+
+{$ifndef FPC_STRTOSHORTSTRINGPROC}
+function fpc_shortstr_to_shortstr(len:longint;const sstr:shortstring):shortstring;assembler;nostackframe;[public,alias: 'FPC_SHORTSTR_TO_SHORTSTR'];compilerproc;
+{$else}
+procedure fpc_shortstr_to_shortstr(out res:shortstring;const sstr:shortstring);assembler;nostackframe;[public,alias: 'FPC_SHORTSTR_TO_SHORTSTR'];compilerproc;
+{$endif}
+{r0: __RESULT
+ r1: len
+ r2: sstr}
+
+asm
+ ldrb r12,[r2],#1
+ cmp r12,r1
+ it gt
+ movgt r12,r1
+ strb r12,[r0],#1
+ cmp r12,#6 (* 6 seems to be the break even point. *)
+ blt .LStartTailCopy
+ (* Align destination on 32bits. This is the only place where unrolling
+ really seems to help, since in the common case, sstr is aligned on
+ 32 bits, therefore in the common case we need to copy 3 bytes to
+ align, i.e. in the case of a loop, you wouldn't branch out early.*)
+ rsb r3,r0,#0
+ ands r3,r3,#3
+ sub r12,r12,r3
+ itttt ne
+ ldrneb r1,[r2],#1
+ strneb r1,[r0],#1
+ subnes r3,r3,#1
+ ldrneb r1,[r2],#1
+ itttt ne
+ strneb r1,[r0],#1
+ subnes r3,r3,#1
+ ldrneb r1,[r2],#1
+ strneb r1,[r0],#1
+ it ne
+ subnes r3,r3,#1
+.LDoneAlign:
+ (* Destination should be aligned now, but source might not be aligned,
+ if this is the case, do a byte-per-byte copy. *)
+ tst r2,#3
+ bne .LStartTailCopy
+ (* Start the main copy, 32 bit at a time. *)
+ movs r3,r12,lsr #2
+ and r12,r12,#3
+ beq .LStartTailCopy
+.LNext4bytes:
+ (* Unrolling this loop would save a little bit of time for long strings
+ (>20 chars), but alas, it hurts for short strings and they are the
+ common case.*)
+ ittt ne
+ ldrne r1,[r2],#4
+ strne r1,[r0],#4
+ subnes r3,r3,#1
+ bne .LNext4bytes
+.LStartTailCopy:
+ (* Do remaining bytes. *)
+ cmp r12,#0
+ beq .LDoneTail
+.LNextChar3:
+ ldrb r1,[r2],#1
+ strb r1,[r0],#1
+ subs r12,r12,#1
+ bne .LNextChar3
+.LDoneTail:
+end;
+
+procedure fpc_shortstr_assign(len:longint;sstr,dstr:pointer);assembler;nostackframe;[public,alias:'FPC_SHORTSTR_ASSIGN'];compilerproc;
+
+{r0: len
+ r1: sstr
+ r2: dstr}
+
+asm
+ ldrb r12,[r1],#1
+ cmp r12,r0
+ it gt
+ movgt r12,r0
+ strb r12,[r2],#1
+ cmp r12,#6 (* 6 seems to be the break even point. *)
+ blt .LStartTailCopy
+ (* Align destination on 32bits. This is the only place where unrolling
+ really seems to help, since in the common case, sstr is aligned on
+ 32 bits, therefore in the common case we need to copy 3 bytes to
+ align, i.e. in the case of a loop, you wouldn't branch out early.*)
+ rsb r3,r2,#0
+ ands r3,r3,#3
+ sub r12,r12,r3
+ itttt ne
+ ldrneb r0,[r1],#1
+ strneb r0,[r2],#1
+ subnes r3,r3,#1
+ ldrneb r0,[r1],#1
+ itttt ne
+ strneb r0,[r2],#1
+ subnes r3,r3,#1
+ ldrneb r0,[r1],#1
+ strneb r0,[r2],#1
+ it ne
+ subnes r3,r3,#1
+.LDoneAlign:
+ (* Destination should be aligned now, but source might not be aligned,
+ if this is the case, do a byte-per-byte copy. *)
+ tst r1,#3
+ bne .LStartTailCopy
+ (* Start the main copy, 32 bit at a time. *)
+ movs r3,r12,lsr #2
+ and r12,r12,#3
+ beq .LStartTailCopy
+.LNext4bytes:
+ (* Unrolling this loop would save a little bit of time for long strings
+ (>20 chars), but alas, it hurts for short strings and they are the
+ common case.*)
+ ittt ne
+ ldrne r0,[r1],#4
+ strne r0,[r2],#4
+ subnes r3,r3,#1
+ bne .LNext4bytes
+.LStartTailCopy:
+ (* Do remaining bytes. *)
+ cmp r12,#0
+ beq .LDoneTail
+.LNextChar3:
+ ldrb r0,[r1],#1
+ strb r0,[r2],#1
+ subs r12,r12,#1
+ bne .LNextChar3
+.LDoneTail:
+end;
+{$endif FPC_SYSTEM_HAS_FPC_SHORTSTR_ASSIGN}
+
+{$ifndef FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
+{$define FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
+function fpc_Pchar_length(p:Pchar):longint;assembler;nostackframe;[public,alias:'FPC_PCHAR_LENGTH'];compilerproc;
+
+asm
+ cmp r0,#0
+ mov r1,r0
+ beq .Ldone
+.Lnextchar:
+ (*Are we aligned?*)
+ tst r1,#3
+ bne .Ltest_unaligned (*No, do byte per byte.*)
+ ldr r3,.L01010101
+.Ltest_aligned:
+ (*Aligned, load 4 bytes at a time.*)
+ ldr r12,[r1],#4
+ (*Check wether r12 contains a 0 byte.*)
+ sub r2,r12,r3
+ mvn r12,r12
+ and r2,r2,r12
+ ands r2,r2,r3,lsl #7 (*r3 lsl 7 = $80808080*)
+ beq .Ltest_aligned (*No 0 byte, repeat.*)
+ sub r1,r1,#4
+.Ltest_unaligned:
+ ldrb r12,[r1],#1
+ cmp r12,#1 (*r12<1 same as r12=0, but result in carry flag*)
+ bcs .Lnextchar
+ (*Dirty trick: we need to subtract 1 extra because we have counted the
+ terminating 0, due to the known carry flag sbc can do this.*)
+ sbc r0,r1,r0
+.Ldone:
+ mov pc,lr
+.L01010101:
+ .long 0x01010101
+end;
+{$endif}
+
+
+var
+ fpc_system_lock: longint; export name 'fpc_system_lock';
+
+function InterLockedDecrement (var Target: longint) : longint; assembler; nostackframe;
+asm
+// lock
+ ldr r3, .Lfpc_system_lock
+ mov r1, #1
+.Lloop:
+ ldrex r2, [r3]
+ cmp r2, #0
+ itt eq
+ strexeq r2, r1, [r3]
+ cmpeq r2, #0
+ bne .Lloop
+// do the job
+ ldr r1, [r0]
+ sub r1, r1, #1
+ str r1, [r0]
+ mov r0, r1
+// unlock and return
+ str r2, [r3]
+ mov pc, lr
+
+.Lfpc_system_lock:
+ .long fpc_system_lock
+end;
+
+
+function InterLockedIncrement (var Target: longint) : longint; assembler; nostackframe;
+asm
+// lock
+ ldr r3, .Lfpc_system_lock
+ mov r1, #1
+.Lloop:
+ ldrex r2, [r3]
+ cmp r2, #0
+ itt eq
+ strexeq r2, r1, [r3]
+ cmpeq r2, #0
+ bne .Lloop
+// do the job
+ ldr r1, [r0]
+ add r1, r1, #1
+ str r1, [r0]
+ mov r0, r1
+// unlock and return
+ str r2, [r3]
+ mov pc, lr
+
+.Lfpc_system_lock:
+ .long fpc_system_lock
+end;
+
+
+function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler; nostackframe;
+asm
+
+// lock
+ ldr r3, .Lfpc_system_lock
+ mov r2, #1
+.Lloop:
+ ldrex r2, [r3]
+ cmp r2, #0
+ itt eq
+ strexeq r2, r12, [r3]
+ cmpeq r2, #0
+ bne .Lloop
+// do the job
+ ldr r2, [r0]
+ str r1, [r0]
+ mov r0, r2
+// unlock and return
+ mov r2, #0
+ str r2, [r3]
+ mov pc, lr
+
+.Lfpc_system_lock:
+ .long fpc_system_lock
+end;
+
+function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler; nostackframe;
+asm
+// lock
+ ldr r3, .Lfpc_system_lock
+ mov r2, #1
+.Lloop:
+ ldrex r2, [r3]
+ cmp r2, #0
+ itt eq
+ strexeq r2, r12, [r3]
+ cmpeq r2, #0
+ bne .Lloop
+// do the job
+ ldr r2, [r0]
+ add r1, r1, r2
+ str r1, [r0]
+ mov r0, r2
+// unlock and return
+ mov r2, #0
+ str r2, [r3]
+ mov pc, lr
+
+.Lfpc_system_lock:
+ .long fpc_system_lock
+end;
+
+
+function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; assembler; nostackframe;
+asm
+// lock
+ ldr r12, .Lfpc_system_lock
+ mov r3, #1
+.Lloop:
+ ldrex r2, [r12]
+ cmp r2, #0
+ itt eq
+ strexeq r2, r1, [r12]
+ cmpeq r2, #0
+ bne .Lloop
+// do the job
+ ldr r3, [r0]
+ cmp r3, r2
+ it eq
+ streq r1, [r0]
+ mov r0, r3
+// unlock and return
+ mov r3, #0
+ str r3, [r12]
+ mov pc, lr
+
+.Lfpc_system_lock:
+ .long fpc_system_lock
+end;
+
+{$define FPC_SYSTEM_HAS_DECLOCKED_LONGINT}
+function declocked(var l: longint) : boolean; inline;
+begin
+ Result:=InterLockedDecrement(l) = 0;
+end;
+
+{$define FPC_SYSTEM_HAS_INCLOCKED_LONGINT}
+procedure inclocked(var l: longint); inline;
+begin
+ InterLockedIncrement(l);
+end;
+
+procedure fpc_cpucodeinit;
+begin
+{$ifdef FPC_SYSTEM_FPC_MOVE}
+ cpu_has_edsp:=true;
+ in_edsp_test:=true;
+ asm
+ bic r0,sp,#7
+ ldrd r0,[r0]
+ end;
+ in_edsp_test:=false;
+ if cpu_has_edsp then
+ moveproc:=@move_pld
+ else
+ moveproc:=@move_blended;
+{$endif FPC_SYSTEM_FPC_MOVE}
+end;
+
+{include hand-optimized assembler division code}
+{$i divide.inc}
+
diff --git a/rtl/bsd/ossysc.inc b/rtl/bsd/ossysc.inc
index 246ba744cd..d49733422e 100644
--- a/rtl/bsd/ossysc.inc
+++ b/rtl/bsd/ossysc.inc
@@ -545,3 +545,13 @@ begin
fpreadlink:=do_syscall(syscall_nr_readlink, TSysParam(name),TSysParam(linkname),maxlen);
end;
+function FpGetRLimit(resource:cint;rlim:PRLimit):cint; [public, alias : 'FPC_SYSC_GETRLIMIT'];
+begin
+ fpgetrlimit:=do_syscall(syscall_nr_getrlimit,TSysParam(Resource),TSysParam(rlim));
+end;
+
+function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; [public, alias : 'FPC_SYSC_SETRLIMIT'];
+begin
+ fpsetrlimit:=do_syscall(syscall_nr_setrlimit,TSysParam(Resource),TSysParam(rlim));
+end;
+
diff --git a/rtl/darwin/Makefile b/rtl/darwin/Makefile
index fc160c4f00..b08ec4d49d 100644
--- a/rtl/darwin/Makefile
+++ b/rtl/darwin/Makefile
@@ -2469,7 +2469,7 @@ unix$(PPUEXT) : unixtype$(PPUEXT) baseunix$(PPUEXT) unixutil$(PPUEXT) strings$(P
unxconst.inc $(UNIXINC)/timezone.inc \
unxfunc.inc baseunix$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
unixutil$(PPUEXT) : $(SYSTEMUNIT)$(PPUEXT)
-dynlibs$(PPUEXT) : dl$(PPUEXT) objpas$(PPUEXT)
+dynlibs$(PPUEXT) : dl$(PPUEXT) objpas$(PPUEXT) rtlconsts$(PPUEXT) sysutils$(PPUEXT) sysconst$(PPUEXT)
ctypes$(PPUEXT) : $(SYSTEMUNIT)$(PPUEXT) unixtype$(PPUEXT)
dos$(PPUEXT) : $(SYSTEMUNIT)$(PPUEXT) strings$(PPUEXT) unix$(PPUEXT) $(UNIXINC)/dos.pp $(INC)/filerec.inc $(INC)/textrec.inc strings$(PPUEXT) \
unix$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
diff --git a/rtl/darwin/Makefile.fpc b/rtl/darwin/Makefile.fpc
index c99ecdc1fc..d17eaf7168 100644
--- a/rtl/darwin/Makefile.fpc
+++ b/rtl/darwin/Makefile.fpc
@@ -158,7 +158,7 @@ unix$(PPUEXT) : unixtype$(PPUEXT) baseunix$(PPUEXT) unixutil$(PPUEXT) strings$(P
unixutil$(PPUEXT) : $(SYSTEMUNIT)$(PPUEXT)
-dynlibs$(PPUEXT) : dl$(PPUEXT) objpas$(PPUEXT)
+dynlibs$(PPUEXT) : dl$(PPUEXT) objpas$(PPUEXT) rtlconsts$(PPUEXT) sysutils$(PPUEXT) sysconst$(PPUEXT)
ctypes$(PPUEXT) : $(SYSTEMUNIT)$(PPUEXT) unixtype$(PPUEXT)
diff --git a/rtl/embedded/arm/stm32f103.pp b/rtl/embedded/arm/stm32f103.pp
new file mode 100644
index 0000000000..4d3c5b510f
--- /dev/null
+++ b/rtl/embedded/arm/stm32f103.pp
@@ -0,0 +1,626 @@
+{
+Register definitions and utility code for STM32F103
+Preliminary startup code - TODO: interrupt handler variables
+
+Created by Jeppe Johansen 2009 - jepjoh2@kom.aau.dk
+}
+unit stm32f103;
+
+{$goto on}
+
+interface
+
+type
+ TBitvector32 = bitpacked array[0..31] of 0..1;
+
+{$PACKRECORDS 2}
+const
+ PeripheralBase = $40000000;
+
+ FSMCBase = $60000000;
+
+ APB1Base = PeripheralBase;
+ APB2Base = PeripheralBase+$10000;
+ AHBBase = PeripheralBase+$20000;
+
+ { FSMC }
+ FSMCBank1NOR1 = FSMCBase+$00000000;
+ FSMCBank1NOR2 = FSMCBase+$04000000;
+ FSMCBank1NOR3 = FSMCBase+$08000000;
+ FSMCBank1NOR4 = FSMCBase+$0C000000;
+
+ FSMCBank1PSRAM1 = FSMCBase+$00000000;
+ FSMCBank1PSRAM2 = FSMCBase+$04000000;
+ FSMCBank1PSRAM3 = FSMCBase+$08000000;
+ FSMCBank1PSRAM4 = FSMCBase+$0C000000;
+
+ FSMCBank2NAND1 = FSMCBase+$10000000;
+ FSMCBank3NAND2 = FSMCBase+$20000000;
+
+ FSMCBank4PCCARD = FSMCBase+$30000000;
+
+type
+ TTimerRegisters = record
+ CR1, res1,
+ CR2, res2,
+ SMCR, res3,
+ DIER, res4,
+ SR, res5,
+ EGR, res,
+ CCMR1, res6,
+ CCMR2, res7,
+ CCER, res8,
+ CNT, res9,
+ PSC, res10,
+ ARR, res11,
+ RCR, res12,
+ CCR1, res13,
+ CCR2, res14,
+ CCR3, res15,
+ CCR4, res16,
+ BDTR, res17,
+ DCR, res18,
+ DMAR, res19: Word;
+ end;
+
+ TRTCRegisters = record
+ CRH, res1,
+ CRL, res2,
+ PRLH, res3,
+ PRLL, res4,
+ DIVH, res5,
+ DIVL, res6,
+ CNTH, res7,
+ CNTL, res8,
+ ALRH, res9,
+ ALRL, res10: Word;
+ end;
+
+ TIWDGRegisters = record
+ KR, res1,
+ PR, res2,
+ RLR, res3,
+ SR, res4: word;
+ end;
+
+ TWWDGRegisters = record
+ CR, res2,
+ CFR, res3,
+ SR, res4: word;
+ end;
+
+ TSPIRegisters = record
+ CR1, res1,
+ CR2, res2,
+ SR, res3,
+ DR, res4,
+ CRCPR, res5,
+ RXCRCR, res6,
+ TXCRCR, res7,
+ I2SCFGR, res8,
+ I2SPR, res9: Word;
+ end;
+
+ TUSARTRegisters = record
+ SR, res1,
+ DR, res2,
+ BRR, res3,
+ CR1, res4,
+ CR2, res5,
+ CR3, res6,
+ GTPR, res7: Word;
+ end;
+
+ TI2CRegisters = record
+ CR1, res1,
+ CR2, res2,
+ OAR1, res3,
+ OAR2, res4,
+ DR, res5,
+ SR1, res6,
+ SR2, res7,
+ CCR, res8: word;
+ TRISE: byte;
+ end;
+
+ TUSBRegisters = record
+ EPR: array[0..7] of DWord;
+
+ res: array[0..7] of dword;
+
+ CNTR, res1,
+ ISTR, res2,
+ FNR, res3: Word;
+ DADDR: byte; res4: word; res5: byte;
+ BTABLE: Word;
+ end;
+
+ TUSBMem = packed array[0..511] of byte;
+
+ TCANMailbox = record
+ IR,
+ DTR,
+ DLR,
+ DHR: DWord;
+ end;
+
+ TCANRegisters = record
+ MCR,
+ MSR,
+ TSR,
+ RF0R,
+ RF1R,
+ IER,
+ ESR,
+ BTR: DWord;
+
+ res5: array[$020..$17F] of byte;
+
+ TX: array[0..2] of TCANMailbox;
+ RX: array[0..2] of TCANMailbox;
+
+ res6: array[$1D0..$1FF] of byte;
+
+ FMR,
+ FM1R,
+ res9: DWord;
+ FS1R, res10: word;
+ res11: DWord;
+ FFA1R, res12: word;
+ res13: DWord;
+ FA1R, res14: word;
+ res15: array[$220..$23F] of byte;
+
+ FOR1,
+ FOR2: DWord;
+
+ FB: array[1..13] of array[1..2] of DWord;
+ end;
+
+ TBKPRegisters = record
+ DR: array[1..10] of record data, res: word; end;
+
+ RTCCR,
+ CR,
+ CSR,
+ res1,res2: DWord;
+
+ DR2: array[11..42] of record data, res: word; end;
+ end;
+
+ TPwrRegisters = record
+ CR, res: word;
+ CSR: Word;
+ end;
+
+ TDACRegisters = record
+ CR,
+ SWTRIGR: DWord;
+
+ DHR12R1, res2,
+ DHR12L1, res3,
+ DHR8R1, res4,
+ DHR12R2, res5,
+ DHR12L2, res6,
+ DHR8R2, res7: word;
+
+ DHR12RD,
+ DHR12LD: DWord;
+
+ DHR8RD, res8,
+
+ DOR1, res9,
+ DOR2, res10: Word;
+ end;
+
+ TAFIORegisters = record
+ EVCR,
+ MAPR: DWord;
+ EXTICR: array[0..3] of DWord;
+ end;
+
+ TEXTIRegisters = record
+ IMR,
+ EMR,
+ RTSR,
+ FTSR,
+ SWIER,
+ PR: DWord;
+ end;
+
+ TPortRegisters = record
+ CRL,
+ CRH,
+ IDR,
+ ODR,
+ BSRR,
+ BRR,
+ LCKR: DWord;
+ end;
+
+ TADCRegisters = record
+ SR,
+ CR1,
+ CR2,
+ SMPR1,
+ SMPR2: DWord;
+ JOFR1, res2,
+ JOFR2, res3,
+ JOFR3, res4,
+ JOFR4, res5,
+ HTR, res6,
+ LTR, res7: word;
+ SQR1,
+ SQR2,
+ SQR3,
+ JSQR: DWord;
+ JDR1, res8,
+ JDR2, res9,
+ JDR3, res10,
+ JDR4, res11: Word;
+ DR: DWord;
+ end;
+
+ TSDIORegisters = record
+ POWER,
+ CLKCR,
+ ARG: DWord;
+ CMD, res3,
+ RESPCMD, res4: Word;
+ RESP1,
+ RESP2,
+ RESP3,
+ RESP4,
+ DTIMER,
+ DLEN: DWord;
+ DCTRL, res5: word;
+ DCOUNT,
+ STA,
+ ICR,
+ MASK,
+ FIFOCNT,
+ FIFO: DWord;
+ end;
+
+ TDMAChannel = record
+ CCR, res1,
+ CNDTR, res2: word;
+ CPAR,
+ CMAR,
+ res: DWord;
+ end;
+
+ TDMARegisters = record
+ ISR,
+ IFCR: DWord;
+ Channel: array[0..7] of TDMAChannel;
+ end;
+
+ TRCCRegisters = record
+ CR,
+ CFGR,
+ CIR,
+ APB2RSTR,
+ APB1RSTR,
+ AHBENR,
+ APB2ENR,
+ APB1ENR,
+ BDCR,
+ CSR: DWord;
+ end;
+
+ TCRCRegisters = record
+ DR: DWord;
+ IDR: byte; res1: word; res2: byte;
+ CR: byte;
+ end;
+
+ TFSMCRegisters = record
+ nothingyet: byte;
+ end;
+
+ TFlashRegisters = record
+ ACR,
+ KEYR,
+ OPTKEYR,
+ SR,
+ CR,
+ AR,
+ res,
+ OBR,
+ WRPR: DWord;
+ end;
+
+{$ALIGN 2}
+var
+ { Timers }
+ Timer1: TTimerRegisters absolute (APB2Base+$2C00);
+ Timer2: TTimerRegisters absolute (APB1Base+$0000);
+ Timer3: TTimerRegisters absolute (APB1Base+$0400);
+ Timer4: TTimerRegisters absolute (APB1Base+$0800);
+ Timer5: TTimerRegisters absolute (APB1Base+$0C00);
+ Timer6: TTimerRegisters absolute (APB1Base+$1000);
+ Timer7: TTimerRegisters absolute (APB1Base+$1400);
+ Timer8: TTimerRegisters absolute (APB2Base+$3400);
+
+ { RTC }
+ RTC: TRTCRegisters absolute (APB1Base+$2800);
+
+ { WDG }
+ WWDG: TWWDGRegisters absolute (APB1Base+$2C00);
+ IWDG: TIWDGRegisters absolute (APB1Base+$3000);
+
+ { SPI }
+ SPI1: TSPIRegisters absolute (APB2Base+$3000);
+ SPI2: TSPIRegisters absolute (APB1Base+$3800);
+ SPI3: TSPIRegisters absolute (APB1Base+$3C00);
+
+ { USART/UART }
+ USART1: TUSARTRegisters absolute (APB2Base+$3800);
+ USART2: TUSARTRegisters absolute (APB1Base+$4400);
+ USART3: TUSARTRegisters absolute (APB1Base+$4800);
+ UART4: TUSARTRegisters absolute (APB1Base+$4C00);
+ UART5: TUSARTRegisters absolute (APB1Base+$5000);
+
+ { I2C }
+ I2C1: TI2CRegisters absolute (APB1Base+$5400);
+ I2C2: TI2CRegisters absolute (APB1Base+$5800);
+
+ { USB }
+ USB: TUSBRegisters absolute (APB1Base+$5C00);
+ USBMem: TUSBMem absolute (APB1Base+$5C00);
+
+ { CAN }
+ CAN: TCANRegisters absolute (APB1Base+$6800);
+
+ { BKP }
+ BKP: TBKPRegisters absolute (APB1Base+$6C00);
+
+ { PWR }
+ PWR: TPwrRegisters absolute (APB1Base+$7000);
+
+ { DAC }
+ DAC: TDACRegisters absolute (APB1Base+$7400);
+
+ { GPIO }
+ AFIO: TAFIORegisters absolute (APB2Base+$0);
+ EXTI: TEXTIRegisters absolute (APB2Base+$0400);
+
+ PortA: TPortRegisters absolute (APB2Base+$0800);
+ PortB: TPortRegisters absolute (APB2Base+$0C00);
+ PortC: TPortRegisters absolute (APB2Base+$1000);
+ PortD: TPortRegisters absolute (APB2Base+$1400);
+ PortE: TPortRegisters absolute (APB2Base+$1800);
+ PortF: TPortRegisters absolute (APB2Base+$1C00);
+ PortG: TPortRegisters absolute (APB2Base+$2000);
+
+ { ADC }
+ ADC1: TADCRegisters absolute (APB2Base+$2400);
+ ADC2: TADCRegisters absolute (APB2Base+$2800);
+ ADC3: TADCRegisters absolute (APB2Base+$3C00);
+
+ { SDIO }
+ SDIO: TSDIORegisters absolute (APB2Base+$8000);
+
+ { DMA }
+ DMA1: TDMARegisters absolute (AHBBase+$0000);
+ DMA2: TDMARegisters absolute (AHBBase+$0400);
+
+ { RCC }
+ RCC: TRCCRegisters absolute (AHBBase+$1000);
+
+ { Flash }
+ Flash: TFlashRegisters absolute (AHBBase+$2000);
+
+ { CRC }
+ CRC: TCRCRegisters absolute (AHBBase+$3000);
+
+var
+ NMI_Handler,
+ HardFault_Handler,
+ MemManage_Handler,
+ BusFault_Handler,
+ UsageFault_Handler,
+ SWI_Handler,
+ DebugMonitor_Handler,
+ PendingSV_Handler,
+ Systick_Handler: pointer;
+
+implementation
+
+var
+ _data: record end; external name '_data';
+ _edata: record end; external name '_edata';
+ _etext: record end; external name '_etext';
+ _bss_start: record end; external name '_bss_start';
+ _bss_end: record end; external name '_bss_end';
+ _stack_top: record end; external name '_stack_top';
+
+procedure PASCALMAIN; external name 'PASCALMAIN';
+
+procedure _FPC_haltproc; assembler; nostackframe; public name '_haltproc';
+asm
+.Lhalt:
+ b .Lhalt
+end;
+
+procedure _FPC_start; assembler; nostackframe;
+label _start;
+asm
+ .init
+ .align 16
+
+ .long _stack_top // First entry in NVIC table is the new stack pointer
+ .long _start
+ //b _start // Reset
+ .long _start+1
+ //b .LNMI_Addr // Non maskable interrupt. The RCC Clock Security System (CSS) is linked to the NMI vector.
+ .long _start+1
+ //b .LHardFault_Addr // All class of fault
+ .long _start+1
+ //b .LMemManage_Addr // Memory management
+ .long _start+1
+ //b .LBusFault_Addr // Pre-fetch fault, memory access fault
+ .long _start+1
+ //b .LUsageFault_Addr // Undefined instruction or illegal state
+ .long _start+1
+ //nop // Reserved
+ .long _start+1
+ //nop // Reserved
+ .long _start+1
+ //nop // Reserved
+ .long _start+1
+ //nop // Reserved
+ .long _start+1
+ //b .LSWI_Addr // Software Interrupt vector
+ .long _start+1
+ //b .LDebugMonitor_Addr // Debug Monitor
+ .long _start+1
+ //nop // Reserved
+ .long _start+1
+ //b .LPendingSV_Addr // Pendable request for system service
+ .long _start+1
+ //b .LSystick_Addr // System tick timer
+ //17
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ //20
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+ .long .LDefaultHandler+1
+
+.LNMI_Addr:
+ ldr r0,.L1
+ ldr pc,[r0]
+.LHardFault_Addr:
+ ldr r0,.L2
+ ldr pc,[r0]
+.LMemManage_Addr:
+ ldr r0,.L3
+ ldr pc,[r0]
+.LBusFault_Addr:
+ ldr r0,.L4
+ ldr pc,[r0]
+.LUsageFault_Addr:
+ ldr r0,.L5
+ ldr pc,[r0]
+.LSWI_Addr:
+ ldr r0,.L6
+ ldr pc,[r0]
+.LDebugMonitor_Addr:
+ ldr r0,.L7
+ ldr pc,[r0]
+.LPendingSV_Addr:
+ ldr r0,.L8
+ ldr pc,[r0]
+.LSystick_Addr:
+ ldr r0,.L9
+ ldr pc,[r0]
+
+.L1:
+ .long NMI_Handler
+.L2:
+ .long HardFault_Handler
+.L3:
+ .long MemManage_Handler
+.L4:
+ .long BusFault_Handler
+.L5:
+ .long UsageFault_Handler
+.L6:
+ .long SWI_Handler
+.L7:
+ .long DebugMonitor_Handler
+.L8:
+ .long PendingSV_Handler
+.L9:
+ .long Systick_Handler
+
+ .globl _start
+ .text
+_start:
+
+ // Copy initialized data to ram
+ ldr r1,.L_etext
+ ldr r2,.L_data
+ ldr r3,.L_edata
+.Lcopyloop:
+ cmp r2,r3
+ ittt ls
+ ldrls r0,[r1],#4
+ strls r0,[r2],#4
+ bls .Lcopyloop
+
+ // clear onboard ram
+ ldr r1,.L_bss_start
+ ldr r2,.L_bss_end
+ mov r0,#0
+.Lzeroloop:
+ cmp r1,r2
+ itt ls
+ strls r0,[r1],#4
+ bls .Lzeroloop
+
+ b PASCALMAIN
+ b _FPC_haltproc
+
+.L_bss_start:
+ .long _bss_start
+.L_bss_end:
+ .long _bss_end
+.L_etext:
+ .long _etext
+.L_data:
+ .long _data
+.L_edata:
+ .long _edata
+.LDefaultHandlerAddr:
+ .long .LDefaultHandler
+ // default irq handler just returns
+.LDefaultHandler:
+ mov pc,r14
+end;
+
+end.
+
diff --git a/rtl/freebsd/sysnr.inc b/rtl/freebsd/sysnr.inc
index ae330db77f..4b2e2f54e1 100644
--- a/rtl/freebsd/sysnr.inc
+++ b/rtl/freebsd/sysnr.inc
@@ -337,5 +337,7 @@ syscall_nr_getdirentries =196;
syscall_nr_kse_thr_interrupt = 382;
syscall_nr_kse_release = 383;
syscall_nr_kse_switchin = 440;
+ syscall_nr_getrlimit = 194;
+ syscall_nr_setrlimit = 195;
diff --git a/rtl/inc/dynlibs.pas b/rtl/inc/dynlibs.pas
index e288f9b4f7..372f1cc191 100644
--- a/rtl/inc/dynlibs.pas
+++ b/rtl/inc/dynlibs.pas
@@ -20,6 +20,9 @@ unit dynlibs;
interface
+uses
+ SysUtils, RtlConsts, SysConst;
+
{ ---------------------------------------------------------------------
Read OS-dependent interface declarations.
---------------------------------------------------------------------}
@@ -38,13 +41,77 @@ Function LoadLibrary(Name : AnsiString) : TLibHandle;
Function GetProcedureAddress(Lib : TlibHandle; ProcName : AnsiString) : Pointer;
Function UnloadLibrary(Lib : TLibHandle) : Boolean;
+
// Kylix/Delphi compability
+Type
+ HModule = TLibHandle;
+
Function FreeLibrary(Lib : TLibHandle) : Boolean;
Function GetProcAddress(Lib : TlibHandle; ProcName : AnsiString) : Pointer;
-Type
- HModule = TLibHandle;
+
+// Dynamic Library Manager
+
+{ Note: If you look for some code that uses this library handler, take a look at
+ sqlite3.inc of sqlite package (simple) or
+ mysql.inc of mysql package (advanced)
+}
+
+type
+ PLibHandler = ^TLibHandler;
+
+ TLibEventLoading = function(User: Pointer; Handler: PLibHandler): Boolean;
+ TLibEventUnloading = procedure(Handler: PLibHandler);
+
+ PPLibSymbol = ^PLibSymbol;
+ PLibSymbol = ^TLibSymbol;
+ TLibSymbol = record
+ pvar: PPointer; { pointer to Symbol variable }
+ name: String; { name of the Symbol }
+ weak: Boolean; { weak }
+ end;
+
+ TLibHandler = record
+ InterfaceName: String; { abstract name of the library }
+ Defaults : array of String; { list of default library filenames }
+ Filename : String; { handle of the current loaded library }
+ Handle : TLibHandle; { filename of the current loaded library }
+ Loading : TLibEventLoading; { loading event, called after the unit is loaded }
+ Unloading : TLibEventUnloading; { unloading event, called before the unit is unloaded }
+ SymCount : Integer; { number of symbols }
+ Symbols : PLibSymbol; { symbol address- and namelist }
+ ErrorMsg : String; { last error message }
+ RefCount : Integer; { reference counter }
+ end;
+
+
+{ handler definition }
+function LibraryHandler(const InterfaceName: String; const DefaultLibraries: array of String;
+ const Symbols: PLibSymbol; const SymCount: Integer; const AfterLoading: TLibEventLoading = nil;
+ const BeforeUnloading: TLibEventUnloading = nil): TLibHandler;
+
+{ initialization/finalization }
+function TryInitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
+ const User: Pointer = nil; const NoSymbolErrors: Boolean = False): Integer;
+function TryInitializeLibrary(var Handler: TLibHandler; const LibraryName: String = '';
+ const User: Pointer = nil; const NoSymbolErrors: Boolean = False): Integer;
+function InitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
+ const User: Pointer = nil; const NoSymbolErrors: Boolean = False): Integer;
+function InitializeLibrary(var Handler: TLibHandler; const LibraryName: String = '';
+ const User: Pointer = nil; const NoSymbolErrors: Boolean = False): Integer;
+function ReleaseLibrary(var Handler: TLibHandler): Integer;
+
+{ errors }
+procedure AppendLibraryError(var Handler: TLibHandler; const Msg: String);
+function GetLastLibraryError(var Handler: TLibHandler): String;
+procedure RaiseLibraryException(var Handler: TLibHandler);
+
+{ symbol load/clear }
+function LoadLibrarySymbols(const Lib: TLibHandle; const Symbols: PLibSymbol; const Count: Integer;
+ const ErrorSym: PPLibSymbol = nil): Boolean;
+procedure ClearLibrarySymbols(const Symbols: PLibSymbol; const Count: Integer);
+
// these are for easier crossplatform construction of dll names in dynloading libs.
Const
@@ -57,11 +124,11 @@ Const
{$ifdef OS2}
SharedSuffix = 'dll';
{$else}
- SharedSuffix = 'so';
+ SharedSuffix = 'so';
{$endif}
{$endif}
- {$endif}
-
+ {$endif}
+
Implementation
{ ---------------------------------------------------------------------
@@ -88,7 +155,6 @@ Function SafeLoadLibrary(Name : AnsiString) : TLibHandle;
var w : word;
{$endif}
-
Begin
{$ifdef i386}
w:=get8087cw;
@@ -100,4 +166,210 @@ Begin
{$endif}
End;
+function LibraryHandler(const InterfaceName: String; const DefaultLibraries: array of String;
+ const Symbols: PLibSymbol; const SymCount: Integer; const AfterLoading: TLibEventLoading;
+ const BeforeUnloading: TLibEventUnloading): TLibHandler;
+var
+ I: Integer;
+begin
+ Result.InterfaceName := InterfaceName;
+ Result.Filename := '';
+ Result.Handle := NilHandle;
+ Result.Loading := AfterLoading;
+ Result.Unloading := BeforeUnloading;
+ Result.SymCount := SymCount;
+ Result.Symbols := Symbols;
+ Result.ErrorMsg := '';
+ Result.RefCount := 0;
+
+ SetLength(Result.Defaults, Length(DefaultLibraries));
+ for I := 0 to High(DefaultLibraries) do
+ Result.Defaults[I] := DefaultLibraries[I];
+end;
+
+function TryInitializeLibraryInternal(var Handler: TLibHandler; const LibraryName: String;
+ const User: Pointer; const NoSymbolErrors: Boolean): Integer;
+var
+ ErrSym: PLibSymbol;
+begin
+ if (Handler.Filename <> '') and (Handler.Filename <> LibraryName) then
+ begin
+ AppendLibraryError(Handler, Format(SLibraryAlreadyLoaded, [Handler.InterfaceName, Handler.Filename]));
+ Result := -1;
+ Exit;
+ end;
+
+ Result := InterlockedIncrement(Handler.RefCount);
+ if Result = 1 then
+ begin
+ Handler.Handle := LoadLibrary(LibraryName);
+ if Handler.Handle = NilHandle then
+ begin
+ AppendLibraryError(Handler, Format(SLibraryNotLoaded, [Handler.InterfaceName, LibraryName]));
+ Handler.RefCount := 0;
+ Result := -1;
+ Exit;
+ end;
+
+ Handler.Filename := LibraryName;
+
+ if not LoadLibrarySymbols(Handler.Handle, Handler.Symbols, Handler.SymCount, @ErrSym) and not NoSymbolErrors then
+ begin
+ AppendLibraryError(Handler, Format(SLibraryUnknownSym, [ErrSym^.name, Handler.InterfaceName, LibraryName]));
+ UnloadLibrary(Handler.Handle);
+ Handler.Handle := NilHandle;
+ Handler.Filename := '';
+ Handler.RefCount := 0;
+ Result := -1;
+ Exit;
+ end;
+
+ if Assigned(Handler.Loading) and not Handler.Loading(User, @Handler) then
+ begin
+ UnloadLibrary(Handler.Handle);
+ Handler.Handle := NilHandle;
+ Handler.Filename := '';
+ Handler.RefCount := 0;
+ Result := -1;
+ Exit;
+ end;
+ end;
+end;
+
+function TryInitializeLibrary(var Handler: TLibHandler; const LibraryName: String;
+ const User: Pointer; const NoSymbolErrors: Boolean): Integer;
+begin
+ if LibraryName <> '' then
+ begin
+ Handler.ErrorMsg := '';
+ Result := TryInitializeLibraryInternal(Handler, LibraryName, User, NoSymbolErrors);
+ end else
+ Result := TryInitializeLibrary(Handler, Handler.Defaults, User, NoSymbolErrors);
+end;
+
+function TryInitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
+ const User: Pointer; const NoSymbolErrors: Boolean): Integer;
+var
+ I: Integer;
+begin
+ Handler.ErrorMsg := '';
+
+ if Length(LibraryNames) <= 0 then
+ begin
+ if Length(Handler.Defaults) > 0 then
+ begin
+ Result := TryInitializeLibrary(Handler, Handler.Defaults, User, NoSymbolErrors);
+ Exit;
+ end;
+
+ AppendLibraryError(Handler, SVarInvalid);
+ Result := -1;
+ Exit;
+ end;
+
+ for I := 0 to High(LibraryNames) do
+ begin
+ Result := TryInitializeLibraryInternal(Handler, LibraryNames[I], User, NoSymbolErrors);
+ if Result > 0 then
+ begin
+ Handler.ErrorMsg := '';
+ Exit;
+ end;
+ end;
+end;
+
+function InitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
+ const User: Pointer; const NoSymbolErrors: Boolean): Integer;
+begin
+ Result := TryInitializeLibrary(Handler, LibraryNames, User, NoSymbolErrors);
+ if Result < 0 then
+ RaiseLibraryException(Handler);
+end;
+
+function InitializeLibrary(var Handler: TLibHandler; const LibraryName: String;
+ const User: Pointer; const NoSymbolErrors: Boolean): Integer;
+begin
+ Result := TryInitializeLibrary(Handler, LibraryName, User, NoSymbolErrors);
+ if Result < 0 then
+ RaiseLibraryException(Handler);
+end;
+
+function ReleaseLibrary(var Handler: TLibHandler): Integer;
+begin
+ Handler.ErrorMsg := '';
+
+ Result := InterlockedDecrement(Handler.RefCount);
+ if Result = 0 then
+ begin
+ if Assigned(Handler.Unloading) then
+ Handler.Unloading(@Handler);
+ ClearLibrarySymbols(Handler.Symbols, Handler.SymCount);
+ UnloadLibrary(Handler.Handle);
+ Handler.Handle := NilHandle;
+ Handler.Filename := '';
+ end else
+ if Result < 0 then
+ Handler.RefCount := 0;
+end;
+
+procedure AppendLibraryError(var Handler: TLibHandler; const Msg: String);
+begin
+ if Handler.ErrorMsg <> '' then
+ Handler.ErrorMsg := Handler.ErrorMsg + LineEnding + Msg
+ else
+ Handler.ErrorMsg := Msg;
+end;
+
+function GetLastLibraryError(var Handler: TLibHandler): String;
+begin
+ Result := Handler.ErrorMsg;
+ Handler.ErrorMsg := '';
+end;
+
+procedure RaiseLibraryException(var Handler: TLibHandler);
+var
+ Msg: String;
+begin
+ Msg := GetLastLibraryError(Handler);
+ if Msg <> '' then
+ raise EInOutError.Create(Msg)
+ else
+ raise EInOutError.Create(SUnknown);
+end;
+
+function LoadLibrarySymbols(const Lib: TLibHandle; const Symbols: PLibSymbol; const Count: Integer;
+ const ErrorSym: PPLibSymbol): Boolean;
+var
+ P,L: PLibSymbol;
+begin
+ P := Symbols;
+ L := @Symbols[Count];
+ while P < L do
+ begin
+ P^.pvar^ := GetProcedureAddress(Lib, P^.name);
+ if not Assigned(P^.pvar^) and not P^.weak then
+ begin
+ if Assigned(ErrorSym) then
+ ErrorSym^ := P;
+ Result := False;
+ Exit;
+ end;
+ Inc(P);
+ end;
+ Result := True;
+end;
+
+procedure ClearLibrarySymbols(const Symbols: PLibSymbol; const Count: Integer);
+var
+ P,L: PLibSymbol;
+begin
+ P := Symbols;
+ L := @Symbols[Count];
+ while P < L do
+ begin
+ P^.pvar^ := nil;
+ Inc(P);
+ end;
+end;
+
end.
diff --git a/rtl/inc/objpas.inc b/rtl/inc/objpas.inc
index 41539644db..090a5a0e79 100644
--- a/rtl/inc/objpas.inc
+++ b/rtl/inc/objpas.inc
@@ -711,6 +711,47 @@
getinterfacetable:=PVmt(Self)^.vIntfTable;
end;
+ class function TObject.UnitName : string;
+ type
+ // from the typinfo unit
+ TClassTypeInfo = {$ifndef FPC_REQUIRES_PROPER_ALIGNMENT}packed{$endif}record
+ ClassType: TClass;
+ ParentInfo: Pointer;
+ PropCount: SmallInt;
+ UnitName: ShortString;
+ end;
+ PClassTypeInfo = ^TClassTypeInfo;
+ var
+ classtypeinfo: PClassTypeInfo;
+ begin
+ classtypeinfo:=ClassInfo;
+ if Assigned(classtypeinfo) then
+ begin
+ // offset PTypeInfo by Length(Name) + 2 (ShortString length byte + SizeOf(Kind))
+ inc(Pointer(classtypeinfo), PByte(Pointer(classtypeinfo)+1)^ + 2);
+ {$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
+ classtypeinfo:=align(classtypeinfo,sizeof(classtypeinfo));
+ {$endif}
+ result:=classtypeinfo^.UnitName;
+ end
+ else
+ result:='';
+ end;
+
+ function TObject.Equals(Obj: TObject) : boolean;
+ begin
+ result:=Obj=Self;
+ end;
+
+ function TObject.GetHashCode: PtrInt;
+ begin
+ result:=PtrInt(Self);
+ end;
+
+ function TObject.ToString: string;
+ begin
+ result:=ClassName;
+ end;
{****************************************************************************
TINTERFACEDOBJECT
****************************************************************************}
diff --git a/rtl/inc/objpash.inc b/rtl/inc/objpash.inc
index f9563c6bb0..0802ce38a3 100644
--- a/rtl/inc/objpash.inc
+++ b/rtl/inc/objpash.inc
@@ -54,6 +54,11 @@
vmtAfterConstruction = vmtMethodStart+sizeof(pointer)*5;
vmtBeforeDestruction = vmtMethodStart+sizeof(pointer)*6;
vmtDefaultHandlerStr = vmtMethodStart+sizeof(pointer)*7;
+ vmtDispatch = vmtMethodStart+sizeof(pointer)*8;
+ vmtDispatchStr = vmtMethodStart+sizeof(pointer)*9;
+ vmtEquals = vmtMethodStart+sizeof(pointer)*10;
+ vmtGetHashCode = vmtMethodStart+sizeof(pointer)*11;
+ vmtToString = vmtMethodStart+sizeof(pointer)*12;
{ IInterface }
S_OK = 0;
@@ -113,6 +118,11 @@
vAfterConstruction: Pointer;
vBeforeDestruction: Pointer;
vDefaultHandlerStr: Pointer;
+ vDispatch: Pointer;
+ vDispatchStr: Pointer;
+ vEquals: Pointer;
+ vGetHashCode: Pointer;
+ vToString: Pointer;
end;
PGuid = ^TGuid;
@@ -192,9 +202,6 @@
class function InstanceSize : SizeInt;{$ifdef SYSTEMINLINE}inline;{$endif}
class function InheritsFrom(aclass : tclass) : boolean;
class function StringMessageTable : pstringmessagetable;
- { message handling routines }
- procedure Dispatch(var message);
- procedure DispatchStr(var message);
class function MethodAddress(const name : shortstring) : pointer;
class function MethodName(address : pointer) : shortstring;
@@ -207,6 +214,10 @@
{ new for gtk, default handler for text based messages }
procedure DefaultHandlerStr(var message);virtual;
+ { message handling routines }
+ procedure Dispatch(var message);virtual;
+ procedure DispatchStr(var message);virtual;
+
{ interface functions }
function GetInterface(const iid : tguid; out obj) : boolean;
function GetInterface(const iidstr : shortstring;out obj) : boolean;
@@ -214,6 +225,12 @@
class function GetInterfaceEntry(const iid : tguid) : pinterfaceentry;
class function GetInterfaceEntryByStr(const iidstr : shortstring) : pinterfaceentry;
class function GetInterfaceTable : pinterfacetable;
+
+ { new since Delphi 2009 }
+ class function UnitName : string;
+ function Equals(Obj: TObject) : boolean;virtual;
+ function GetHashCode: PtrInt;virtual;
+ function ToString: string;virtual;
end;
IUnknown = interface
@@ -229,6 +246,18 @@
end;
{$M-}
+ { enumerator support }
+ IEnumerator = interface(IInterface)
+ function GetCurrent: TObject;
+ function MoveNext: Boolean;
+ procedure Reset;
+ property Current: TObject read GetCurrent;
+ end;
+
+ IEnumerable = interface(IInterface)
+ function GetEnumerator: IEnumerator;
+ end;
+
{ for native dispinterface support }
IDispatch = interface(IUnknown)
['{00020400-0000-0000-C000-000000000046}']
diff --git a/rtl/inc/strings.pp b/rtl/inc/strings.pp
index 80a779043e..ac560693b9 100644
--- a/rtl/inc/strings.pp
+++ b/rtl/inc/strings.pp
@@ -160,7 +160,7 @@ implementation
len:=strlen(p)+1;
getmem(strnew,len);
if strnew<>nil then
- strmove(strnew,p,len);
+ move(p^,strnew^,len);
end;
procedure strdispose(p : pchar);
diff --git a/rtl/inc/system.fpd b/rtl/inc/system.fpd
index 199ed4906f..5f2eea9736 100644
--- a/rtl/inc/system.fpd
+++ b/rtl/inc/system.fpd
@@ -57,3 +57,8 @@ Procedure SetLength(Var S : AStringType; Len : Integer);
Procedure SetLength(Var A : DynArrayType; Len : Integer);
Function Length(S : AStringType) : Integer;
Function Length(A : DynArrayType) : Integer;
+Procedure WriteStr(Out S : String; Args : Arguments);
+Procedure ReadStr(Const S : String; Args : Arguments);
+Procedure Pack(Const A : UnpackedArrayType; StartIndex : TIndexType; Out Z : PackedArrayType);
+Procedure UnPack(Const Z : PackedArrayType; Out A : UnpackedArrayType; StartIndex : TIndexType);
+
diff --git a/rtl/inc/system.inc b/rtl/inc/system.inc
index 7d1cd3838c..bf48c8e1be 100644
--- a/rtl/inc/system.inc
+++ b/rtl/inc/system.inc
@@ -172,7 +172,11 @@ function do_isdevice(handle:thandle):boolean;forward;
{$ifdef SYSPROCDEFINED}
{$Error Can't determine processor type !}
{$endif}
- {$i arm.inc} { Case dependent, don't change }
+ {$if defined(CPUCORTEXM3) or defined(CPUARMV7M)}
+ {$i thumb2.inc} { Case dependent, don't change }
+ {$else}
+ {$i arm.inc} { Case dependent, don't change }
+ {$endif}
{$define SYSPROCDEFINED}
{$endif cpuarm}
diff --git a/rtl/inc/ustrings.inc b/rtl/inc/ustrings.inc
index 0838f68f0c..29548529e0 100644
--- a/rtl/inc/ustrings.inc
+++ b/rtl/inc/ustrings.inc
@@ -1647,18 +1647,10 @@ end;
Procedure SetString (Out S : UnicodeString; Buf : PUnicodeChar; Len : SizeInt);
-var
- BufLen: SizeInt;
begin
SetLength(S,Len);
If (Buf<>Nil) and (Len>0) then
- begin
- BufLen := IndexWord(Buf^, Len+1, 0);
- If (BufLen>0) and (BufLen < Len) then
- Len := BufLen;
- Move (Buf[0],S[1],Len*sizeof(UnicodeChar));
- PUnicodeChar(Pointer(S)+Len*sizeof(UnicodeChar))^:=#0;
- end;
+ Move (Buf[0],S[1],Len*sizeof(UnicodeChar));
end;
@@ -1668,13 +1660,7 @@ var
begin
SetLength(S,Len);
If (Buf<>Nil) and (Len>0) then
- begin
- BufLen := IndexByte(Buf^, Len+1, 0);
- If (BufLen>0) and (BufLen < Len) then
- Len := BufLen;
- widestringmanager.Ansi2UnicodeMoveProc(Buf,S,Len);
- //PUnicodeChar(Pointer(S)+Len*sizeof(UnicodeChar))^:=#0;
- end;
+ widestringmanager.Ansi2UnicodeMoveProc(Buf,S,Len);
end;
diff --git a/rtl/inc/variants.pp b/rtl/inc/variants.pp
index 4cbe854a4b..56215fa7e1 100644
--- a/rtl/inc/variants.pp
+++ b/rtl/inc/variants.pp
@@ -86,6 +86,8 @@ function VarToStr(const V: Variant): string;
function VarToStrDef(const V: Variant; const ADefault: string): string;
function VarToWideStr(const V: Variant): WideString;
function VarToWideStrDef(const V: Variant; const ADefault: WideString): WideString;
+function VarToUnicodeStr(const V: Variant): UnicodeString;
+function VarToUnicodeStrDef(const V: Variant; const ADefault: UnicodeString): UnicodeString;
{$ifndef FPUNONE}
function VarToDateTime(const V: Variant): TDateTime;
@@ -2942,6 +2944,23 @@ begin
end;
+function VarToUnicodeStr(const V: Variant): UnicodeString;
+
+begin
+ Result:=VarToUnicodeStrDef(V,'');
+end;
+
+
+function VarToUnicodeStrDef(const V: Variant; const ADefault: UnicodeString): UnicodeString;
+
+begin
+ If TVarData(V).vType<>varNull then
+ Result:=V
+ else
+ Result:=ADefault;
+end;
+
+
{$ifndef FPUNONE}
function VarToDateTime(const V: Variant): TDateTime;
@@ -4281,6 +4300,8 @@ begin
Result := GetStrProp(Instance, PropInfo);
tkWString:
Result := GetWideStrProp(Instance, PropInfo);
+ tkUString:
+ Result := GetUnicodeStrProp(Instance, PropInfo);
tkVariant:
Result := GetVariantProp(Instance, PropInfo);
tkInt64:
@@ -4355,6 +4376,8 @@ begin
SetStrProp(Instance, PropInfo, VarToStr(Value));
tkWString:
SetWideStrProp(Instance, PropInfo, VarToWideStr(Value));
+ tkUString:
+ SetUnicodeStrProp(Instance, PropInfo, VarToUnicodeStr(Value));
tkVariant:
SetVariantProp(Instance, PropInfo, Value);
tkInt64:
diff --git a/rtl/inc/wstrings.inc b/rtl/inc/wstrings.inc
index 89b85a5dc9..3639365397 100644
--- a/rtl/inc/wstrings.inc
+++ b/rtl/inc/wstrings.inc
@@ -1017,34 +1017,18 @@ end;
Procedure SetString (Out S : WideString; Buf : PWideChar; Len : SizeInt);
-var
- BufLen: SizeInt;
begin
SetLength(S,Len);
If (Buf<>Nil) and (Len>0) then
- begin
- BufLen := IndexWord(Buf^, Len+1, 0);
- If (BufLen>0) and (BufLen < Len) then
- Len := BufLen;
- Move (Buf[0],S[1],Len*sizeof(WideChar));
- PWideChar(Pointer(S)+Len*sizeof(WideChar))^:=#0;
- end;
+ Move (Buf[0],S[1],Len*sizeof(WideChar));
end;
Procedure SetString (Out S : WideString; Buf : PChar; Len : SizeInt);
-var
- BufLen: SizeInt;
begin
SetLength(S,Len);
If (Buf<>Nil) and (Len>0) then
- begin
- BufLen := IndexByte(Buf^, Len+1, 0);
- If (BufLen>0) and (BufLen < Len) then
- Len := BufLen;
- widestringmanager.Ansi2WideMoveProc(Buf,S,Len);
- //PWideChar(Pointer(S)+Len*sizeof(WideChar))^:=#0;
- end;
+ widestringmanager.Ansi2WideMoveProc(Buf,S,Len);
end;
diff --git a/rtl/inc/wustring22.inc b/rtl/inc/wustring22.inc
index 3f79a7d7dd..6b73469bb7 100644
--- a/rtl/inc/wustring22.inc
+++ b/rtl/inc/wustring22.inc
@@ -1434,18 +1434,10 @@ end;
Procedure SetString (Out S : WideString; Buf : PWideChar; Len : SizeInt);
-var
- BufLen: SizeInt;
begin
SetLength(S,Len);
If (Buf<>Nil) and (Len>0) then
- begin
- BufLen := IndexWord(Buf^, Len+1, 0);
- If (BufLen>0) and (BufLen < Len) then
- Len := BufLen;
- Move (Buf[0],S[1],Len*sizeof(WideChar));
- PWideChar(Pointer(S)+Len*sizeof(WideChar))^:=#0;
- end;
+ Move (Buf[0],S[1],Len*sizeof(WideChar));
end;
diff --git a/rtl/linux/ossysc.inc b/rtl/linux/ossysc.inc
index 09e324fc95..b632574291 100644
--- a/rtl/linux/ossysc.inc
+++ b/rtl/linux/ossysc.inc
@@ -568,13 +568,18 @@ begin
fpgettimeofday:=do_syscall(syscall_nr_gettimeofday,TSysParam(tp),TSysParam(tzp));
end;
-{$ifndef NO_SYSCALL_GETRLIMIT}
+
function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt;
begin
+{$ifndef NO_SYSCALL_GETRLIMIT}
FpGetRLimit := do_syscall(syscall_nr_getrlimit,
TSysParam(resource), TSysParam(rlim));
-end;
+{$else}
+ FpGetRLimit := do_syscall(syscall_nr_ugetrlimit,
+ TSysParam(resource), TSysParam(rlim));
{$endif}
+end;
+
{$ifdef HAS_UGETRLIMIT}
function fpugetrlimit(resource : cInt; rlim : PRLimit) : cInt;
@@ -592,3 +597,8 @@ begin
end;
{$endif}
+function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; [public, alias : 'FPC_SYSC_SETRLIMIT'];
+begin
+ fpsetrlimit:=do_syscall(syscall_nr_setrlimit,TSysParam(Resource),TSysParam(rlim));
+end;
+
diff --git a/rtl/linux/system.pp b/rtl/linux/system.pp
index 198f3fbcb3..6508aa42ad 100644
--- a/rtl/linux/system.pp
+++ b/rtl/linux/system.pp
@@ -302,6 +302,13 @@ begin
GetProcessID := SizeUInt (fpGetPID);
end;
+{$ifdef FPC_USE_LIBC}
+{$ifdef HAS_UGETRLIMIT}
+ { there is no ugetrlimit libc call, just map it to the getrlimit call in these cases }
+function FpUGetRLimit(resource : cInt; rlim : PRLimit) : cInt; cdecl; external clib name 'getrlimit';
+{$endif}
+{$endif}
+
function CheckInitialStkLen(stklen : SizeUInt) : SizeUInt;
var
limits : TRLimit;
diff --git a/rtl/objpas/classes/bits.inc b/rtl/objpas/classes/bits.inc
index d36c571d2e..b8136c2161 100644
--- a/rtl/objpas/classes/bits.inc
+++ b/rtl/objpas/classes/bits.inc
@@ -232,6 +232,14 @@ begin
FBits^[loop] := FBits^[loop] xor bitset.FBits^[loop];
end;
+function TBits.Equals(Obj : TObject): Boolean;
+begin
+ if Obj is TBits then
+ Result := Equals(TBits(Obj))
+ else
+ Result := inherited Equals(Obj);
+end;
+
function TBits.equals(bitset : TBits) : Boolean;
var
n : longint;
diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc
index 91e7ceb5e5..84cf9cf63d 100644
--- a/rtl/objpas/classes/classesh.inc
+++ b/rtl/objpas/classes/classesh.inc
@@ -166,6 +166,18 @@ type
{$IFNDEF FPC_TESTGENERICS}
TListAssignOp = (laCopy, laAnd, laOr, laXor, laSrcUnique, laDestUnique);
+ TFPList = class;
+
+ TFPListEnumerator = class
+ private
+ FList: TFPList;
+ FPosition: Integer;
+ public
+ constructor Create(AList: TFPList);
+ function GetCurrent: Pointer;
+ function MoveNext: Boolean;
+ property Current: Pointer read GetCurrent;
+ end;
TFPList = class(TObject)
private
@@ -197,6 +209,7 @@ type
function Expand: TFPList; {$ifdef CLASSESINLINE} inline; {$endif CLASSESINLINE}
function Extract(Item: Pointer): Pointer;
function First: Pointer;
+ function GetEnumerator: TFPListEnumerator;
function IndexOf(Item: Pointer): Integer;
procedure Insert(Index: Integer; Item: Pointer); {$ifdef CLASSESINLINE} inline; {$endif CLASSESINLINE}
function Last: Pointer;
@@ -228,8 +241,20 @@ type
{$endif}
{ TList class}
+
TListNotification = (lnAdded, lnExtracted, lnDeleted);
+ TList = class;
+ TListEnumerator = class
+ private
+ FList: TList;
+ FPosition: Integer;
+ public
+ constructor Create(AList: TList);
+ function GetCurrent: Pointer;
+ function MoveNext: Boolean;
+ property Current: Pointer read GetCurrent;
+ end;
TList = class(TObject)
private
@@ -264,6 +289,7 @@ type
function Expand: TList;
function Extract(item: Pointer): Pointer;
function First: Pointer;
+ function GetEnumerator: TListEnumerator;
function IndexOf(Item: Pointer): Integer;
procedure Insert(Index: Integer; Item: Pointer);
function Last: Pointer;
@@ -334,7 +360,8 @@ type
procedure NotBits(BitSet : TBits);
function Get(Bit : longint) : boolean;
procedure Grow(NBit : longint);
- function Equals(BitSet : TBits) : Boolean;
+ function Equals(Obj : TObject): Boolean; override; overload;
+ function Equals(BitSet : TBits) : Boolean; overload;
procedure SetIndex(Index : longint);
function FindFirstBit(State : boolean) : longint;
function FindNextBit : longint;
@@ -424,6 +451,17 @@ type
property DisplayName: string read GetDisplayName write SetDisplayName;
end;
+ TCollectionEnumerator = class
+ private
+ FCollection: TCollection;
+ FPosition: Integer;
+ public
+ constructor Create(ACollection: TCollection);
+ function GetCurrent: TCollectionItem;
+ function MoveNext: Boolean;
+ property Current: TCollectionItem read GetCurrent;
+ end;
+
TCollectionItemClass = class of TCollectionItem;
TCollectionNotification = (cnAdded, cnExtracting, cnDeleting);
TCollectionSortCompare = function (Item1, Item2: TCollectionItem): Integer;
@@ -463,6 +501,7 @@ type
procedure Clear;
procedure EndUpdate; virtual;
procedure Delete(Index: Integer);
+ function GetEnumerator: TCollectionEnumerator;
function GetNamePath: string; override;
function Insert(Index: Integer): TCollectionItem;
function FindItemID(ID: Integer): TCollectionItem;
@@ -492,6 +531,19 @@ type
procedure ReleaseStrings;
end;
+{ TStringsEnumerator class }
+
+ TStringsEnumerator = class
+ private
+ FStrings: TStrings;
+ FPosition: Integer;
+ public
+ constructor Create(AStrings: TStrings);
+ function GetCurrent: String;
+ function MoveNext: Boolean;
+ property Current: String read GetCurrent;
+ end;
+
{ TStrings class }
TStrings = class(TPersistent)
@@ -549,8 +601,10 @@ type
procedure Clear; virtual; abstract;
procedure Delete(Index: Integer); virtual; abstract;
procedure EndUpdate;
- function Equals(TheStrings: TStrings): Boolean;
+ function Equals(Obj: TObject): Boolean; override; overload;
+ function Equals(TheStrings: TStrings): Boolean; overload;
procedure Exchange(Index1, Index2: Integer); virtual;
+ function GetEnumerator: TStringsEnumerator;
function GetText: PChar; virtual;
function IndexOf(const S: string): Integer; virtual;
function IndexOfName(const Name: string): Integer; virtual;
@@ -703,6 +757,7 @@ type
end;
{$endif}
+
{ TStream abstract class }
@@ -745,6 +800,19 @@ type
property Size: Int64 read GetSize write SetSize64;
end;
+ TProxyStream = class(TStream)
+ private
+ FStream: IStream;
+ protected
+ function GetIStream: IStream;
+ public
+ constructor Create(const Stream: IStream);
+ function Read(var Buffer; Count: Longint): Longint; override;
+ function Write(const Buffer; Count: Longint): Longint; override;
+ function Seek(Offset: Longint; Origin: Word): Longint; override;
+ procedure Check(err:longint); virtual;
+ end;
+
{ TOwnerStream }
TOwnerStream = Class(TStream)
Protected
@@ -1481,6 +1549,17 @@ type
procedure Notification(AnObject: TPersistent; Operation: TOperation);
end;
+ TComponentEnumerator = class
+ private
+ FComponent: TComponent;
+ FPosition: Integer;
+ public
+ constructor Create(AComponent: TComponent);
+ function GetCurrent: TComponent;
+ function MoveNext: Boolean;
+ property Current: TComponent read GetCurrent;
+ end;
+
TBasicAction = class;
{ TComponent }
@@ -1556,8 +1635,8 @@ type
{$endif}
procedure WriteState(Writer: TWriter); virtual;
constructor Create(AOwner: TComponent); virtual;
- procedure BeforeDestruction; override;
destructor Destroy; override;
+ procedure BeforeDestruction; override;
procedure DestroyComponents;
procedure Destroying;
function ExecuteAction(Action: TBasicAction): Boolean; dynamic;
@@ -1565,6 +1644,7 @@ type
procedure FreeNotification(AComponent: TComponent);
procedure RemoveFreeNotification(AComponent: TComponent);
procedure FreeOnRelease;
+ function GetEnumerator: TComponentEnumerator;
function GetNamePath: string; override;
function GetParentComponent: TComponent; dynamic;
function HasParent: Boolean; dynamic;
@@ -1672,6 +1752,19 @@ type
property Items[index : Integer] : IUnknown read Get write Put;default;
end;
+ TInterfaceList = class;
+
+ TInterfaceListEnumerator = class
+ private
+ FList: TInterfaceList;
+ FPosition: Integer;
+ public
+ constructor Create(AList: TInterfaceList);
+ function GetCurrent: IUnknown;
+ function MoveNext: Boolean;
+ property Current: IUnknown read GetCurrent;
+ end;
+
TInterfaceList = class(TInterfacedObject,IInterfaceList)
private
FList : TThreadList;
@@ -1690,6 +1783,7 @@ type
procedure Delete(index : Integer);
procedure Exchange(index1,index2 : Integer);
function First : IUnknown;
+ function GetEnumerator: TInterfaceListEnumerator;
function IndexOf(item : IUnknown) : Integer;
function Add(item : IUnknown) : Integer;
procedure Insert(i : Integer;item : IUnknown);
diff --git a/rtl/objpas/classes/collect.inc b/rtl/objpas/classes/collect.inc
index 29d32046db..e6f4dbc82f 100644
--- a/rtl/objpas/classes/collect.inc
+++ b/rtl/objpas/classes/collect.inc
@@ -118,6 +118,29 @@ begin
end;
{****************************************************************************}
+{* TCollectionEnumerator *}
+{****************************************************************************}
+
+constructor TCollectionEnumerator.Create(ACollection: TCollection);
+begin
+ inherited Create;
+ FCollection := ACollection;
+ FPosition := -1;
+end;
+
+function TCollectionEnumerator.GetCurrent: TCollectionItem;
+begin
+ Result := FCollection.Items[FPosition];
+end;
+
+function TCollectionEnumerator.MoveNext: Boolean;
+begin
+ Inc(FPosition);
+ Result := FPosition < FCollection.Count;
+end;
+
+
+{****************************************************************************}
{* TCollection *}
{****************************************************************************}
@@ -198,6 +221,12 @@ begin
end;
+function TCollection.GetEnumerator: TCollectionEnumerator;
+begin
+ Result := TCollectionEnumerator.Create(Self);
+end;
+
+
function TCollection.GetNamePath: string;
var o : TObject;
begin
diff --git a/rtl/objpas/classes/compon.inc b/rtl/objpas/classes/compon.inc
index b645a18413..67b82b164b 100644
--- a/rtl/objpas/classes/compon.inc
+++ b/rtl/objpas/classes/compon.inc
@@ -12,6 +12,29 @@
**********************************************************************}
{****************************************************************************}
+{* TComponentEnumerator *}
+{****************************************************************************}
+
+constructor TComponentEnumerator.Create(AComponent: TComponent);
+begin
+ inherited Create;
+ FComponent := AComponent;
+ FPosition := -1;
+end;
+
+function TComponentEnumerator.GetCurrent: TComponent;
+begin
+ Result := FComponent.Components[FPosition];
+end;
+
+function TComponentEnumerator.MoveNext: Boolean;
+begin
+ Inc(FPosition);
+ Result := FPosition < FComponent.ComponentCount;
+end;
+
+
+{****************************************************************************}
{* TComponent *}
{****************************************************************************}
@@ -213,6 +236,12 @@ begin
end;
+Function TComponent.GetEnumerator: TComponentEnumerator;
+
+begin
+ Result:=TComponentEnumerator.Create(Self);
+end;
+
Function TComponent.GetNamePath: string;
begin
diff --git a/rtl/objpas/classes/intf.inc b/rtl/objpas/classes/intf.inc
index 42d1e00095..6b6363671b 100644
--- a/rtl/objpas/classes/intf.inc
+++ b/rtl/objpas/classes/intf.inc
@@ -10,6 +10,29 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
+{ TInerfaceListEnumerator }
+
+ constructor TInterfaceListEnumerator.Create(AList: TInterfaceList);
+ begin
+ inherited create;
+ FList:=AList;
+ FPosition:=-1;
+ end;
+
+
+ function TInterfaceListEnumerator.GetCurrent: IUnknown;
+ begin
+ Result:=FList[FPosition];
+ end;
+
+
+ function TInterfaceListEnumerator.MoveNext: Boolean;
+ begin
+ Inc(FPosition);
+ Result:=FPosition<FList.Count;
+ end;
+
+{ TInterfaceList }
constructor TInterfaceList.Create;
begin
@@ -142,6 +165,12 @@
end;
+ function TInterfaceList.GetEnumerator: TInterfaceListEnumerator;
+ begin
+ result:=TInterfaceListEnumerator.Create(Self)
+ end;
+
+
function TInterfaceList.IndexOf(item : IUnknown) : Integer;
begin
FList.Locklist;
diff --git a/rtl/objpas/classes/lists.inc b/rtl/objpas/classes/lists.inc
index acc441de90..7f45655381 100644
--- a/rtl/objpas/classes/lists.inc
+++ b/rtl/objpas/classes/lists.inc
@@ -14,6 +14,28 @@
{$if defined(VER2_0) or not defined(FPC_TESTGENERICS)}
{****************************************************************************}
+{* TFPListEnumerator *}
+{****************************************************************************}
+
+constructor TFPListEnumerator.Create(AList: TFPList);
+begin
+ inherited Create;
+ FList := AList;
+ FPosition := -1;
+end;
+
+function TFPListEnumerator.GetCurrent: Pointer;
+begin
+ Result := FList[FPosition];
+end;
+
+function TFPListEnumerator.MoveNext: Boolean;
+begin
+ Inc(FPosition);
+ Result := FPosition < FList.Count;
+end;
+
+{****************************************************************************}
{* TFPList *}
{****************************************************************************}
@@ -169,6 +191,11 @@ begin
Result := Items[0];
end;
+function TFPList.GetEnumerator: TFPListEnumerator;
+begin
+ Result := TFPListEnumerator.Create(Self);
+end;
+
function TFPList.IndexOf(Item: Pointer): Integer;
begin
Result := 0;
@@ -480,7 +507,27 @@ end;
{$endif}
+{****************************************************************************}
+{* TListEnumerator *}
+{****************************************************************************}
+
+constructor TListEnumerator.Create(AList: TList);
+begin
+ inherited Create;
+ FList := AList;
+ FPosition := -1;
+end;
+
+function TListEnumerator.GetCurrent: Pointer;
+begin
+ Result := FList[FPosition];
+end;
+function TListEnumerator.MoveNext: Boolean;
+begin
+ Inc(FPosition);
+ Result := FPosition < FList.Count;
+end;
{****************************************************************************}
{* TList *}
@@ -491,8 +538,6 @@ end;
FList: TFPList;
}
-
-
function TList.Get(Index: Integer): Pointer;
begin
Result := FList.Get(Index);
@@ -616,6 +661,11 @@ begin
Result := FList.First;
end;
+function TList.GetEnumerator: TListEnumerator;
+begin
+ Result := TListEnumerator.Create(Self);
+end;
+
function TList.IndexOf(Item: Pointer): Integer;
begin
Result := FList.IndexOf(Item);
diff --git a/rtl/objpas/classes/parser.inc b/rtl/objpas/classes/parser.inc
index 741cbba78b..cc8a04e5f7 100644
--- a/rtl/objpas/classes/parser.inc
+++ b/rtl/objpas/classes/parser.inc
@@ -261,7 +261,7 @@ begin
else break;
end;
if ascii then
- fToken:=toString
+ fToken:=Classes.toString
else
fToken:=toWString;
fLastTokenStr:=fLastTokenWStr;
diff --git a/rtl/objpas/classes/streams.inc b/rtl/objpas/classes/streams.inc
index ab98c2425b..9ea6c646c1 100644
--- a/rtl/objpas/classes/streams.inc
+++ b/rtl/objpas/classes/streams.inc
@@ -624,7 +624,7 @@ procedure TMemoryStream.LoadFromFile(const FileName: string);
Var S : TFileStream;
begin
- S:=TFileStream.Create (FileName,fmOpenRead);
+ S:=TFileStream.Create (FileName,fmOpenRead or fmShareDenyWrite);
Try
LoadFromStream(S);
finally
@@ -833,23 +833,50 @@ end;
{$warnings off}
function TStreamAdapter.Read(pv: Pointer; cb: DWORD; pcbRead: PDWORD): HResult; stdcall;
+var
+ readcount: Longint;
begin
- runerror(217);
-end;
+ if pv = nil then
+ begin
+ Result := E_INVALIDARG;
+ Exit;
+ end;
+ readcount := FStream.Read(pv^, cb);
+ if pcbRead <> nil then pcbRead^ := readcount;
+ Result := S_OK;
+end;
function TStreamAdapter.Write(pv: Pointer; cb: DWORD; pcbWritten: PDWORD): HResult; stdcall;
+var
+ writecount: Longint;
begin
- runerror(217);
-end;
+ if pv = nil then
+ begin
+ Result := E_INVALIDARG;
+ Exit;
+ end;
+ writecount := FStream.Write(pv^, cb);
+ if pcbWritten <> nil then pcbWritten^ := writecount;
+ Result := S_OK;
+end;
function TStreamAdapter.Seek(dlibMove: Largeint; dwOrigin: Longint; out libNewPosition: Largeint): HResult; stdcall;
-begin
- runerror(217);
+var
+ newpos: Int64;
+begin
+ case dwOrigin of
+ STREAM_SEEK_SET: newpos := FStream.Seek(dlibMove, soBeginning);
+ STREAM_SEEK_CUR: newpos := FStream.Seek(dlibMove, soCurrent);
+ STREAM_SEEK_END: newpos := FStream.Seek(dlibMove, soEnd);
+ else begin Result := E_INVALIDARG; exit; end;
+ end;
+ if @libNewPosition <> nil then
+ libNewPosition := newpos;
+ Result := S_OK;
end;
-
function TStreamAdapter.SetSize(libNewSize: Largeint): HResult; stdcall;
begin
runerror(217);
@@ -888,12 +915,65 @@ end;
function TStreamAdapter.Stat(out statstg: TStatStg; grfStatFlag: Longint): HResult; stdcall;
begin
+ if grfStatFlag in [STATFLAG_DEFAULT,STATFLAG_NOOPEN,STATFLAG_NONAME] then
+ begin
+ if @statstg <> nil then
+ begin
+ fillchar(statstg, sizeof(TStatStg),#0);
+
+ { //TODO handle pwcsName
+ if grfStatFlag = STATFLAG_DEFAULT then
+ runerror(217) //Result :={$ifdef windows} STG_E_INVALIDFLAG{$else}E_INVALID_FLAG{$endif}
+ }
+
+ statstg.dwType := STGTY_STREAM;
+ statstg.cbSize := FStream.Size;
+ statstg.grfLocksSupported := LOCK_WRITE;
+ end;
+ Result := S_OK;
+ end else
+ Result := STG_E_INVALIDFLAG
+end;
+
+function TStreamAdapter.Clone(out stm: IStream): HResult; stdcall;
+begin
runerror(217);
end;
+constructor TProxyStream.Create(const Stream: IStream);
+begin
+ FStream := Stream;
+end;
-function TStreamAdapter.Clone(out stm: IStream): HResult; stdcall;
+function TProxyStream.Read(var Buffer; Count: Longint): Longint;
begin
- runerror(217);
+ Check(FStream.Read(@Buffer, Count, @Result));
+end;
+
+function TProxyStream.Seek(Offset: Longint; Origin: Word): Longint;
+var
+ Pos: Int64;
+begin
+ Check(FStream.Seek(Offset, Origin, Pos));
+ Result := Pos;
end;
+
+function TProxyStream.Write(const Buffer; Count: Longint): Longint;
+begin
+ Check(FStream.Write(@Buffer, Count, @Result));
+end;
+
+function TProxyStream.GetIStream: IStream;
+begin
+ Result := FStream;
+end;
+
+procedure TProxyStream.Check(err:integer);
+var e : EInOutError;
+begin
+ e:= EInOutError.Create('Proxystream.Check');
+ e.Errorcode:=err;
+ raise e;
+end;
+
{$warnings on}
diff --git a/rtl/objpas/classes/stringl.inc b/rtl/objpas/classes/stringl.inc
index 5ad6363cb6..5f8df50f0d 100644
--- a/rtl/objpas/classes/stringl.inc
+++ b/rtl/objpas/classes/stringl.inc
@@ -10,6 +10,29 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
+
+{****************************************************************************}
+{* TStringsEnumerator *}
+{****************************************************************************}
+
+constructor TStringsEnumerator.Create(AStrings: TStrings);
+begin
+ inherited Create;
+ FStrings := AStrings;
+ FPosition := -1;
+end;
+
+function TStringsEnumerator.GetCurrent: String;
+begin
+ Result := FStrings[FPosition];
+end;
+
+function TStringsEnumerator.MoveNext: Boolean;
+begin
+ Inc(FPosition);
+ Result := FPosition < FStrings.Count;
+end;
+
{****************************************************************************}
{* TStrings *}
{****************************************************************************}
@@ -630,6 +653,17 @@ end;
+Function TStrings.Equals(Obj: TObject): Boolean;
+
+begin
+ if Obj is TStrings then
+ Result := Equals(TStrings(Obj))
+ else
+ Result := inherited Equals(Obj);
+end;
+
+
+
Function TStrings.Equals(TheStrings: TStrings): Boolean;
Var Runner,Nr : Longint;
@@ -666,6 +700,11 @@ begin
end;
+function TStrings.GetEnumerator: TStringsEnumerator;
+begin
+ Result:=TStringsEnumerator.Create(Self);
+end;
+
Function TStrings.GetText: PChar;
begin
@@ -728,7 +767,7 @@ Procedure TStrings.LoadFromFile(const FileName: string);
Var
TheStream : TFileStream;
begin
- TheStream:=TFileStream.Create(FileName,fmOpenRead);
+ TheStream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
LoadFromStream(TheStream);
TheStream.Free;
end;
diff --git a/rtl/objpas/classes/writer.inc b/rtl/objpas/classes/writer.inc
index 6dc6172ec0..36b5acfb31 100644
--- a/rtl/objpas/classes/writer.inc
+++ b/rtl/objpas/classes/writer.inc
@@ -1040,11 +1040,14 @@ begin
(ObjValue is TComponent) then
begin
//writeln('TWriter.WriteProperty AncestorObj=',TComponent(AncestorObj).Name,' OwnerFit=',TComponent(AncestorObj).Owner = FRootAncestor,' ',TComponent(ObjValue).Name,' OwnerFit=',TComponent(ObjValue).Owner = Root);
- if (TComponent(AncestorObj).Owner <> FRootAncestor) or
- (TComponent(ObjValue).Owner <> Root) or
- (UpperCase(TComponent(AncestorObj).Name) <> UpperCase(TComponent(ObjValue).Name)) then
+ if (AncestorObj<> ObjValue) and
+ (TComponent(AncestorObj).Owner = FRootAncestor) and
+ (TComponent(ObjValue).Owner = Root) and
+ (UpperCase(TComponent(AncestorObj).Name) = UpperCase(TComponent(ObjValue).Name)) then
begin
- AncestorObj := nil;
+ // different components, but with the same name
+ // treat it like an override
+ AncestorObj := ObjValue;
end;
end;
end else
diff --git a/rtl/objpas/dateutil.inc b/rtl/objpas/dateutil.inc
index f9da2e2695..4091ba30af 100644
--- a/rtl/objpas/dateutil.inc
+++ b/rtl/objpas/dateutil.inc
@@ -174,7 +174,7 @@ Function EndOfADay(const AYear, ADayOfYear: Word): TDateTime; overload;
Function MonthOfTheYear(const AValue: TDateTime): Word;
Function WeekOfTheYear(const AValue: TDateTime): Word; overload;
-Function WeekOfTheYear(const AValue: TDateTime; var AYear: Word): Word; overload;
+Function WeekOfTheYear(const AValue: TDateTime; out AYear: Word): Word; overload;
Function DayOfTheYear(const AValue: TDateTime): Word;
Function HourOfTheYear(const AValue: TDateTime): Word;
Function MinuteOfTheYear(const AValue: TDateTime): LongWord;
@@ -186,7 +186,7 @@ Function MilliSecondOfTheYear(const AValue: TDateTime): Int64;
---------------------------------------------------------------------}
Function WeekOfTheMonth(const AValue: TDateTime): Word; overload;
-Function WeekOfTheMonth(const AValue: TDateTime; var AYear, AMonth: Word): Word; overload;
+Function WeekOfTheMonth(const AValue: TDateTime; out AYear, AMonth: Word): Word; overload;
Function DayOfTheMonth(const AValue: TDateTime): Word;
Function HourOfTheMonth(const AValue: TDateTime): Word;
Function MinuteOfTheMonth(const AValue: TDateTime): Word;
@@ -300,8 +300,8 @@ Function IncMilliSecond(const AValue: TDateTime): TDateTime; // ; const ANumberO
---------------------------------------------------------------------}
Function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
-Procedure DecodeDateTime(const AValue: TDateTime; var AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
-Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AValue: TDateTime): Boolean;
+Procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
+Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AValue: TDateTime): Boolean;
{ ---------------------------------------------------------------------
Encode/decode date, specifying week of year and day of week
@@ -309,25 +309,25 @@ Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, A
Function EncodeDateWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word): TDateTime;
Function EncodeDateWeek(const AYear, AWeekOfYear: Word): TDateTime; //; const ADayOfWeek: Word = 1
-Procedure DecodeDateWeek(const AValue: TDateTime; var AYear, AWeekOfYear, ADayOfWeek: Word);
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime; const ADayOfWeek: Word): Boolean;
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
+Procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime; const ADayOfWeek: Word): Boolean;
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
{ ---------------------------------------------------------------------
Encode/decode date, specifying day of year
---------------------------------------------------------------------}
Function EncodeDateDay(const AYear, ADayOfYear: Word): TDateTime;
-Procedure DecodeDateDay(const AValue: TDateTime; var AYear, ADayOfYear: Word);
-Function TryEncodeDateDay(const AYear, ADayOfYear: Word; var AValue: TDateTime): Boolean;
+Procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);
+Function TryEncodeDateDay(const AYear, ADayOfYear: Word; out AValue: TDateTime): Boolean;
{ ---------------------------------------------------------------------
Encode/decode date, specifying week of month
---------------------------------------------------------------------}
Function EncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word): TDateTime;
-Procedure DecodeDateMonthWeek(const AValue: TDateTime; var AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
-Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
+Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; out AValue: TDateTime): Boolean;
{ ---------------------------------------------------------------------
Replace given element with supplied value.
@@ -343,7 +343,7 @@ Function RecodeMilliSecond(const AValue: TDateTime; const AMilliSecond: Word): T
Function RecodeDate(const AValue: TDateTime; const AYear, AMonth, ADay: Word): TDateTime;
Function RecodeTime(const AValue: TDateTime; const AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
Function RecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
-Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AResult: TDateTime): Boolean;
+Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AResult: TDateTime): Boolean;
{ ---------------------------------------------------------------------
Comparision of date/time
@@ -364,10 +364,10 @@ Function SameTime(const A, B: TDateTime): Boolean;
Function NthDayOfWeek(const AValue: TDateTime): Word;
-Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; var AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
+Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
Function EncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word): TDateTime;
-Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word; out AValue: TDateTime): Boolean;
{ ---------------------------------------------------------------------
Exception throwing routines
@@ -386,11 +386,11 @@ Procedure InvalidDayOfWeekInMonthError(const AYear, AMonth, ANthDayOfWeek, ADay
Function DateTimeToJulianDate(const AValue: TDateTime): Double;
Function JulianDateToDateTime(const AValue: Double): TDateTime;
-Function TryJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
Function DateTimeToModifiedJulianDate(const AValue: TDateTime): Double;
Function ModifiedJulianDateToDateTime(const AValue: Double): TDateTime;
-Function TryModifiedJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryModifiedJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
{ ---------------------------------------------------------------------
Unix timestamp support.
@@ -917,7 +917,7 @@ begin
end;
-Function WeekOfTheYear(const AValue: TDateTime; var AYear: Word): Word;
+Function WeekOfTheYear(const AValue: TDateTime; out AYear: Word): Word;
Var
DOW : Word;
@@ -992,7 +992,7 @@ begin
end;
-Function WeekOfTheMonth(const AValue: TDateTime; var AYear, AMonth: Word): Word;
+Function WeekOfTheMonth(const AValue: TDateTime; out AYear, AMonth: Word): Word;
Var
DOW : Word;
@@ -1410,7 +1410,7 @@ end;
Increment/decrement functions.
---------------------------------------------------------------------}
-Procedure MaybeSkipTimeWarp(OldDate: TDateTime; var NewDate: TDateTime);
+Procedure MaybeSkipTimeWarp(OldDate: TDateTime; out NewDate: TDateTime);
begin
if (OldDate>0) and (NewDate<0) then
NewDate:=NewDate-0.5
@@ -1528,14 +1528,14 @@ begin
end;
-Procedure DecodeDateTime(const AValue: TDateTime; var AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
+Procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
begin
DecodeDate(AValue,AYear,AMonth,ADay);
DecodeTime(AValue,AHour,AMinute,ASecond,AMilliSecond);
end;
-Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AValue: TDateTime): Boolean;
Var
tmp : TDateTime;
@@ -1564,7 +1564,7 @@ begin
end;
-Procedure DecodeDateWeek(const AValue: TDateTime; var AYear, AWeekOfYear, ADayOfWeek: Word);
+Procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);
var
DOY : Integer;
@@ -1614,7 +1614,7 @@ end;
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime; const ADayOfWeek: Word): Boolean;
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime; const ADayOfWeek: Word): Boolean;
Var
DOW : Word;
@@ -1634,7 +1634,7 @@ begin
end;
-Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; var AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
+Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime): Boolean; //; const ADayOfWeek: Word = 1
begin
Result:=TryEncodeDateWeek(AYear,AWeekOfYear,AValue,1);
end;
@@ -1650,7 +1650,7 @@ begin
end;
-Procedure DecodeDateDay(const AValue: TDateTime; var AYear, ADayOfYear: Word);
+Procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);
Var
M,D : Word;
@@ -1661,7 +1661,7 @@ begin
end;
-Function TryEncodeDateDay(const AYear, ADayOfYear: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDateDay(const AYear, ADayOfYear: Word; out AValue: TDateTime): Boolean;
begin
Result:=(ADayOfYear<>0) and (ADayOfYear<=DaysPerYear [IsleapYear(AYear)]);
If Result then
@@ -1680,7 +1680,7 @@ begin
InvalidDateMonthWeekError(AYear,AMonth,AWeekOfMonth,ADayOfWeek);
end;
-Procedure DecodeDateMonthWeek(const AValue: TDateTime; var AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
+Procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
Var
D,SDOM,EDOM : Word;
@@ -1715,7 +1715,7 @@ begin
end;
end;
-Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word; out AValue: TDateTime): Boolean;
var
S : Word;
@@ -1813,7 +1813,7 @@ begin
end;
-Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; var AResult: TDateTime): Boolean;
+Function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word; out AResult: TDateTime): Boolean;
Procedure FV (Var AV : Word; Arg : Word);
@@ -1908,7 +1908,7 @@ begin
end;
-Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; var AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
+Procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
var
D: Word;
@@ -1927,7 +1927,7 @@ begin
end;
-Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word; var AValue: TDateTime): Boolean;
+Function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word; out AValue: TDateTime): Boolean;
Var
SOM,D : Word;
@@ -2035,7 +2035,7 @@ begin
end;
-Function TryJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
begin
ADateTime := JulianDateToDateTime(AValue);
TryJulianDateToDateTime := ADateTime <> NaN;
@@ -2055,7 +2055,7 @@ begin
end;
-Function TryModifiedJulianDateToDateTime(const AValue: Double; var ADateTime: TDateTime): Boolean;
+Function TryModifiedJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime): Boolean;
begin
Result:=False;
NotYetImplemented('TryModifiedJulianDateToDateTime');
diff --git a/rtl/objpas/fgl.pp b/rtl/objpas/fgl.pp
index 3aa71d5604..15295e9ac6 100644
--- a/rtl/objpas/fgl.pp
+++ b/rtl/objpas/fgl.pp
@@ -357,15 +357,12 @@ procedure TFPSList.SetCount(NewCount: Integer);
begin
if (NewCount < 0) or (NewCount > MaxListSize) then
Error(SListCountError, NewCount);
+ if NewCount > FCapacity then
+ SetCapacity(NewCount);
if NewCount > FCount then
- begin
- if NewCount > FCapacity then
- SetCapacity(NewCount);
- if NewCount > FCount then
- FillByte(InternalItems[FCount]^, (NewCount-FCount) * FItemSize, 0)
- else if NewCount < FCount then
- Deref(NewCount, FCount-1);
- end;
+ FillByte(InternalItems[FCount]^, (NewCount-FCount) * FItemSize, 0)
+ else if NewCount < FCount then
+ Deref(NewCount, FCount-1);
FCount := NewCount;
end;
diff --git a/rtl/objpas/rtlconst.inc b/rtl/objpas/rtlconst.inc
index 9c48ef0db8..b8b25130e1 100644
--- a/rtl/objpas/rtlconst.inc
+++ b/rtl/objpas/rtlconst.inc
@@ -40,7 +40,7 @@ ResourceString
SBoldItalicFont = 'Bold Italic';
SBucketListLocked = 'List is locked during an active ForEach.';
SCancelButton = 'Cancel';
- SCannotCreateDir = 'Das Verzeichnis kann nicht erstellt werden';
+ SCannotCreateDir = 'Cannot create directory';
SCannotCreateName = 'Cannot use standard name for and unknown component';
SCannotCreateSocket = 'Unable to create new socket';
SCannotDragForm = 'Forms cannot be dragged';
@@ -50,7 +50,10 @@ ResourceString
SCannotShowModal = 'A visible Window can not be made modal';
SCantChangeWhileActive = 'Changing value on an active socket is not allowed';
SCantWriteResourceStreamError = 'Can not write to read-only ResourceStream';
- SCardDLLNotLoaded = 'CARDS library could not be loaded';
+ SCardDLLNotLoaded = 'CARDS library could not be loaded' deprecated; { use SLibraryNotLoaded }
+ SLibraryAlreadyLoaded = 'Interface %s already initialized from library "%s"';
+ SLibraryNotLoaded = 'Can not initialize interface %s from library "%s"';
+ SLibraryUnknownSym = 'Can not resolve symbol "%s" of interface %s from library "%s"';
SChangeIconSize = 'Can not change icon size';
SCharExpected = '"%s" expected';
SCheckSynchronizeError = 'CheckSynchronize called from non-main thread "$%x"';
@@ -93,7 +96,7 @@ ResourceString
SDefaultFilter = 'All files (*.*)|*.*';
SDelimiterQuoteCharError = 'Delimiter and QuoteChar properties cannot have the same value';
SDeviceOnPort = '%s on %s';
- SDimsDoNotMatch = 'Image size mismatch';
+ SDimsDoNotMatch = 'Image size mismatch';
SDirNameCap = 'Directory &name:';
SDirsCap = '&Directories:';
SDrivesCap = '&Drives:';
diff --git a/rtl/objpas/sysconst.pp b/rtl/objpas/sysconst.pp
index 47464f7cb6..90d1b07afe 100644
--- a/rtl/objpas/sysconst.pp
+++ b/rtl/objpas/sysconst.pp
@@ -41,6 +41,8 @@ resourcestring
SErrInvalidDayOfWeekInMonth = 'Year %d Month %d NDow %d DOW %d is not a valid date';
SErrInvalidDayOfYear = 'Year %d does not have a day number %d';
SErrInvalidTimeStamp = 'Invalid date/timestamp : "%s"';
+ SErrIllegalDateFormatString = '"%s" is not a valid date format string';
+ SErrInvalidTimeFormat = '"%s" is not a valid time';
SExceptionErrorMessage = 'exception at %p';
SExceptionStack = 'Exception stack error';
SExecuteProcessFailed = 'Failed to execute "%s", error code: %d';
diff --git a/rtl/objpas/sysutils/dati.inc b/rtl/objpas/sysutils/dati.inc
index 1561d85250..dc8193aebd 100644
--- a/rtl/objpas/sysutils/dati.inc
+++ b/rtl/objpas/sysutils/dati.inc
@@ -326,8 +326,16 @@ end ;
if S does not represent a valid date value
an EConvertError will be raised }
-function StrToDate(const S: string): TDateTime;
+function IntStrToDate(Out ErrorMsg : AnsiString; const S: PChar; Len : integer; const useformat : string; const defs:TFormatSettings; separator : char = #0): TDateTime;
+
const SInvalidDateFormat = '"%s" is not a valid date format';
+
+procedure FixErrorMsg(const errm :ansistring;const errmarg : ansistring);
+
+begin
+ errormsg:=format(errm,[errmarg]);
+end;
+
var
df:string;
d,m,y,ly:word;
@@ -339,11 +347,16 @@ var
LocalTime:tsystemtime;
YearMoreThenTwoDigits : boolean;
begin
- if s = '' then
- Raise EConvertError.CreateFmt(SInvalidDateFormat,[s]);
-
+ ErrorMsg:=''; Result:=0;
+ if (Len=0) then
+ begin
+ FixErrorMsg(SInvalidDateFormat,'');
+ exit;
+ end;
YearMoreThenTwoDigits := False;
- df := UpperCase(ShortDateFormat);
+ if separator = #0 then
+ separator := defs.DateSeparator;
+ df := UpperCase(useFormat);
{ Determine order of D,M,Y }
yp:=0;
mp:=0;
@@ -375,13 +388,17 @@ begin
end;
end;
if Which<>3 then
- Raise EConvertError.Create('Illegal format string');
+ begin
+ FixErrorMsg(SErrIllegalDateFormatString,useformat);
+ Exit;
+ end;
{ Get actual values }
for i := 1 to 3 do
values[i] := 0;
s1 := '';
n := 0;
- for i := 1 to length(s) do
+ dec(len);
+ for i := 0 to len do
begin
if s[i] in ['0'..'9'] then
s1 := s1 + s[i];
@@ -389,23 +406,32 @@ begin
{ space can be part of the shortdateformat, and is defaultly in slovak
windows, therefor it shouldn't be taken as separator (unless so specified)
and ignored }
- if (DateSeparator <> ' ') and (s[i] = ' ') then
+ if (Separator <> ' ') and (s[i] = ' ') then
Continue;
- if (s[i] = dateseparator) or ((i = length(s)) and (s[i] in ['0'..'9'])) then
+ if (s[i] = separator) or ((i = len) and (s[i] in ['0'..'9'])) then
begin
inc(n);
if n>3 then
- Raise EConvertError.CreateFmt(SInvalidDateFormat,[s]);
+ begin
+ FixErrorMsg(SInvalidDateFormat,s);
+ exit;
+ end;
// Check if the year has more then two digits (if n=yp, then we are evaluating the year.)
if (n=yp) and (length(s1)>2) then YearMoreThenTwoDigits := True;
val(s1, values[n], c);
if c<>0 then
- Raise EConvertError.CreateFmt(SInvalidDateFormat,[s]);
+ begin
+ FixErrorMsg(SInvalidDateFormat,s);
+ Exit;
+ end;
s1 := '';
end
else if not (s[i] in ['0'..'9']) then
- Raise EConvertError.CreateFmt(SInvalidDateFormat,[s]);
+ begin
+ FixErrorMsg(SInvalidDateFormat,s);
+ Exit;
+ end;
end ;
// Fill in values.
getLocalTime(LocalTime);
@@ -438,52 +464,104 @@ begin
end;
if (y >= 0) and (y < 100) and not YearMoreThenTwoDigits then
begin
- ly := ly - TwoDigitYearCenturyWindow;
+ ly := ly - defs.TwoDigitYearCenturyWindow;
Inc(Y, ly div 100 * 100);
- if (TwoDigitYearCenturyWindow > 0) and (Y < ly) then
+ if (defs.TwoDigitYearCenturyWindow > 0) and (Y < ly) then
Inc(Y, 100);
end;
Result := EncodeDate(y, m, d);
-end ;
+end;
+
+function StrToDate(const S: PChar; Len : integer; const useformat : string; separator : char = #0): TDateTime;
+
+Var
+ MSg : AnsiString;
+
+begin
+ Result:=IntStrToDate(Msg,S,Len,useFormat,DefaultFormatSettings,Separator);
+ If (Msg<>'') then
+ Raise EConvertError.Create(Msg);
+end;
+function StrToDate(const S: ShortString; const useformat : string; separator : char = #0): TDateTime;
+begin
+ result := StrToDate(@S[1],Length(s),UseFormat,separator);
+end;
+
+function StrToDate(const S: AnsiString; const useformat : string; separator : char = #0): TDateTime;
+begin
+ result := StrToDate(@S[1],Length(s),UseFormat,separator);
+end;
+
+function StrToDate(const S: ShortString; separator : char): TDateTime;
+begin
+ result := StrToDate(@S[1],Length(s),ShortDateFormat,separator)
+end;
+
+function StrToDate(const S: ShortString): TDateTime;
+begin
+ result := StrToDate(@S[1],Length(s),ShortDateFormat,#0);
+end;
+
+function StrToDate(const S: AnsiString; separator : char): TDateTime;
+begin
+ result := StrToDate(@S[1],Length(s),ShortDateFormat,separator)
+end;
+
+function StrToDate(const S: AnsiString): TDateTime;
+begin
+ result := StrToDate(@S[1],Length(s),ShortDateFormat,#0);
+end;
{ StrToTime converts the string S to a TDateTime value
if S does not represent a valid time value an
EConvertError will be raised }
-function StrToTime(const s: string): TDateTime;
+function IntStrToTime(Out ErrorMsg : AnsiString; const S: PChar; Len : integer;const defs:TFormatSettings; separator : char = #0): TDateTime;
var
- Len, Current: integer; PM: integer;
+ Current: integer; PM: integer;
+
+ function StrPas(Src : PChar; len: integer = 0) : ShortString;
+ var
+ tmp : integer;
+ begin
+ {tmp := IndexChar(Src[0], len, #0);
+ len :=ifthen(tmp >= 0, tmp, len);
+ len :=ifthen(len > 255, 255, len);}
+ SetLength(Result, len);
+ move(src[0],result[1],len);
+ end;
function GetElement: integer;
var
j, c: integer;
+ CurrentChar : Char;
begin
result := -1;
- Inc(Current);
- while (result = -1) and (Current <= Len) do
+ while (result = -1) and (Current < Len) do
begin
- if S[Current] in ['0'..'9'] then
+ CurrentChar := S[Current];
+ if CurrentChar in ['0'..'9'] then
begin
j := Current;
- while (Current < Len) and (s[Current + 1] in ['0'..'9']) do
+ while (Current+1 < Len) and (s[Current + 1] in ['0'..'9']) do
Inc(Current);
- val(copy(S, j, 1 + Current - j), result, c);
+ val(StrPas(S+j, 1 + current - j), result, c);
end
- else if ((TimeAMString<>'') and (S[Current] = TimeAMString[1])) or (S[Current] in ['a', 'A']) then
+ else if ((defs.TimeAMString<>'') and (CurrentChar = defs.TimeAMString[1])) or (S[Current] in ['a', 'A']) then
begin
pm:=1;
Current := 1 + Len;
end
- else if ((TimePMString<>'') and (S[Current] = TimePMString[1])) or (S[Current] in ['p', 'P']) then
+ else if ((defs.TimePMString<>'') and (CurrentChar = defs.TimePMString[1])) or (S[Current] in ['p', 'P']) then
begin
Current := 1 + Len;
PM := 2;
end
- else if (S[Current] = TimeSeparator) or (S[Current] = ' ') then
+ else if (CurrentChar = Separator) or (CurrentChar = ' ') then
Inc(Current)
else
- raise EConvertError.Create('Invalid Time format');
+ ErrorMsg:=Format(SErrInvalidTimeFormat,[StrPas(S)]);
end ;
end ;
@@ -492,17 +570,23 @@ var
TimeValues: array[0..4] of integer;
begin
+ if separator = #0 then
+ separator := defs.TimeSeparator;
Current := 0;
- Len := length(s);
PM := 0;
for i:=0 to 4 do
timevalues[i]:=0;
i := 0;
TimeValues[i] := GetElement;
+ If ErrorMsg<>'' then
+ Exit;
while (i < 5) and (TimeValues[i] <> -1) do
begin
i := i + 1;
+ Inc(Current);
TimeValues[i] := GetElement;
+ If ErrorMsg<>'' then
+ Exit;
end ;
If (i<5) and (TimeValues[I]=-1) then
TimeValues[I]:=0;
@@ -519,39 +603,96 @@ begin
result := EncodeTime(TimeValues[0], TimeValues[1], TimeValues[2], TimeValues[3]);
end ;
+function StrToTime(const S: PChar; Len : integer; separator : char = #0): TDateTime;
+
+Var
+ Msg : AnsiString;
+
+begin
+ Result:=IntStrToTime(Msg,S,Len,DefaultFormatSettings,Separator);
+ If (Msg<>'') then
+ Raise EConvertError.Create(Msg);
+end;
+
+function StrToTime(const s: ShortString; separator : char): TDateTime;
+begin
+ result := StrToTime(@s[1], length(s), separator);
+end;
+
+function StrToTime(const s: AnsiString; separator : char): TDateTime;
+begin
+ result := StrToTime(@s[1], length(s), separator);
+end;
+
+function StrToTime(const s: ShortString): TDateTime;
+begin
+ result := StrToTime(@s[1], length(s), #0);
+end;
+
+function StrToTime(const s: AnsiString): TDateTime;
+begin
+ result := StrToTime(@s[1], length(s), #0);
+end;
+
{ StrToDateTime converts the string S to a TDateTime value
if S does not represent a valid date and/or time value
an EConvertError will be raised }
function StrToDateTime(const s: string): TDateTime;
var
- i, j, k, l: integer;
- sd, st: string;
-begin
- l := Length(s);
- i := 1;
- while (i <= l) and (s[i] = ' ') do
- Inc(i);
- j := i;
- while (j <= l) and (s[j] <> ' ') do
- Inc(j);
- k := j;
- while (k <= l) and (s[k] = ' ') do
- Inc(k);
- sd := Copy(s, i, j - i);
- st := Copy(s, k, l);
- if (st = '') and (Pos(TimeSeparator, sd) > 0) then
- begin
- st := sd;
- sd := '';
- end;
- if (sd <> '') and (st <> '') then
- Result := ComposeDateTime(StrToDate(sd), StrToTime(st))
- else if st = '' then
- Result := StrToDate(sd)
+ I: integer;
+begin
+ I:=Pos(TimeSeparator,S);
+ If (I>0) then
+ begin
+ While (I>0) and (S[I]<>' ') do
+ Dec(I);
+ If I>0 then
+ result:=ComposeDateTime(StrToDate(Copy(S,1,I-1)),StrToTime(Copy(S,i+1, Length(S)-i)))
+ else
+ result:=StrToTime(S)
+ end
else
- Result := StrToTime(st);
-end ;
+ Result:=StrToDate(S);
+end;
+
+function StrToDateTime(const s: AnsiString; const UseFormat : TFormatSettings): TDateTime;
+var
+ I: integer;
+begin
+ I:=Pos(TimeSeparator,S);
+ If (I>0) then
+ begin
+ While (I>0) and (S[I]<>' ') do
+ Dec(I);
+ If I>0 then
+ result:=ComposeDateTime(StrToDate(Copy(S,1,I-1),UseFormat.ShortDateFormat,UseFormat.DateSeparator),
+ StrToTime(Copy(S,i+1, Length(S)-i),UseFormat.TimeSeparator))
+ else
+ result:=StrToTime(S,UseFormat.TimeSeparator)
+ end
+ else
+ Result:=StrToDate(S,UseFormat.ShortDateFormat,UseFormat.DateSeparator);
+end;
+
+function StrToDateTime(const s: ShortString; const UseFormat : TFormatSettings): TDateTime;
+var
+ I: integer;
+begin
+ I:=Pos(TimeSeparator,S);
+ If (I>0) then
+ begin
+ While (I>0) and (S[I]<>' ') do
+ Dec(I);
+ If I>0 then
+ result:=ComposeDateTime(StrToDate(Copy(S,1,I-1),UseFormat.ShortDateFormat,UseFormat.DateSeparator),
+ StrToTime(Copy(S,i+1, Length(S)-i),UseFormat.TimeSeparator))
+ else
+ result:=StrToTime(S,UseFormat.TimeSeparator)
+ end
+ else
+ Result:=StrToDate(S,UseFormat.ShortDateFormat,UseFormat.DateSeparator);
+end;
{ FormatDateTime formats DateTime to the given format string FormatStr }
@@ -818,38 +959,121 @@ begin
end;
{$endif unix}
-// ieuw. These should be written to work without exceptions?
-function TryStrToDate(const S: string; out Value: TDateTime): Boolean;
- begin
- result:=true;
- try
- value:=StrToDate(s);
- except
- on EConvertError do
- result:=false
+function TryStrToDate(const S: ShortString; out Value: TDateTime): Boolean;
+begin
+ result := TryStrToDate(S, Value, #0);
+end;
+
+function TryStrToDate(const S: ShortString; out Value: TDateTime;
+ const useformat : string; separator : char = #0): Boolean;
+
+Var
+ Msg : Ansistring;
+
+begin
+ Value:=IntStrToDate(Msg,@S[1],Length(S),useformat,defaultformatsettings,separator);
+ Result:=(Msg='');
+end;
+
+function TryStrToDate(const S: AnsiString; out Value: TDateTime;
+ const useformat : string; separator : char = #0): Boolean;
+
+Var
+ Msg : Ansistring;
+
+begin
+ Result:=Length(S)<>0;
+ If Result then
+ begin
+ Value:=IntStrToDate(Msg,@S[1],Length(S),useformat,DefaultFormatSettings,Separator);
+ Result:=(Msg='');
end;
- end;
+end;
+
+function TryStrToDate(const S: ShortString; out Value: TDateTime; separator : char): Boolean;
+begin
+ Result:=TryStrToDate(S,Value,ShortDateFormat,Separator);
+end;
+
+
+function TryStrToDate(const S: AnsiString; out Value: TDateTime): Boolean;
+begin
+ Result:=TryStrToDate(S,Value,ShortDateFormat,#0);
+end;
+function TryStrToDate(const S: AnsiString; out Value: TDateTime; separator : char): Boolean;
+
+begin
+ Result:=TryStrToDate(S,Value,ShortDateFormat,Separator);
+end;
+
+function TryStrToDate(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+Var
+ Msg : Ansistring;
+
+begin
+ Result:=Length(S)<>0;
+ If Result then
+ begin
+ Value:=IntStrToDate(Msg,@S[1],Length(S),FormatSettings.ShortDateFormat,FormatSettings,#0);
+ Result:=(Msg='');
+ end;
+end;
+
+function TryStrToTime(const S: ShortString; out Value: TDateTime; separator : char): Boolean;
+
+Var
+ Msg : AnsiString;
+begin
+ Value:=IntStrToTime(Msg,@S[1],Length(S),DefaultFormatSettings,Separator);
+ result:=(Msg='');
+end;
+
+function TryStrToTime(const S: ShortString; out Value: TDateTime): Boolean;
+begin
+ Result := TryStrToTime(S,Value,#0);
+end;
+
+function TryStrToTime(const S: AnsiString; out Value: TDateTime; separator : char): Boolean;
+Var
+ Msg : AnsiString;
+begin
+ Result:=Length(S)<>0;
+ If Result then
+ begin
+ Value:=IntStrToTime(Msg,@S[1],Length(S),DefaultFormatSettings,Separator);
+ Result:=(Msg='');
+ end;
+end;
-// function TryStrToDate(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+function TryStrToTime(const S: AnsiString; out Value: TDateTime): Boolean;
+begin
+ result := TryStrToTime(S,Value,#0);
+end;
+function TryStrToTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+Var msg : AnsiString;
+begin
+ Result:=Length(S)<>0;
+ If Result then
+ begin
+ Value:=IntStrToTime(Msg,@S[1],Length(S),FormatSettings,#0);
+ Result:=(Msg='');
+ end;
+end;
-function TryStrToTime(const S: string; out Value: TDateTime): Boolean;
+function TryStrToDateTime(const S: ShortString; out Value: TDateTime): Boolean;
begin
result:=true;
try
- value:=StrToTime(s);
+ value:=StrToDateTime(s);
except
on EConvertError do
result:=false
end;
end;
-
-// function TryStrToTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
-
-
-function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean;
+function TryStrToDateTime(const S: AnsiString; out Value: TDateTime): Boolean;
begin
result:=true;
try
@@ -860,28 +1084,88 @@ function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean;
end;
end;
+function TryStrToDateTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+var
+ I: integer;
+ dtdate, dttime :TDateTime;
+begin
+ result:=true;
+ I:=Pos(FormatSettings.TimeSeparator,S);
+ If (I>0) then
+ begin
+ While (I>0) and (S[I]<>' ') do
+ Dec(I);
+ If I>0 then
+ begin
+ if not TryStrToDate(Copy(S,1,I-1),dtdate,Formatsettings) then
+ exit;
+ if not TryStrToTime(Copy(S,i+1, Length(S)-i),dttime,Formatsettings) then
+ exit;
+ Value:=ComposeDateTime(dtdate,dttime);
+ end
+ else
+ result:=TryStrToTime(s,Value,Formatsettings);
+ end
+ else
+ result:=TryStrToDate(s,Value,Formatsettings);
+end;
+
+function StrToDateDef(const S: ShortString; const Defvalue : TDateTime): TDateTime;
+begin
+ result := StrToDateDef(S,DefValue,#0);
+end;
-// function TryStrToDateTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+function StrToTimeDef(const S: ShortString; const Defvalue : TDateTime): TDateTime;
+begin
+ result := StrToTimeDef(S,DefValue,#0);
+end;
+function StrToDateTimeDef(const S: ShortString; const Defvalue : TDateTime): TDateTime;
+begin
+ if not TryStrToDateTime(s,Result) Then
+ result:=defvalue;
+end;
-function StrToDateDef(const S: string; const Defvalue : TDateTime): TDateTime;
+function StrToDateDef(const S: ShortString; const Defvalue : TDateTime; separator : char): TDateTime;
begin
- if not TryStrToDate(s,Result) Then
+ if not TryStrToDate(s,Result, separator) Then
result:=defvalue;
end;
-function StrToTimeDef(const S: string; const Defvalue : TDateTime): TDateTime;
+function StrToTimeDef(const S: ShortString; const Defvalue : TDateTime; separator : char): TDateTime;
begin
- if not TryStrToTime(s,Result) Then
+ if not TryStrToTime(s,Result, separator) Then
result:=defvalue;
end;
-function StrToDateTimeDef(const S: string; const Defvalue : TDateTime): TDateTime;
+function StrToDateDef(const S: AnsiString; const Defvalue : TDateTime): TDateTime;
+begin
+ result := StrToDateDef(S,DefValue,#0);
+end;
+
+function StrToTimeDef(const S: AnsiString; const Defvalue : TDateTime): TDateTime;
+begin
+ result := StrToTimeDef(S,DefValue,#0);
+end;
+
+function StrToDateTimeDef(const S: AnsiString; const Defvalue : TDateTime): TDateTime;
begin
if not TryStrToDateTime(s,Result) Then
result:=defvalue;
end;
+function StrToDateDef(const S: AnsiString; const Defvalue : TDateTime; separator : char): TDateTime;
+begin
+ if not TryStrToDate(s,Result, separator) Then
+ result:=defvalue;
+end;
+
+function StrToTimeDef(const S: AnsiString; const Defvalue : TDateTime; separator : char): TDateTime;
+begin
+ if not TryStrToTime(s,Result, separator) Then
+ result:=defvalue;
+end;
+
procedure ReplaceTime(var dati:TDateTime; NewTime : TDateTime);inline;
begin
dati:= ComposeDateTime(dati, newtime);
diff --git a/rtl/objpas/sysutils/datih.inc b/rtl/objpas/sysutils/datih.inc
index ec177ef2c6..ea2d0fa0c0 100644
--- a/rtl/objpas/sysutils/datih.inc
+++ b/rtl/objpas/sysutils/datih.inc
@@ -124,24 +124,55 @@ function IsLeapYear(Year: Word): boolean;
function DateToStr(Date: TDateTime): string;
function TimeToStr(Time: TDateTime): string;
function DateTimeToStr(DateTime: TDateTime): string;
-function StrToDate(const S: string): TDateTime;
-function StrToTime(const S: string): TDateTime;
+function StrToDate(const S: ShortString): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDate(const S: Ansistring): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDate(const S: ShortString; separator : char): TDateTime;{$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDate(const S: AnsiString; separator : char): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTime(const S: Shortstring): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTime(const S: Ansistring): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTime(const S: ShortString; separator : char): TDateTime;{$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTime(const S: AnsiString; separator : char): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDate(const S: ShortString; const useformat : string; separator : char): TDateTime;{$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDate(const S: AnsiString; const useformat : string; separator : char): TDateTime;{$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTime(const S: PChar; Len : integer; separator : char = #0): TDateTime;
+function StrToDate(const S: PChar; Len : integer; const useformat : string; separator : char = #0): TDateTime;
function StrToDateTime(const S: string): TDateTime;
+function StrToDateTime(const s: ShortString; const UseFormat : TFormatSettings): TDateTime;
+function StrToDateTime(const s: AnsiString; const UseFormat : TFormatSettings): TDateTime;
function FormatDateTime(FormatStr: string; DateTime: TDateTime):string;
procedure DateTimeToString(out Result: string; const FormatStr: string; const DateTime: TDateTime);
Function DateTimeToFileDate(DateTime : TDateTime) : Longint;
Function FileDateToDateTime (Filedate : Longint) :TDateTime;
-function TryStrToDate(const S: string; out Value: TDateTime): Boolean;
-function TryStrToTime(const S: string; out Value: TDateTime): Boolean;
-function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean;
-
-// function TryStrToDate(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
-// function TryStrToTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
-// function TryStrToDateTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
-
-function StrToDateDef(const S: string; const Defvalue : TDateTime): TDateTime;
-function StrToTimeDef(const S: string; const Defvalue : TDateTime): TDateTime;
-function StrToDateTimeDef(const S: string; const Defvalue : TDateTime): TDateTime;
+function TryStrToDate(const S: ShortString; out Value: TDateTime): Boolean; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function TryStrToDate(const S: AnsiString; out Value: TDateTime): Boolean; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function TryStrToDate(const S: ShortString; out Value: TDateTime; separator : char): Boolean;
+function TryStrToDate(const S: AnsiString; out Value: TDateTime; separator : char): Boolean;
+function TryStrToTime(const S: ShortString; out Value: TDateTime): Boolean; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function TryStrToTime(const S: AnsiString; out Value: TDateTime): Boolean; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function TryStrToTime(const S: ShortString; out Value: TDateTime; separator : char): Boolean;
+function TryStrToTime(const S: AnsiString; out Value: TDateTime; separator : char): Boolean;
+function TryStrToDate(const S: ShortString; out Value: TDateTime;
+ const useformat : string; separator : char = #0): Boolean;
+function TryStrToDate(const S: AnsiString; out Value: TDateTime;
+ const useformat : string; separator : char = #0): Boolean;
+function TryStrToDateTime(const S: ShortString; out Value: TDateTime): Boolean;
+function TryStrToDateTime(const S: AnsiString; out Value: TDateTime): Boolean;
+
+function TryStrToDate(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+function TryStrToTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+function TryStrToDateTime(const S: string; out Value: TDateTime; const FormatSettings: TFormatSettings): Boolean;
+
+function StrToDateDef(const S: ShortString; const Defvalue : TDateTime): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDateDef(const S: ShortString; const Defvalue : TDateTime; separator : char): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTimeDef(const S: ShortString; const Defvalue : TDateTime): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTimeDef(const S: ShortString; const Defvalue : TDateTime; separator : char): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDateTimeDef(const S: ShortString; const Defvalue : TDateTime): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+
+function StrToDateDef(const S: AnsiString; const Defvalue : TDateTime): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDateDef(const S: AnsiString; const Defvalue : TDateTime; separator : char): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTimeDef(const S: AnsiString; const Defvalue : TDateTime): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToTimeDef(const S: AnsiString; const Defvalue : TDateTime; separator : char): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
+function StrToDateTimeDef(const S: AnsiString; const Defvalue : TDateTime): TDateTime; {$ifdef SYSUTILSINLINE}inline;{$endif}
function CurrentYear:Word;
{ FPC Extra }
diff --git a/rtl/objpas/types.pp b/rtl/objpas/types.pp
index 6c4836971a..ae4cc3c390 100644
--- a/rtl/objpas/types.pp
+++ b/rtl/objpas/types.pp
@@ -134,7 +134,9 @@ type
const
GUID_NULL: TGUID = '{00000000-0000-0000-0000-000000000000}';
-{$ifndef Windows}
+{$ifndef Wince}
+ // in Wince these are in unit windows. Under 32/64 in ActiveX.
+ // for now duplicate them. Not that bad for untyped constants.
STGTY_STORAGE = 1;
STGTY_STREAM = 2;
STGTY_LOCKBYTES = 3;
@@ -148,7 +150,8 @@ const
LOCK_EXCLUSIVE = 2;
LOCK_ONLYONCE = 4;
- E_FAIL = HRESULT($80004005);
+ E_FAIL = HRESULT($80004005);
+ E_INVALIDARG = HRESULT($80070057);
STG_E_INVALIDFUNCTION = HRESULT($80030001);
STG_E_FILENOTFOUND = HRESULT($80030002);
@@ -193,6 +196,11 @@ const
STG_S_RETRYNOW = $00030202;
STG_S_MONITORING = $00030203;
+ STATFLAG_DEFAULT = 0;
+ STATFLAG_NONAME = 1;
+ STATFLAG_NOOPEN = 2;
+{$endif}
+{$ifndef Windows}
type
PCLSID = PGUID;
TCLSID = TGUID;
diff --git a/rtl/unix/bunxh.inc b/rtl/unix/bunxh.inc
index 485fe54a3c..df2cc6dd72 100644
--- a/rtl/unix/bunxh.inc
+++ b/rtl/unix/bunxh.inc
@@ -106,3 +106,6 @@ Type TGrpArr = Array [0..0] of TGid; { C style array workarounds}
Function FpGetEnv (name : pChar): pChar;
function fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint;
+ function FpGetRLimit(resource:cint;rlim:PRLimit):cint; external name 'FPC_SYSC_GETRLIMIT';
+ function FpSetRLimit(Resource:cint;rlim:PRLimit):cint; external name 'FPC_SYSC_SETRLIMIT';
+
diff --git a/rtl/unix/cthreads.pp b/rtl/unix/cthreads.pp
index f9de4cdc81..576e7006a3 100644
--- a/rtl/unix/cthreads.pp
+++ b/rtl/unix/cthreads.pp
@@ -328,12 +328,14 @@ Type PINTRTLEvent = ^TINTRTLEvent;
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
}
// result := pthread_kill(threadHandle,SIGSTOP);
+ result:=dword(-1);
end;
function CResumeThread (threadHandle : TThreadID) : dword;
begin
// result := pthread_kill(threadHandle,SIGCONT);
+ result:=dword(-1);
end;
@@ -367,12 +369,14 @@ Type PINTRTLEvent = ^TINTRTLEvent;
function CThreadSetPriority (threadHandle : TThreadID; Prio: longint): boolean; {-15..+15, 0=normal}
begin
{$Warning ThreadSetPriority needs to be implemented}
+ result:=false;
end;
function CThreadGetPriority (threadHandle : TThreadID): Integer;
begin
{$Warning ThreadGetPriority needs to be implemented}
+ result:=0;
end;
diff --git a/rtl/unix/oscdeclh.inc b/rtl/unix/oscdeclh.inc
index 5be1403572..91af837527 100644
--- a/rtl/unix/oscdeclh.inc
+++ b/rtl/unix/oscdeclh.inc
@@ -134,10 +134,6 @@ const
// function fpsettimeofday(tp:ptimeval;tzp:ptimezone):cint;
{$endif}
function FpGetRLimit(resource : cInt; rlim : PRLimit) : cInt; cdecl; external clib name 'getrlimit';
- {$ifdef HAS_UGETRLIMIT}
- { there is no ugetrlimit libc call, just map it to the getrlimit call in these cases }
- function FpUGetRLimit(resource : cInt; rlim : PRLimit) : cInt; cdecl; external clib name 'getrlimit';
- {$endif}
{$ifdef linux}
{$ifndef FPC_IS_SYSTEM}
diff --git a/rtl/win/sysfile.inc b/rtl/win/sysfile.inc
index dedcd69865..b6587b94c3 100644
--- a/rtl/win/sysfile.inc
+++ b/rtl/win/sysfile.inc
@@ -93,78 +93,53 @@ begin
end;
+type
+ tint64rec = record
+ low, high: dword;
+ end;
+
function do_filepos(handle : thandle) : Int64;
var
- l:longint;
+ rslt: tint64rec;
begin
-{$ifndef wince}
- if assigned(SetFilePointerEx) then
- begin
- if not(SetFilePointerEx(handle,0,@result,FILE_CURRENT)) then
- begin
- errno:=GetLastError;
- Errno2InoutRes;
- end;
- end
- else
-{$endif wince}
- begin
- l:=SetFilePointer(handle,0,nil,FILE_CURRENT);
- if l=-1 then
- begin
- l:=0;
- errno:=GetLastError;
- Errno2InoutRes;
- end;
- do_filepos:=l;
- end;
+ rslt.high := 0;
+ rslt.low := SetFilePointer(handle, 0, @rslt.high, FILE_CURRENT);
+ if (rslt.low = $FFFFFFFF) and (GetLastError <> 0) then
+ begin
+ errno := GetLastError;
+ Errno2InoutRes;
+ end;
+ do_filepos := int64(rslt);
end;
-procedure do_seek(handle:thandle;pos : Int64);
+procedure do_seek(handle: thandle; pos: Int64);
+var
+ posHigh: LongInt;
begin
-{$ifndef wince}
- if assigned(SetFilePointerEx) then
- begin
- if not(SetFilePointerEx(handle,pos,nil,FILE_BEGIN)) then
- begin
- errno:=GetLastError;
- Errno2InoutRes;
- end;
- end
- else
-{$endif wince}
- begin
- if SetFilePointer(handle,pos,nil,FILE_BEGIN)=-1 then
- Begin
- errno:=GetLastError;
- Errno2InoutRes;
- end;
- end;
+ posHigh := tint64rec(pos).high;
+ if (SetFilePointer(handle, pos, @posHigh, FILE_BEGIN)=-1) and
+ { return value of -1 is valid unless GetLastError is non-zero }
+ (GetLastError <> 0) then
+ begin
+ errno := GetLastError;
+ Errno2InoutRes;
+ end;
end;
function do_seekend(handle:thandle):Int64;
+var
+ rslt: tint64rec;
begin
-{$ifndef wince}
- if assigned(SetFilePointerEx) then
- begin
- if not(SetFilePointerEx(handle,0,@result,FILE_END)) then
- begin
- errno:=GetLastError;
- Errno2InoutRes;
- end;
- end
- else
-{$endif wince}
- begin
- do_seekend:=SetFilePointer(handle,0,nil,FILE_END);
- if do_seekend=-1 then
- begin
- errno:=GetLastError;
- Errno2InoutRes;
- end;
- end;
+ rslt.high := 0;
+ rslt.low := SetFilePointer(handle, 0, @rslt.high, FILE_END);
+ if (rslt.low = $FFFFFFFF) and (GetLastError <> 0) then
+ begin
+ errno := GetLastError;
+ Errno2InoutRes;
+ end;
+ do_seekend := int64(rslt);
end;
diff --git a/rtl/win/sysos.inc b/rtl/win/sysos.inc
index 83bcbbee23..0486dbde57 100644
--- a/rtl/win/sysos.inc
+++ b/rtl/win/sysos.inc
@@ -253,24 +253,6 @@ threadvar
stdcall;external KernelDLL name 'SetCurrentDirectoryA';
function GetCurrentDirectory(bufsize : longint;name : pchar) : longbool;
stdcall;external KernelDLL name 'GetCurrentDirectoryA';
-
- var
- SetFilePointerEx : function(hFile : THandle;
- liDistanceToMove : int64;lpNewFilePointer : pint64;
- dwMoveMethod : DWord) : ByteBool;stdcall;
-
- procedure SetupProcVars;
- var
- hinstLib : THandle;
- begin
- SetFilePointerEx:=nil;
- hinstLib:=LoadLibrary(KernelDLL);
- if hinstLib<>0 then
- begin
- pointer(SetFilePointerEx):=GetProcAddress(hinstLib,'SetFilePointerEx');
- FreeLibrary(hinstLib);
- end;
- end;
{$endif WINCE}
Procedure Errno2InOutRes;
diff --git a/rtl/win/sysutils.pp b/rtl/win/sysutils.pp
index 708af740de..81470099c5 100644
--- a/rtl/win/sysutils.pp
+++ b/rtl/win/sysutils.pp
@@ -278,14 +278,14 @@ end;
Function FileSeek (Handle : THandle; FOffset: Int64; Origin: Longint) : Int64;
+var
+ rslt: Int64Rec;
begin
- if assigned(SetFilePointerEx) then
- begin
- if not(SetFilePointerEx(Handle, FOffset, @result, Origin)) then
- Result:=-1;
- end
- else
- Result:=longint(SetFilePointer(Handle, FOffset, nil, Origin));
+ rslt := Int64Rec(FOffset);
+ rslt.lo := SetFilePointer(Handle, rslt.lo, @rslt.hi, Origin);
+ if (rslt.lo = $FFFFFFFF) and (GetLastError <> 0) then
+ rslt.hi := $FFFFFFFF;
+ Result := Int64(rslt);
end;
@@ -1215,27 +1215,12 @@ procedure InitWin32Widestrings;
end;
-procedure SetupProcVars;
- var
- hinstLib : THandle;
- begin
- SetFilePointerEx:=nil;
- hinstLib:=LoadLibrary(KernelDLL);
- if hinstLib<>0 then
- begin
- pointer(SetFilePointerEx):=GetProcAddress(hinstLib,'SetFilePointerEx');
- FreeLibrary(hinstLib);
- end;
- end;
-
-
Initialization
InitWin32Widestrings;
InitExceptions; { Initialize exceptions. OS independent }
InitInternational; { Initialize internationalization settings }
LoadVersionInfo;
InitSysConfigDir;
- SetupProcVars;
Finalization
DoneExceptions;
if kernel32dll<>0 then
diff --git a/rtl/win/winsock.pp b/rtl/win/winsock.pp
index fbb4835d3b..8e778f8b00 100644
--- a/rtl/win/winsock.pp
+++ b/rtl/win/winsock.pp
@@ -288,7 +288,7 @@ unit winsock;
{$endif win64}
end;
TWSAData = WSADATA;
- PWSAData = TWSAData;
+ PWSAData = ^TWSAData;
const
IP_OPTIONS = 1;
diff --git a/rtl/win32/system.pp b/rtl/win32/system.pp
index 1c8b07dfad..823c520ffa 100644
--- a/rtl/win32/system.pp
+++ b/rtl/win32/system.pp
@@ -175,7 +175,6 @@ var
end;
begin
- SetupProcVars;
{ create commandline, it starts with the executed filename which is argv[0] }
{ Win32 passes the command NOT via the args, but via getmodulefilename}
count:=0;
diff --git a/rtl/win64/system.pp b/rtl/win64/system.pp
index 56ec32773a..202b6b9059 100644
--- a/rtl/win64/system.pp
+++ b/rtl/win64/system.pp
@@ -167,7 +167,6 @@ var
end;
begin
- SetupProcVars;
{ create commandline, it starts with the executed filename which is argv[0] }
{ Win32 passes the command NOT via the args, but via getmodulefilename}
count:=0;
diff --git a/tests/tbs/tb0565.pp b/tests/tbs/tb0565.pp
new file mode 100644
index 0000000000..5f0f61312b
--- /dev/null
+++ b/tests/tbs/tb0565.pp
@@ -0,0 +1,48 @@
+{ %opt=-g }
+{ %interactive }
+
+{ test to see whether parameters are properly visible in debugger }
+
+PROGRAM Test;
+
+
+{ when this routine is entered, the debugger should show:
+"WRITELN2 (STR='Hello, World!', A=5, B=10) at tb0565.pp:17"
+}
+ PROCEDURE WriteLn2(str: STRING; a: longint; var b: longint);
+
+ VAR ptr: ^INTEGER;
+
+ BEGIN
+ WriteLn(str);
+ ptr:= NIL;
+// IF ptr^ = 0 THEN
+// HALT;
+ WriteLn(str)
+ END;
+
+{ when this routine is entered, the debugger should show:
+"WRITELN3 (STR='Hello, World 3') at tb0565.pp:32"
+}
+ PROCEDURE WriteLn3(var str: STRING);
+
+ VAR ptr: ^INTEGER;
+
+ BEGIN
+ WriteLn(str);
+ ptr:= NIL;
+// IF ptr^ = 0 THEN
+// HALT;
+ WriteLn(str)
+ END;
+
+var
+ s: string;
+ b: longint;
+BEGIN
+ b:=10;
+ WriteLn2('Hello, World!',5,b);
+ s:='Hello, World 3';
+ Writeln3(s);
+END.
+
diff --git a/tests/test/packages/fcl-db/tdb4.pp b/tests/test/packages/fcl-db/tdb4.pp
index 434972a84a..434972a84a 100755..100644
--- a/tests/test/packages/fcl-db/tdb4.pp
+++ b/tests/test/packages/fcl-db/tdb4.pp
diff --git a/tests/test/packages/win-base/tdispvar1.pp b/tests/test/packages/win-base/tdispvar1.pp
index a0ed7afe0e..edfb038b37 100644
--- a/tests/test/packages/win-base/tdispvar1.pp
+++ b/tests/test/packages/win-base/tdispvar1.pp
@@ -12,10 +12,21 @@ uses
var StarOffice : Variant;
Document : Variant;
-function TSampleCode_Connect() : boolean;
+function TSampleCode_Connect(OleName : string) : boolean;
begin
if VarIsEmpty(StarOffice) then
- StarOffice := CreateOleObject('com.sun.star.ServiceManager');
+ begin
+ try
+ Writeln('Trying to connect to ',OleName);
+ StarOffice := CreateOleObject(OleName);
+ except
+ on e : exception do
+ begin
+ StarOffice:=Unassigned;
+ Writeln('Connection to ',OleName,' failed: ',e.message);
+ end;
+ end;
+ end;
Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
end;
@@ -61,7 +72,18 @@ begin
end;
begin
- CoInitialize(nil);
- TSampleCode_Connect();
- TSampleCode_CreateDocument(false);
+ CoInitialize(nil);
+ if TSampleCode_Connect('com.sun.star.ServiceManager') then
+ begin
+ if TSampleCode_CreateDocument(false) then
+ Document.Close(false);
+
+ end;
+ StarOffice:=Unassigned;
+ if TSampleCode_Connect('com.sun.star.ServiceManager.NonExisting.Variant.Just.To.Test') then
+ begin
+ if TSampleCode_CreateDocument(false) then
+ Document.Close(false);
+ end;
+ CoUnInitialize;
end.
diff --git a/tests/test/tabstract1.pp b/tests/test/tabstract1.pp
new file mode 100644
index 0000000000..3b83d53261
--- /dev/null
+++ b/tests/test/tabstract1.pp
@@ -0,0 +1,49 @@
+{$ifdef fpc}
+{$mode objfpc}
+{$endif fpc}
+type
+ TAbstractClass = class abstract
+ public
+ procedure Test; virtual;
+ end;
+
+ TAbstractClassDescendant = class(TAbstractClass)
+ public
+ procedure Test; override;
+ end;
+
+ TSealedClass = class sealed
+ public
+ procedure Test;
+ end;
+
+procedure TAbstractClass.Test;
+begin
+end;
+
+procedure TAbstractClassDescendant.Test;
+begin
+end;
+
+procedure TSealedClass.Test;
+begin
+end;
+
+var
+ AClass: TAbstractClass;
+ AClassDesc: TAbstractClassDescendant;
+ SClass: TSealedClass;
+begin
+ AClass := TAbstractClass.Create;
+ AClass.Test;
+ AClass.Free;
+
+ AClassDesc:= TAbstractClassDescendant.Create;
+ AClassDesc.Test;
+ AClassDesc.Free;
+
+ SClass := TSealedClass.Create;
+ SClass.Test;
+ SClass.Free;
+end.
+
diff --git a/tests/test/tassignmentoperator1.pp b/tests/test/tassignmentoperator1.pp
new file mode 100644
index 0000000000..e602f714f1
--- /dev/null
+++ b/tests/test/tassignmentoperator1.pp
@@ -0,0 +1,17 @@
+{ %fail }
+program tassignmentoperator1;
+
+{$mode objfpc}
+
+operator := (S1, S2: String): Integer;
+begin
+ Result := Length(S1);
+end;
+
+var
+ S: String;
+ V: Integer;
+begin
+ V := S;
+end.
+
diff --git a/tests/test/tcase15.pp b/tests/test/tcase15.pp
index 14b31319c6..2a5f9f469a 100644
--- a/tests/test/tcase15.pp
+++ b/tests/test/tcase15.pp
@@ -3,9 +3,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase16.pp b/tests/test/tcase16.pp
index 8f35cd07e6..2e212972ce 100644
--- a/tests/test/tcase16.pp
+++ b/tests/test/tcase16.pp
@@ -3,9 +3,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase17.pp b/tests/test/tcase17.pp
index a3c854e9f5..998b19d04d 100644
--- a/tests/test/tcase17.pp
+++ b/tests/test/tcase17.pp
@@ -3,9 +3,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase19.pp b/tests/test/tcase19.pp
index 8e3abb95ce..8da9b363d5 100644
--- a/tests/test/tcase19.pp
+++ b/tests/test/tcase19.pp
@@ -5,9 +5,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase20.pp b/tests/test/tcase20.pp
index dd5b98440f..d4a7f46535 100644
--- a/tests/test/tcase20.pp
+++ b/tests/test/tcase20.pp
@@ -5,9 +5,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase21.pp b/tests/test/tcase21.pp
index 4d69a67d3c..c729932554 100644
--- a/tests/test/tcase21.pp
+++ b/tests/test/tcase21.pp
@@ -5,9 +5,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase22.pp b/tests/test/tcase22.pp
index 9872588b8a..75558bd82d 100644
--- a/tests/test/tcase22.pp
+++ b/tests/test/tcase22.pp
@@ -3,9 +3,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase23.pp b/tests/test/tcase23.pp
index 7e080d54eb..c86bdbe483 100644
--- a/tests/test/tcase23.pp
+++ b/tests/test/tcase23.pp
@@ -5,9 +5,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase24.pp b/tests/test/tcase24.pp
index 50b0b52506..d9cd87a833 100644
--- a/tests/test/tcase24.pp
+++ b/tests/test/tcase24.pp
@@ -3,9 +3,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase25.pp b/tests/test/tcase25.pp
index 2af7c9072e..113b360b24 100644
--- a/tests/test/tcase25.pp
+++ b/tests/test/tcase25.pp
@@ -3,9 +3,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase26.pp b/tests/test/tcase26.pp
index f885e6f069..49a40c91dc 100644
--- a/tests/test/tcase26.pp
+++ b/tests/test/tcase26.pp
@@ -5,9 +5,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase27.pp b/tests/test/tcase27.pp
index 307433f311..7a5af68416 100644
--- a/tests/test/tcase27.pp
+++ b/tests/test/tcase27.pp
@@ -5,9 +5,9 @@
{$H+}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase31.pp b/tests/test/tcase31.pp
index dab14d2018..f285f27690 100644
--- a/tests/test/tcase31.pp
+++ b/tests/test/tcase31.pp
@@ -3,9 +3,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase32.pp b/tests/test/tcase32.pp
index 26bf5672bd..c4ffe2c78c 100644
--- a/tests/test/tcase32.pp
+++ b/tests/test/tcase32.pp
@@ -3,9 +3,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase33.pp b/tests/test/tcase33.pp
index f801a9d1f2..db8e50c45f 100644
--- a/tests/test/tcase33.pp
+++ b/tests/test/tcase33.pp
@@ -3,9 +3,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase35.pp b/tests/test/tcase35.pp
index e8be55f7d3..96983d4d0b 100644
--- a/tests/test/tcase35.pp
+++ b/tests/test/tcase35.pp
@@ -5,9 +5,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase36.pp b/tests/test/tcase36.pp
index 309a1e0b21..5ecdf5a843 100644
--- a/tests/test/tcase36.pp
+++ b/tests/test/tcase36.pp
@@ -5,9 +5,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase37.pp b/tests/test/tcase37.pp
index c6e548f921..fc494ab88d 100644
--- a/tests/test/tcase37.pp
+++ b/tests/test/tcase37.pp
@@ -5,9 +5,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase38.pp b/tests/test/tcase38.pp
index bdcfa5b491..d7eef9520f 100644
--- a/tests/test/tcase38.pp
+++ b/tests/test/tcase38.pp
@@ -3,9 +3,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase39.pp b/tests/test/tcase39.pp
index 3ff3256c76..01f0816d2b 100644
--- a/tests/test/tcase39.pp
+++ b/tests/test/tcase39.pp
@@ -5,9 +5,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase40.pp b/tests/test/tcase40.pp
index 393fd71a91..3297e63db8 100644
--- a/tests/test/tcase40.pp
+++ b/tests/test/tcase40.pp
@@ -3,9 +3,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase41.pp b/tests/test/tcase41.pp
index c4c0b2ec4d..56c37f7923 100644
--- a/tests/test/tcase41.pp
+++ b/tests/test/tcase41.pp
@@ -3,9 +3,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase42.pp b/tests/test/tcase42.pp
index 8797e69b92..f76a4bb7a8 100644
--- a/tests/test/tcase42.pp
+++ b/tests/test/tcase42.pp
@@ -5,9 +5,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase43.pp b/tests/test/tcase43.pp
index 9513fef784..b26ff06d6c 100644
--- a/tests/test/tcase43.pp
+++ b/tests/test/tcase43.pp
@@ -5,9 +5,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tcase44.pp b/tests/test/tcase44.pp
index 78a16e6527..bf245c3489 100644
--- a/tests/test/tcase44.pp
+++ b/tests/test/tcase44.pp
@@ -4,9 +4,9 @@
{$H-}
var
my_str: string;
- my_str_wide: string;
- my_str_ansi: string;
- my_str_uni: string;
+ my_str_wide: widestring;
+ my_str_ansi: ansistring;
+ my_str_uni: unicodestring;
i: integer;
begin
diff --git a/tests/test/tclassinfo1.pp b/tests/test/tclassinfo1.pp
new file mode 100644
index 0000000000..7358630223
--- /dev/null
+++ b/tests/test/tclassinfo1.pp
@@ -0,0 +1,11 @@
+program tclassinfo1;
+
+{$apptype console}
+{$mode objfpc}{$H+}
+uses
+ Classes;
+begin
+ WriteLn(TObject.ClassInfo = TypeInfo(TObject));
+ WriteLn(TPersistent.ClassInfo = TypeInfo(TPersistent));
+end.
+
diff --git a/tests/test/tenumerators1.pp b/tests/test/tenumerators1.pp
new file mode 100644
index 0000000000..6013c1debc
--- /dev/null
+++ b/tests/test/tenumerators1.pp
@@ -0,0 +1,166 @@
+program tenumerators1;
+
+{$ifdef fpc}
+{$mode objfpc}{$H+}
+{$endif}
+{$apptype console}
+uses
+ Classes;
+
+{$ifndef fpc}
+type
+ PtrInt = integer;
+{$endif}
+
+{$ifdef fpc}
+procedure CheckFPListEnumerator;
+var
+ Item: Pointer;
+ List: TFPList;
+ Enumerator: TFPListEnumerator;
+begin
+ // check TFPList enumerator
+ List := TFPList.Create;
+ List.Add(Pointer(1));
+ List.Add(Pointer(2));
+ List.Add(Pointer(3));
+
+ Enumerator := List.GetEnumerator;
+ while Enumerator.MoveNext do
+ begin
+ Item := Enumerator.Current;
+ WriteLn(PtrInt(Item));
+ end;
+ Enumerator.Free;
+ List.Free;
+end;
+{$endif}
+
+procedure CheckListEnumerator;
+var
+ Item: Pointer;
+ List: TList;
+ Enumerator: TListEnumerator;
+begin
+ // check TList enumerator
+ List := TList.Create;
+ List.Add(Pointer(1));
+ List.Add(Pointer(2));
+ List.Add(Pointer(3));
+
+ Enumerator := List.GetEnumerator;
+ while Enumerator.MoveNext do
+ begin
+ Item := Enumerator.Current;
+ WriteLn(PtrInt(Item));
+ end;
+ Enumerator.Free;
+ List.Free;
+end;
+
+procedure CheckCollectionEnumerator;
+var
+ Item: TCollectionItem;
+ Collection: TCollection;
+ Enumerator: TCollectionEnumerator;
+begin
+ // check TCollection enumerator
+ Collection := TCollection.Create(TCollectionItem);
+ Collection.Add;
+ Collection.Add;
+ Collection.Add;
+
+ Enumerator := Collection.GetEnumerator;
+ while Enumerator.MoveNext do
+ begin
+ Item := Enumerator.Current;
+ WriteLn(PtrInt(Item));
+ end;
+ Enumerator.Free;
+ Collection.Free;
+end;
+
+procedure CheckStringsEnumerator;
+var
+ Item: String;
+ Strings: TStrings;
+ Enumerator: TStringsEnumerator;
+begin
+ // check TStrings enumerator
+ Strings := TStringList.Create;
+ Strings.Add('1');
+ Strings.Add('2');
+ Strings.Add('3');
+
+ Enumerator := Strings.GetEnumerator;
+ while Enumerator.MoveNext do
+ begin
+ Item := Enumerator.Current;
+ WriteLn(Item);
+ end;
+ Enumerator.Free;
+ Strings.Free;
+end;
+
+procedure CheckComponentEnumerator;
+var
+ Item: TComponent;
+ Component: TComponent;
+ Enumerator: TComponentEnumerator;
+begin
+ // check TComponent enumerator
+ Component := TComponent.Create(nil);
+ TComponent.Create(Component);
+ TComponent.Create(Component);
+ TComponent.Create(Component);
+
+ Enumerator := Component.GetEnumerator;
+ while Enumerator.MoveNext do
+ begin
+ Item := Enumerator.Current;
+ WriteLn(PtrInt(Item));
+ end;
+ Enumerator.Free;
+ Component.Free;
+end;
+
+procedure CheckInterfaceListEnumerator;
+var
+ Item: IUnknown;
+ List: TInterfaceList;
+ Enumerator: TInterfaceListEnumerator;
+begin
+ // check TInterfaceList enumerator
+ List := TInterfaceList.Create;
+ Item := TInterfacedObject.Create;
+ List.Add(Item);
+ Item := TInterfacedObject.Create;
+ List.Add(Item);
+ Item := TInterfacedObject.Create;
+ List.Add(Item);
+
+ Enumerator := List.GetEnumerator;
+ while Enumerator.MoveNext do
+ begin
+ Item := Enumerator.Current;
+ WriteLn(PtrInt(Item));
+ end;
+ Enumerator.Free;
+ Item := nil;
+ List.Free;
+end;
+
+begin
+{$ifdef fpc}
+ WriteLn('Testing FPC');
+ CheckFPListEnumerator;
+{$else}
+ WriteLn('Testing Delphi');
+{$endif}
+ CheckListEnumerator;
+ CheckCollectionEnumerator;
+ CheckStringsEnumerator;
+ CheckComponentEnumerator;
+ CheckInterfaceListEnumerator;
+end.
+
diff --git a/tests/test/tfinal1.pp b/tests/test/tfinal1.pp
new file mode 100644
index 0000000000..e0285289cf
--- /dev/null
+++ b/tests/test/tfinal1.pp
@@ -0,0 +1,17 @@
+{ %fail}
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+
+type
+ TClassWithFinalMethod = class
+ public
+ procedure TestFinal; final;
+ end;
+
+procedure TClassWithFinalMethod.TestFinal;
+begin
+end;
+
+begin
+end. \ No newline at end of file
diff --git a/tests/test/tfinal2.pp b/tests/test/tfinal2.pp
new file mode 100644
index 0000000000..8da565a18d
--- /dev/null
+++ b/tests/test/tfinal2.pp
@@ -0,0 +1,26 @@
+{ %fail}
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+
+type
+ TClassWithFinalMethod = class
+ public
+ procedure TestFinal; virtual; final;
+ end;
+
+ TClassTryOverrideFinal = class(TClassWithFinalMethod)
+ public
+ procedure TestFinal; override;
+ end;
+
+procedure TClassWithFinalMethod.TestFinal;
+begin
+end;
+
+procedure TClassTryOverrideFinal.TestFinal;
+begin
+end;
+
+begin
+end. \ No newline at end of file
diff --git a/tests/test/tforin1.pp b/tests/test/tforin1.pp
new file mode 100644
index 0000000000..bb9a67bd0e
--- /dev/null
+++ b/tests/test/tforin1.pp
@@ -0,0 +1,71 @@
+program tforin1;
+
+// test for-in loop for the basic types: Enumeration, Range, Array, String and Set
+
+{$mode objfpc}{$H+}
+{$apptype console}
+uses
+ Classes, typinfo;
+
+type
+ TColor = (clRed, clGreen, clBlue);
+
+procedure LoopTypes;
+type
+ IntRange = 0..9;
+var
+ c: TColor;
+ i: integer;
+begin
+ // check loop in range
+ for i in IntRange do
+ writeln(i);
+
+ // check loop in enum
+ for c in TColor do
+ writeln(GetEnumName(TypeInfo(c), ord(c)));
+end;
+
+procedure LoopString(s: string);
+var
+ c: char;
+begin
+ // check loop in string
+ for c in s do
+ write(c);
+ WriteLn;
+end;
+
+procedure LoopArray(a: array of integer);
+var
+ i: integer;
+begin
+ // check loop in array
+ for i in a do
+ write(i);
+ WriteLn;
+end;
+
+procedure LoopSet;
+const
+ s = [clRed, clBlue];
+var
+ c: TColor;
+begin
+ // check loop in set
+ for c in s do
+ writeln(GetEnumName(TypeInfo(c), ord(c)));
+end;
+
+var
+ a: array[0..2] of integer;
+begin
+ LoopTypes;
+ LoopString('test');
+ a[0]:=0;
+ a[1]:=1;
+ a[2]:=2;
+ LoopArray(a);
+ LoopSet;
+end.
+
diff --git a/tests/test/tforin10.pp b/tests/test/tforin10.pp
new file mode 100644
index 0000000000..156e437303
--- /dev/null
+++ b/tests/test/tforin10.pp
@@ -0,0 +1,29 @@
+{ %FAIL}
+
+// test that it is imposible to use non-valid enumerator operator
+
+program tforin10;
+
+{$mode objfpc}{$H+}
+{$apptype console}
+
+type
+ TSomeClass = class
+ end;
+
+ TSomeClassEnumerator = class
+ end;
+
+operator enumerator(s1, s2: TSomeClass): TSomeClassEnumerator;
+begin
+ Result := nil;
+end;
+
+var
+ s: TSomeClass;
+ c: char;
+begin
+ for c in s do
+ write(c);
+end.
+
diff --git a/tests/test/tforin11.pp b/tests/test/tforin11.pp
new file mode 100644
index 0000000000..9324530049
--- /dev/null
+++ b/tests/test/tforin11.pp
@@ -0,0 +1,17 @@
+{ %FAIL}
+
+// test that wrong type using for the for-in loop fails
+
+program tforin11;
+
+{$mode objfpc}{$H+}
+{$apptype console}
+
+var
+ s: String;
+ b: byte;
+begin
+ for b in s do
+ write(b);
+end.
+
diff --git a/tests/test/tforin12.pp b/tests/test/tforin12.pp
new file mode 100644
index 0000000000..d4a0ac6aa5
--- /dev/null
+++ b/tests/test/tforin12.pp
@@ -0,0 +1,10 @@
+{mode objfpc}
+{$apptype console}
+type T = array [1..3] of Char;
+var
+ a: array [1..3] of T = ('asd', 'sdf', 'ddf');
+ s: T;
+begin
+ for s in a do
+ Writeln(s);
+end.
diff --git a/tests/test/tforin13.pp b/tests/test/tforin13.pp
new file mode 100644
index 0000000000..e32bd4a362
--- /dev/null
+++ b/tests/test/tforin13.pp
@@ -0,0 +1,8 @@
+{mode objfpc}
+{$apptype console}
+var
+ ch: Char;
+begin
+ for ch in ['a'..'c', '0'..'3', '_'] do
+ Writeln(ch);
+end.
diff --git a/tests/test/tforin14.pp b/tests/test/tforin14.pp
new file mode 100644
index 0000000000..2be38d8d4f
--- /dev/null
+++ b/tests/test/tforin14.pp
@@ -0,0 +1,24 @@
+{mode objfpc}
+{$apptype console}
+type
+ T = array [1..3] of Integer;
+
+
+procedure P(a: array of T);
+var
+ r: T;
+ i: Integer;
+begin
+ for r in a do
+ begin
+ for i in r do Write(i, ' ');
+ Writeln;
+ end;
+end;
+
+const
+ r1: T = (1,2,9);
+ r2: T = (3,4,5);
+begin
+ P([r1, r2]);
+end.
diff --git a/tests/test/tforin15.pp b/tests/test/tforin15.pp
new file mode 100644
index 0000000000..32add6fa02
--- /dev/null
+++ b/tests/test/tforin15.pp
@@ -0,0 +1,39 @@
+{$mode objfpc}
+{$apptype console}
+
+type
+ T = class
+ stop: boolean;
+ F: Integer;
+ function MoveNext: Boolean;
+ property Current: Integer read F;
+ end;
+
+Twice = type Integer;
+
+function T.MoveNext: Boolean;
+begin
+ Result := not stop;
+ stop := true;
+end;
+
+operator enumerator(a: Integer): T;
+begin
+ Result := T.Create;
+ Result.F := a;
+ Result.stop := false;
+end;
+
+operator enumerator(a: Twice): T;
+begin
+ Result := T.Create;
+ Result.F := a * 2;
+ Result.stop := false;
+end;
+
+var
+ i: Integer;
+begin
+ for i in Twice(1) do
+ Writeln(i);
+end. \ No newline at end of file
diff --git a/tests/test/tforin16.pp b/tests/test/tforin16.pp
new file mode 100644
index 0000000000..692c02c7aa
--- /dev/null
+++ b/tests/test/tforin16.pp
@@ -0,0 +1,7 @@
+{mode objfpc}
+{$apptype console}
+const S = 'abc';
+var ch: Char;
+begin
+ for ch in S do Writeln(ch);
+end.
diff --git a/tests/test/tforin17.pp b/tests/test/tforin17.pp
new file mode 100644
index 0000000000..e482a4382b
--- /dev/null
+++ b/tests/test/tforin17.pp
@@ -0,0 +1,6 @@
+{mode objfpc}
+{$apptype console}
+var ch: Char;
+begin
+ for ch in 'abc' do Writeln(ch);
+end. \ No newline at end of file
diff --git a/tests/test/tforin18.pp b/tests/test/tforin18.pp
new file mode 100644
index 0000000000..d37bd7f3d5
--- /dev/null
+++ b/tests/test/tforin18.pp
@@ -0,0 +1,6 @@
+{ %FAIL}
+{$mode objfpc}
+{$apptype console}
+begin
+ for ch in S do Writeln(ch);
+end.
diff --git a/tests/test/tforin19.pp b/tests/test/tforin19.pp
new file mode 100644
index 0000000000..1119b561f3
--- /dev/null
+++ b/tests/test/tforin19.pp
@@ -0,0 +1,7 @@
+{$mode objfpc}
+{$apptype console}
+var
+ ch: Char;
+begin
+ for ch in [] do Writeln(ch);
+end.
diff --git a/tests/test/tforin2.pp b/tests/test/tforin2.pp
new file mode 100644
index 0000000000..edd1d7ca80
--- /dev/null
+++ b/tests/test/tforin2.pp
@@ -0,0 +1,84 @@
+program tforin2;
+
+// test operator Enumerator for the string type and built-in into RTL TStrings enumerator
+
+{$mode objfpc}{$H+}
+{$apptype console}
+uses
+ Classes;
+
+type
+ { TStringEnumerator }
+
+ TStringEnumerator = class // reverse enumerator
+ private
+ FString: String;
+ FIndex: Integer;
+ function GetCurrent: Char; inline;
+ public
+ constructor Create(AString: String);
+ function MoveNext: Boolean;
+ property Current: Char read GetCurrent;
+ end;
+
+{ TStringEnumerator }
+
+function TStringEnumerator.GetCurrent: Char;
+begin
+ Result := FString[FIndex];
+end;
+
+constructor TStringEnumerator.Create(AString: String);
+begin
+ inherited Create;
+ FString := AString;
+ FIndex := Length(FString) + 1;
+end;
+
+function TStringEnumerator.MoveNext: Boolean;
+begin
+ dec(FIndex);
+ Result := FIndex > 0;
+end;
+
+// define an operator for the string type
+operator enumerator (const s: string): TStringEnumerator;inline;
+begin
+ Result := TStringEnumerator.Create(s);
+end;
+
+procedure LoopString(s: string);
+
+ function getstring(s: string): string;
+ begin
+ result:=s;
+ end;
+
+var
+ c: char;
+begin
+ // check loop in string. output is 'tset' for the string 'test' :)
+ for c in getstring(s) do
+ write(c);
+ WriteLn;
+end;
+
+procedure LoopClass;
+var
+ L: TStringList;
+ S: String;
+begin
+ L := TStringList.Create;
+ L.Add('1');
+ L.Add('2');
+ L.Add('3');
+ for S in L do
+ WriteLn(S);
+ L.Free;
+end;
+
+begin
+ LoopString('test');
+ LoopClass;
+end.
+
diff --git a/tests/test/tforin20.pp b/tests/test/tforin20.pp
new file mode 100644
index 0000000000..525d40f6f3
--- /dev/null
+++ b/tests/test/tforin20.pp
@@ -0,0 +1,8 @@
+{$mode objfpc}
+{$apptype console}
+type T = (a1, b1=5);
+var
+ ch: T;
+begin
+ for ch in T do Writeln(ch);
+end.
diff --git a/tests/test/tforin21.pp b/tests/test/tforin21.pp
new file mode 100644
index 0000000000..1ed28ff516
--- /dev/null
+++ b/tests/test/tforin21.pp
@@ -0,0 +1,14 @@
+{ %FAIL}
+{$mode objfpc}
+{$apptype console}
+
+operator enumerator(a: Integer): Integer;
+begin
+ Result := 0;
+end;
+
+var
+ i: Integer;
+begin
+ for i in 1 do Writeln(i);
+end.
diff --git a/tests/test/tforin22.pp b/tests/test/tforin22.pp
new file mode 100644
index 0000000000..1113b4254c
--- /dev/null
+++ b/tests/test/tforin22.pp
@@ -0,0 +1,27 @@
+{ %FAIL}
+{$mode objfpc}
+{$apptype console}
+
+type
+ T = class
+ F: Integer;
+ function MoveNext(a: Integer): Boolean;
+ property Current: Integer read F;
+ end;
+
+function T.MoveNext(a: Integer): Boolean;
+begin
+ Result := true;
+end;
+
+operator enumerator(a: Integer): T;
+begin
+ Result := T.Create;
+ Result.F := a;
+end;
+
+var
+ i: Integer;
+begin
+ for i in 1 do Writeln(i);
+end.
diff --git a/tests/test/tforin3.pp b/tests/test/tforin3.pp
new file mode 100644
index 0000000000..e38a5e96e4
--- /dev/null
+++ b/tests/test/tforin3.pp
@@ -0,0 +1,48 @@
+program tforin3;
+
+// check for-in loop if GetEnumerator returns nil
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+
+ { TListEnumerator }
+
+ TListEnumerator = class
+ private
+ FCurrent: String;
+ public
+ function MoveNext: Boolean;
+ property Current: String read FCurrent;
+ end;
+
+ TMyList = class
+ public
+ function GetEnumerator: TListEnumerator;
+ end;
+
+{ TListEnumerator }
+
+function TListEnumerator.MoveNext: Boolean;
+begin
+ Result := True;
+end;
+
+{ TMyList }
+
+function TMyList.GetEnumerator: TListEnumerator;
+begin
+ Result := nil;
+end;
+
+var
+ S: String;
+ L: TMyList;
+begin
+ L := TMyList.Create;
+ for S in L do
+ ;
+ L.Free;
+end.
+
diff --git a/tests/test/tforin4.pp b/tests/test/tforin4.pp
new file mode 100644
index 0000000000..e59c1d966d
--- /dev/null
+++ b/tests/test/tforin4.pp
@@ -0,0 +1,59 @@
+program tforin4;
+
+// test that for-in loop allows array modifications inside the loop body
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+ TMyArray = array of integer;
+
+function return_array: TMyArray;
+begin
+ SetLength(result, 3);
+ result[0] := 1;
+ result[1] := 2;
+ result[2] := 3;
+end;
+
+procedure TestArrayReturn;
+var
+ i: integer;
+begin
+ for i in return_array do
+ WriteLn(i);
+end;
+
+procedure TestDynamicArray;
+var
+ i: integer;
+ a: array of integer;
+begin
+ setlength(a, 3);
+ a[0]:=1;
+ a[1]:=2;
+ a[2]:=3;
+ for i in a do
+ begin
+ WriteLn(i);
+ a[2] := -1;
+ end;
+end;
+
+procedure TestOpenArray(a: array of integer);
+var
+ i: integer;
+begin
+ for i in a do
+ begin
+ WriteLn(i);
+ a[2] := -1;
+ end;
+end;
+
+begin
+ TestOpenArray([1,2,3]);
+ TestDynamicArray;
+ TestArrayReturn;
+end.
+
diff --git a/tests/test/tforin5.pp b/tests/test/tforin5.pp
new file mode 100644
index 0000000000..67b9679e95
--- /dev/null
+++ b/tests/test/tforin5.pp
@@ -0,0 +1,50 @@
+program tforin5;
+
+// test operator Enumerator support for classes
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+ TMyList = class
+ end;
+
+ { TMyListEnumerator }
+
+ TMyListEnumerator = class
+ private
+ FCurrent: Integer;
+ public
+ constructor Create;
+ function MoveNext: Boolean;
+ property Current: Integer read FCurrent;
+ end;
+
+{ TMyListEnumerator }
+
+constructor TMyListEnumerator.Create;
+begin
+ FCurrent := 0;
+end;
+
+function TMyListEnumerator.MoveNext: Boolean;
+begin
+ inc(FCurrent);
+ Result := FCurrent <= 3;
+end;
+
+operator enumerator (AList: TMyList): TMyListEnumerator;
+begin
+ Result := TMyListEnumerator.Create;
+end;
+
+var
+ List: TMyList;
+ i: integer;
+begin
+ List := TMyList.Create;
+ for i in List do
+ WriteLn(i);
+ List.Free;
+end.
+
diff --git a/tests/test/tforin6.pp b/tests/test/tforin6.pp
new file mode 100644
index 0000000000..605068d7fe
--- /dev/null
+++ b/tests/test/tforin6.pp
@@ -0,0 +1,58 @@
+program tforin6;
+
+// test Object enumerator implementation
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+ { TMyListEnumerator }
+
+ TMyListEnumerator = object
+ private
+ FCurrent: Integer;
+ public
+ constructor Create;
+ destructor Destroy;
+ function MoveNext: Boolean;
+ property Current: Integer read FCurrent;
+ end;
+
+ TMyList = class
+ end;
+
+{ TMyListEnumerator }
+
+constructor TMyListEnumerator.Create;
+begin
+ WriteLn('create');
+ FCurrent := 0;
+end;
+
+destructor TMyListEnumerator.Destroy;
+begin
+ WriteLn('destroy');
+ inherited;
+end;
+
+function TMyListEnumerator.MoveNext: Boolean;
+begin
+ inc(FCurrent);
+ Result := FCurrent <= 3;
+end;
+
+operator enumerator (AList: TMyList): TMyListEnumerator;
+begin
+ Result.Create;
+end;
+
+var
+ List: TMyList;
+ i: integer;
+begin
+ List := TMyList.Create;
+ for i in List do
+ WriteLn(i);
+ List.Free;
+end.
+
diff --git a/tests/test/tforin7.pp b/tests/test/tforin7.pp
new file mode 100644
index 0000000000..4d2ad5593f
--- /dev/null
+++ b/tests/test/tforin7.pp
@@ -0,0 +1,56 @@
+program tforin7;
+
+// test 'enumerator MoveNext' and 'enumrator Current' directives
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+ { TMyListEnumerator }
+
+ TMyListEnumerator = object
+ private
+ FCurrent: Integer;
+ public
+ constructor Create;
+ destructor Destroy;
+ function StepNext: Boolean; enumerator MoveNext;
+ property Value: Integer read FCurrent; enumerator Current;
+ end;
+
+ TMyList = class
+ end;
+
+{ TMyListEnumerator }
+
+constructor TMyListEnumerator.Create;
+begin
+ FCurrent := 0;
+end;
+
+destructor TMyListEnumerator.Destroy;
+begin
+ inherited;
+end;
+
+function TMyListEnumerator.StepNext: Boolean;
+begin
+ inc(FCurrent);
+ Result := FCurrent <= 3;
+end;
+
+operator enumerator (AList: TMyList): TMyListEnumerator;
+begin
+ Result.Create;
+end;
+
+var
+ List: TMyList;
+ i: integer;
+begin
+ List := TMyList.Create;
+ for i in List do
+ WriteLn(i);
+ List.Free;
+end.
+
diff --git a/tests/test/tforin8.pp b/tests/test/tforin8.pp
new file mode 100644
index 0000000000..e91cb516d0
--- /dev/null
+++ b/tests/test/tforin8.pp
@@ -0,0 +1,61 @@
+program tformin8;
+
+// Test IEnumerable and IEnumerator in the for-in loop
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+ { TMyListEnumerator }
+
+ TMyListEnumerator = class(TInterfacedObject, IEnumerator)
+ private
+ FCurrent: Pointer;
+ function GetCurrent: TObject;
+ public
+ function MoveNext: Boolean;
+ procedure Reset;
+ property Current: TObject read GetCurrent;
+ end;
+
+ TMyList = class(TInterfacedObject, IEnumerable)
+ public
+ function GetEnumerator: IEnumerator;
+ end;
+
+{ TMyListEnumerator }
+
+
+function TMyListEnumerator.GetCurrent: TObject;
+begin
+ Result := TObject(FCurrent);
+end;
+
+function TMyListEnumerator.MoveNext: Boolean;
+begin
+ inc(PByte(FCurrent));
+ Result := FCurrent <= Pointer(3);
+end;
+
+procedure TMyListEnumerator.Reset;
+begin
+ FCurrent := nil;
+end;
+
+{ TMyList }
+
+function TMyList.GetEnumerator: IEnumerator;
+begin
+ Result := TMyListEnumerator.Create;
+end;
+
+var
+ List: IEnumerable;
+ i: TObject;
+begin
+ List := TMyList.Create;
+ for i in List do
+ WriteLn(PtrUInt(i));
+ List := nil;
+end.
+
diff --git a/tests/test/tforin9.pp b/tests/test/tforin9.pp
new file mode 100644
index 0000000000..013b40581c
--- /dev/null
+++ b/tests/test/tforin9.pp
@@ -0,0 +1,68 @@
+program tforin9;
+
+// Test interface with 'enumerator MoveNext', 'enumerator Current' directives
+
+{$mode objfpc}{$H+}
+{$APPTYPE CONSOLE}
+
+type
+
+ { IMyIterator }
+
+ IMyIterator = interface
+ function GetValue: TObject;
+ function StepForward: Boolean; enumerator MoveNext;
+ property Value: TObject read GetValue; enumerator Current;
+ end;
+ { TMyListEnumerator }
+
+ TMyListEnumerator = class(TInterfacedObject, IMyIterator)
+ private
+ FValue: Pointer;
+ function GetValue: TObject;
+ public
+ function StepForward: Boolean;
+ property Value: TObject read GetValue;
+ end;
+
+ TMyList = class
+ public
+ function GetIterator: IMyIterator;
+ end;
+
+operator Enumerator(AList: TMyList): IMyIterator;
+begin
+ Result := AList.GetIterator;
+end;
+
+{ TMyListEnumerator }
+
+
+function TMyListEnumerator.GetValue: TObject;
+begin
+ Result := TObject(FValue);
+end;
+
+function TMyListEnumerator.StepForward: Boolean;
+begin
+ inc(PByte(FValue));
+ Result := FValue <= Pointer(3);
+end;
+
+{ TMyList }
+
+function TMyList.GetIterator: IMyIterator;
+begin
+ Result := TMyListEnumerator.Create;
+end;
+
+var
+ List: TMyList;
+ i: TObject;
+begin
+ List := TMyList.Create;
+ for i in List do
+ WriteLn(PtrInt(i));
+ List.Free;
+end.
+
diff --git a/tests/test/tobject5.pp b/tests/test/tobject5.pp
new file mode 100644
index 0000000000..a50185cab6
--- /dev/null
+++ b/tests/test/tobject5.pp
@@ -0,0 +1,15 @@
+program tobject1;
+
+{$apptype console}
+{$mode objfpc}{$H+}
+var
+ Obj: TObject;
+begin
+ Obj := TObject.Create;
+ WriteLn(Obj.Equals(Obj)); // true
+ WriteLn(Obj.GetHashCode); // PtrInt(Obj)
+ WriteLn(Obj.UnitName); // System
+ WriteLn(Obj.ToString); // TObject
+ Obj.Free;
+end.
+
diff --git a/tests/test/tsealed1.pp b/tests/test/tsealed1.pp
new file mode 100644
index 0000000000..6b2b73f3a4
--- /dev/null
+++ b/tests/test/tsealed1.pp
@@ -0,0 +1,17 @@
+{ %fail }
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+
+type
+ TSealedClass = class sealed
+ public
+ end;
+
+ TSealedDesdentantClass = class(TSealedClass)
+ public
+ end;
+
+begin
+end.
+
diff --git a/tests/test/tsealed2.pp b/tests/test/tsealed2.pp
new file mode 100644
index 0000000000..6948e6b6c0
--- /dev/null
+++ b/tests/test/tsealed2.pp
@@ -0,0 +1,14 @@
+{ %fail }
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+
+type
+ TSealedClass = class sealed
+ public
+ procedure TestAbstract; virtual; abstract;
+ end;
+
+begin
+end.
+
diff --git a/tests/test/tsealed3.pp b/tests/test/tsealed3.pp
new file mode 100644
index 0000000000..55a32cde2a
--- /dev/null
+++ b/tests/test/tsealed3.pp
@@ -0,0 +1,12 @@
+{ %fail }
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+
+type
+ TSealedClass = class abstract sealed
+ public
+ end;
+begin
+end.
+
diff --git a/tests/test/tsealed4.pp b/tests/test/tsealed4.pp
new file mode 100644
index 0000000000..901402d655
--- /dev/null
+++ b/tests/test/tsealed4.pp
@@ -0,0 +1,15 @@
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+
+type
+ TAbstractClass = class abstract abstract abstract
+ public
+ end;
+
+ TSealedClass = class sealed sealed sealed
+ public
+ end;
+begin
+end.
+
diff --git a/tests/test/tsymlibrary1.pp b/tests/test/tsymlibrary1.pp
new file mode 100644
index 0000000000..a11be681b7
--- /dev/null
+++ b/tests/test/tsymlibrary1.pp
@@ -0,0 +1,16 @@
+{$ifdef fpc}
+{$mode objfpc}
+{$endif}
+type
+ TSomething = class
+ public
+ class procedure DoSomething; library;
+ end;
+
+class procedure TSomething.DoSomething;
+begin
+end;
+
+begin
+ TSomething.DoSomething;
+end. \ No newline at end of file
diff --git a/tests/utils/redir.pp b/tests/utils/redir.pp
index b84818200f..33b9b259d5 100644
--- a/tests/utils/redir.pp
+++ b/tests/utils/redir.pp
@@ -90,7 +90,7 @@ const
Implementation
-{$if defined(macos) or defined(windows) or defined(shell_implemented)}
+{$if defined(macos) or defined(windows) or defined(shell_implemented) or defined(go32v2)}
{$define usedos}
{$endif}
diff --git a/tests/webtbf/tw14650.pp b/tests/webtbf/tw14650.pp
new file mode 100644
index 0000000000..1e4757b2d6
--- /dev/null
+++ b/tests/webtbf/tw14650.pp
@@ -0,0 +1,16 @@
+{ %fail }
+
+{$mode objfpc}
+
+type
+ tc = class
+ strict private
+ fa: longint;
+ end;
+
+ tcc = class(tc)
+ property a: longint read fa;
+ end;
+
+begin
+end.
diff --git a/tests/webtbf/tw14650a.pp b/tests/webtbf/tw14650a.pp
new file mode 100644
index 0000000000..73264d8c32
--- /dev/null
+++ b/tests/webtbf/tw14650a.pp
@@ -0,0 +1,15 @@
+{ %fail }
+
+{$mode objfpc}
+
+uses
+ classes;
+
+type
+ TPublicQueueList = class(tfplist)
+ public
+ property List: PPointerList read FList;
+ end;
+
+begin
+end.
diff --git a/tests/webtbf/tw14713.pp b/tests/webtbf/tw14713.pp
new file mode 100644
index 0000000000..5a8d6e42e9
--- /dev/null
+++ b/tests/webtbf/tw14713.pp
@@ -0,0 +1,10 @@
+{ %fail }
+{ %opt=-vw -Sew }
+
+{$mode delphi}
+
+var
+ p: pointer;
+begin
+ p:=0;
+end.
diff --git a/tests/webtbf/tw14713a.pp b/tests/webtbf/tw14713a.pp
new file mode 100644
index 0000000000..1ec8a00426
--- /dev/null
+++ b/tests/webtbf/tw14713a.pp
@@ -0,0 +1,9 @@
+{ %fail }
+
+{$mode delphi}
+
+var
+ p: pointer;
+begin
+ p:=1;
+end.
diff --git a/tests/webtbf/tw14777.pp b/tests/webtbf/tw14777.pp
new file mode 100644
index 0000000000..2343cec0b9
--- /dev/null
+++ b/tests/webtbf/tw14777.pp
@@ -0,0 +1,10 @@
+{ %fail }
+
+var
+ S: String;
+ B: Boolean;
+ E: Word;
+begin
+ S := '0';
+ Val(S, B, E);
+end.
diff --git a/tests/webtbf/tw14777a.pp b/tests/webtbf/tw14777a.pp
new file mode 100644
index 0000000000..58896f03a7
--- /dev/null
+++ b/tests/webtbf/tw14777a.pp
@@ -0,0 +1,10 @@
+{ %fail }
+
+var
+ S: String;
+ B: Boolean;
+ E: Word;
+begin
+ S := '0';
+ Val(S, E, B);
+end.
diff --git a/tests/webtbf/tw14849.pp b/tests/webtbf/tw14849.pp
new file mode 100644
index 0000000000..1c41c2c6c5
--- /dev/null
+++ b/tests/webtbf/tw14849.pp
@@ -0,0 +1,48 @@
+{ %norun }
+{ %fail }
+
+unit tw14849;
+
+{$mode objfpc}
+
+interface
+uses
+ Classes, SysUtils;
+
+type
+ TMarkerState=(leftActive,rightActive);
+
+ TWorldPoint=record
+ fX,fY:double;
+ end;
+
+ TCoolClass = class(TComponent)
+ private
+ fMarkerPos:array[TMarkerState] of TWorldPoint;
+ { private declarations }
+
+ public
+ function LeftMarker :integer;
+ function RightMarker:integer;
+ { public declarations }
+ { error: using function to index property }
+ property xLPM:double read fMarkerPos[leftMarker].fX write fMarkerPos[leftmarker].fX;
+ end;
+
+implementation
+
+function TCoolClass.LeftMarker :integer;
+begin
+ Result:=0;
+end;
+
+function TCoolClass.RightMarker:integer;
+begin
+ Result:=1;
+end;
+
+
+
+
+end.
+
diff --git a/tests/webtbf/tw14929a.pp b/tests/webtbf/tw14929a.pp
new file mode 100644
index 0000000000..722dd175b0
--- /dev/null
+++ b/tests/webtbf/tw14929a.pp
@@ -0,0 +1,17 @@
+{ %fail }
+
+{$mode tp}
+{$p-}
+
+var
+ s: string[4];
+
+procedure test(var s: shortstring);
+begin
+ s:='12345678';
+end;
+
+begin
+ test(s);
+ writeln(s);
+end.
diff --git a/tests/webtbf/tw14929b.pp b/tests/webtbf/tw14929b.pp
new file mode 100644
index 0000000000..3bb1ef4ee8
--- /dev/null
+++ b/tests/webtbf/tw14929b.pp
@@ -0,0 +1,17 @@
+{ %fail }
+
+{$mode delphi}
+{$p-}
+
+var
+ s: string[4];
+
+procedure test(var s: shortstring);
+begin
+ s:='12345678';
+end;
+
+begin
+ test(s);
+ writeln(s);
+end.
diff --git a/tests/webtbf/tw14946.pp b/tests/webtbf/tw14946.pp
new file mode 100644
index 0000000000..989278adb1
--- /dev/null
+++ b/tests/webtbf/tw14946.pp
@@ -0,0 +1,17 @@
+{ %fail }
+
+{$ifdef fpc}
+{$mode delphi}
+{$endif}
+
+type
+ ta = class
+ procedure MyProc(var Msg); message 1; message 'abc';
+ end;
+
+procedure ta.myproc;
+begin
+end;
+
+begin
+end.
diff --git a/tests/webtbs/tw11369.pp b/tests/webtbs/tw11369.pp
index 964ad6fb38..2f8a784793 100644
--- a/tests/webtbs/tw11369.pp
+++ b/tests/webtbs/tw11369.pp
@@ -4,7 +4,7 @@
// The curterm6 case in the manual warrants a separate bug report
-{$if defined(darwin) or defined(os2) or defined(emx) or defined(palmos) or defined(symbian) or defined(watcom) or defined(wdosx) or defined(win32) or defined(wince)}
+{$if defined(darwin) or defined(os2) or defined(emx) or defined(palmos) or defined(symbian) or defined(watcom) or defined(wdosx) or defined(win32) or defined(wince) or defined(go32v2)}
{$define underscoreprefix}
{$endif}
diff --git a/tests/webtbs/tw14553.pp b/tests/webtbs/tw14553.pp
new file mode 100644
index 0000000000..9d5da90240
--- /dev/null
+++ b/tests/webtbs/tw14553.pp
@@ -0,0 +1,45 @@
+{ %target=win32,win64 }
+unit tw14553;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, ComObj, Variants;
+
+Procedure MI_Connect(H1,H2,H3:String);
+Procedure MI_Disconnect;
+
+Var MI1Open,MI2Open,MI3Open:Boolean;
+ MI1,MI2,MI3:Variant;
+
+implementation
+
+Procedure MI_Connect(H1,H2,H3:String);
+Begin
+ MI1:=CreateOleObject('MapInfo.Application');
+ MI2:=CreateOleObject('MapInfo.Application');
+ MI3:=CreateOleObject('MapInfo.Application');
+
+ MI1.&do('Set Application Window '+H1);
+ MI2.&do('Set Application Window '+H2);
+ MI3.&do('Set Application Window '+H3);
+
+ MI1.&do('Set Next Document Parent '+H1+' Style 1');
+ MI2.&do('Set Next Document Parent '+H2+' Style 1');
+ MI3.&do('Set Next Document Parent '+H3+' Style 1');
+
+ MI1Open:=False;
+ MI2Open:=False;
+ MI3Open:=False;
+End;
+
+Procedure MI_Disconnect;
+Begin
+ MI1:=UnAssigned;
+ MI2:=UnAssigned;
+ MI3:=UnAssigned;
+End;
+
+end.
diff --git a/tests/webtbs/tw14617.pp b/tests/webtbs/tw14617.pp
new file mode 100644
index 0000000000..6688df2257
--- /dev/null
+++ b/tests/webtbs/tw14617.pp
@@ -0,0 +1,29 @@
+{$ifdef fpc}
+{$mode delphi}
+{$endif}
+
+{$r-}
+uses
+ SysUtils, Classes, TypInfo, Variants;
+
+type
+ TBla = class(TPersistent)
+ private
+ fustr: unicodestring;
+ published
+ property ustr: unicodestring read fustr write fustr;
+ end;
+
+var
+ b: tbla;
+ u: unicodestring;
+begin
+ b:=tbla.create;
+ SetPropValue(b, 'ustr', 'abc');
+ if (b.ustr<>'abc') then
+ halt(1);
+ u:=getpropvalue(b,'ustr');
+ if (u<>'abc') then
+ halt(2);
+end.
+
diff --git a/tests/webtbs/tw14729.pp b/tests/webtbs/tw14729.pp
new file mode 100644
index 0000000000..a5d990ea63
--- /dev/null
+++ b/tests/webtbs/tw14729.pp
@@ -0,0 +1,44 @@
+{ %opt=-gw}
+{ %interactive }
+{$mode objfpc}
+
+{
+1) check that all fields/procedures are shown in the correct visibility section
+ when doing "ptype TC"
+2) check that "ptype TOBJECT" shows TOBJECT's methods even if the system
+ unit is not compiled with debuginfo
+}
+
+type
+ tc = class
+ private
+ f: longint;
+ procedure priv(a: longint);
+ protected
+ d: byte;
+ procedure prot; virtual;
+ public
+ c: longint;
+ procedure pub;
+ end;
+
+procedure tc.priv(a: longint);
+begin
+end;
+
+procedure tc.prot;
+begin
+end;
+
+procedure tc.pub;
+begin
+end;
+
+procedure myproc(a,b,c: longint);
+begin
+end;
+
+
+begin
+end.
+
diff --git a/tests/webtbs/tw14740.pp b/tests/webtbs/tw14740.pp
new file mode 100644
index 0000000000..29322f7279
--- /dev/null
+++ b/tests/webtbs/tw14740.pp
@@ -0,0 +1,28 @@
+var
+ w: widestring;
+ u: unicodestring;
+ pw: pwidechar;
+ pu: punicodechar;
+ p: pchar;
+begin
+ pw:='abc'#0'def';
+ setstring(w,pw,7);
+ if w<>'abc'#0'def' then
+ halt(1);
+ w:='';
+
+ pu:='abc'#0'def';
+ setstring(u,pu,7);
+ if u<>'abc'#0'def' then
+ halt(2);
+ u:='';
+
+ p:='abc'#0'def';
+ setstring(w,p,7);
+ if w<>'abc'#0'def' then
+ halt(3);
+
+ setstring(u,p,7);
+ if u<>'abc'#0'def' then
+ halt(4);
+end.
diff --git a/tests/webtbs/tw14743.pp b/tests/webtbs/tw14743.pp
new file mode 100644
index 0000000000..06aacbac5b
--- /dev/null
+++ b/tests/webtbs/tw14743.pp
@@ -0,0 +1,22 @@
+{$mode delphi}
+program tbreintroduce;
+
+type
+ parent = object
+ constructor init;
+ end;
+
+ child = object(parent)
+ constructor init(a : byte);reintroduce;
+ end;
+
+constructor parent.init;
+begin
+end;
+
+constructor child.init(a : byte);
+begin
+end;
+
+begin
+end.
diff --git a/tests/webtbs/tw14812.pp b/tests/webtbs/tw14812.pp
new file mode 100644
index 0000000000..8de43c3146
--- /dev/null
+++ b/tests/webtbs/tw14812.pp
@@ -0,0 +1,27 @@
+type
+ stdstrlong = string;
+
+procedure PackStr // Convert string to packed array
+ ( InStr: StdStrLong;
+ var OutArr: packed array of char);
+var
+ i: longint;
+begin
+ if (low(outarr)<>0) or
+ (high(outarr)<>5) then
+ halt(1);
+ if (instr<>'abc') then
+ halt(2);
+ for i:=1 to length(instr) do
+ outarr[i-1]:=instr[i];
+end;
+
+var
+ a: packed array[5..10] of char;
+begin
+ packstr('abc',a);
+ if (a[5]<>'a') or
+ (a[6]<>'b') or
+ (a[7]<>'c') then
+ halt(1);
+end.
diff --git a/utils/fpdoc/Makefile b/utils/fpdoc/Makefile
index 24d4687fa5..efa5ce704e 100644
--- a/utils/fpdoc/Makefile
+++ b/utils/fpdoc/Makefile
@@ -1,5 +1,5 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/10/10]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -441,178 +441,178 @@ ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_PROGRAMS+=fpdoc makeskel unitdiff fpclasschart
endif
ifeq ($(FULL_TARGET),i386-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-win32)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-os2)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-beos)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-haiku)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-solaris)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-qnx)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-netware)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-darwin)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-emx)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-watcom)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-wince)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-symbian)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-atari)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),sparc-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-palmos)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-darwin)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-wince)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-gba)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-nds)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),arm-symbian)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),avr-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),armeb-linux)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+override CLEAN_UNITS+=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
endif
ifeq ($(FULL_TARGET),i386-linux)
override CLEAN_FILES+=dwriter.rst fpdoc.rst dglobals.rst makeskel.rst
diff --git a/utils/fpdoc/Makefile.fpc b/utils/fpdoc/Makefile.fpc
index 4692f5d5b2..58b18f0ce3 100644
--- a/utils/fpdoc/Makefile.fpc
+++ b/utils/fpdoc/Makefile.fpc
@@ -26,7 +26,7 @@ fpcpackage=y
fpcdir=../..
[clean]
-units=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man
+units=dglobals dwriter dw_xml sh_pas dw_html dw_latex dw_ipf dw_txt dw_man dwlinear dw_linrtf
files=dwriter.rst fpdoc.rst dglobals.rst makeskel.rst
[rules]
diff --git a/utils/fpdoc/dw_dxml.pp b/utils/fpdoc/dw_dxml.pp
new file mode 100644
index 0000000000..2589837829
--- /dev/null
+++ b/utils/fpdoc/dw_dxml.pp
@@ -0,0 +1,500 @@
+unit dw_dXML;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ PasTree, dwriter, SysUtils;
+//uses DOM, PasTree, dwriter, xmlWrite, SysUtils;
+
+type
+ { TXMLWriter }
+
+ TDXMLWriter = class(TFPDocWriter)
+ procedure WriteDoc; override;
+ end;
+
+ { TDocumentation }
+
+ TDocumentation = class(TPassTreeVisitor)
+ f: Text;
+ lvl: integer;
+
+ procedure GenerateDoc(OutputName: string; Module: TPasModule);
+
+ procedure DocParameters(obj: TPasProcedureType);
+ function DocProcFlags(obj: TPasProcedure): string;
+
+ procedure Visit(obj: TPasElement); override;
+
+ procedure DoVisit(obj: TPasSection); virtual;
+
+ procedure DoVisit(obj: TPasRecordType); virtual;
+ procedure DoVisit(obj: TPasEnumType); virtual;
+ procedure DoVisit(obj: TPasProperty); virtual;
+ procedure DoVisit(obj: TPasConst); virtual;
+ procedure DoVisit(obj: TPasVariable); virtual;
+ procedure DoVisit(obj: TPasProcedure); virtual;
+ procedure DoVisit(obj: TPasDestructor); virtual;
+ procedure DoVisit(obj: TPasConstructor); virtual;
+ procedure DoVisit(obj: TPasFunction); virtual;
+ procedure DoVisit(obj: TPasClassType); virtual;
+ procedure DoVisit(obj: TPasElement); virtual;
+ procedure DoVisit(obj: TPasOverloadedProc); virtual;
+ procedure DoVisit(obj: TPasPointerType); virtual;
+ procedure DoVisit(obj: TPasArrayType); virtual;
+ procedure DoVisit(obj: TPasProcedureType); virtual;
+ procedure DoVisit(obj: TPasFunctionType); virtual;
+ procedure DoVisit(obj: TPasResString); virtual;
+ end;
+
+implementation
+
+function EscapeXml(const s: string): string;
+begin
+ Result := StringReplace(s, '&', '&amp;', [rfReplaceAll]);
+ Result := StringReplace(Result, '<', '&lt;', [rfReplaceAll]);
+ Result := StringReplace(Result, '>', '&gt;', [rfReplaceAll]);
+end;
+
+{ TDocumentation }
+
+procedure TDocumentation.Visit(obj: TPasElement);
+
+begin
+ If (Obj.ClassType=TPasSection) then
+ DoVisit(TPasSection(Obj))
+ else if (Obj.ClassType=TPasRecordType) then
+ DoVisit(TPasRecordType(Obj))
+ else if (Obj.ClassType=TPasEnumType) then
+ DoVisit(TPasEnumType(Obj))
+ else if (Obj.ClassType=TPasProperty) then
+ DoVisit(TPasProperty(Obj))
+ else if (Obj.ClassType=TPasConst) then
+ DoVisit(TPasConst(Obj))
+ else if (Obj.ClassType=TPasVariable) then
+ DoVisit(TPasVariable(Obj))
+ else if (Obj.ClassType=TPasProcedure) then
+ DoVisit(TPasProcedure(Obj))
+ else if (Obj.ClassType=TPasDestructor) then
+ DoVisit(TPasDestructor(Obj))
+ else if (Obj.ClassType=TPasConstructor) then
+ DoVisit(TPasConstructor(Obj))
+ else if (Obj.ClassType=TPasFunction) then
+ DoVisit(TPasFunction(Obj))
+ else if (Obj.ClassType=TPasClassType) then
+ DoVisit(TPasClassType(Obj))
+ else if (Obj.ClassType=TPasOverloadedProc) then
+ DoVisit(TPasOverloadedProc(Obj))
+ else if (Obj.ClassType=TPasPointerType) then
+ DoVisit(TPasPointerType(Obj))
+ else if (Obj.ClassType=TPasArrayType) then
+ DoVisit(TPasArrayType(Obj))
+ else if (Obj.ClassType=TPasProcedureType) then
+ DoVisit(TPasProcedureType(Obj))
+ else if (Obj.ClassType=TPasFunctionType) then
+ DoVisit(TPasFunctionType(Obj))
+ else if (Obj.ClassType=TPasResString) then
+ DoVisit(TPasResString(Obj));
+end;
+
+procedure TDocumentation.GenerateDoc(OutputName: string; Module: TPasModule);
+begin
+ lvl := 0;
+ Assign(f, OutputName);
+ Rewrite(f);
+ WriteLn(f, '<?xml version="1.0" encoding="utf-8"?>');
+ WriteLn(f, '<namespace name="', Module.Name, '">');
+
+ Module.InterfaceSection.Accept(Self);
+ //Module.Accept(Self);
+
+ WriteLn(f, '</namespace>');
+ Close(f);
+end;
+
+procedure TDocumentation.DocParameters(obj: TPasProcedureType);
+var
+ I: integer;
+begin
+ for I := 0 to obj.Args.Count - 1 do
+ begin
+ Write(f, ' ': lvl * 2, '<parameter name="' + TPasArgument(obj.Args[i]).Name + '"');
+
+ if TPasArgument(obj.Args[i]).ArgType <> nil then
+ Write(f, ' type="' + TPasArgument(obj.Args[i]).ArgType.Name + '"');
+
+ if TPasArgument(obj.Args[i]).Access <> argDefault then
+ if (TPasArgument(obj.Args[i]).ArgType is TPasClassType) then
+ Write(f, ' paramflags="' + 'var' + '"')
+ else
+ Write(f, ' paramflags="' +
+ Trim(AccessNames[TPasArgument(obj.Args[i]).Access]) + '"');
+
+ if TPasArgument(obj.Args[i]).Value <> '' then
+ begin
+ WriteLn(f, '>');
+ WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+ WriteLn(f, ' ': lvl * 2 + 4, EscapeXml(TPasArgument(obj.Args[i]).Value));
+ WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+ WriteLn(f, ' ': lvl * 2, '</parameter>');
+ end
+ else
+ WriteLn(f, ' />');
+
+ end;
+end;
+
+function TDocumentation.DocProcFlags(obj: TPasProcedure): string;
+
+ procedure DoAdd(B: boolean; S: string);
+ begin
+ if B then
+ begin
+ if Result <> '' then
+ Result := Result + ' ';
+ Result := Result + S;
+ end;
+ end;
+
+begin
+ Result := '';
+ DoAdd(obj.IsAbstract, 'abstract');
+ Doadd(obj.IsVirtual, 'virtual');
+ DoAdd(obj.IsDynamic, 'dynamic');
+ DoAdd(obj.IsOverride, 'override');
+ DoAdd(obj.IsOverload, 'overload');
+ DoAdd(obj.IsReintroduced, 'reintroduce');
+ DoAdd(obj.IsStatic, 'static');
+ DoAdd(obj.IsMessage, 'message');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasSection);
+var
+ i: integer;
+begin
+ Inc(lvl);
+ for i := 0 to obj.Declarations.Count - 1 do
+ TPasElement(obj.Declarations[i]).Accept(Self);
+ Dec(lvl);
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasRecordType);
+var
+ I: integer;
+begin
+ Write(f, StringOfChar(' ', lvl * 2) + '<struct');
+ if obj.Name <> '' then
+ Write(f, ' name="' + obj.Name + '"');
+ if obj.IsPacked then
+ Write(f, ' packed="true"');
+ WriteLn(f, '>');
+ Inc(lvl);
+ for I := 0 to obj.Members.Count - 1 do
+ TPasVariable(obj.Members[i]).Accept(Self);
+ Dec(lvl);
+ WriteLn(f, StringOfChar(' ', lvl * 2) + '</struct>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasEnumType);
+var
+ I: integer;
+begin
+ for I := 0 to obj.Values.Count - 1 do
+ begin
+ WriteLn(f, ' ': lvl * 2, '<const name="' + TPasEnumValue(obj.Values[i]).Name + '" type="' +
+ obj.Name + '">');
+ WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+ WriteLn(f, ' ': lvl * 2 + 4, TPasEnumValue(obj.Values[i]).Name);
+ WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+ WriteLn(f, ' ': lvl * 2, '</const>');
+ end;
+
+ WriteLn(f, ' ': lvl * 2, '<enum name="' + obj.Name + '">');
+ for I := 0 to obj.Values.Count - 1 do
+ WriteLn(f, ' ': lvl * 2 + 2, '<element name="' + TPasEnumValue(obj.Values[i]).Name + '" />');
+ WriteLn(f, ' ': lvl * 2, '</enum>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasProperty);
+begin
+ if (obj.VarType <> nil) and (obj.VarType is TPasProcedureType) and
+ (TPasProcedureType(obj.VarType).IsOfObject) then
+ Write(f, ' ': lvl * 2, '<event name="' + obj.Name + '" visibility="' +
+ VisibilityNames[obj.Visibility] + '"')
+ else
+ Write(f, ' ': lvl * 2, '<property name="' + obj.Name + '" visibility="' +
+ VisibilityNames[obj.Visibility] + '"');
+ if obj.ReadAccessorName <> '' then
+ Write(f, ' read="' + obj.ReadAccessorName + '"');
+ if obj.WriteAccessorName <> '' then
+ Write(f, ' write="' + obj.WriteAccessorName + '"');
+ if obj.VarType <> nil then
+ Write(f, ' type="' + obj.VarType.Name + '"');
+ if obj.DefaultValue <> '' then
+ Write(f, ' default="' + obj.DefaultValue + '"');
+ WriteLn(f, ' />');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasConst);
+begin
+ Write(f, ' ': lvl * 2, '<const name="' + obj.Name + '"');
+ if (obj.VarType <> nil) and (obj.VarType.Name <> '') then
+ Write(f, ' type="' + obj.VarType.Name + '"');
+ WriteLn(f, '>');
+ WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+ WriteLn(f, ' ': lvl * 2 + 4, EscapeXml(obj.Value));
+ WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+ WriteLn(f, ' ': lvl * 2, '</const>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasVariable);
+begin
+ Write(f, ' ': lvl * 2, '<field name="' + obj.Name + '"');
+ if (obj.VarType <> nil) and (obj.VarType.Name <> '') then
+ Write(f, ' type="' + obj.VarType.Name {.GetDeclaration(True)} + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+
+ if (obj.VarType <> nil) and (obj.VarType.Name = '')
+ {(VarType.ElementTypeName <> SPasTreeType) and (VarType.ElementTypeName <> SPasTreeUnresolvedTypeRef)}
+ then
+ begin
+ WriteLn(f, '>');
+ Inc(lvl);
+ obj.VarType.Accept(Self);
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</field>');
+ end
+ else
+ WriteLn(f, ' />');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasProcedure);
+var
+ t: string;
+begin
+ Write(f, ' ': lvl * 2, '<procedure name="' + obj.Name + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+ t := DocProcFlags(obj);
+ if t <> '' then
+ Write(f, ' procflags="' + t + '"');
+ WriteLn(f, '>');
+ Inc(lvl);
+
+ if obj.ProcType.Args.Count > 0 then
+ begin
+ WriteLn(f, ' ': lvl * 2, '<parameters>');
+ Inc(lvl);
+ DocParameters(obj.ProcType);
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</parameters>');
+ end;
+
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</procedure>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasDestructor);
+begin
+ Write(f, ' ': lvl * 2, '<destructor name="' + obj.Name + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+ WriteLn(f, '>');
+ Inc(lvl);
+ WriteLn(f, ' ': lvl * 2, '<parameters>');
+ Inc(lvl);
+ DocParameters(obj.ProcType);
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</parameters>');
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</destructor>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasConstructor);
+begin
+ Write(f, ' ': lvl * 2, '<constructor name="' + obj.Name + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+ WriteLn(f, '>');
+ Inc(lvl);
+ WriteLn(f, ' ': lvl * 2, '<parameters>');
+ Inc(lvl);
+ DocParameters(obj.ProcType);
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</parameters>');
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</constructor>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasFunction);
+var
+ t: string;
+begin
+ Write(f, ' ': lvl * 2, '<function name="' + obj.Name + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+ t := DocProcFlags(obj);
+ if t <> '' then
+ Write(f, ' procflags="' + t + '"');
+ WriteLn(f, '>');
+ Inc(lvl);
+ WriteLn(f, ' ': lvl * 2, '<parameters>');
+ Inc(lvl);
+ DocParameters(obj.ProcType);
+ WriteLn(f, ' ': lvl * 2, '<retval type="' +
+ TPasFunctionType(obj.ProcType).ResultEl.ResultType.Name + '" />');
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</parameters>');
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</function>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasClassType);
+var
+ i: integer;
+begin
+ case obj.ObjKind of
+ okObject: WriteLn(f, ' ': lvl * 2, '<object name="' + obj.Name + '">');
+ okClass: WriteLn(f, ' ': lvl * 2, '<class name="' + obj.Name + '">');
+ okInterface: WriteLn(f, ' ': lvl * 2, '<interface name="' + obj.Name + '">');
+ end;
+
+ Inc(lvl);
+
+ if obj.AncestorType <> nil then
+ WriteLn(f, ' ': lvl * 2, '<ancestor name="' + obj.AncestorType.GetDeclaration(True) +
+ '" namespace="StdCtrls2">')
+ else
+ WriteLn(f, ' ': lvl * 2, '<ancestor name="TObject" namespace="System">');
+ WriteLn(f, ' ': lvl * 2, '</ancestor>');
+
+ if obj.Members.Count > 0 then
+ begin
+ WriteLn(f, ' ': lvl * 2, '<members>');
+ Inc(lvl);
+ for i := 0 to obj.Members.Count - 1 do
+ TPasProperty(obj.Members[i]).Accept(Self);
+ Dec(lvl);
+ WriteLn(f, ' ': lvl * 2, '</members>');
+ end;
+
+ Dec(lvl);
+
+ case obj.ObjKind of
+ okObject: WriteLn(f, ' ': lvl * 2, '</object>');
+ okClass: WriteLn(f, ' ': lvl * 2, '</class>');
+ okInterface: WriteLn(f, ' ': lvl * 2, '</interface>');
+ end;
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasElement);
+begin
+ WriteLn('Warning: NOT supported: ' + obj.ClassName + ' (' + obj.Name + ')');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasOverloadedProc);
+var
+ i: integer;
+begin
+ for i := 0 to obj.Overloads.Count - 1 do
+ TPasProcedure(obj.Overloads[i]).Accept(Self);
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasPointerType);
+begin
+ Write(f, ' ': lvl * 2, '<pointer name="' + obj.Name + '"');
+ if obj.DestType <> nil then
+ Write(f, ' type="' + obj.DestType.Name + '"');
+ WriteLn(f, ' indircnt="1" />');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasArrayType);
+begin
+ Write(f, ' ': lvl * 2, '<array name="' + obj.Name + '"');
+ if obj.IndexRange <> '' then
+ begin
+ if Pos('..', obj.IndexRange) <> 0 then
+ begin
+ Write(f, ' low="' + Copy(obj.IndexRange, 1, Pos('..', obj.IndexRange) - 1) + '"');
+ Write(f, ' high="' + Copy(obj.IndexRange, Pos('..', obj.IndexRange) + 2,
+ MaxInt) + '"');
+ end
+ else
+ Write(f, ' high="' + obj.IndexRange + '"');
+ end;
+ WriteLn(f, '>');
+
+ WriteLn(f, ' <element type="' + obj.ElType.Name + '" />');
+ WriteLn(f, ' </array>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasProcedureType);
+begin
+ Write(f, ' ': lvl * 2, '<procedureDef name="' + obj.Name + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+ WriteLn(f, '>');
+
+ if obj.Args.Count > 0 then
+ begin
+ WriteLn(f, ' ': lvl * 2 + 2, '<parameters>');
+ DocParameters(obj);
+ WriteLn(f, ' ': lvl * 2 + 2, '</parameters>');
+ end;
+
+ WriteLn(f, ' ': lvl * 2, '</procedureDef>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasFunctionType);
+begin
+ Write(f, ' ': lvl * 2, '<functionDef name="' + obj.Name + '"');
+ if obj.Visibility <> visDefault then
+ Write(f, ' visibility="' + VisibilityNames[obj.Visibility] + '"');
+ WriteLn(f, '>');
+ WriteLn(f, ' ': lvl * 2 + 2, '<parameters>');
+ DocParameters(obj);
+ WriteLn(f, ' ': lvl * 2 + 4, '<retval type="' + obj.ResultEl.ResultType.Name + '" />');
+ WriteLn(f, ' ': lvl * 2 + 2, '</parameters>');
+ WriteLn(f, ' ': lvl * 2, '</functionDef>');
+end;
+
+procedure TDocumentation.DoVisit(obj: TPasResString);
+begin
+ WriteLn(f, ' ': lvl * 2, '<resourceString name="' + obj.Name + '">');
+ WriteLn(f, ' ': lvl * 2 + 2, '<value>');
+ WriteLn(f, ' ': lvl * 2 + 4, EscapeXml(obj.Value));
+ WriteLn(f, ' ': lvl * 2 + 2, '</value>');
+ WriteLn(f, ' ': lvl * 2, '</resourceString>');
+end;
+
+{ TXMLWriter }
+
+procedure TDXMLWriter.WriteDoc;
+var
+ i: integer;
+begin
+ if Engine.Output <> '' then
+ Engine.Output := IncludeTrailingBackSlash(Engine.Output);
+
+ for i := 0 to Package.Modules.Count - 1 do
+ begin
+ with TDocumentation.Create do
+ begin
+ GenerateDoc(Engine.Output + TPasModule(Package.Modules[i]).Name +
+ '.xml', TPasModule(Package.Modules[i]));
+ Free;
+ end;
+ end;
+end;
+
+initialization
+ // Do not localize.
+ RegisterWriter(TDXMLWriter, 'dxml', 'fpdoc Delphi XML output.');
+
+finalization
+ UnRegisterWriter('dxml');
+end.
+
diff --git a/utils/fpdoc/dw_html.pp b/utils/fpdoc/dw_html.pp
index ca931faeb6..1d652ae1b2 100644
--- a/utils/fpdoc/dw_html.pp
+++ b/utils/fpdoc/dw_html.pp
@@ -113,7 +113,7 @@ type
Procedure CreateAllocator; virtual;
function ResolveLinkID(const Name: String): DOMString;
- function ResolveLinkIDInUnit(const Name,UnitName: String): DOMString;
+ function ResolveLinkIDInUnit(const Name,AUnitName: String): DOMString;
function ResolveLinkWithinPackage(AElement: TPasElement;
ASubpageIndex: Integer): String;
@@ -794,12 +794,12 @@ end;
- AppendHyperlink (for unresolved parse tree element links)
}
-function THTMLWriter.ResolveLinkIDInUnit(const Name,UnitName: String): DOMString;
+function THTMLWriter.ResolveLinkIDInUnit(const Name,AUnitName: String): DOMString;
begin
Result:=ResolveLinkID(Name);
- If (Result='') and (UnitName<>'') then
- Result:=ResolveLinkID(UnitName+'.'+Name);
+ If (Result='') and (AUnitName<>'') then
+ Result:=ResolveLinkID(AUnitName+'.'+Name);
end;
function THTMLWriter.ResolveLinkID(const Name: String): DOMString;
diff --git a/utils/fpdoc/dw_htmlchm.inc b/utils/fpdoc/dw_htmlchm.inc
index dd8b7a8133..dc74d9d76b 100644
--- a/utils/fpdoc/dw_htmlchm.inc
+++ b/utils/fpdoc/dw_htmlchm.inc
@@ -15,6 +15,8 @@ type
FDefaultPage: String;
FCSSFile: String;
FMakeSearchable,
+ FNoBinToc,
+ FNoBinIndex,
FAutoTOC,
FAutoIndex: Boolean;
FOtherFiles: String;
@@ -47,6 +49,11 @@ begin
if FCSSFile <> '' then
begin
+ if not FileExists(FCSSFile) Then
+ begin
+ Writeln(stderr,'Can''t find CSS file "',FCSSFILE,'"');
+ halt(1);
+ end;
TempStream := TMemoryStream.Create;
TempStream.LoadFromFile(FCSSFile);
TempStream.Position := 0;
@@ -233,7 +240,8 @@ begin
end;
end;
- fchm.AppendBinaryTOCFromSiteMap(Toc);
+ if not fnobintoc then
+ fchm.AppendBinaryTOCFromSiteMap(Toc);
TOC.SaveToStream(Stream);
TOC.Free;
@@ -408,6 +416,8 @@ begin
// save
Index.SaveToStream(Stream);
+ if not fnobinindex then
+ fchm.AppendBinaryindexFromSitemap(index,false);
Index.Free;
Stream.Position :=0 ;
FChm.AppendIndex(Stream);
@@ -445,8 +455,8 @@ begin
FChm.TempRawStream := FTempUncompressed;
FChm.OnGetFileData := @RetrieveOtherFiles;
FChm.OnLastFile := @LastFileAdded;
- fchm.hasbinarytoc:=true;
-
+ fchm.hasbinarytoc:=not fnobintoc;;
+ fchm.hasbinaryindex:=not fnobinindex;
ProcessOptions;
FileStream := TMemoryStream.Create;
@@ -483,6 +493,8 @@ end;
function TCHMHTMLWriter.InterPretOption(const Cmd, Arg: String): boolean;
begin
Result:=True;
+ FNoBinToc:=False;
+ FnoBinIndex:=False;
if Cmd = '--toc-file' then
FTOCName := arg
else if Cmd = '--index-file' then
@@ -497,6 +509,10 @@ begin
FAutoIndex := True
else if Cmd = '--auto-toc' then
FAutoTOC := True
+ else if Cmd = '--no-bintoc' then
+ FNoBinToc := True
+ else if Cmd = '--no-binindex' then
+ FNoBinIndex := True
else if Cmd = '--make-searchable' then
FMakeSearchable := True
else
diff --git a/utils/fpdoc/dw_xml.pp b/utils/fpdoc/dw_xml.pp
index 27d46fcb88..64122f956f 100644
--- a/utils/fpdoc/dw_xml.pp
+++ b/utils/fpdoc/dw_xml.pp
@@ -21,7 +21,7 @@ unit dw_XML;
interface
-uses DOM, PasTree, dwriter;
+uses DOM, PasTree, dwriter, xmlWrite, SysUtils;
Type
@@ -104,8 +104,19 @@ end;
{ TXMLWriter }
procedure TXMLWriter.WriteDoc;
+var
+ doc: TXMLDocument;
+ i: Integer;
begin
+ if Engine.Output <> '' then
+ Engine.Output := IncludeTrailingBackSlash(Engine.Output);
+ for i := 0 to Package.Modules.Count - 1 do
+ begin
+ doc := ModuleToXMLStruct(TPasModule(Package.Modules[i]));
+ WriteXMLFile(doc, Engine.Output + TPasModule(Package.Modules[i]).Name + '.xml' );
+ doc.Free;
+ end;
end;
initialization
diff --git a/utils/fpdoc/dwlinear.pp b/utils/fpdoc/dwlinear.pp
index 89090fd5f3..8e713e52d7 100644
--- a/utils/fpdoc/dwlinear.pp
+++ b/utils/fpdoc/dwlinear.pp
@@ -30,10 +30,10 @@ Type
procedure SortElementList(List : TList);
procedure StartListing(Frames: Boolean);
Function ShowMember(M : TPasElement) : boolean;
- procedure StartChapter(ChapterName : String; ChapterLabel : String);
- procedure StartSection(SectionName : String; SectionLabel : String);
- procedure StartSubSection(SubSectionName : String; SubSectionLabel : String);
- procedure StartSubSubSection(SubSubSectionName : String; SubSubSectionLabel : String);
+ procedure StartChapter(ChapterName : String; ChapterLabel : String); virtual;
+ procedure StartSection(SectionName : String; SectionLabel : String); virtual;
+ procedure StartSubSection(SubSectionName : String; SubSectionLabel : String); virtual;
+ procedure StartSubSubSection(SubSubSectionName : String; SubSubSectionLabel : String); virtual;
Function GetDescrString(AContext: TPasElement; DescrNode: TDOMElement) : String;
function ConstValue(ConstDecl: TPasConst): String; virtual;
procedure ProcessSection(ASection: TPasSection); virtual;
@@ -442,7 +442,6 @@ procedure TLinearWriter.WriteDoc;
var
i : Integer;
- DocNode : TDocNode;
L : TstringList;
begin
@@ -467,9 +466,7 @@ begin
WriteCommentLine;
StartChapter(Format(SDocUnitTitle, [Module.Name]));
WriteLabel(Module);
- DocNode:=Engine.FindDocNode(Module);
- If Assigned(DocNode) then
- ProcessTopics(DocNode,1);
+ // extra Topics now get processed in ProcessSection()
ProcessSection(Module.InterfaceSection);
end;
Finally
@@ -482,7 +479,8 @@ begin
end;
procedure TLinearWriter.ProcessSection(ASection: TPasSection);
-
+var
+ DocNode: TDocNode;
begin
With ASection do
begin
@@ -496,6 +494,12 @@ begin
SortElementList(Variables);
end;
WriteUnitOverView(ASection);
+
+ // Now process unit (extra) Topics
+ DocNode:=Engine.FindDocNode(Module);
+ If Assigned(DocNode) then
+ ProcessTopics(DocNode,1);
+
WriteVarsConstsTypes(ASection);
WriteFunctionsAndProcedures(ASection);
WriteClasses(ASection);
diff --git a/utils/fpdoc/fpdoc.pp b/utils/fpdoc/fpdoc.pp
index dca2112a1f..89b00c8d7b 100644
--- a/utils/fpdoc/fpdoc.pp
+++ b/utils/fpdoc/fpdoc.pp
@@ -22,6 +22,7 @@ uses
dwlinear, // Linear (abstract) writer
dw_LaTeX, // TLaTex writer
dw_XML, // XML writer
+ dw_dxml, // Delphi XML doc.
dw_HTML, // HTML writer
dw_ipf, // IPF writer
dw_man, // Man page writer
diff --git a/utils/fppkg/buildfppkg.pp b/utils/fppkg/buildfppkg.pp
index 41fae2a0e9..99d9efcfc8 100644
--- a/utils/fppkg/buildfppkg.pp
+++ b/utils/fppkg/buildfppkg.pp
@@ -2,8 +2,15 @@ unit buildfppkg;
interface
+ {
+ these units cause compilation errors on targets eg go32v2 for which fppkg
+ not implemented properly, so remove them by ifdef. jl Aug 2009
+ }
+
+{$ifndef go32v2}
uses
fprepos,fpxmlrep,pkgoptions,pkgglobals,pkgmessages,pkghandler,pkgmkconv,pkgdownload,pkgfpmake,pkgcommands,pkgrepos,pkgwget,pkglnet;
+{$endif}
implementation
diff --git a/utils/h2pas/h2pas.pas b/utils/h2pas/h2pas.pas
index cfaf854e74..f05490d39b 100644
--- a/utils/h2pas/h2pas.pas
+++ b/utils/h2pas/h2pas.pas
@@ -319,7 +319,7 @@ program h2pas;
flag_index:=0;
writeln(outfile);
writeln(outfile,aktspace,'const');
- shift(3);
+ shift(2);
while not eof(tempfile) do
begin
readln(tempfile,line);
@@ -362,7 +362,7 @@ program h2pas;
write_p_a_def(implemfile,hp3^.p1^.p1,hp2^.p1);
writeln(implemfile,';');
writeln(implemfile,aktspace,'begin');
- shift(3);
+ shift(2);
write(implemfile,aktspace,name,':=(a.flag',flag_index);
writeln(implemfile,' and bm_',ph,'_',name,') shr bp_',ph,'_',name,';');
popshift;
@@ -385,7 +385,7 @@ program h2pas;
write_p_a_def(implemfile,hp3^.p1^.p1,hp2^.p1);
writeln(implemfile,');');
writeln(implemfile,aktspace,'begin');
- shift(3);
+ shift(2);
write(implemfile,aktspace,'a.flag',flag_index,':=');
write(implemfile,'a.flag',flag_index,' or ');
writeln(implemfile,'((__',name,' shl bp_',ph,'_',name,') and bm_',ph,'_',name,');');
@@ -563,8 +563,6 @@ program h2pas;
end;
t_funcname :
begin
- if not compactmode then
- shift(2);
if if_nb>0 then
begin
writeln(outfile,aktspace,'var');
@@ -581,7 +579,7 @@ program h2pas;
if_nb:=0;
end;
writeln(outfile,aktspace,'begin');
- shift(3);
+ shift(2);
write(outfile,aktspace);
write_all_ifexpr(outfile,p^.p2);
write_expr(outfile,p^.p1);
@@ -1059,7 +1057,7 @@ program h2pas;
writeln(outfile,'packed record')
else
writeln(outfile,'record');
- shift(3);
+ shift(2);
hp1:=p^.p1;
(* walk through all members *)
@@ -1192,7 +1190,7 @@ program h2pas;
writeln(outfile,'record');
shift(2);
writeln(outfile,aktspace,'case longint of');
- shift(3);
+ shift(2);
l:=0;
hp1:=p^.p1;
@@ -1623,7 +1621,7 @@ begin
end;
block_type:=bt_var;
- shift(3);
+ shift(2);
IsExtern:=assigned(yyv[yysp-4])and(yyv[yysp-4]^.str='extern');
(* walk through all declarations *)
@@ -1807,7 +1805,7 @@ begin
end;
block_type:=bt_var;
- shift(3);
+ shift(2);
IsExtern:=assigned(yyv[yysp-5])and(yyv[yysp-5]^.str='extern');
(* walk through all declarations *)
@@ -1849,7 +1847,7 @@ begin
writeln(outfile,aktspace,'type');
block_type:=bt_type;
end;
- shift(3);
+ shift(2);
if ( yyv[yysp-1]^.p2 <> nil ) then
begin
(* write new type name *)
@@ -1905,7 +1903,7 @@ begin
TN:=TypeName(yyv[yysp-1]^.p);
if Uppercase(tn)<>Uppercase(pn) then
begin
- shift(3);
+ shift(2);
writeln(outfile,aktspace,PN,' = ',TN,';');
popshift;
end;
@@ -1926,7 +1924,7 @@ begin
block_type:=bt_type;
end;
no_pop:=assigned(yyv[yysp-7]) and (yyv[yysp-7]^.str='no_pop');
- shift(3);
+ shift(2);
(* walk through all declarations *)
hp:=yyv[yysp-6];
if assigned(hp) then
@@ -1970,9 +1968,11 @@ begin
writeln(outfile);
writeln(outfile,aktspace,'type');
block_type:=bt_type;
- end;
+ end
+ else
+ writeln(outfile);
no_pop:=assigned(yyv[yysp-2]) and (yyv[yysp-2]^.str='no_pop');
- shift(3);
+ shift(2);
(* Get the name to write the type definition for, try
to use the tag name first *)
if assigned(yyv[yysp-3]^.p2) then
@@ -1987,7 +1987,6 @@ begin
end;
(* write type definition *)
is_procvar:=false;
- writeln(outfile);
TN:=TypeName(ph^.p);
PN:=PointerName(ph^.p);
if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
@@ -1996,7 +1995,7 @@ begin
(* write new type name *)
write(outfile,aktspace,TN,' = ');
shift(2);
- write_type_specifier(outfile,yyv[yysp-3]);
+ write_p_a_def(outfile,yyv[yysp-1]^.p1^.p1,yyv[yysp-3]);
popshift;
(* if no_pop it is normal fpc calling convention *)
if is_procvar and
@@ -2047,10 +2046,11 @@ begin
writeln(outfile);
writeln(outfile,aktspace,'type');
block_type:=bt_type;
- end;
- shift(3);
- (* write as pointer *)
+ end
+ else
writeln(outfile);
+ shift(2);
+ (* write as pointer *)
writeln(outfile,'(* generic typedef *)');
writeln(outfile,aktspace,yyv[yysp-1]^.p,' = pointer;');
flush(outfile);
@@ -2088,6 +2088,9 @@ begin
writeln(implemfile,aktspace,'{ return type might be wrong } ');
end;
end;
+ if block_type<>bt_func then
+ writeln(outfile);
+
block_type:=bt_func;
write(outfile,aktspace,'function ',yyv[yysp-5]^.p);
write(implemfile,aktspace,'function ',yyv[yysp-5]^.p);
@@ -2156,11 +2159,12 @@ begin
begin
if block_type<>bt_const then
begin
+ if block_type<>bt_func then
writeln(outfile);
writeln(outfile,aktspace,'const');
end;
block_type:=bt_const;
- shift(3);
+ shift(2);
write(outfile,aktspace,yyv[yysp-3]^.p);
write(outfile,' = ');
flush(outfile);
@@ -2174,6 +2178,8 @@ begin
end
else
begin
+ if block_type<>bt_func then
+ writeln(outfile);
if not stripinfo then
begin
writeln (outfile,aktspace,'{ was #define dname def_expr }');
@@ -2185,11 +2191,9 @@ begin
shift(2);
if not assigned(yyv[yysp-1]^.p3) then
begin
- writeln(outfile,' : longint;');
- writeln(outfile,aktspace,' { return type might be wrong }');
+ writeln(outfile,' : longint; { return type might be wrong }');
flush(outfile);
- writeln(implemfile,' : longint;');
- writeln(implemfile,aktspace,' { return type might be wrong }');
+ writeln(implemfile,' : longint; { return type might be wrong }');
end
else
begin
@@ -2960,34 +2964,39 @@ begin
end;
150 : begin
- yyval:=new(presobject,init_preop('@',yyv[yysp-0]));
+ yyval:=new(presobject,init_preop('+',yyv[yysp-0]));
end;
151 : begin
- yyval:=new(presobject,init_preop(' not ',yyv[yysp-0]));
+ yyval:=new(presobject,init_preop('@',yyv[yysp-0]));
end;
152 : begin
+ yyval:=new(presobject,init_preop(' not ',yyv[yysp-0]));
+
+ end;
+ 153 : begin
+
if assigned(yyv[yysp-0]) then
yyval:=new(presobject,init_two(t_typespec,yyv[yysp-2],yyv[yysp-0]))
else
yyval:=yyv[yysp-2];
end;
- 153 : begin
+ 154 : begin
yyval:=new(presobject,init_two(t_typespec,yyv[yysp-2],yyv[yysp-0]));
end;
- 154 : begin
+ 155 : begin
hp:=new(presobject,init_one(t_pointerdef,yyv[yysp-3]));
yyval:=new(presobject,init_two(t_typespec,hp,yyv[yysp-0]));
end;
- 155 : begin
+ 156 : begin
if not stripinfo then
writeln(outfile,aktspace,'(* ',yyv[yysp-3]^.p,' ignored *)');
@@ -2998,56 +3007,56 @@ begin
yyval:=new(presobject,init_two(t_typespec,hp,yyv[yysp-0]));
end;
- 156 : begin
+ 157 : begin
hp:=new(presobject,init_one(t_exprlist,yyv[yysp-3]));
yyval:=new(presobject,init_three(t_funexprlist,hp,yyv[yysp-1],nil));
end;
- 157 : begin
+ 158 : begin
yyval:=yyv[yysp-1];
end;
- 158 : begin
+ 159 : begin
yyval:=new(presobject,init_two(t_callop,yyv[yysp-5],yyv[yysp-1]));
end;
- 159 : begin
+ 160 : begin
yyval:=new(presobject,init_two(t_arrayop,yyv[yysp-3],yyv[yysp-1]));
end;
- 160 : begin
+ 161 : begin
(*enum_element COMMA enum_list *)
yyval:=yyv[yysp-2];
yyval^.next:=yyv[yysp-0];
end;
- 161 : begin
+ 162 : begin
yyval:=yyv[yysp-0];
end;
- 162 : begin
+ 163 : begin
(* empty enum list *)
yyval:=nil;
end;
- 163 : begin
+ 164 : begin
begin (*enum_element: dname _ASSIGN expr *)
yyval:=new(presobject,init_two(t_enumlist,yyv[yysp-2],yyv[yysp-0]));
end;
end;
- 164 : begin
+ 165 : begin
begin (*enum_element: dname*)
yyval:=new(presobject,init_two(t_enumlist,yyv[yysp-0],nil));
end;
end;
- 165 : begin
+ 166 : begin
if yyv[yysp-0]^.typ=t_funexprlist then
yyval:=yyv[yysp-0]
@@ -3059,32 +3068,32 @@ begin
yyval^.p3:=yyv[yysp-0]^.p1^.get_copy;
end;
- 166 : begin
+ 167 : begin
yyval:=yyv[yysp-0];
end;
- 167 : begin
+ 168 : begin
yyval:=yyv[yysp-1]
end;
- 168 : begin
+ 169 : begin
(*exprlist COMMA expr*)
yyval:=yyv[yysp-2];
yyv[yysp-2]^.next:=yyv[yysp-0];
end;
- 169 : begin
+ 170 : begin
yyval:=yyv[yysp-0];
end;
- 170 : begin
+ 171 : begin
(* empty expression list *)
yyval:=nil;
end;
- 171 : begin
+ 172 : begin
yyval:=new(presobject,init_one(t_exprlist,yyv[yysp-0]));
@@ -3103,10 +3112,10 @@ type YYARec = record
const
-yynacts = 2960;
-yyngotos = 421;
-yynstates = 311;
-yynrules = 171;
+yynacts = 3055;
+yyngotos = 424;
+yynstates = 313;
+yynrules = 172;
yya : array [1..yynacts] of YYARec = (
{ 0: }
@@ -3623,7 +3632,7 @@ yya : array [1..yynacts] of YYARec = (
{ 60: }
{ 61: }
( sym: 277; act: 23 ),
- ( sym: 273; act: -162 ),
+ ( sym: 273; act: -163 ),
{ 62: }
{ 63: }
{ 64: }
@@ -3723,7 +3732,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -50 ),
{ 74: }
( sym: 277; act: 23 ),
- ( sym: 269; act: -162 ),
+ ( sym: 269; act: -163 ),
{ 75: }
{ 76: }
( sym: 268; act: 111 ),
@@ -3739,15 +3748,16 @@ yya : array [1..yynacts] of YYARec = (
( sym: 286; act: 30 ),
( sym: 291; act: 114 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
{ 77: }
- ( sym: 302; act: 118 ),
+ ( sym: 302; act: 119 ),
( sym: 256; act: -46 ),
( sym: 266; act: -46 ),
( sym: 267; act: -46 ),
@@ -3769,7 +3779,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 314; act: -46 ),
( sym: 319; act: -46 ),
{ 78: }
- ( sym: 302; act: 119 ),
+ ( sym: 302; act: 120 ),
( sym: 256; act: -48 ),
( sym: 266; act: -48 ),
( sym: 267; act: -48 ),
@@ -3792,21 +3802,21 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -48 ),
{ 79: }
{ 80: }
- ( sym: 319; act: 120 ),
+ ( sym: 319; act: 121 ),
{ 81: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 123 ),
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 124 ),
( sym: 266; act: -87 ),
( sym: 267; act: -87 ),
( sym: 272; act: -87 ),
( sym: 301; act: -87 ),
{ 82: }
- ( sym: 267; act: 126 ),
- ( sym: 272; act: 127 ),
- ( sym: 301; act: 128 ),
+ ( sym: 267; act: 127 ),
+ ( sym: 272; act: 128 ),
+ ( sym: 301; act: 129 ),
( sym: 266; act: -20 ),
{ 83: }
- ( sym: 265; act: 130 ),
+ ( sym: 265; act: 131 ),
( sym: 266; act: -104 ),
( sym: 267; act: -104 ),
( sym: 268; act: -104 ),
@@ -3856,7 +3866,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: 91 ),
{ 92: }
{ 93: }
- ( sym: 273; act: 136 ),
+ ( sym: 273; act: 137 ),
{ 94: }
( sym: 274; act: 20 ),
( sym: 275; act: 21 ),
@@ -3877,7 +3887,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 331; act: 36 ),
( sym: 273; act: -62 ),
{ 95: }
- ( sym: 273; act: 138 ),
+ ( sym: 273; act: 139 ),
{ 96: }
( sym: 256; act: 84 ),
( sym: 268; act: 85 ),
@@ -3890,22 +3900,22 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: 91 ),
{ 97: }
{ 98: }
- ( sym: 273; act: 140 ),
+ ( sym: 273; act: 141 ),
{ 99: }
- ( sym: 267; act: 141 ),
- ( sym: 269; act: -161 ),
- ( sym: 273; act: -161 ),
+ ( sym: 267; act: 142 ),
+ ( sym: 269; act: -162 ),
+ ( sym: 273; act: -162 ),
{ 100: }
- ( sym: 273; act: 142 ),
+ ( sym: 273; act: 143 ),
{ 101: }
- ( sym: 304; act: 143 ),
- ( sym: 267; act: -164 ),
- ( sym: 269; act: -164 ),
- ( sym: 273; act: -164 ),
+ ( sym: 304; act: 144 ),
+ ( sym: 267; act: -165 ),
+ ( sym: 269; act: -165 ),
+ ( sym: 273; act: -165 ),
{ 102: }
{ 103: }
- ( sym: 266; act: 144 ),
- ( sym: 267; act: 126 ),
+ ( sym: 266; act: 145 ),
+ ( sym: 267; act: 127 ),
{ 104: }
( sym: 268; act: 85 ),
( sym: 277; act: 23 ),
@@ -3916,20 +3926,20 @@ yya : array [1..yynacts] of YYARec = (
( sym: 314; act: 90 ),
( sym: 319; act: 91 ),
{ 105: }
- ( sym: 266; act: 146 ),
+ ( sym: 266; act: 147 ),
{ 106: }
- ( sym: 269; act: 147 ),
+ ( sym: 269; act: 148 ),
{ 107: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
- ( sym: 269; act: -165 ),
- ( sym: 291; act: -165 ),
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+ ( sym: 269; act: -166 ),
+ ( sym: 291; act: -166 ),
{ 108: }
{ 109: }
- ( sym: 291; act: 150 ),
+ ( sym: 291; act: 151 ),
{ 110: }
- ( sym: 268; act: 151 ),
- ( sym: 270; act: 152 ),
+ ( sym: 268; act: 152 ),
+ ( sym: 270; act: 153 ),
( sym: 265; act: -143 ),
( sym: 266; act: -143 ),
( sym: 267; act: -143 ),
@@ -3975,9 +3985,10 @@ yya : array [1..yynacts] of YYARec = (
( sym: 286; act: 30 ),
( sym: 287; act: 31 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 319; act: 159 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 319; act: 160 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
@@ -3999,8 +4010,9 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
@@ -4019,8 +4031,9 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
@@ -4039,16 +4052,38 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
{ 118: }
+ ( sym: 268; act: 111 ),
+ ( sym: 277; act: 23 ),
+ ( sym: 278; act: 112 ),
+ ( sym: 279; act: 113 ),
+ ( sym: 280; act: 24 ),
+ ( sym: 281; act: 25 ),
+ ( sym: 282; act: 26 ),
+ ( sym: 283; act: 27 ),
+ ( sym: 284; act: 28 ),
+ ( sym: 285; act: 29 ),
+ ( sym: 286; act: 30 ),
+ ( sym: 314; act: 115 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
+ ( sym: 327; act: 32 ),
+ ( sym: 328; act: 33 ),
+ ( sym: 329; act: 34 ),
+ ( sym: 330; act: 35 ),
+ ( sym: 331; act: 36 ),
{ 119: }
{ 120: }
+{ 121: }
( sym: 268; act: 85 ),
( sym: 277; act: 23 ),
( sym: 287; act: 86 ),
@@ -4057,9 +4092,9 @@ yya : array [1..yynacts] of YYARec = (
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
( sym: 319; act: 91 ),
-{ 121: }
{ 122: }
- ( sym: 269; act: 167 ),
+{ 123: }
+ ( sym: 269; act: 169 ),
( sym: 274; act: 20 ),
( sym: 275; act: 21 ),
( sym: 276; act: 22 ),
@@ -4070,17 +4105,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 283; act: 27 ),
( sym: 284; act: 28 ),
( sym: 285; act: 29 ),
- ( sym: 286; act: 168 ),
+ ( sym: 286; act: 170 ),
( sym: 287; act: 31 ),
- ( sym: 303; act: 169 ),
+ ( sym: 303; act: 171 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 123: }
+{ 124: }
( sym: 268; act: 111 ),
- ( sym: 271; act: 172 ),
+ ( sym: 271; act: 174 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
( sym: 279; act: 113 ),
@@ -4092,17 +4127,18 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 124: }
{ 125: }
- ( sym: 266; act: 173 ),
{ 126: }
+ ( sym: 266; act: 175 ),
+{ 127: }
( sym: 268; act: 85 ),
( sym: 277; act: 23 ),
( sym: 287; act: 86 ),
@@ -4111,9 +4147,9 @@ yya : array [1..yynacts] of YYARec = (
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
( sym: 319; act: 91 ),
-{ 127: }
- ( sym: 257; act: 178 ),
- ( sym: 266; act: 179 ),
+{ 128: }
+ ( sym: 257; act: 180 ),
+ ( sym: 266; act: 181 ),
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4126,17 +4162,18 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
( sym: 273; act: -26 ),
-{ 128: }
- ( sym: 268; act: 180 ),
{ 129: }
+ ( sym: 268; act: 182 ),
+{ 130: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4149,14 +4186,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 130: }
+{ 131: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4169,59 +4207,60 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 131: }
- ( sym: 267; act: 183 ),
+{ 132: }
+ ( sym: 267; act: 185 ),
( sym: 266; act: -86 ),
( sym: 272; act: -86 ),
( sym: 301; act: -86 ),
-{ 132: }
- ( sym: 268; act: 122 ),
- ( sym: 269; act: 184 ),
- ( sym: 270; act: 123 ),
{ 133: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 123 ),
+ ( sym: 268; act: 123 ),
+ ( sym: 269; act: 186 ),
+ ( sym: 270; act: 124 ),
+{ 134: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 124 ),
( sym: 266; act: -98 ),
( sym: 267; act: -98 ),
( sym: 269; act: -98 ),
( sym: 272; act: -98 ),
( sym: 301; act: -98 ),
-{ 134: }
- ( sym: 270; act: 123 ),
+{ 135: }
+ ( sym: 270; act: 124 ),
( sym: 266; act: -101 ),
( sym: 267; act: -101 ),
( sym: 268; act: -101 ),
( sym: 269; act: -101 ),
( sym: 272; act: -101 ),
( sym: 301; act: -101 ),
-{ 135: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 123 ),
+{ 136: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 124 ),
( sym: 266; act: -100 ),
( sym: 267; act: -100 ),
( sym: 269; act: -100 ),
( sym: 272; act: -100 ),
( sym: 301; act: -100 ),
-{ 136: }
{ 137: }
{ 138: }
{ 139: }
- ( sym: 266; act: 185 ),
- ( sym: 267; act: 126 ),
{ 140: }
+ ( sym: 266; act: 187 ),
+ ( sym: 267; act: 127 ),
{ 141: }
- ( sym: 277; act: 23 ),
- ( sym: 269; act: -162 ),
- ( sym: 273; act: -162 ),
{ 142: }
+ ( sym: 277; act: 23 ),
+ ( sym: 269; act: -163 ),
+ ( sym: 273; act: -163 ),
{ 143: }
+{ 144: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4234,23 +4273,24 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 144: }
{ 145: }
- ( sym: 268; act: 122 ),
- ( sym: 269; act: 188 ),
- ( sym: 270; act: 123 ),
{ 146: }
+ ( sym: 268; act: 123 ),
+ ( sym: 269; act: 190 ),
+ ( sym: 270; act: 124 ),
{ 147: }
- ( sym: 292; act: 191 ),
- ( sym: 268; act: -3 ),
{ 148: }
+ ( sym: 292; act: 193 ),
+ ( sym: 268; act: -3 ),
+{ 149: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4263,14 +4303,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 149: }
+{ 150: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4283,15 +4324,16 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 150: }
{ 151: }
+{ 152: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4304,15 +4346,16 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
- ( sym: 269; act: -170 ),
-{ 152: }
+ ( sym: 269; act: -171 ),
+{ 153: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4325,17 +4368,18 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
- ( sym: 271; act: -170 ),
-{ 153: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
+ ( sym: 271; act: -171 ),
+{ 154: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
( sym: 265; act: -139 ),
( sym: 266; act: -139 ),
( sym: 267; act: -139 ),
@@ -4364,8 +4408,8 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -139 ),
( sym: 320; act: -139 ),
( sym: 321; act: -139 ),
-{ 154: }
- ( sym: 269; act: 198 ),
+{ 155: }
+ ( sym: 269; act: 200 ),
( sym: 304; act: -121 ),
( sym: 306; act: -121 ),
( sym: 307; act: -121 ),
@@ -4383,7 +4427,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -121 ),
( sym: 320; act: -121 ),
( sym: 321; act: -121 ),
-{ 155: }
+{ 156: }
( sym: 269; act: -82 ),
( sym: 288; act: -82 ),
( sym: 289; act: -82 ),
@@ -4407,34 +4451,34 @@ yya : array [1..yynacts] of YYARec = (
( sym: 321; act: -144 ),
( sym: 324; act: -144 ),
( sym: 325; act: -144 ),
-{ 156: }
- ( sym: 269; act: 200 ),
+{ 157: }
+ ( sym: 269; act: 202 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
- ( sym: 319; act: 201 ),
-{ 157: }
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+ ( sym: 319; act: 203 ),
{ 158: }
- ( sym: 268; act: 151 ),
- ( sym: 269; act: 219 ),
- ( sym: 270; act: 152 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
+{ 159: }
+ ( sym: 268; act: 152 ),
+ ( sym: 269; act: 221 ),
+ ( sym: 270; act: 153 ),
( sym: 288; act: -83 ),
( sym: 289; act: -83 ),
( sym: 290; act: -83 ),
@@ -4457,7 +4501,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 321; act: -143 ),
( sym: 324; act: -143 ),
( sym: 325; act: -143 ),
-{ 159: }
+{ 160: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4470,16 +4514,48 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 160: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
+{ 161: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+ ( sym: 265; act: -151 ),
+ ( sym: 266; act: -151 ),
+ ( sym: 267; act: -151 ),
+ ( sym: 268; act: -151 ),
+ ( sym: 269; act: -151 ),
+ ( sym: 270; act: -151 ),
+ ( sym: 271; act: -151 ),
+ ( sym: 272; act: -151 ),
+ ( sym: 273; act: -151 ),
+ ( sym: 291; act: -151 ),
+ ( sym: 301; act: -151 ),
+ ( sym: 304; act: -151 ),
+ ( sym: 306; act: -151 ),
+ ( sym: 307; act: -151 ),
+ ( sym: 308; act: -151 ),
+ ( sym: 309; act: -151 ),
+ ( sym: 310; act: -151 ),
+ ( sym: 311; act: -151 ),
+ ( sym: 312; act: -151 ),
+ ( sym: 313; act: -151 ),
+ ( sym: 314; act: -151 ),
+ ( sym: 315; act: -151 ),
+ ( sym: 316; act: -151 ),
+ ( sym: 317; act: -151 ),
+ ( sym: 318; act: -151 ),
+ ( sym: 319; act: -151 ),
+ ( sym: 320; act: -151 ),
+ ( sym: 321; act: -151 ),
+{ 162: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
( sym: 265; act: -150 ),
( sym: 266; act: -150 ),
( sym: 267; act: -150 ),
@@ -4508,9 +4584,9 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -150 ),
( sym: 320; act: -150 ),
( sym: 321; act: -150 ),
-{ 161: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
+{ 163: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
( sym: 265; act: -149 ),
( sym: 266; act: -149 ),
( sym: 267; act: -149 ),
@@ -4539,65 +4615,65 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -149 ),
( sym: 320; act: -149 ),
( sym: 321; act: -149 ),
-{ 162: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
- ( sym: 265; act: -151 ),
- ( sym: 266; act: -151 ),
- ( sym: 267; act: -151 ),
- ( sym: 268; act: -151 ),
- ( sym: 269; act: -151 ),
- ( sym: 270; act: -151 ),
- ( sym: 271; act: -151 ),
- ( sym: 272; act: -151 ),
- ( sym: 273; act: -151 ),
- ( sym: 291; act: -151 ),
- ( sym: 301; act: -151 ),
- ( sym: 304; act: -151 ),
- ( sym: 306; act: -151 ),
- ( sym: 307; act: -151 ),
- ( sym: 308; act: -151 ),
- ( sym: 309; act: -151 ),
- ( sym: 310; act: -151 ),
- ( sym: 311; act: -151 ),
- ( sym: 312; act: -151 ),
- ( sym: 313; act: -151 ),
- ( sym: 314; act: -151 ),
- ( sym: 315; act: -151 ),
- ( sym: 316; act: -151 ),
- ( sym: 317; act: -151 ),
- ( sym: 318; act: -151 ),
- ( sym: 319; act: -151 ),
- ( sym: 320; act: -151 ),
- ( sym: 321; act: -151 ),
-{ 163: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 123 ),
+{ 164: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+ ( sym: 265; act: -152 ),
+ ( sym: 266; act: -152 ),
+ ( sym: 267; act: -152 ),
+ ( sym: 268; act: -152 ),
+ ( sym: 269; act: -152 ),
+ ( sym: 270; act: -152 ),
+ ( sym: 271; act: -152 ),
+ ( sym: 272; act: -152 ),
+ ( sym: 273; act: -152 ),
+ ( sym: 291; act: -152 ),
+ ( sym: 301; act: -152 ),
+ ( sym: 304; act: -152 ),
+ ( sym: 306; act: -152 ),
+ ( sym: 307; act: -152 ),
+ ( sym: 308; act: -152 ),
+ ( sym: 309; act: -152 ),
+ ( sym: 310; act: -152 ),
+ ( sym: 311; act: -152 ),
+ ( sym: 312; act: -152 ),
+ ( sym: 313; act: -152 ),
+ ( sym: 314; act: -152 ),
+ ( sym: 315; act: -152 ),
+ ( sym: 316; act: -152 ),
+ ( sym: 317; act: -152 ),
+ ( sym: 318; act: -152 ),
+ ( sym: 319; act: -152 ),
+ ( sym: 320; act: -152 ),
+ ( sym: 321; act: -152 ),
+{ 165: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 124 ),
( sym: 266; act: -99 ),
( sym: 267; act: -99 ),
( sym: 269; act: -99 ),
( sym: 272; act: -99 ),
( sym: 301; act: -99 ),
-{ 164: }
- ( sym: 267; act: 221 ),
- ( sym: 269; act: -91 ),
-{ 165: }
- ( sym: 269; act: 222 ),
{ 166: }
- ( sym: 268; act: 226 ),
+ ( sym: 267; act: 223 ),
+ ( sym: 269; act: -91 ),
+{ 167: }
+ ( sym: 269; act: 224 ),
+{ 168: }
+ ( sym: 268; act: 228 ),
( sym: 277; act: 23 ),
- ( sym: 287; act: 227 ),
+ ( sym: 287; act: 229 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
- ( sym: 319; act: 228 ),
+ ( sym: 319; act: 230 ),
( sym: 267; act: -120 ),
( sym: 269; act: -120 ),
( sym: 270; act: -120 ),
-{ 167: }
-{ 168: }
- ( sym: 269; act: 229 ),
+{ 169: }
+{ 170: }
+ ( sym: 269; act: 231 ),
( sym: 267; act: -79 ),
( sym: 268; act: -79 ),
( sym: 270; act: -79 ),
@@ -4608,60 +4684,60 @@ yya : array [1..yynacts] of YYARec = (
( sym: 290; act: -79 ),
( sym: 314; act: -79 ),
( sym: 319; act: -79 ),
-{ 169: }
-{ 170: }
{ 171: }
- ( sym: 271; act: 230 ),
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
{ 172: }
{ 173: }
+ ( sym: 271; act: 232 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
{ 174: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 123 ),
+{ 175: }
+{ 176: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 124 ),
( sym: 266; act: -84 ),
( sym: 267; act: -84 ),
( sym: 272; act: -84 ),
( sym: 301; act: -84 ),
-{ 175: }
- ( sym: 273; act: 231 ),
-{ 176: }
- ( sym: 266; act: 232 ),
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
{ 177: }
- ( sym: 257; act: 178 ),
- ( sym: 266; act: 179 ),
+ ( sym: 273; act: 233 ),
+{ 178: }
+ ( sym: 266; act: 234 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
+{ 179: }
+ ( sym: 257; act: 180 ),
+ ( sym: 266; act: 181 ),
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4674,37 +4750,38 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
( sym: 273; act: -24 ),
-{ 178: }
- ( sym: 268; act: 234 ),
-{ 179: }
{ 180: }
- ( sym: 277; act: 23 ),
+ ( sym: 268; act: 236 ),
{ 181: }
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 182: }
+ ( sym: 277; act: 23 ),
+{ 183: }
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 266; act: -103 ),
( sym: 267; act: -103 ),
( sym: 268; act: -103 ),
@@ -4712,24 +4789,24 @@ yya : array [1..yynacts] of YYARec = (
( sym: 270; act: -103 ),
( sym: 272; act: -103 ),
( sym: 301; act: -103 ),
-{ 182: }
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 184: }
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 266; act: -102 ),
( sym: 267; act: -102 ),
( sym: 268; act: -102 ),
@@ -4737,7 +4814,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 270; act: -102 ),
( sym: 272; act: -102 ),
( sym: 301; act: -102 ),
-{ 183: }
+{ 185: }
( sym: 256; act: 84 ),
( sym: 268; act: 85 ),
( sym: 277; act: 23 ),
@@ -4747,38 +4824,38 @@ yya : array [1..yynacts] of YYARec = (
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
( sym: 319; act: 91 ),
-{ 184: }
-{ 185: }
{ 186: }
{ 187: }
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
- ( sym: 267; act: -163 ),
- ( sym: 269; act: -163 ),
- ( sym: 273; act: -163 ),
{ 188: }
- ( sym: 292; act: 238 ),
- ( sym: 268; act: -3 ),
{ 189: }
- ( sym: 291; act: 239 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
+ ( sym: 267; act: -164 ),
+ ( sym: 269; act: -164 ),
+ ( sym: 273; act: -164 ),
{ 190: }
- ( sym: 268; act: 240 ),
+ ( sym: 292; act: 240 ),
+ ( sym: 268; act: -3 ),
{ 191: }
+ ( sym: 291; act: 241 ),
+{ 192: }
+ ( sym: 268; act: 242 ),
+{ 193: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4791,48 +4868,49 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 192: }
-{ 193: }
{ 194: }
- ( sym: 267; act: 242 ),
- ( sym: 269; act: -169 ),
- ( sym: 271; act: -169 ),
{ 195: }
- ( sym: 269; act: 243 ),
{ 196: }
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
- ( sym: 267; act: -171 ),
- ( sym: 269; act: -171 ),
- ( sym: 271; act: -171 ),
+ ( sym: 267; act: 244 ),
+ ( sym: 269; act: -170 ),
+ ( sym: 271; act: -170 ),
{ 197: }
- ( sym: 271; act: 244 ),
+ ( sym: 269; act: 245 ),
{ 198: }
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
+ ( sym: 267; act: -172 ),
+ ( sym: 269; act: -172 ),
+ ( sym: 271; act: -172 ),
{ 199: }
- ( sym: 319; act: 245 ),
+ ( sym: 271; act: 246 ),
{ 200: }
+{ 201: }
+ ( sym: 319; act: 247 ),
+{ 202: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4845,16 +4923,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 201: }
- ( sym: 269; act: 247 ),
-{ 202: }
+{ 203: }
+ ( sym: 269; act: 249 ),
+{ 204: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4867,14 +4946,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 203: }
+{ 205: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4887,14 +4967,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 204: }
+{ 206: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4907,14 +4988,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 205: }
+{ 207: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4927,14 +5009,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 206: }
+{ 208: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4947,14 +5030,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 207: }
+{ 209: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4967,14 +5051,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 208: }
+{ 210: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -4987,14 +5072,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 209: }
+{ 211: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5007,14 +5093,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 210: }
+{ 212: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5027,14 +5114,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 211: }
+{ 213: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5047,14 +5135,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 212: }
+{ 214: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5067,14 +5156,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 213: }
+{ 215: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5087,14 +5177,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 214: }
+{ 216: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5107,14 +5198,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 215: }
+{ 217: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5127,14 +5219,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 216: }
+{ 218: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5147,14 +5240,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 217: }
+{ 219: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5167,14 +5261,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 218: }
+{ 220: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5187,14 +5282,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 219: }
+{ 221: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5207,8 +5303,9 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
@@ -5233,18 +5330,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -142 ),
( sym: 312; act: -142 ),
( sym: 313; act: -142 ),
- ( sym: 315; act: -142 ),
( sym: 317; act: -142 ),
( sym: 318; act: -142 ),
( sym: 319; act: -142 ),
( sym: 320; act: -142 ),
( sym: 324; act: -142 ),
( sym: 325; act: -142 ),
-{ 220: }
- ( sym: 269; act: 268 ),
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
-{ 221: }
+{ 222: }
+ ( sym: 269; act: 270 ),
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+{ 223: }
( sym: 274; act: 20 ),
( sym: 275; act: 21 ),
( sym: 276; act: 22 ),
@@ -5257,67 +5353,67 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 287; act: 31 ),
- ( sym: 303; act: 169 ),
+ ( sym: 303; act: 171 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
( sym: 269; act: -94 ),
-{ 222: }
-{ 223: }
- ( sym: 319; act: 270 ),
{ 224: }
- ( sym: 268; act: 272 ),
- ( sym: 270; act: 273 ),
+{ 225: }
+ ( sym: 319; act: 272 ),
+{ 226: }
+ ( sym: 268; act: 274 ),
+ ( sym: 270; act: 275 ),
( sym: 267; act: -90 ),
( sym: 269; act: -90 ),
-{ 225: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 274 ),
+{ 227: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 276 ),
( sym: 267; act: -88 ),
( sym: 269; act: -88 ),
-{ 226: }
- ( sym: 268; act: 226 ),
+{ 228: }
+ ( sym: 268; act: 228 ),
( sym: 277; act: 23 ),
- ( sym: 287; act: 227 ),
+ ( sym: 287; act: 229 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
- ( sym: 319; act: 277 ),
+ ( sym: 319; act: 279 ),
( sym: 269; act: -120 ),
( sym: 270; act: -120 ),
-{ 227: }
- ( sym: 268; act: 226 ),
+{ 229: }
+ ( sym: 268; act: 228 ),
( sym: 277; act: 23 ),
- ( sym: 287; act: 227 ),
+ ( sym: 287; act: 229 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
- ( sym: 319; act: 277 ),
+ ( sym: 319; act: 279 ),
( sym: 267; act: -120 ),
( sym: 269; act: -120 ),
( sym: 270; act: -120 ),
-{ 228: }
- ( sym: 268; act: 226 ),
+{ 230: }
+ ( sym: 268; act: 228 ),
( sym: 277; act: 23 ),
- ( sym: 287; act: 227 ),
+ ( sym: 287; act: 229 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
- ( sym: 319; act: 277 ),
+ ( sym: 319; act: 279 ),
( sym: 267; act: -120 ),
( sym: 269; act: -120 ),
( sym: 270; act: -120 ),
-{ 229: }
-{ 230: }
{ 231: }
{ 232: }
{ 233: }
{ 234: }
+{ 235: }
+{ 236: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5330,21 +5426,22 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 235: }
- ( sym: 269; act: 283 ),
-{ 236: }
{ 237: }
- ( sym: 268; act: 284 ),
+ ( sym: 269; act: 285 ),
{ 238: }
{ 239: }
+ ( sym: 268; act: 286 ),
{ 240: }
+{ 241: }
+{ 242: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5357,15 +5454,16 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 241: }
-{ 242: }
+{ 243: }
+{ 244: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5378,51 +5476,52 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
- ( sym: 269; act: -170 ),
- ( sym: 271; act: -170 ),
-{ 243: }
-{ 244: }
+ ( sym: 269; act: -171 ),
+ ( sym: 271; act: -171 ),
{ 245: }
- ( sym: 269; act: 287 ),
{ 246: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
- ( sym: 265; act: -153 ),
- ( sym: 266; act: -153 ),
- ( sym: 267; act: -153 ),
- ( sym: 268; act: -153 ),
- ( sym: 269; act: -153 ),
- ( sym: 270; act: -153 ),
- ( sym: 271; act: -153 ),
- ( sym: 272; act: -153 ),
- ( sym: 273; act: -153 ),
- ( sym: 291; act: -153 ),
- ( sym: 301; act: -153 ),
- ( sym: 304; act: -153 ),
- ( sym: 306; act: -153 ),
- ( sym: 307; act: -153 ),
- ( sym: 308; act: -153 ),
- ( sym: 309; act: -153 ),
- ( sym: 310; act: -153 ),
- ( sym: 311; act: -153 ),
- ( sym: 312; act: -153 ),
- ( sym: 313; act: -153 ),
- ( sym: 314; act: -153 ),
- ( sym: 315; act: -153 ),
- ( sym: 316; act: -153 ),
- ( sym: 317; act: -153 ),
- ( sym: 318; act: -153 ),
- ( sym: 319; act: -153 ),
- ( sym: 320; act: -153 ),
- ( sym: 321; act: -153 ),
{ 247: }
+ ( sym: 269; act: 289 ),
+{ 248: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+ ( sym: 265; act: -154 ),
+ ( sym: 266; act: -154 ),
+ ( sym: 267; act: -154 ),
+ ( sym: 268; act: -154 ),
+ ( sym: 269; act: -154 ),
+ ( sym: 270; act: -154 ),
+ ( sym: 271; act: -154 ),
+ ( sym: 272; act: -154 ),
+ ( sym: 273; act: -154 ),
+ ( sym: 291; act: -154 ),
+ ( sym: 301; act: -154 ),
+ ( sym: 304; act: -154 ),
+ ( sym: 306; act: -154 ),
+ ( sym: 307; act: -154 ),
+ ( sym: 308; act: -154 ),
+ ( sym: 309; act: -154 ),
+ ( sym: 310; act: -154 ),
+ ( sym: 311; act: -154 ),
+ ( sym: 312; act: -154 ),
+ ( sym: 313; act: -154 ),
+ ( sym: 314; act: -154 ),
+ ( sym: 315; act: -154 ),
+ ( sym: 316; act: -154 ),
+ ( sym: 317; act: -154 ),
+ ( sym: 318; act: -154 ),
+ ( sym: 319; act: -154 ),
+ ( sym: 320; act: -154 ),
+ ( sym: 321; act: -154 ),
+{ 249: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -5435,31 +5534,32 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 248: }
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 250: }
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -122 ),
( sym: 266; act: -122 ),
( sym: 267; act: -122 ),
@@ -5473,17 +5573,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 301; act: -122 ),
( sym: 324; act: -122 ),
( sym: 325; act: -122 ),
-{ 249: }
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 251: }
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -123 ),
( sym: 266; act: -123 ),
( sym: 267; act: -123 ),
@@ -5504,17 +5604,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -123 ),
( sym: 324; act: -123 ),
( sym: 325; act: -123 ),
-{ 250: }
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 252: }
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -124 ),
( sym: 266; act: -124 ),
( sym: 267; act: -124 ),
@@ -5535,17 +5635,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -124 ),
( sym: 324; act: -124 ),
( sym: 325; act: -124 ),
-{ 251: }
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 253: }
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -125 ),
( sym: 266; act: -125 ),
( sym: 267; act: -125 ),
@@ -5566,17 +5666,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -125 ),
( sym: 324; act: -125 ),
( sym: 325; act: -125 ),
-{ 252: }
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 254: }
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -127 ),
( sym: 266; act: -127 ),
( sym: 267; act: -127 ),
@@ -5597,17 +5697,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -127 ),
( sym: 324; act: -127 ),
( sym: 325; act: -127 ),
-{ 253: }
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 255: }
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -126 ),
( sym: 266; act: -126 ),
( sym: 267; act: -126 ),
@@ -5628,17 +5728,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -126 ),
( sym: 324; act: -126 ),
( sym: 325; act: -126 ),
-{ 254: }
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 256: }
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -128 ),
( sym: 266; act: -128 ),
( sym: 267; act: -128 ),
@@ -5659,35 +5759,35 @@ yya : array [1..yynacts] of YYARec = (
( sym: 311; act: -128 ),
( sym: 324; act: -128 ),
( sym: 325; act: -128 ),
-{ 255: }
-{ 256: }
- ( sym: 265; act: 289 ),
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
{ 257: }
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 258: }
+ ( sym: 265; act: 291 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
+{ 259: }
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -133 ),
( sym: 266; act: -133 ),
( sym: 267; act: -133 ),
@@ -5710,14 +5810,14 @@ yya : array [1..yynacts] of YYARec = (
( sym: 313; act: -133 ),
( sym: 324; act: -133 ),
( sym: 325; act: -133 ),
-{ 258: }
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 260: }
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -134 ),
( sym: 266; act: -134 ),
( sym: 267; act: -134 ),
@@ -5741,12 +5841,12 @@ yya : array [1..yynacts] of YYARec = (
( sym: 314; act: -134 ),
( sym: 324; act: -134 ),
( sym: 325; act: -134 ),
-{ 259: }
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 261: }
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -129 ),
( sym: 266; act: -129 ),
( sym: 267; act: -129 ),
@@ -5772,12 +5872,12 @@ yya : array [1..yynacts] of YYARec = (
( sym: 316; act: -129 ),
( sym: 324; act: -129 ),
( sym: 325; act: -129 ),
-{ 260: }
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 262: }
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -130 ),
( sym: 266; act: -130 ),
( sym: 267; act: -130 ),
@@ -5803,10 +5903,10 @@ yya : array [1..yynacts] of YYARec = (
( sym: 316; act: -130 ),
( sym: 324; act: -130 ),
( sym: 325; act: -130 ),
-{ 261: }
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 263: }
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -137 ),
( sym: 266; act: -137 ),
( sym: 267; act: -137 ),
@@ -5834,10 +5934,10 @@ yya : array [1..yynacts] of YYARec = (
( sym: 318; act: -137 ),
( sym: 324; act: -137 ),
( sym: 325; act: -137 ),
-{ 262: }
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 264: }
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -136 ),
( sym: 266; act: -136 ),
( sym: 267; act: -136 ),
@@ -5865,8 +5965,8 @@ yya : array [1..yynacts] of YYARec = (
( sym: 318; act: -136 ),
( sym: 324; act: -136 ),
( sym: 325; act: -136 ),
-{ 263: }
- ( sym: 321; act: 218 ),
+{ 265: }
+ ( sym: 321; act: 220 ),
( sym: 265; act: -131 ),
( sym: 266; act: -131 ),
( sym: 267; act: -131 ),
@@ -5896,8 +5996,8 @@ yya : array [1..yynacts] of YYARec = (
( sym: 320; act: -131 ),
( sym: 324; act: -131 ),
( sym: 325; act: -131 ),
-{ 264: }
- ( sym: 321; act: 218 ),
+{ 266: }
+ ( sym: 321; act: 220 ),
( sym: 265; act: -132 ),
( sym: 266; act: -132 ),
( sym: 267; act: -132 ),
@@ -5927,8 +6027,8 @@ yya : array [1..yynacts] of YYARec = (
( sym: 320; act: -132 ),
( sym: 324; act: -132 ),
( sym: 325; act: -132 ),
-{ 265: }
- ( sym: 321; act: 218 ),
+{ 267: }
+ ( sym: 321; act: 220 ),
( sym: 265; act: -135 ),
( sym: 266; act: -135 ),
( sym: 267; act: -135 ),
@@ -5958,10 +6058,10 @@ yya : array [1..yynacts] of YYARec = (
( sym: 320; act: -135 ),
( sym: 324; act: -135 ),
( sym: 325; act: -135 ),
-{ 266: }
-{ 267: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
+{ 268: }
+{ 269: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
( sym: 265; act: -141 ),
( sym: 266; act: -141 ),
( sym: 267; act: -141 ),
@@ -5990,25 +6090,25 @@ yya : array [1..yynacts] of YYARec = (
( sym: 319; act: -141 ),
( sym: 320; act: -141 ),
( sym: 321; act: -141 ),
-{ 268: }
- ( sym: 292; act: 238 ),
- ( sym: 268; act: -3 ),
-{ 269: }
{ 270: }
- ( sym: 268; act: 226 ),
+ ( sym: 292; act: 240 ),
+ ( sym: 268; act: -3 ),
+{ 271: }
+{ 272: }
+ ( sym: 268; act: 228 ),
( sym: 277; act: 23 ),
- ( sym: 287; act: 227 ),
+ ( sym: 287; act: 229 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
- ( sym: 319; act: 277 ),
+ ( sym: 319; act: 279 ),
( sym: 267; act: -120 ),
( sym: 269; act: -120 ),
( sym: 270; act: -120 ),
-{ 271: }
-{ 272: }
- ( sym: 269; act: 167 ),
+{ 273: }
+{ 274: }
+ ( sym: 269; act: 169 ),
( sym: 274; act: 20 ),
( sym: 275; act: 21 ),
( sym: 276; act: 22 ),
@@ -6019,15 +6119,15 @@ yya : array [1..yynacts] of YYARec = (
( sym: 283; act: 27 ),
( sym: 284; act: 28 ),
( sym: 285; act: 29 ),
- ( sym: 286; act: 168 ),
+ ( sym: 286; act: 170 ),
( sym: 287; act: 31 ),
- ( sym: 303; act: 169 ),
+ ( sym: 303; act: 171 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 273: }
+{ 275: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -6040,16 +6140,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 274: }
+{ 276: }
( sym: 268; act: 111 ),
- ( sym: 271; act: 295 ),
+ ( sym: 271; act: 297 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
( sym: 279; act: 113 ),
@@ -6061,74 +6162,75 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 275: }
- ( sym: 268; act: 272 ),
- ( sym: 269; act: 296 ),
- ( sym: 270; act: 273 ),
-{ 276: }
- ( sym: 268; act: 122 ),
- ( sym: 269; act: 184 ),
- ( sym: 270; act: 274 ),
{ 277: }
- ( sym: 268; act: 226 ),
+ ( sym: 268; act: 274 ),
+ ( sym: 269; act: 298 ),
+ ( sym: 270; act: 275 ),
+{ 278: }
+ ( sym: 268; act: 123 ),
+ ( sym: 269; act: 186 ),
+ ( sym: 270; act: 276 ),
+{ 279: }
+ ( sym: 268; act: 228 ),
( sym: 277; act: 23 ),
- ( sym: 287; act: 227 ),
+ ( sym: 287; act: 229 ),
( sym: 288; act: 87 ),
( sym: 289; act: 88 ),
( sym: 290; act: 89 ),
( sym: 314; act: 90 ),
- ( sym: 319; act: 277 ),
+ ( sym: 319; act: 279 ),
( sym: 267; act: -120 ),
( sym: 269; act: -120 ),
( sym: 270; act: -120 ),
-{ 278: }
- ( sym: 268; act: 272 ),
- ( sym: 270; act: 273 ),
+{ 280: }
+ ( sym: 268; act: 274 ),
+ ( sym: 270; act: 275 ),
( sym: 267; act: -112 ),
( sym: 269; act: -112 ),
-{ 279: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 274 ),
+{ 281: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 276 ),
( sym: 267; act: -98 ),
( sym: 269; act: -98 ),
-{ 280: }
- ( sym: 270; act: 273 ),
+{ 282: }
+ ( sym: 270; act: 275 ),
( sym: 267; act: -114 ),
( sym: 268; act: -114 ),
( sym: 269; act: -114 ),
-{ 281: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 274 ),
+{ 283: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 276 ),
( sym: 267; act: -89 ),
( sym: 269; act: -89 ),
-{ 282: }
- ( sym: 269; act: 298 ),
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
-{ 283: }
{ 284: }
+ ( sym: 269; act: 300 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
+{ 285: }
+{ 286: }
( sym: 274; act: 20 ),
( sym: 275; act: 21 ),
( sym: 276; act: 22 ),
@@ -6141,17 +6243,17 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 287; act: 31 ),
- ( sym: 303; act: 169 ),
+ ( sym: 303; act: 171 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
( sym: 269; act: -94 ),
-{ 285: }
- ( sym: 269; act: 300 ),
-{ 286: }
{ 287: }
+ ( sym: 269; act: 302 ),
+{ 288: }
+{ 289: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -6164,45 +6266,46 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 288: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
- ( sym: 265; act: -154 ),
- ( sym: 266; act: -154 ),
- ( sym: 267; act: -154 ),
- ( sym: 268; act: -154 ),
- ( sym: 269; act: -154 ),
- ( sym: 270; act: -154 ),
- ( sym: 271; act: -154 ),
- ( sym: 272; act: -154 ),
- ( sym: 273; act: -154 ),
- ( sym: 291; act: -154 ),
- ( sym: 301; act: -154 ),
- ( sym: 304; act: -154 ),
- ( sym: 306; act: -154 ),
- ( sym: 307; act: -154 ),
- ( sym: 308; act: -154 ),
- ( sym: 309; act: -154 ),
- ( sym: 310; act: -154 ),
- ( sym: 311; act: -154 ),
- ( sym: 312; act: -154 ),
- ( sym: 313; act: -154 ),
- ( sym: 314; act: -154 ),
- ( sym: 315; act: -154 ),
- ( sym: 316; act: -154 ),
- ( sym: 317; act: -154 ),
- ( sym: 318; act: -154 ),
- ( sym: 319; act: -154 ),
- ( sym: 320; act: -154 ),
- ( sym: 321; act: -154 ),
-{ 289: }
+{ 290: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+ ( sym: 265; act: -155 ),
+ ( sym: 266; act: -155 ),
+ ( sym: 267; act: -155 ),
+ ( sym: 268; act: -155 ),
+ ( sym: 269; act: -155 ),
+ ( sym: 270; act: -155 ),
+ ( sym: 271; act: -155 ),
+ ( sym: 272; act: -155 ),
+ ( sym: 273; act: -155 ),
+ ( sym: 291; act: -155 ),
+ ( sym: 301; act: -155 ),
+ ( sym: 304; act: -155 ),
+ ( sym: 306; act: -155 ),
+ ( sym: 307; act: -155 ),
+ ( sym: 308; act: -155 ),
+ ( sym: 309; act: -155 ),
+ ( sym: 310; act: -155 ),
+ ( sym: 311; act: -155 ),
+ ( sym: 312; act: -155 ),
+ ( sym: 313; act: -155 ),
+ ( sym: 314; act: -155 ),
+ ( sym: 315; act: -155 ),
+ ( sym: 316; act: -155 ),
+ ( sym: 317; act: -155 ),
+ ( sym: 318; act: -155 ),
+ ( sym: 319; act: -155 ),
+ ( sym: 320; act: -155 ),
+ ( sym: 321; act: -155 ),
+{ 291: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -6215,56 +6318,57 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
-{ 290: }
- ( sym: 268; act: 303 ),
-{ 291: }
- ( sym: 268; act: 272 ),
- ( sym: 270; act: 273 ),
+{ 292: }
+ ( sym: 268; act: 305 ),
+{ 293: }
+ ( sym: 268; act: 274 ),
+ ( sym: 270; act: 275 ),
( sym: 267; act: -113 ),
( sym: 269; act: -113 ),
-{ 292: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 274 ),
+{ 294: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 276 ),
( sym: 267; act: -99 ),
( sym: 269; act: -99 ),
-{ 293: }
- ( sym: 269; act: 304 ),
-{ 294: }
- ( sym: 271; act: 305 ),
- ( sym: 304; act: 202 ),
- ( sym: 306; act: 203 ),
- ( sym: 307; act: 204 ),
- ( sym: 308; act: 205 ),
- ( sym: 309; act: 206 ),
- ( sym: 310; act: 207 ),
- ( sym: 311; act: 208 ),
- ( sym: 312; act: 209 ),
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
{ 295: }
+ ( sym: 269; act: 306 ),
{ 296: }
+ ( sym: 271; act: 307 ),
+ ( sym: 304; act: 204 ),
+ ( sym: 306; act: 205 ),
+ ( sym: 307; act: 206 ),
+ ( sym: 308; act: 207 ),
+ ( sym: 309; act: 208 ),
+ ( sym: 310; act: 209 ),
+ ( sym: 311; act: 210 ),
+ ( sym: 312; act: 211 ),
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
{ 297: }
- ( sym: 268; act: 122 ),
- ( sym: 270; act: 274 ),
+{ 298: }
+{ 299: }
+ ( sym: 268; act: 123 ),
+ ( sym: 270; act: 276 ),
( sym: 267; act: -100 ),
( sym: 269; act: -100 ),
-{ 298: }
- ( sym: 257; act: 178 ),
- ( sym: 266; act: 179 ),
+{ 300: }
+ ( sym: 257; act: 180 ),
+ ( sym: 266; act: 181 ),
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -6277,58 +6381,59 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
( sym: 273; act: -26 ),
-{ 299: }
- ( sym: 269; act: 307 ),
-{ 300: }
{ 301: }
- ( sym: 324; act: 148 ),
- ( sym: 325; act: 149 ),
- ( sym: 265; act: -155 ),
- ( sym: 266; act: -155 ),
- ( sym: 267; act: -155 ),
- ( sym: 268; act: -155 ),
- ( sym: 269; act: -155 ),
- ( sym: 270; act: -155 ),
- ( sym: 271; act: -155 ),
- ( sym: 272; act: -155 ),
- ( sym: 273; act: -155 ),
- ( sym: 291; act: -155 ),
- ( sym: 301; act: -155 ),
- ( sym: 304; act: -155 ),
- ( sym: 306; act: -155 ),
- ( sym: 307; act: -155 ),
- ( sym: 308; act: -155 ),
- ( sym: 309; act: -155 ),
- ( sym: 310; act: -155 ),
- ( sym: 311; act: -155 ),
- ( sym: 312; act: -155 ),
- ( sym: 313; act: -155 ),
- ( sym: 314; act: -155 ),
- ( sym: 315; act: -155 ),
- ( sym: 316; act: -155 ),
- ( sym: 317; act: -155 ),
- ( sym: 318; act: -155 ),
- ( sym: 319; act: -155 ),
- ( sym: 320; act: -155 ),
- ( sym: 321; act: -155 ),
+ ( sym: 269; act: 309 ),
{ 302: }
- ( sym: 313; act: 210 ),
- ( sym: 314; act: 211 ),
- ( sym: 315; act: 212 ),
- ( sym: 316; act: 213 ),
- ( sym: 317; act: 214 ),
- ( sym: 318; act: 215 ),
- ( sym: 319; act: 216 ),
- ( sym: 320; act: 217 ),
- ( sym: 321; act: 218 ),
+{ 303: }
+ ( sym: 324; act: 149 ),
+ ( sym: 325; act: 150 ),
+ ( sym: 265; act: -156 ),
+ ( sym: 266; act: -156 ),
+ ( sym: 267; act: -156 ),
+ ( sym: 268; act: -156 ),
+ ( sym: 269; act: -156 ),
+ ( sym: 270; act: -156 ),
+ ( sym: 271; act: -156 ),
+ ( sym: 272; act: -156 ),
+ ( sym: 273; act: -156 ),
+ ( sym: 291; act: -156 ),
+ ( sym: 301; act: -156 ),
+ ( sym: 304; act: -156 ),
+ ( sym: 306; act: -156 ),
+ ( sym: 307; act: -156 ),
+ ( sym: 308; act: -156 ),
+ ( sym: 309; act: -156 ),
+ ( sym: 310; act: -156 ),
+ ( sym: 311; act: -156 ),
+ ( sym: 312; act: -156 ),
+ ( sym: 313; act: -156 ),
+ ( sym: 314; act: -156 ),
+ ( sym: 315; act: -156 ),
+ ( sym: 316; act: -156 ),
+ ( sym: 317; act: -156 ),
+ ( sym: 318; act: -156 ),
+ ( sym: 319; act: -156 ),
+ ( sym: 320; act: -156 ),
+ ( sym: 321; act: -156 ),
+{ 304: }
+ ( sym: 313; act: 212 ),
+ ( sym: 314; act: 213 ),
+ ( sym: 315; act: 214 ),
+ ( sym: 316; act: 215 ),
+ ( sym: 317; act: 216 ),
+ ( sym: 318; act: 217 ),
+ ( sym: 319; act: 218 ),
+ ( sym: 320; act: 219 ),
+ ( sym: 321; act: 220 ),
( sym: 265; act: -140 ),
( sym: 266; act: -140 ),
( sym: 267; act: -140 ),
@@ -6350,7 +6455,7 @@ yya : array [1..yynacts] of YYARec = (
( sym: 312; act: -140 ),
( sym: 324; act: -140 ),
( sym: 325; act: -140 ),
-{ 303: }
+{ 305: }
( sym: 268; act: 111 ),
( sym: 277; act: 23 ),
( sym: 278; act: 112 ),
@@ -6363,23 +6468,24 @@ yya : array [1..yynacts] of YYARec = (
( sym: 285; act: 29 ),
( sym: 286; act: 30 ),
( sym: 314; act: 115 ),
- ( sym: 316; act: 116 ),
- ( sym: 321; act: 117 ),
+ ( sym: 315; act: 116 ),
+ ( sym: 316; act: 117 ),
+ ( sym: 321; act: 118 ),
( sym: 327; act: 32 ),
( sym: 328; act: 33 ),
( sym: 329; act: 34 ),
( sym: 330; act: 35 ),
( sym: 331; act: 36 ),
- ( sym: 269; act: -170 ),
-{ 304: }
-{ 305: }
+ ( sym: 269; act: -171 ),
{ 306: }
{ 307: }
- ( sym: 266; act: 309 ),
{ 308: }
- ( sym: 269; act: 310 )
{ 309: }
+ ( sym: 266; act: 311 ),
{ 310: }
+ ( sym: 269; act: 312 )
+{ 311: }
+{ 312: }
);
yyg : array [1..yyngotos] of YYARec = (
@@ -6540,32 +6646,32 @@ yyg : array [1..yyngotos] of YYARec = (
{ 79: }
{ 80: }
{ 81: }
- ( sym: -34; act: 121 ),
+ ( sym: -34; act: 122 ),
{ 82: }
- ( sym: -15; act: 124 ),
- ( sym: -10; act: 125 ),
+ ( sym: -15; act: 125 ),
+ ( sym: -10; act: 126 ),
{ 83: }
- ( sym: -33; act: 129 ),
+ ( sym: -33; act: 130 ),
{ 84: }
- ( sym: -5; act: 131 ),
+ ( sym: -5; act: 132 ),
{ 85: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 132 ),
+ ( sym: -19; act: 133 ),
( sym: -11; act: 83 ),
{ 86: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 133 ),
+ ( sym: -19; act: 134 ),
( sym: -11; act: 83 ),
{ 87: }
{ 88: }
{ 89: }
{ 90: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 134 ),
+ ( sym: -19; act: 135 ),
( sym: -11; act: 83 ),
{ 91: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 135 ),
+ ( sym: -19; act: 136 ),
( sym: -11; act: 83 ),
{ 92: }
{ 93: }
@@ -6573,7 +6679,7 @@ yyg : array [1..yyngotos] of YYARec = (
( sym: -29; act: 15 ),
( sym: -28; act: 94 ),
( sym: -27; act: 16 ),
- ( sym: -25; act: 137 ),
+ ( sym: -25; act: 138 ),
( sym: -18; act: 17 ),
( sym: -16; act: 96 ),
( sym: -11; act: 19 ),
@@ -6581,7 +6687,7 @@ yyg : array [1..yyngotos] of YYARec = (
{ 96: }
( sym: -32; act: 80 ),
( sym: -19; act: 81 ),
- ( sym: -17; act: 139 ),
+ ( sym: -17; act: 140 ),
( sym: -11; act: 83 ),
{ 97: }
{ 98: }
@@ -6592,7 +6698,7 @@ yyg : array [1..yyngotos] of YYARec = (
{ 103: }
{ 104: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 145 ),
+ ( sym: -19; act: 146 ),
( sym: -11; act: 83 ),
{ 105: }
{ 106: }
@@ -6601,206 +6707,209 @@ yyg : array [1..yyngotos] of YYARec = (
{ 109: }
{ 110: }
{ 111: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 154 ),
- ( sym: -29; act: 155 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 155 ),
+ ( sym: -29; act: 156 ),
( sym: -27; act: 16 ),
( sym: -18; act: 17 ),
- ( sym: -16; act: 156 ),
- ( sym: -13; act: 157 ),
- ( sym: -11; act: 158 ),
+ ( sym: -16; act: 157 ),
+ ( sym: -13; act: 158 ),
+ ( sym: -11; act: 159 ),
{ 112: }
{ 113: }
{ 114: }
{ 115: }
- ( sym: -37; act: 160 ),
+ ( sym: -37; act: 161 ),
( sym: -29; act: 108 ),
( sym: -11; act: 110 ),
{ 116: }
- ( sym: -37; act: 161 ),
+ ( sym: -37; act: 162 ),
( sym: -29; act: 108 ),
( sym: -11; act: 110 ),
{ 117: }
- ( sym: -37; act: 162 ),
+ ( sym: -37; act: 163 ),
( sym: -29; act: 108 ),
( sym: -11; act: 110 ),
{ 118: }
+ ( sym: -37; act: 164 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -11; act: 110 ),
{ 119: }
{ 120: }
+{ 121: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 163 ),
+ ( sym: -19; act: 165 ),
( sym: -11; act: 83 ),
-{ 121: }
{ 122: }
- ( sym: -30; act: 164 ),
+{ 123: }
+ ( sym: -30; act: 166 ),
( sym: -29; act: 15 ),
( sym: -27; act: 16 ),
- ( sym: -20; act: 165 ),
+ ( sym: -20; act: 167 ),
( sym: -18; act: 17 ),
- ( sym: -16; act: 166 ),
+ ( sym: -16; act: 168 ),
( sym: -11; act: 19 ),
-{ 123: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+{ 124: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 171 ),
+ ( sym: -13; act: 173 ),
( sym: -11; act: 110 ),
-{ 124: }
{ 125: }
{ 126: }
+{ 127: }
( sym: -32; act: 80 ),
- ( sym: -19; act: 174 ),
+ ( sym: -19; act: 176 ),
( sym: -11; act: 83 ),
-{ 127: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -14; act: 175 ),
- ( sym: -13; act: 176 ),
- ( sym: -12; act: 177 ),
- ( sym: -11; act: 110 ),
{ 128: }
-{ 129: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 181 ),
+ ( sym: -14; act: 177 ),
+ ( sym: -13; act: 178 ),
+ ( sym: -12; act: 179 ),
( sym: -11; act: 110 ),
+{ 129: }
{ 130: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 182 ),
+ ( sym: -13; act: 183 ),
( sym: -11; act: 110 ),
{ 131: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 184 ),
+ ( sym: -11; act: 110 ),
{ 132: }
- ( sym: -34; act: 121 ),
{ 133: }
- ( sym: -34; act: 121 ),
+ ( sym: -34; act: 122 ),
{ 134: }
- ( sym: -34; act: 121 ),
+ ( sym: -34; act: 122 ),
{ 135: }
- ( sym: -34; act: 121 ),
+ ( sym: -34; act: 122 ),
{ 136: }
+ ( sym: -34; act: 122 ),
{ 137: }
{ 138: }
{ 139: }
{ 140: }
{ 141: }
+{ 142: }
( sym: -40; act: 99 ),
- ( sym: -21; act: 186 ),
+ ( sym: -21; act: 188 ),
( sym: -11; act: 101 ),
-{ 142: }
{ 143: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+{ 144: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 187 ),
+ ( sym: -13; act: 189 ),
( sym: -11; act: 110 ),
-{ 144: }
{ 145: }
- ( sym: -34; act: 121 ),
{ 146: }
+ ( sym: -34; act: 122 ),
{ 147: }
- ( sym: -22; act: 189 ),
- ( sym: -4; act: 190 ),
{ 148: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -13; act: 192 ),
- ( sym: -11; act: 110 ),
+ ( sym: -22; act: 191 ),
+ ( sym: -4; act: 192 ),
{ 149: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 193 ),
+ ( sym: -13; act: 194 ),
( sym: -11; act: 110 ),
{ 150: }
-{ 151: }
- ( sym: -41; act: 194 ),
- ( sym: -39; act: 195 ),
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 196 ),
+ ( sym: -13; act: 195 ),
( sym: -11; act: 110 ),
+{ 151: }
{ 152: }
- ( sym: -41; act: 194 ),
+ ( sym: -41; act: 196 ),
( sym: -39; act: 197 ),
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 196 ),
+ ( sym: -13; act: 198 ),
( sym: -11; act: 110 ),
{ 153: }
+ ( sym: -41; act: 196 ),
+ ( sym: -39; act: 199 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 198 ),
+ ( sym: -11; act: 110 ),
{ 154: }
{ 155: }
{ 156: }
- ( sym: -32; act: 199 ),
{ 157: }
+ ( sym: -32; act: 201 ),
{ 158: }
{ 159: }
- ( sym: -37; act: 220 ),
+{ 160: }
+ ( sym: -37; act: 222 ),
( sym: -29; act: 108 ),
( sym: -11; act: 110 ),
-{ 160: }
{ 161: }
{ 162: }
{ 163: }
- ( sym: -34; act: 121 ),
{ 164: }
{ 165: }
+ ( sym: -34; act: 122 ),
{ 166: }
- ( sym: -32; act: 223 ),
- ( sym: -31; act: 224 ),
- ( sym: -19; act: 225 ),
- ( sym: -11; act: 83 ),
{ 167: }
{ 168: }
+ ( sym: -32; act: 225 ),
+ ( sym: -31; act: 226 ),
+ ( sym: -19; act: 227 ),
+ ( sym: -11; act: 83 ),
{ 169: }
{ 170: }
{ 171: }
{ 172: }
{ 173: }
{ 174: }
- ( sym: -34; act: 121 ),
{ 175: }
{ 176: }
+ ( sym: -34; act: 122 ),
{ 177: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -14; act: 233 ),
- ( sym: -13; act: 176 ),
- ( sym: -12; act: 177 ),
- ( sym: -11; act: 110 ),
{ 178: }
{ 179: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -14; act: 235 ),
+ ( sym: -13; act: 178 ),
+ ( sym: -12; act: 179 ),
+ ( sym: -11; act: 110 ),
{ 180: }
- ( sym: -11; act: 235 ),
{ 181: }
{ 182: }
+ ( sym: -11; act: 237 ),
{ 183: }
+{ 184: }
+{ 185: }
( sym: -32; act: 80 ),
( sym: -19; act: 81 ),
- ( sym: -17; act: 236 ),
+ ( sym: -17; act: 238 ),
( sym: -11; act: 83 ),
-{ 184: }
-{ 185: }
{ 186: }
{ 187: }
{ 188: }
- ( sym: -4; act: 237 ),
{ 189: }
{ 190: }
+ ( sym: -4; act: 239 ),
{ 191: }
+{ 192: }
+{ 193: }
( sym: -37; act: 107 ),
( sym: -29; act: 108 ),
- ( sym: -23; act: 241 ),
+ ( sym: -23; act: 243 ),
( sym: -11; act: 110 ),
-{ 192: }
-{ 193: }
{ 194: }
{ 195: }
{ 196: }
@@ -6808,188 +6917,188 @@ yyg : array [1..yyngotos] of YYARec = (
{ 198: }
{ 199: }
{ 200: }
- ( sym: -37; act: 246 ),
- ( sym: -29; act: 108 ),
- ( sym: -11; act: 110 ),
{ 201: }
{ 202: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 248 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 248 ),
( sym: -11; act: 110 ),
{ 203: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -13; act: 249 ),
- ( sym: -11; act: 110 ),
{ 204: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 250 ),
( sym: -11; act: 110 ),
{ 205: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 251 ),
( sym: -11; act: 110 ),
{ 206: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 252 ),
( sym: -11; act: 110 ),
{ 207: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 253 ),
( sym: -11; act: 110 ),
{ 208: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 254 ),
( sym: -11; act: 110 ),
{ 209: }
- ( sym: -37; act: 153 ),
- ( sym: -36; act: 255 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 256 ),
+ ( sym: -13; act: 255 ),
( sym: -11; act: 110 ),
{ 210: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 257 ),
+ ( sym: -13; act: 256 ),
( sym: -11; act: 110 ),
{ 211: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -36; act: 257 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 258 ),
( sym: -11; act: 110 ),
{ 212: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 259 ),
( sym: -11; act: 110 ),
{ 213: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 260 ),
( sym: -11; act: 110 ),
{ 214: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 261 ),
( sym: -11; act: 110 ),
{ 215: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 262 ),
( sym: -11; act: 110 ),
{ 216: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 263 ),
( sym: -11; act: 110 ),
{ 217: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 264 ),
( sym: -11; act: 110 ),
{ 218: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
( sym: -13; act: 265 ),
( sym: -11; act: 110 ),
{ 219: }
- ( sym: -38; act: 266 ),
- ( sym: -37; act: 267 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
+ ( sym: -13; act: 266 ),
( sym: -11; act: 110 ),
{ 220: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 267 ),
+ ( sym: -11; act: 110 ),
{ 221: }
- ( sym: -30; act: 164 ),
+ ( sym: -38; act: 268 ),
+ ( sym: -37; act: 269 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -11; act: 110 ),
+{ 222: }
+{ 223: }
+ ( sym: -30; act: 166 ),
( sym: -29; act: 15 ),
( sym: -27; act: 16 ),
- ( sym: -20; act: 269 ),
+ ( sym: -20; act: 271 ),
( sym: -18; act: 17 ),
- ( sym: -16; act: 166 ),
+ ( sym: -16; act: 168 ),
( sym: -11; act: 19 ),
-{ 222: }
-{ 223: }
{ 224: }
- ( sym: -34; act: 271 ),
{ 225: }
- ( sym: -34; act: 121 ),
{ 226: }
- ( sym: -32; act: 223 ),
- ( sym: -31; act: 275 ),
- ( sym: -19; act: 276 ),
- ( sym: -11; act: 83 ),
+ ( sym: -34; act: 273 ),
{ 227: }
- ( sym: -32; act: 223 ),
- ( sym: -31; act: 278 ),
- ( sym: -19; act: 279 ),
- ( sym: -11; act: 83 ),
+ ( sym: -34; act: 122 ),
{ 228: }
- ( sym: -32; act: 223 ),
+ ( sym: -32; act: 225 ),
+ ( sym: -31; act: 277 ),
+ ( sym: -19; act: 278 ),
+ ( sym: -11; act: 83 ),
+{ 229: }
+ ( sym: -32; act: 225 ),
( sym: -31; act: 280 ),
( sym: -19; act: 281 ),
( sym: -11; act: 83 ),
-{ 229: }
{ 230: }
+ ( sym: -32; act: 225 ),
+ ( sym: -31; act: 282 ),
+ ( sym: -19; act: 283 ),
+ ( sym: -11; act: 83 ),
{ 231: }
{ 232: }
{ 233: }
{ 234: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -13; act: 282 ),
- ( sym: -11; act: 110 ),
{ 235: }
{ 236: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 284 ),
+ ( sym: -11; act: 110 ),
{ 237: }
{ 238: }
{ 239: }
{ 240: }
- ( sym: -37; act: 107 ),
- ( sym: -29; act: 108 ),
- ( sym: -23; act: 285 ),
- ( sym: -11; act: 110 ),
{ 241: }
{ 242: }
- ( sym: -41; act: 194 ),
- ( sym: -39; act: 286 ),
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 107 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 196 ),
+ ( sym: -23; act: 287 ),
( sym: -11; act: 110 ),
{ 243: }
{ 244: }
+ ( sym: -41; act: 196 ),
+ ( sym: -39; act: 288 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 198 ),
+ ( sym: -11; act: 110 ),
{ 245: }
{ 246: }
{ 247: }
- ( sym: -37; act: 288 ),
- ( sym: -29; act: 108 ),
- ( sym: -11; act: 110 ),
{ 248: }
{ 249: }
+ ( sym: -37; act: 290 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -11; act: 110 ),
{ 250: }
{ 251: }
{ 252: }
@@ -7009,112 +7118,114 @@ yyg : array [1..yyngotos] of YYARec = (
{ 266: }
{ 267: }
{ 268: }
- ( sym: -4; act: 290 ),
{ 269: }
{ 270: }
- ( sym: -32; act: 223 ),
- ( sym: -31; act: 291 ),
- ( sym: -19; act: 292 ),
- ( sym: -11; act: 83 ),
+ ( sym: -4; act: 292 ),
{ 271: }
{ 272: }
- ( sym: -30; act: 164 ),
+ ( sym: -32; act: 225 ),
+ ( sym: -31; act: 293 ),
+ ( sym: -19; act: 294 ),
+ ( sym: -11; act: 83 ),
+{ 273: }
+{ 274: }
+ ( sym: -30; act: 166 ),
( sym: -29; act: 15 ),
( sym: -27; act: 16 ),
- ( sym: -20; act: 293 ),
+ ( sym: -20; act: 295 ),
( sym: -18; act: 17 ),
- ( sym: -16; act: 166 ),
+ ( sym: -16; act: 168 ),
( sym: -11; act: 19 ),
-{ 273: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+{ 275: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 294 ),
+ ( sym: -13; act: 296 ),
( sym: -11; act: 110 ),
-{ 274: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+{ 276: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 171 ),
+ ( sym: -13; act: 173 ),
( sym: -11; act: 110 ),
-{ 275: }
- ( sym: -34; act: 271 ),
-{ 276: }
- ( sym: -34; act: 121 ),
{ 277: }
- ( sym: -32; act: 223 ),
- ( sym: -31; act: 280 ),
- ( sym: -19; act: 297 ),
- ( sym: -11; act: 83 ),
+ ( sym: -34; act: 273 ),
{ 278: }
- ( sym: -34; act: 271 ),
+ ( sym: -34; act: 122 ),
{ 279: }
- ( sym: -34; act: 121 ),
+ ( sym: -32; act: 225 ),
+ ( sym: -31; act: 282 ),
+ ( sym: -19; act: 299 ),
+ ( sym: -11; act: 83 ),
{ 280: }
- ( sym: -34; act: 271 ),
+ ( sym: -34; act: 273 ),
{ 281: }
- ( sym: -34; act: 121 ),
+ ( sym: -34; act: 122 ),
{ 282: }
+ ( sym: -34; act: 273 ),
{ 283: }
+ ( sym: -34; act: 122 ),
{ 284: }
- ( sym: -30; act: 164 ),
+{ 285: }
+{ 286: }
+ ( sym: -30; act: 166 ),
( sym: -29; act: 15 ),
( sym: -27; act: 16 ),
- ( sym: -20; act: 299 ),
+ ( sym: -20; act: 301 ),
( sym: -18; act: 17 ),
- ( sym: -16; act: 166 ),
+ ( sym: -16; act: 168 ),
( sym: -11; act: 19 ),
-{ 285: }
-{ 286: }
{ 287: }
- ( sym: -37; act: 301 ),
- ( sym: -29; act: 108 ),
- ( sym: -11; act: 110 ),
{ 288: }
{ 289: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
+ ( sym: -37; act: 303 ),
( sym: -29; act: 108 ),
- ( sym: -13; act: 302 ),
( sym: -11; act: 110 ),
{ 290: }
{ 291: }
- ( sym: -34; act: 271 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 304 ),
+ ( sym: -11; act: 110 ),
{ 292: }
- ( sym: -34; act: 121 ),
{ 293: }
+ ( sym: -34; act: 273 ),
{ 294: }
+ ( sym: -34; act: 122 ),
{ 295: }
{ 296: }
{ 297: }
- ( sym: -34; act: 121 ),
{ 298: }
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -14; act: 306 ),
- ( sym: -13; act: 176 ),
- ( sym: -12; act: 177 ),
- ( sym: -11; act: 110 ),
{ 299: }
+ ( sym: -34; act: 122 ),
{ 300: }
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -14; act: 308 ),
+ ( sym: -13; act: 178 ),
+ ( sym: -12; act: 179 ),
+ ( sym: -11; act: 110 ),
{ 301: }
{ 302: }
{ 303: }
- ( sym: -41; act: 194 ),
- ( sym: -39; act: 308 ),
- ( sym: -37; act: 153 ),
- ( sym: -35; act: 170 ),
- ( sym: -29; act: 108 ),
- ( sym: -13; act: 196 ),
- ( sym: -11; act: 110 )
{ 304: }
{ 305: }
+ ( sym: -41; act: 196 ),
+ ( sym: -39; act: 310 ),
+ ( sym: -37; act: 154 ),
+ ( sym: -35; act: 172 ),
+ ( sym: -29; act: 108 ),
+ ( sym: -13; act: 198 ),
+ ( sym: -11; act: 110 )
{ 306: }
{ 307: }
{ 308: }
{ 309: }
{ 310: }
+{ 311: }
+{ 312: }
);
yyd : array [0..yynstates-1] of Integer = (
@@ -7236,14 +7347,14 @@ yyd : array [0..yynstates-1] of Integer = (
{ 115: } 0,
{ 116: } 0,
{ 117: } 0,
-{ 118: } -45,
-{ 119: } -47,
-{ 120: } 0,
-{ 121: } -106,
-{ 122: } 0,
+{ 118: } 0,
+{ 119: } -45,
+{ 120: } -47,
+{ 121: } 0,
+{ 122: } -106,
{ 123: } 0,
-{ 124: } -28,
-{ 125: } 0,
+{ 124: } 0,
+{ 125: } -28,
{ 126: } 0,
{ 127: } 0,
{ 128: } 0,
@@ -7254,22 +7365,22 @@ yyd : array [0..yynstates-1] of Integer = (
{ 133: } 0,
{ 134: } 0,
{ 135: } 0,
-{ 136: } -42,
-{ 137: } -61,
-{ 138: } -41,
-{ 139: } 0,
-{ 140: } -44,
-{ 141: } 0,
-{ 142: } -43,
-{ 143: } 0,
-{ 144: } -33,
-{ 145: } 0,
-{ 146: } -31,
-{ 147: } 0,
+{ 136: } 0,
+{ 137: } -42,
+{ 138: } -61,
+{ 139: } -41,
+{ 140: } 0,
+{ 141: } -44,
+{ 142: } 0,
+{ 143: } -43,
+{ 144: } 0,
+{ 145: } -33,
+{ 146: } 0,
+{ 147: } -31,
{ 148: } 0,
{ 149: } 0,
-{ 150: } -39,
-{ 151: } 0,
+{ 150: } 0,
+{ 151: } -39,
{ 152: } 0,
{ 153: } 0,
{ 154: } 0,
@@ -7285,40 +7396,40 @@ yyd : array [0..yynstates-1] of Integer = (
{ 164: } 0,
{ 165: } 0,
{ 166: } 0,
-{ 167: } -110,
+{ 167: } 0,
{ 168: } 0,
-{ 169: } -93,
-{ 170: } -121,
-{ 171: } 0,
-{ 172: } -108,
-{ 173: } -29,
-{ 174: } 0,
-{ 175: } 0,
+{ 169: } -110,
+{ 170: } 0,
+{ 171: } -93,
+{ 172: } -121,
+{ 173: } 0,
+{ 174: } -108,
+{ 175: } -29,
{ 176: } 0,
{ 177: } 0,
{ 178: } 0,
-{ 179: } -25,
+{ 179: } 0,
{ 180: } 0,
-{ 181: } 0,
+{ 181: } -25,
{ 182: } 0,
{ 183: } 0,
-{ 184: } -109,
-{ 185: } -63,
-{ 186: } -160,
-{ 187: } 0,
-{ 188: } 0,
+{ 184: } 0,
+{ 185: } 0,
+{ 186: } -109,
+{ 187: } -63,
+{ 188: } -161,
{ 189: } 0,
{ 190: } 0,
{ 191: } 0,
-{ 192: } -147,
-{ 193: } -148,
-{ 194: } 0,
-{ 195: } 0,
+{ 192: } 0,
+{ 193: } 0,
+{ 194: } -147,
+{ 195: } -148,
{ 196: } 0,
{ 197: } 0,
-{ 198: } -157,
+{ 198: } 0,
{ 199: } 0,
-{ 200: } 0,
+{ 200: } -158,
{ 201: } 0,
{ 202: } 0,
{ 203: } 0,
@@ -7340,31 +7451,31 @@ yyd : array [0..yynstates-1] of Integer = (
{ 219: } 0,
{ 220: } 0,
{ 221: } 0,
-{ 222: } -105,
+{ 222: } 0,
{ 223: } 0,
-{ 224: } 0,
+{ 224: } -105,
{ 225: } 0,
{ 226: } 0,
{ 227: } 0,
{ 228: } 0,
-{ 229: } -111,
-{ 230: } -107,
-{ 231: } -27,
-{ 232: } -21,
-{ 233: } -23,
-{ 234: } 0,
-{ 235: } 0,
-{ 236: } -85,
+{ 229: } 0,
+{ 230: } 0,
+{ 231: } -111,
+{ 232: } -107,
+{ 233: } -27,
+{ 234: } -21,
+{ 235: } -23,
+{ 236: } 0,
{ 237: } 0,
-{ 238: } -2,
-{ 239: } -36,
-{ 240: } 0,
-{ 241: } -166,
+{ 238: } -85,
+{ 239: } 0,
+{ 240: } -2,
+{ 241: } -36,
{ 242: } 0,
-{ 243: } -156,
-{ 244: } -159,
-{ 245: } 0,
-{ 246: } 0,
+{ 243: } -167,
+{ 244: } 0,
+{ 245: } -157,
+{ 246: } -160,
{ 247: } 0,
{ 248: } 0,
{ 249: } 0,
@@ -7373,9 +7484,9 @@ yyd : array [0..yynstates-1] of Integer = (
{ 252: } 0,
{ 253: } 0,
{ 254: } 0,
-{ 255: } -138,
+{ 255: } 0,
{ 256: } 0,
-{ 257: } 0,
+{ 257: } -138,
{ 258: } 0,
{ 259: } 0,
{ 260: } 0,
@@ -7384,14 +7495,14 @@ yyd : array [0..yynstates-1] of Integer = (
{ 263: } 0,
{ 264: } 0,
{ 265: } 0,
-{ 266: } -152,
+{ 266: } 0,
{ 267: } 0,
-{ 268: } 0,
-{ 269: } -92,
+{ 268: } -153,
+{ 269: } 0,
{ 270: } 0,
-{ 271: } -116,
+{ 271: } -92,
{ 272: } 0,
-{ 273: } 0,
+{ 273: } -116,
{ 274: } 0,
{ 275: } 0,
{ 276: } 0,
@@ -7401,34 +7512,36 @@ yyd : array [0..yynstates-1] of Integer = (
{ 280: } 0,
{ 281: } 0,
{ 282: } 0,
-{ 283: } -19,
+{ 283: } 0,
{ 284: } 0,
-{ 285: } 0,
-{ 286: } -168,
+{ 285: } -19,
+{ 286: } 0,
{ 287: } 0,
-{ 288: } 0,
+{ 288: } -169,
{ 289: } 0,
{ 290: } 0,
{ 291: } 0,
{ 292: } 0,
{ 293: } 0,
{ 294: } 0,
-{ 295: } -108,
-{ 296: } -119,
-{ 297: } 0,
-{ 298: } 0,
+{ 295: } 0,
+{ 296: } 0,
+{ 297: } -108,
+{ 298: } -119,
{ 299: } 0,
-{ 300: } -167,
+{ 300: } 0,
{ 301: } 0,
-{ 302: } 0,
+{ 302: } -168,
{ 303: } 0,
-{ 304: } -115,
-{ 305: } -117,
-{ 306: } -22,
-{ 307: } 0,
-{ 308: } 0,
-{ 309: } -32,
-{ 310: } -158
+{ 304: } 0,
+{ 305: } 0,
+{ 306: } -115,
+{ 307: } -117,
+{ 308: } -22,
+{ 309: } 0,
+{ 310: } 0,
+{ 311: } -32,
+{ 312: } -159
);
yyal : array [0..yynstates-1] of Integer = (
@@ -7509,240 +7622,242 @@ yyal : array [0..yynstates-1] of Integer = (
{ 74: } 539,
{ 75: } 541,
{ 76: } 541,
-{ 77: } 561,
-{ 78: } 582,
-{ 79: } 603,
-{ 80: } 603,
-{ 81: } 604,
-{ 82: } 610,
-{ 83: } 614,
-{ 84: } 622,
-{ 85: } 622,
-{ 86: } 630,
-{ 87: } 638,
-{ 88: } 638,
-{ 89: } 638,
-{ 90: } 638,
-{ 91: } 646,
-{ 92: } 654,
-{ 93: } 654,
-{ 94: } 655,
-{ 95: } 673,
-{ 96: } 674,
-{ 97: } 683,
-{ 98: } 683,
-{ 99: } 684,
-{ 100: } 687,
-{ 101: } 688,
-{ 102: } 692,
-{ 103: } 692,
-{ 104: } 694,
-{ 105: } 702,
-{ 106: } 703,
-{ 107: } 704,
-{ 108: } 708,
-{ 109: } 708,
-{ 110: } 709,
-{ 111: } 739,
-{ 112: } 763,
-{ 113: } 763,
-{ 114: } 763,
-{ 115: } 763,
-{ 116: } 782,
-{ 117: } 801,
-{ 118: } 820,
-{ 119: } 820,
-{ 120: } 820,
-{ 121: } 828,
-{ 122: } 828,
-{ 123: } 847,
-{ 124: } 867,
-{ 125: } 867,
-{ 126: } 868,
-{ 127: } 876,
-{ 128: } 898,
-{ 129: } 899,
-{ 130: } 918,
-{ 131: } 937,
-{ 132: } 941,
-{ 133: } 944,
-{ 134: } 951,
-{ 135: } 958,
-{ 136: } 965,
-{ 137: } 965,
-{ 138: } 965,
-{ 139: } 965,
-{ 140: } 967,
-{ 141: } 967,
-{ 142: } 970,
-{ 143: } 970,
-{ 144: } 989,
-{ 145: } 989,
-{ 146: } 992,
-{ 147: } 992,
-{ 148: } 994,
-{ 149: } 1013,
-{ 150: } 1032,
-{ 151: } 1032,
-{ 152: } 1052,
-{ 153: } 1072,
-{ 154: } 1102,
-{ 155: } 1120,
-{ 156: } 1143,
-{ 157: } 1148,
-{ 158: } 1165,
-{ 159: } 1190,
-{ 160: } 1209,
-{ 161: } 1239,
-{ 162: } 1269,
-{ 163: } 1299,
-{ 164: } 1306,
-{ 165: } 1308,
-{ 166: } 1309,
-{ 167: } 1320,
-{ 168: } 1320,
-{ 169: } 1331,
-{ 170: } 1331,
-{ 171: } 1331,
-{ 172: } 1349,
-{ 173: } 1349,
-{ 174: } 1349,
-{ 175: } 1355,
-{ 176: } 1356,
-{ 177: } 1374,
-{ 178: } 1396,
-{ 179: } 1397,
-{ 180: } 1397,
-{ 181: } 1398,
-{ 182: } 1422,
-{ 183: } 1446,
-{ 184: } 1455,
-{ 185: } 1455,
-{ 186: } 1455,
-{ 187: } 1455,
-{ 188: } 1475,
-{ 189: } 1477,
-{ 190: } 1478,
-{ 191: } 1479,
-{ 192: } 1498,
-{ 193: } 1498,
-{ 194: } 1498,
-{ 195: } 1501,
-{ 196: } 1502,
-{ 197: } 1522,
-{ 198: } 1523,
-{ 199: } 1523,
-{ 200: } 1524,
-{ 201: } 1543,
-{ 202: } 1544,
-{ 203: } 1563,
-{ 204: } 1582,
-{ 205: } 1601,
-{ 206: } 1620,
-{ 207: } 1639,
-{ 208: } 1658,
-{ 209: } 1677,
-{ 210: } 1696,
-{ 211: } 1715,
-{ 212: } 1734,
-{ 213: } 1753,
-{ 214: } 1772,
-{ 215: } 1791,
-{ 216: } 1810,
-{ 217: } 1829,
-{ 218: } 1848,
-{ 219: } 1867,
-{ 220: } 1912,
-{ 221: } 1915,
-{ 222: } 1934,
-{ 223: } 1934,
-{ 224: } 1935,
-{ 225: } 1939,
-{ 226: } 1943,
-{ 227: } 1953,
-{ 228: } 1964,
-{ 229: } 1975,
-{ 230: } 1975,
-{ 231: } 1975,
-{ 232: } 1975,
-{ 233: } 1975,
-{ 234: } 1975,
-{ 235: } 1994,
-{ 236: } 1995,
-{ 237: } 1995,
-{ 238: } 1996,
-{ 239: } 1996,
-{ 240: } 1996,
-{ 241: } 2015,
-{ 242: } 2015,
-{ 243: } 2036,
-{ 244: } 2036,
-{ 245: } 2036,
-{ 246: } 2037,
-{ 247: } 2067,
-{ 248: } 2086,
-{ 249: } 2116,
-{ 250: } 2146,
-{ 251: } 2176,
-{ 252: } 2206,
-{ 253: } 2236,
-{ 254: } 2266,
-{ 255: } 2296,
-{ 256: } 2296,
-{ 257: } 2314,
-{ 258: } 2344,
-{ 259: } 2374,
-{ 260: } 2404,
-{ 261: } 2434,
-{ 262: } 2464,
-{ 263: } 2494,
-{ 264: } 2524,
-{ 265: } 2554,
-{ 266: } 2584,
-{ 267: } 2584,
-{ 268: } 2614,
-{ 269: } 2616,
-{ 270: } 2616,
-{ 271: } 2627,
-{ 272: } 2627,
-{ 273: } 2646,
-{ 274: } 2665,
-{ 275: } 2685,
-{ 276: } 2688,
-{ 277: } 2691,
-{ 278: } 2702,
-{ 279: } 2706,
-{ 280: } 2710,
-{ 281: } 2714,
-{ 282: } 2718,
-{ 283: } 2736,
-{ 284: } 2736,
-{ 285: } 2755,
-{ 286: } 2756,
-{ 287: } 2756,
-{ 288: } 2775,
-{ 289: } 2805,
-{ 290: } 2824,
-{ 291: } 2825,
-{ 292: } 2829,
-{ 293: } 2833,
-{ 294: } 2834,
-{ 295: } 2852,
-{ 296: } 2852,
-{ 297: } 2852,
-{ 298: } 2856,
-{ 299: } 2878,
-{ 300: } 2879,
-{ 301: } 2879,
-{ 302: } 2909,
-{ 303: } 2939,
-{ 304: } 2959,
-{ 305: } 2959,
-{ 306: } 2959,
-{ 307: } 2959,
-{ 308: } 2960,
-{ 309: } 2961,
-{ 310: } 2961
+{ 77: } 562,
+{ 78: } 583,
+{ 79: } 604,
+{ 80: } 604,
+{ 81: } 605,
+{ 82: } 611,
+{ 83: } 615,
+{ 84: } 623,
+{ 85: } 623,
+{ 86: } 631,
+{ 87: } 639,
+{ 88: } 639,
+{ 89: } 639,
+{ 90: } 639,
+{ 91: } 647,
+{ 92: } 655,
+{ 93: } 655,
+{ 94: } 656,
+{ 95: } 674,
+{ 96: } 675,
+{ 97: } 684,
+{ 98: } 684,
+{ 99: } 685,
+{ 100: } 688,
+{ 101: } 689,
+{ 102: } 693,
+{ 103: } 693,
+{ 104: } 695,
+{ 105: } 703,
+{ 106: } 704,
+{ 107: } 705,
+{ 108: } 709,
+{ 109: } 709,
+{ 110: } 710,
+{ 111: } 740,
+{ 112: } 765,
+{ 113: } 765,
+{ 114: } 765,
+{ 115: } 765,
+{ 116: } 785,
+{ 117: } 805,
+{ 118: } 825,
+{ 119: } 845,
+{ 120: } 845,
+{ 121: } 845,
+{ 122: } 853,
+{ 123: } 853,
+{ 124: } 872,
+{ 125: } 893,
+{ 126: } 893,
+{ 127: } 894,
+{ 128: } 902,
+{ 129: } 925,
+{ 130: } 926,
+{ 131: } 946,
+{ 132: } 966,
+{ 133: } 970,
+{ 134: } 973,
+{ 135: } 980,
+{ 136: } 987,
+{ 137: } 994,
+{ 138: } 994,
+{ 139: } 994,
+{ 140: } 994,
+{ 141: } 996,
+{ 142: } 996,
+{ 143: } 999,
+{ 144: } 999,
+{ 145: } 1019,
+{ 146: } 1019,
+{ 147: } 1022,
+{ 148: } 1022,
+{ 149: } 1024,
+{ 150: } 1044,
+{ 151: } 1064,
+{ 152: } 1064,
+{ 153: } 1085,
+{ 154: } 1106,
+{ 155: } 1136,
+{ 156: } 1154,
+{ 157: } 1177,
+{ 158: } 1182,
+{ 159: } 1199,
+{ 160: } 1224,
+{ 161: } 1244,
+{ 162: } 1274,
+{ 163: } 1304,
+{ 164: } 1334,
+{ 165: } 1364,
+{ 166: } 1371,
+{ 167: } 1373,
+{ 168: } 1374,
+{ 169: } 1385,
+{ 170: } 1385,
+{ 171: } 1396,
+{ 172: } 1396,
+{ 173: } 1396,
+{ 174: } 1414,
+{ 175: } 1414,
+{ 176: } 1414,
+{ 177: } 1420,
+{ 178: } 1421,
+{ 179: } 1439,
+{ 180: } 1462,
+{ 181: } 1463,
+{ 182: } 1463,
+{ 183: } 1464,
+{ 184: } 1488,
+{ 185: } 1512,
+{ 186: } 1521,
+{ 187: } 1521,
+{ 188: } 1521,
+{ 189: } 1521,
+{ 190: } 1541,
+{ 191: } 1543,
+{ 192: } 1544,
+{ 193: } 1545,
+{ 194: } 1565,
+{ 195: } 1565,
+{ 196: } 1565,
+{ 197: } 1568,
+{ 198: } 1569,
+{ 199: } 1589,
+{ 200: } 1590,
+{ 201: } 1590,
+{ 202: } 1591,
+{ 203: } 1611,
+{ 204: } 1612,
+{ 205: } 1632,
+{ 206: } 1652,
+{ 207: } 1672,
+{ 208: } 1692,
+{ 209: } 1712,
+{ 210: } 1732,
+{ 211: } 1752,
+{ 212: } 1772,
+{ 213: } 1792,
+{ 214: } 1812,
+{ 215: } 1832,
+{ 216: } 1852,
+{ 217: } 1872,
+{ 218: } 1892,
+{ 219: } 1912,
+{ 220: } 1932,
+{ 221: } 1952,
+{ 222: } 1997,
+{ 223: } 2000,
+{ 224: } 2019,
+{ 225: } 2019,
+{ 226: } 2020,
+{ 227: } 2024,
+{ 228: } 2028,
+{ 229: } 2038,
+{ 230: } 2049,
+{ 231: } 2060,
+{ 232: } 2060,
+{ 233: } 2060,
+{ 234: } 2060,
+{ 235: } 2060,
+{ 236: } 2060,
+{ 237: } 2080,
+{ 238: } 2081,
+{ 239: } 2081,
+{ 240: } 2082,
+{ 241: } 2082,
+{ 242: } 2082,
+{ 243: } 2102,
+{ 244: } 2102,
+{ 245: } 2124,
+{ 246: } 2124,
+{ 247: } 2124,
+{ 248: } 2125,
+{ 249: } 2155,
+{ 250: } 2175,
+{ 251: } 2205,
+{ 252: } 2235,
+{ 253: } 2265,
+{ 254: } 2295,
+{ 255: } 2325,
+{ 256: } 2355,
+{ 257: } 2385,
+{ 258: } 2385,
+{ 259: } 2403,
+{ 260: } 2433,
+{ 261: } 2463,
+{ 262: } 2493,
+{ 263: } 2523,
+{ 264: } 2553,
+{ 265: } 2583,
+{ 266: } 2613,
+{ 267: } 2643,
+{ 268: } 2673,
+{ 269: } 2673,
+{ 270: } 2703,
+{ 271: } 2705,
+{ 272: } 2705,
+{ 273: } 2716,
+{ 274: } 2716,
+{ 275: } 2735,
+{ 276: } 2755,
+{ 277: } 2776,
+{ 278: } 2779,
+{ 279: } 2782,
+{ 280: } 2793,
+{ 281: } 2797,
+{ 282: } 2801,
+{ 283: } 2805,
+{ 284: } 2809,
+{ 285: } 2827,
+{ 286: } 2827,
+{ 287: } 2846,
+{ 288: } 2847,
+{ 289: } 2847,
+{ 290: } 2867,
+{ 291: } 2897,
+{ 292: } 2917,
+{ 293: } 2918,
+{ 294: } 2922,
+{ 295: } 2926,
+{ 296: } 2927,
+{ 297: } 2945,
+{ 298: } 2945,
+{ 299: } 2945,
+{ 300: } 2949,
+{ 301: } 2972,
+{ 302: } 2973,
+{ 303: } 2973,
+{ 304: } 3003,
+{ 305: } 3033,
+{ 306: } 3054,
+{ 307: } 3054,
+{ 308: } 3054,
+{ 309: } 3054,
+{ 310: } 3055,
+{ 311: } 3056,
+{ 312: } 3056
);
yyah : array [0..yynstates-1] of Integer = (
@@ -7822,241 +7937,243 @@ yyah : array [0..yynstates-1] of Integer = (
{ 73: } 538,
{ 74: } 540,
{ 75: } 540,
-{ 76: } 560,
-{ 77: } 581,
-{ 78: } 602,
-{ 79: } 602,
-{ 80: } 603,
-{ 81: } 609,
-{ 82: } 613,
-{ 83: } 621,
-{ 84: } 621,
-{ 85: } 629,
-{ 86: } 637,
-{ 87: } 637,
-{ 88: } 637,
-{ 89: } 637,
-{ 90: } 645,
-{ 91: } 653,
-{ 92: } 653,
-{ 93: } 654,
-{ 94: } 672,
-{ 95: } 673,
-{ 96: } 682,
-{ 97: } 682,
-{ 98: } 683,
-{ 99: } 686,
-{ 100: } 687,
-{ 101: } 691,
-{ 102: } 691,
-{ 103: } 693,
-{ 104: } 701,
-{ 105: } 702,
-{ 106: } 703,
-{ 107: } 707,
-{ 108: } 707,
-{ 109: } 708,
-{ 110: } 738,
-{ 111: } 762,
-{ 112: } 762,
-{ 113: } 762,
-{ 114: } 762,
-{ 115: } 781,
-{ 116: } 800,
-{ 117: } 819,
-{ 118: } 819,
-{ 119: } 819,
-{ 120: } 827,
-{ 121: } 827,
-{ 122: } 846,
-{ 123: } 866,
-{ 124: } 866,
-{ 125: } 867,
-{ 126: } 875,
-{ 127: } 897,
-{ 128: } 898,
-{ 129: } 917,
-{ 130: } 936,
-{ 131: } 940,
-{ 132: } 943,
-{ 133: } 950,
-{ 134: } 957,
-{ 135: } 964,
-{ 136: } 964,
-{ 137: } 964,
-{ 138: } 964,
-{ 139: } 966,
-{ 140: } 966,
-{ 141: } 969,
-{ 142: } 969,
-{ 143: } 988,
-{ 144: } 988,
-{ 145: } 991,
-{ 146: } 991,
-{ 147: } 993,
-{ 148: } 1012,
-{ 149: } 1031,
-{ 150: } 1031,
-{ 151: } 1051,
-{ 152: } 1071,
-{ 153: } 1101,
-{ 154: } 1119,
-{ 155: } 1142,
-{ 156: } 1147,
-{ 157: } 1164,
-{ 158: } 1189,
-{ 159: } 1208,
-{ 160: } 1238,
-{ 161: } 1268,
-{ 162: } 1298,
-{ 163: } 1305,
-{ 164: } 1307,
-{ 165: } 1308,
-{ 166: } 1319,
-{ 167: } 1319,
-{ 168: } 1330,
-{ 169: } 1330,
-{ 170: } 1330,
-{ 171: } 1348,
-{ 172: } 1348,
-{ 173: } 1348,
-{ 174: } 1354,
-{ 175: } 1355,
-{ 176: } 1373,
-{ 177: } 1395,
-{ 178: } 1396,
-{ 179: } 1396,
-{ 180: } 1397,
-{ 181: } 1421,
-{ 182: } 1445,
-{ 183: } 1454,
-{ 184: } 1454,
-{ 185: } 1454,
-{ 186: } 1454,
-{ 187: } 1474,
-{ 188: } 1476,
-{ 189: } 1477,
-{ 190: } 1478,
-{ 191: } 1497,
-{ 192: } 1497,
-{ 193: } 1497,
-{ 194: } 1500,
-{ 195: } 1501,
-{ 196: } 1521,
-{ 197: } 1522,
-{ 198: } 1522,
-{ 199: } 1523,
-{ 200: } 1542,
-{ 201: } 1543,
-{ 202: } 1562,
-{ 203: } 1581,
-{ 204: } 1600,
-{ 205: } 1619,
-{ 206: } 1638,
-{ 207: } 1657,
-{ 208: } 1676,
-{ 209: } 1695,
-{ 210: } 1714,
-{ 211: } 1733,
-{ 212: } 1752,
-{ 213: } 1771,
-{ 214: } 1790,
-{ 215: } 1809,
-{ 216: } 1828,
-{ 217: } 1847,
-{ 218: } 1866,
-{ 219: } 1911,
-{ 220: } 1914,
-{ 221: } 1933,
-{ 222: } 1933,
-{ 223: } 1934,
-{ 224: } 1938,
-{ 225: } 1942,
-{ 226: } 1952,
-{ 227: } 1963,
-{ 228: } 1974,
-{ 229: } 1974,
-{ 230: } 1974,
-{ 231: } 1974,
-{ 232: } 1974,
-{ 233: } 1974,
-{ 234: } 1993,
-{ 235: } 1994,
-{ 236: } 1994,
-{ 237: } 1995,
-{ 238: } 1995,
-{ 239: } 1995,
-{ 240: } 2014,
-{ 241: } 2014,
-{ 242: } 2035,
-{ 243: } 2035,
-{ 244: } 2035,
-{ 245: } 2036,
-{ 246: } 2066,
-{ 247: } 2085,
-{ 248: } 2115,
-{ 249: } 2145,
-{ 250: } 2175,
-{ 251: } 2205,
-{ 252: } 2235,
-{ 253: } 2265,
-{ 254: } 2295,
-{ 255: } 2295,
-{ 256: } 2313,
-{ 257: } 2343,
-{ 258: } 2373,
-{ 259: } 2403,
-{ 260: } 2433,
-{ 261: } 2463,
-{ 262: } 2493,
-{ 263: } 2523,
-{ 264: } 2553,
-{ 265: } 2583,
-{ 266: } 2583,
-{ 267: } 2613,
-{ 268: } 2615,
-{ 269: } 2615,
-{ 270: } 2626,
-{ 271: } 2626,
-{ 272: } 2645,
-{ 273: } 2664,
-{ 274: } 2684,
-{ 275: } 2687,
-{ 276: } 2690,
-{ 277: } 2701,
-{ 278: } 2705,
-{ 279: } 2709,
-{ 280: } 2713,
-{ 281: } 2717,
-{ 282: } 2735,
-{ 283: } 2735,
-{ 284: } 2754,
-{ 285: } 2755,
-{ 286: } 2755,
-{ 287: } 2774,
-{ 288: } 2804,
-{ 289: } 2823,
-{ 290: } 2824,
-{ 291: } 2828,
-{ 292: } 2832,
-{ 293: } 2833,
-{ 294: } 2851,
-{ 295: } 2851,
-{ 296: } 2851,
-{ 297: } 2855,
-{ 298: } 2877,
-{ 299: } 2878,
-{ 300: } 2878,
-{ 301: } 2908,
-{ 302: } 2938,
-{ 303: } 2958,
-{ 304: } 2958,
-{ 305: } 2958,
-{ 306: } 2958,
-{ 307: } 2959,
-{ 308: } 2960,
-{ 309: } 2960,
-{ 310: } 2960
+{ 76: } 561,
+{ 77: } 582,
+{ 78: } 603,
+{ 79: } 603,
+{ 80: } 604,
+{ 81: } 610,
+{ 82: } 614,
+{ 83: } 622,
+{ 84: } 622,
+{ 85: } 630,
+{ 86: } 638,
+{ 87: } 638,
+{ 88: } 638,
+{ 89: } 638,
+{ 90: } 646,
+{ 91: } 654,
+{ 92: } 654,
+{ 93: } 655,
+{ 94: } 673,
+{ 95: } 674,
+{ 96: } 683,
+{ 97: } 683,
+{ 98: } 684,
+{ 99: } 687,
+{ 100: } 688,
+{ 101: } 692,
+{ 102: } 692,
+{ 103: } 694,
+{ 104: } 702,
+{ 105: } 703,
+{ 106: } 704,
+{ 107: } 708,
+{ 108: } 708,
+{ 109: } 709,
+{ 110: } 739,
+{ 111: } 764,
+{ 112: } 764,
+{ 113: } 764,
+{ 114: } 764,
+{ 115: } 784,
+{ 116: } 804,
+{ 117: } 824,
+{ 118: } 844,
+{ 119: } 844,
+{ 120: } 844,
+{ 121: } 852,
+{ 122: } 852,
+{ 123: } 871,
+{ 124: } 892,
+{ 125: } 892,
+{ 126: } 893,
+{ 127: } 901,
+{ 128: } 924,
+{ 129: } 925,
+{ 130: } 945,
+{ 131: } 965,
+{ 132: } 969,
+{ 133: } 972,
+{ 134: } 979,
+{ 135: } 986,
+{ 136: } 993,
+{ 137: } 993,
+{ 138: } 993,
+{ 139: } 993,
+{ 140: } 995,
+{ 141: } 995,
+{ 142: } 998,
+{ 143: } 998,
+{ 144: } 1018,
+{ 145: } 1018,
+{ 146: } 1021,
+{ 147: } 1021,
+{ 148: } 1023,
+{ 149: } 1043,
+{ 150: } 1063,
+{ 151: } 1063,
+{ 152: } 1084,
+{ 153: } 1105,
+{ 154: } 1135,
+{ 155: } 1153,
+{ 156: } 1176,
+{ 157: } 1181,
+{ 158: } 1198,
+{ 159: } 1223,
+{ 160: } 1243,
+{ 161: } 1273,
+{ 162: } 1303,
+{ 163: } 1333,
+{ 164: } 1363,
+{ 165: } 1370,
+{ 166: } 1372,
+{ 167: } 1373,
+{ 168: } 1384,
+{ 169: } 1384,
+{ 170: } 1395,
+{ 171: } 1395,
+{ 172: } 1395,
+{ 173: } 1413,
+{ 174: } 1413,
+{ 175: } 1413,
+{ 176: } 1419,
+{ 177: } 1420,
+{ 178: } 1438,
+{ 179: } 1461,
+{ 180: } 1462,
+{ 181: } 1462,
+{ 182: } 1463,
+{ 183: } 1487,
+{ 184: } 1511,
+{ 185: } 1520,
+{ 186: } 1520,
+{ 187: } 1520,
+{ 188: } 1520,
+{ 189: } 1540,
+{ 190: } 1542,
+{ 191: } 1543,
+{ 192: } 1544,
+{ 193: } 1564,
+{ 194: } 1564,
+{ 195: } 1564,
+{ 196: } 1567,
+{ 197: } 1568,
+{ 198: } 1588,
+{ 199: } 1589,
+{ 200: } 1589,
+{ 201: } 1590,
+{ 202: } 1610,
+{ 203: } 1611,
+{ 204: } 1631,
+{ 205: } 1651,
+{ 206: } 1671,
+{ 207: } 1691,
+{ 208: } 1711,
+{ 209: } 1731,
+{ 210: } 1751,
+{ 211: } 1771,
+{ 212: } 1791,
+{ 213: } 1811,
+{ 214: } 1831,
+{ 215: } 1851,
+{ 216: } 1871,
+{ 217: } 1891,
+{ 218: } 1911,
+{ 219: } 1931,
+{ 220: } 1951,
+{ 221: } 1996,
+{ 222: } 1999,
+{ 223: } 2018,
+{ 224: } 2018,
+{ 225: } 2019,
+{ 226: } 2023,
+{ 227: } 2027,
+{ 228: } 2037,
+{ 229: } 2048,
+{ 230: } 2059,
+{ 231: } 2059,
+{ 232: } 2059,
+{ 233: } 2059,
+{ 234: } 2059,
+{ 235: } 2059,
+{ 236: } 2079,
+{ 237: } 2080,
+{ 238: } 2080,
+{ 239: } 2081,
+{ 240: } 2081,
+{ 241: } 2081,
+{ 242: } 2101,
+{ 243: } 2101,
+{ 244: } 2123,
+{ 245: } 2123,
+{ 246: } 2123,
+{ 247: } 2124,
+{ 248: } 2154,
+{ 249: } 2174,
+{ 250: } 2204,
+{ 251: } 2234,
+{ 252: } 2264,
+{ 253: } 2294,
+{ 254: } 2324,
+{ 255: } 2354,
+{ 256: } 2384,
+{ 257: } 2384,
+{ 258: } 2402,
+{ 259: } 2432,
+{ 260: } 2462,
+{ 261: } 2492,
+{ 262: } 2522,
+{ 263: } 2552,
+{ 264: } 2582,
+{ 265: } 2612,
+{ 266: } 2642,
+{ 267: } 2672,
+{ 268: } 2672,
+{ 269: } 2702,
+{ 270: } 2704,
+{ 271: } 2704,
+{ 272: } 2715,
+{ 273: } 2715,
+{ 274: } 2734,
+{ 275: } 2754,
+{ 276: } 2775,
+{ 277: } 2778,
+{ 278: } 2781,
+{ 279: } 2792,
+{ 280: } 2796,
+{ 281: } 2800,
+{ 282: } 2804,
+{ 283: } 2808,
+{ 284: } 2826,
+{ 285: } 2826,
+{ 286: } 2845,
+{ 287: } 2846,
+{ 288: } 2846,
+{ 289: } 2866,
+{ 290: } 2896,
+{ 291: } 2916,
+{ 292: } 2917,
+{ 293: } 2921,
+{ 294: } 2925,
+{ 295: } 2926,
+{ 296: } 2944,
+{ 297: } 2944,
+{ 298: } 2944,
+{ 299: } 2948,
+{ 300: } 2971,
+{ 301: } 2972,
+{ 302: } 2972,
+{ 303: } 3002,
+{ 304: } 3032,
+{ 305: } 3053,
+{ 306: } 3053,
+{ 307: } 3053,
+{ 308: } 3053,
+{ 309: } 3054,
+{ 310: } 3055,
+{ 311: } 3055,
+{ 312: } 3055
);
yygl : array [0..yynstates-1] of Integer = (
@@ -8179,198 +8296,200 @@ yygl : array [0..yynstates-1] of Integer = (
{ 116: } 118,
{ 117: } 121,
{ 118: } 124,
-{ 119: } 124,
-{ 120: } 124,
+{ 119: } 127,
+{ 120: } 127,
{ 121: } 127,
-{ 122: } 127,
-{ 123: } 134,
-{ 124: } 139,
-{ 125: } 139,
-{ 126: } 139,
+{ 122: } 130,
+{ 123: } 130,
+{ 124: } 137,
+{ 125: } 142,
+{ 126: } 142,
{ 127: } 142,
-{ 128: } 149,
-{ 129: } 149,
-{ 130: } 154,
-{ 131: } 159,
-{ 132: } 159,
-{ 133: } 160,
-{ 134: } 161,
-{ 135: } 162,
-{ 136: } 163,
-{ 137: } 163,
-{ 138: } 163,
-{ 139: } 163,
-{ 140: } 163,
-{ 141: } 163,
+{ 128: } 145,
+{ 129: } 152,
+{ 130: } 152,
+{ 131: } 157,
+{ 132: } 162,
+{ 133: } 162,
+{ 134: } 163,
+{ 135: } 164,
+{ 136: } 165,
+{ 137: } 166,
+{ 138: } 166,
+{ 139: } 166,
+{ 140: } 166,
+{ 141: } 166,
{ 142: } 166,
-{ 143: } 166,
-{ 144: } 171,
-{ 145: } 171,
-{ 146: } 172,
-{ 147: } 172,
-{ 148: } 174,
-{ 149: } 179,
-{ 150: } 184,
-{ 151: } 184,
-{ 152: } 191,
-{ 153: } 198,
-{ 154: } 198,
-{ 155: } 198,
-{ 156: } 198,
-{ 157: } 199,
-{ 158: } 199,
-{ 159: } 199,
+{ 143: } 169,
+{ 144: } 169,
+{ 145: } 174,
+{ 146: } 174,
+{ 147: } 175,
+{ 148: } 175,
+{ 149: } 177,
+{ 150: } 182,
+{ 151: } 187,
+{ 152: } 187,
+{ 153: } 194,
+{ 154: } 201,
+{ 155: } 201,
+{ 156: } 201,
+{ 157: } 201,
+{ 158: } 202,
+{ 159: } 202,
{ 160: } 202,
-{ 161: } 202,
-{ 162: } 202,
-{ 163: } 202,
-{ 164: } 203,
-{ 165: } 203,
-{ 166: } 203,
-{ 167: } 207,
-{ 168: } 207,
-{ 169: } 207,
-{ 170: } 207,
-{ 171: } 207,
-{ 172: } 207,
-{ 173: } 207,
-{ 174: } 207,
-{ 175: } 208,
-{ 176: } 208,
-{ 177: } 208,
-{ 178: } 215,
-{ 179: } 215,
-{ 180: } 215,
-{ 181: } 216,
-{ 182: } 216,
-{ 183: } 216,
-{ 184: } 220,
-{ 185: } 220,
-{ 186: } 220,
-{ 187: } 220,
-{ 188: } 220,
-{ 189: } 221,
-{ 190: } 221,
-{ 191: } 221,
-{ 192: } 225,
-{ 193: } 225,
-{ 194: } 225,
-{ 195: } 225,
-{ 196: } 225,
-{ 197: } 225,
-{ 198: } 225,
-{ 199: } 225,
-{ 200: } 225,
+{ 161: } 205,
+{ 162: } 205,
+{ 163: } 205,
+{ 164: } 205,
+{ 165: } 205,
+{ 166: } 206,
+{ 167: } 206,
+{ 168: } 206,
+{ 169: } 210,
+{ 170: } 210,
+{ 171: } 210,
+{ 172: } 210,
+{ 173: } 210,
+{ 174: } 210,
+{ 175: } 210,
+{ 176: } 210,
+{ 177: } 211,
+{ 178: } 211,
+{ 179: } 211,
+{ 180: } 218,
+{ 181: } 218,
+{ 182: } 218,
+{ 183: } 219,
+{ 184: } 219,
+{ 185: } 219,
+{ 186: } 223,
+{ 187: } 223,
+{ 188: } 223,
+{ 189: } 223,
+{ 190: } 223,
+{ 191: } 224,
+{ 192: } 224,
+{ 193: } 224,
+{ 194: } 228,
+{ 195: } 228,
+{ 196: } 228,
+{ 197: } 228,
+{ 198: } 228,
+{ 199: } 228,
+{ 200: } 228,
{ 201: } 228,
{ 202: } 228,
-{ 203: } 233,
-{ 204: } 238,
-{ 205: } 243,
-{ 206: } 248,
-{ 207: } 253,
-{ 208: } 258,
-{ 209: } 263,
-{ 210: } 269,
-{ 211: } 274,
-{ 212: } 279,
-{ 213: } 284,
-{ 214: } 289,
-{ 215: } 294,
-{ 216: } 299,
-{ 217: } 304,
-{ 218: } 309,
-{ 219: } 314,
-{ 220: } 318,
-{ 221: } 318,
-{ 222: } 325,
-{ 223: } 325,
-{ 224: } 325,
-{ 225: } 326,
-{ 226: } 327,
-{ 227: } 331,
-{ 228: } 335,
-{ 229: } 339,
-{ 230: } 339,
-{ 231: } 339,
-{ 232: } 339,
-{ 233: } 339,
-{ 234: } 339,
-{ 235: } 344,
-{ 236: } 344,
-{ 237: } 344,
-{ 238: } 344,
-{ 239: } 344,
-{ 240: } 344,
-{ 241: } 348,
-{ 242: } 348,
-{ 243: } 355,
-{ 244: } 355,
-{ 245: } 355,
-{ 246: } 355,
-{ 247: } 355,
+{ 203: } 231,
+{ 204: } 231,
+{ 205: } 236,
+{ 206: } 241,
+{ 207: } 246,
+{ 208: } 251,
+{ 209: } 256,
+{ 210: } 261,
+{ 211: } 266,
+{ 212: } 272,
+{ 213: } 277,
+{ 214: } 282,
+{ 215: } 287,
+{ 216: } 292,
+{ 217: } 297,
+{ 218: } 302,
+{ 219: } 307,
+{ 220: } 312,
+{ 221: } 317,
+{ 222: } 321,
+{ 223: } 321,
+{ 224: } 328,
+{ 225: } 328,
+{ 226: } 328,
+{ 227: } 329,
+{ 228: } 330,
+{ 229: } 334,
+{ 230: } 338,
+{ 231: } 342,
+{ 232: } 342,
+{ 233: } 342,
+{ 234: } 342,
+{ 235: } 342,
+{ 236: } 342,
+{ 237: } 347,
+{ 238: } 347,
+{ 239: } 347,
+{ 240: } 347,
+{ 241: } 347,
+{ 242: } 347,
+{ 243: } 351,
+{ 244: } 351,
+{ 245: } 358,
+{ 246: } 358,
+{ 247: } 358,
{ 248: } 358,
{ 249: } 358,
-{ 250: } 358,
-{ 251: } 358,
-{ 252: } 358,
-{ 253: } 358,
-{ 254: } 358,
-{ 255: } 358,
-{ 256: } 358,
-{ 257: } 358,
-{ 258: } 358,
-{ 259: } 358,
-{ 260: } 358,
-{ 261: } 358,
-{ 262: } 358,
-{ 263: } 358,
-{ 264: } 358,
-{ 265: } 358,
-{ 266: } 358,
-{ 267: } 358,
-{ 268: } 358,
-{ 269: } 359,
-{ 270: } 359,
-{ 271: } 363,
-{ 272: } 363,
-{ 273: } 370,
-{ 274: } 375,
-{ 275: } 380,
-{ 276: } 381,
-{ 277: } 382,
-{ 278: } 386,
-{ 279: } 387,
-{ 280: } 388,
-{ 281: } 389,
-{ 282: } 390,
-{ 283: } 390,
-{ 284: } 390,
-{ 285: } 397,
-{ 286: } 397,
-{ 287: } 397,
+{ 250: } 361,
+{ 251: } 361,
+{ 252: } 361,
+{ 253: } 361,
+{ 254: } 361,
+{ 255: } 361,
+{ 256: } 361,
+{ 257: } 361,
+{ 258: } 361,
+{ 259: } 361,
+{ 260: } 361,
+{ 261: } 361,
+{ 262: } 361,
+{ 263: } 361,
+{ 264: } 361,
+{ 265: } 361,
+{ 266: } 361,
+{ 267: } 361,
+{ 268: } 361,
+{ 269: } 361,
+{ 270: } 361,
+{ 271: } 362,
+{ 272: } 362,
+{ 273: } 366,
+{ 274: } 366,
+{ 275: } 373,
+{ 276: } 378,
+{ 277: } 383,
+{ 278: } 384,
+{ 279: } 385,
+{ 280: } 389,
+{ 281: } 390,
+{ 282: } 391,
+{ 283: } 392,
+{ 284: } 393,
+{ 285: } 393,
+{ 286: } 393,
+{ 287: } 400,
{ 288: } 400,
{ 289: } 400,
-{ 290: } 405,
-{ 291: } 405,
-{ 292: } 406,
-{ 293: } 407,
-{ 294: } 407,
-{ 295: } 407,
-{ 296: } 407,
-{ 297: } 407,
-{ 298: } 408,
-{ 299: } 415,
-{ 300: } 415,
-{ 301: } 415,
-{ 302: } 415,
-{ 303: } 415,
-{ 304: } 422,
-{ 305: } 422,
-{ 306: } 422,
-{ 307: } 422,
-{ 308: } 422,
-{ 309: } 422,
-{ 310: } 422
+{ 290: } 403,
+{ 291: } 403,
+{ 292: } 408,
+{ 293: } 408,
+{ 294: } 409,
+{ 295: } 410,
+{ 296: } 410,
+{ 297: } 410,
+{ 298: } 410,
+{ 299: } 410,
+{ 300: } 411,
+{ 301: } 418,
+{ 302: } 418,
+{ 303: } 418,
+{ 304: } 418,
+{ 305: } 418,
+{ 306: } 425,
+{ 307: } 425,
+{ 308: } 425,
+{ 309: } 425,
+{ 310: } 425,
+{ 311: } 425,
+{ 312: } 425
);
yygh : array [0..yynstates-1] of Integer = (
@@ -8492,199 +8611,201 @@ yygh : array [0..yynstates-1] of Integer = (
{ 115: } 117,
{ 116: } 120,
{ 117: } 123,
-{ 118: } 123,
-{ 119: } 123,
+{ 118: } 126,
+{ 119: } 126,
{ 120: } 126,
-{ 121: } 126,
-{ 122: } 133,
-{ 123: } 138,
-{ 124: } 138,
-{ 125: } 138,
+{ 121: } 129,
+{ 122: } 129,
+{ 123: } 136,
+{ 124: } 141,
+{ 125: } 141,
{ 126: } 141,
-{ 127: } 148,
-{ 128: } 148,
-{ 129: } 153,
-{ 130: } 158,
-{ 131: } 158,
-{ 132: } 159,
-{ 133: } 160,
-{ 134: } 161,
-{ 135: } 162,
-{ 136: } 162,
-{ 137: } 162,
-{ 138: } 162,
-{ 139: } 162,
-{ 140: } 162,
+{ 127: } 144,
+{ 128: } 151,
+{ 129: } 151,
+{ 130: } 156,
+{ 131: } 161,
+{ 132: } 161,
+{ 133: } 162,
+{ 134: } 163,
+{ 135: } 164,
+{ 136: } 165,
+{ 137: } 165,
+{ 138: } 165,
+{ 139: } 165,
+{ 140: } 165,
{ 141: } 165,
-{ 142: } 165,
-{ 143: } 170,
-{ 144: } 170,
-{ 145: } 171,
-{ 146: } 171,
-{ 147: } 173,
-{ 148: } 178,
-{ 149: } 183,
-{ 150: } 183,
-{ 151: } 190,
-{ 152: } 197,
-{ 153: } 197,
-{ 154: } 197,
-{ 155: } 197,
-{ 156: } 198,
-{ 157: } 198,
-{ 158: } 198,
+{ 142: } 168,
+{ 143: } 168,
+{ 144: } 173,
+{ 145: } 173,
+{ 146: } 174,
+{ 147: } 174,
+{ 148: } 176,
+{ 149: } 181,
+{ 150: } 186,
+{ 151: } 186,
+{ 152: } 193,
+{ 153: } 200,
+{ 154: } 200,
+{ 155: } 200,
+{ 156: } 200,
+{ 157: } 201,
+{ 158: } 201,
{ 159: } 201,
-{ 160: } 201,
-{ 161: } 201,
-{ 162: } 201,
-{ 163: } 202,
-{ 164: } 202,
-{ 165: } 202,
-{ 166: } 206,
-{ 167: } 206,
-{ 168: } 206,
-{ 169: } 206,
-{ 170: } 206,
-{ 171: } 206,
-{ 172: } 206,
-{ 173: } 206,
-{ 174: } 207,
-{ 175: } 207,
-{ 176: } 207,
-{ 177: } 214,
-{ 178: } 214,
-{ 179: } 214,
-{ 180: } 215,
-{ 181: } 215,
-{ 182: } 215,
-{ 183: } 219,
-{ 184: } 219,
-{ 185: } 219,
-{ 186: } 219,
-{ 187: } 219,
-{ 188: } 220,
-{ 189: } 220,
-{ 190: } 220,
-{ 191: } 224,
-{ 192: } 224,
-{ 193: } 224,
-{ 194: } 224,
-{ 195: } 224,
-{ 196: } 224,
-{ 197: } 224,
-{ 198: } 224,
-{ 199: } 224,
+{ 160: } 204,
+{ 161: } 204,
+{ 162: } 204,
+{ 163: } 204,
+{ 164: } 204,
+{ 165: } 205,
+{ 166: } 205,
+{ 167: } 205,
+{ 168: } 209,
+{ 169: } 209,
+{ 170: } 209,
+{ 171: } 209,
+{ 172: } 209,
+{ 173: } 209,
+{ 174: } 209,
+{ 175: } 209,
+{ 176: } 210,
+{ 177: } 210,
+{ 178: } 210,
+{ 179: } 217,
+{ 180: } 217,
+{ 181: } 217,
+{ 182: } 218,
+{ 183: } 218,
+{ 184: } 218,
+{ 185: } 222,
+{ 186: } 222,
+{ 187: } 222,
+{ 188: } 222,
+{ 189: } 222,
+{ 190: } 223,
+{ 191: } 223,
+{ 192: } 223,
+{ 193: } 227,
+{ 194: } 227,
+{ 195: } 227,
+{ 196: } 227,
+{ 197: } 227,
+{ 198: } 227,
+{ 199: } 227,
{ 200: } 227,
{ 201: } 227,
-{ 202: } 232,
-{ 203: } 237,
-{ 204: } 242,
-{ 205: } 247,
-{ 206: } 252,
-{ 207: } 257,
-{ 208: } 262,
-{ 209: } 268,
-{ 210: } 273,
-{ 211: } 278,
-{ 212: } 283,
-{ 213: } 288,
-{ 214: } 293,
-{ 215: } 298,
-{ 216: } 303,
-{ 217: } 308,
-{ 218: } 313,
-{ 219: } 317,
-{ 220: } 317,
-{ 221: } 324,
-{ 222: } 324,
-{ 223: } 324,
-{ 224: } 325,
-{ 225: } 326,
-{ 226: } 330,
-{ 227: } 334,
-{ 228: } 338,
-{ 229: } 338,
-{ 230: } 338,
-{ 231: } 338,
-{ 232: } 338,
-{ 233: } 338,
-{ 234: } 343,
-{ 235: } 343,
-{ 236: } 343,
-{ 237: } 343,
-{ 238: } 343,
-{ 239: } 343,
-{ 240: } 347,
-{ 241: } 347,
-{ 242: } 354,
-{ 243: } 354,
-{ 244: } 354,
-{ 245: } 354,
-{ 246: } 354,
+{ 202: } 230,
+{ 203: } 230,
+{ 204: } 235,
+{ 205: } 240,
+{ 206: } 245,
+{ 207: } 250,
+{ 208: } 255,
+{ 209: } 260,
+{ 210: } 265,
+{ 211: } 271,
+{ 212: } 276,
+{ 213: } 281,
+{ 214: } 286,
+{ 215: } 291,
+{ 216: } 296,
+{ 217: } 301,
+{ 218: } 306,
+{ 219: } 311,
+{ 220: } 316,
+{ 221: } 320,
+{ 222: } 320,
+{ 223: } 327,
+{ 224: } 327,
+{ 225: } 327,
+{ 226: } 328,
+{ 227: } 329,
+{ 228: } 333,
+{ 229: } 337,
+{ 230: } 341,
+{ 231: } 341,
+{ 232: } 341,
+{ 233: } 341,
+{ 234: } 341,
+{ 235: } 341,
+{ 236: } 346,
+{ 237: } 346,
+{ 238: } 346,
+{ 239: } 346,
+{ 240: } 346,
+{ 241: } 346,
+{ 242: } 350,
+{ 243: } 350,
+{ 244: } 357,
+{ 245: } 357,
+{ 246: } 357,
{ 247: } 357,
{ 248: } 357,
-{ 249: } 357,
-{ 250: } 357,
-{ 251: } 357,
-{ 252: } 357,
-{ 253: } 357,
-{ 254: } 357,
-{ 255: } 357,
-{ 256: } 357,
-{ 257: } 357,
-{ 258: } 357,
-{ 259: } 357,
-{ 260: } 357,
-{ 261: } 357,
-{ 262: } 357,
-{ 263: } 357,
-{ 264: } 357,
-{ 265: } 357,
-{ 266: } 357,
-{ 267: } 357,
-{ 268: } 358,
-{ 269: } 358,
-{ 270: } 362,
-{ 271: } 362,
-{ 272: } 369,
-{ 273: } 374,
-{ 274: } 379,
-{ 275: } 380,
-{ 276: } 381,
-{ 277: } 385,
-{ 278: } 386,
-{ 279: } 387,
-{ 280: } 388,
-{ 281: } 389,
-{ 282: } 389,
-{ 283: } 389,
-{ 284: } 396,
-{ 285: } 396,
-{ 286: } 396,
+{ 249: } 360,
+{ 250: } 360,
+{ 251: } 360,
+{ 252: } 360,
+{ 253: } 360,
+{ 254: } 360,
+{ 255: } 360,
+{ 256: } 360,
+{ 257: } 360,
+{ 258: } 360,
+{ 259: } 360,
+{ 260: } 360,
+{ 261: } 360,
+{ 262: } 360,
+{ 263: } 360,
+{ 264: } 360,
+{ 265: } 360,
+{ 266: } 360,
+{ 267: } 360,
+{ 268: } 360,
+{ 269: } 360,
+{ 270: } 361,
+{ 271: } 361,
+{ 272: } 365,
+{ 273: } 365,
+{ 274: } 372,
+{ 275: } 377,
+{ 276: } 382,
+{ 277: } 383,
+{ 278: } 384,
+{ 279: } 388,
+{ 280: } 389,
+{ 281: } 390,
+{ 282: } 391,
+{ 283: } 392,
+{ 284: } 392,
+{ 285: } 392,
+{ 286: } 399,
{ 287: } 399,
{ 288: } 399,
-{ 289: } 404,
-{ 290: } 404,
-{ 291: } 405,
-{ 292: } 406,
-{ 293: } 406,
-{ 294: } 406,
-{ 295: } 406,
-{ 296: } 406,
-{ 297: } 407,
-{ 298: } 414,
-{ 299: } 414,
-{ 300: } 414,
-{ 301: } 414,
-{ 302: } 414,
-{ 303: } 421,
-{ 304: } 421,
-{ 305: } 421,
-{ 306: } 421,
-{ 307: } 421,
-{ 308: } 421,
-{ 309: } 421,
-{ 310: } 421
+{ 289: } 402,
+{ 290: } 402,
+{ 291: } 407,
+{ 292: } 407,
+{ 293: } 408,
+{ 294: } 409,
+{ 295: } 409,
+{ 296: } 409,
+{ 297: } 409,
+{ 298: } 409,
+{ 299: } 410,
+{ 300: } 417,
+{ 301: } 417,
+{ 302: } 417,
+{ 303: } 417,
+{ 304: } 417,
+{ 305: } 424,
+{ 306: } 424,
+{ 307: } 424,
+{ 308: } 424,
+{ 309: } 424,
+{ 310: } 424,
+{ 311: } 424,
+{ 312: } 424
);
yyr : array [1..yynrules] of YYRRec = (
@@ -8839,26 +8960,27 @@ yyr : array [1..yynrules] of YYRRec = (
{ 149: } ( len: 2; sym: -37 ),
{ 150: } ( len: 2; sym: -37 ),
{ 151: } ( len: 2; sym: -37 ),
-{ 152: } ( len: 4; sym: -37 ),
+{ 152: } ( len: 2; sym: -37 ),
{ 153: } ( len: 4; sym: -37 ),
-{ 154: } ( len: 5; sym: -37 ),
-{ 155: } ( len: 6; sym: -37 ),
-{ 156: } ( len: 4; sym: -37 ),
-{ 157: } ( len: 3; sym: -37 ),
-{ 158: } ( len: 8; sym: -37 ),
-{ 159: } ( len: 4; sym: -37 ),
-{ 160: } ( len: 3; sym: -21 ),
-{ 161: } ( len: 1; sym: -21 ),
-{ 162: } ( len: 0; sym: -21 ),
-{ 163: } ( len: 3; sym: -40 ),
-{ 164: } ( len: 1; sym: -40 ),
-{ 165: } ( len: 1; sym: -23 ),
-{ 166: } ( len: 2; sym: -22 ),
-{ 167: } ( len: 4; sym: -22 ),
-{ 168: } ( len: 3; sym: -39 ),
-{ 169: } ( len: 1; sym: -39 ),
-{ 170: } ( len: 0; sym: -39 ),
-{ 171: } ( len: 1; sym: -41 )
+{ 154: } ( len: 4; sym: -37 ),
+{ 155: } ( len: 5; sym: -37 ),
+{ 156: } ( len: 6; sym: -37 ),
+{ 157: } ( len: 4; sym: -37 ),
+{ 158: } ( len: 3; sym: -37 ),
+{ 159: } ( len: 8; sym: -37 ),
+{ 160: } ( len: 4; sym: -37 ),
+{ 161: } ( len: 3; sym: -21 ),
+{ 162: } ( len: 1; sym: -21 ),
+{ 163: } ( len: 0; sym: -21 ),
+{ 164: } ( len: 3; sym: -40 ),
+{ 165: } ( len: 1; sym: -40 ),
+{ 166: } ( len: 1; sym: -23 ),
+{ 167: } ( len: 2; sym: -22 ),
+{ 168: } ( len: 4; sym: -22 ),
+{ 169: } ( len: 3; sym: -39 ),
+{ 170: } ( len: 1; sym: -39 ),
+{ 171: } ( len: 0; sym: -39 ),
+{ 172: } ( len: 1; sym: -41 )
);
diff --git a/utils/h2pas/h2pas.y b/utils/h2pas/h2pas.y
index d795c00dac..8235183839 100644
--- a/utils/h2pas/h2pas.y
+++ b/utils/h2pas/h2pas.y
@@ -1,3164 +1,3172 @@
-%{
-program h2pas;
-
-(*
- Copyright (c) 1998-2000 by Florian Klaempfl
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- ****************************************************************************)
-
-{$message TODO: warning Unit types is only needed due to issue 7910}
-
- uses
- SysUtils,types, classes,
- h2poptions,scan,converu,h2plexlib,h2pyacclib;
-
- type
- YYSTYPE = presobject;
-
- const
- SHORT_STR = 'shortint';
- USHORT_STR = 'byte';
- //C++ SHORT types usually map to the small types
- SMALL_STR = 'smallint';
- USMALL_STR = 'word';
- INT_STR = 'longint';
- UINT_STR = 'dword';
- CHAR_STR = 'char';
- UCHAR_STR = USHORT_STR; { should we use byte or char for 'unsigned char' ?? }
-
- INT64_STR = 'int64';
- QWORD_STR = 'qword';
- FLOAT_STR = 'single';
- WCHAR_STR = 'widechar';
-
- {ctypes strings}
- const
- cint8_STR = 'cint8';
- cuint8_STR = 'cuint8';
- cchar_STR = 'cchar';
- cschar_STR = 'cschar';
- cuchar_STR = 'cuchar';
-
- cint16_STR = 'cint16';
- cuint16_STR = 'cuint16';
- cshort_STR = 'cshort';
- csshort_STR = 'csshort';
- cushort_STR = 'cushort';
-
- cint32_STR = 'cint32';
- cuint32_STR = 'cuint32';
- cint_STR = 'cint';
- csint_STR = 'csint';
- cuint_STR = 'cuint';
-
- csigned_STR = 'csigned';
- cunsigned_STR = 'cunsigned';
-
- cint64_STR = 'cint64';
- cuint64_STR = 'cuint64';
- clonglong_STR = 'clonglong';
- cslonglong_STR = 'cslonglong';
- culonglong_STR = 'culonglong';
-
- cbool_STR = 'cbool';
-
- clong_STR = 'clong';
- cslong_STR = 'cslong';
- culong_STR = 'culong';
-
- cfloat_STR = 'cfloat';
- cdouble_STR = 'cdouble';
- clongdouble_STR = 'clongdouble';
-
- const
- MAX_CTYPESARRAY = 25;
- CTypesArray : array [0..MAX_CTYPESARRAY] of string =
- (cint8_STR, cuint8_STR,
- cchar_STR, cschar_STR, cuchar_STR,
- cint16_STR, cuint16_STR,
- cshort_STR, csshort_STR, cushort_STR,
- csigned_STR, cunsigned_STR,
- cint32_STR, cuint32_STR, cint_STR,
- csint_STR, cuint_STR,
- cint64_STR, cuint64_STR,
- clonglong_STR, cslonglong_STR, culonglong_STR,
-
- cbool_STR,
- clong_STR, cslong_STR, culong_STR);
-
-
- var
- hp,ph : presobject;
- implemfile : text; (* file for implementation headers extern procs *)
- IsExtern : boolean;
- NeedEllipsisOverload : boolean;
- must_write_packed_field : boolean;
- tempfile : text;
- No_pop : boolean;
- s,TN,PN : String;
- pointerprefix: boolean;
- freedynlibproc,
- loaddynlibproc : tstringlist;
-
-
-(* $ define yydebug
- compile with -dYYDEBUG to get debugging info *)
-
- const
- (* number of a?b:c construction in one define *)
- if_nb : longint = 0;
- is_packed : boolean = false;
- is_procvar : boolean = false;
-
- var space_array : array [0..255] of byte;
- space_index : byte;
-
- { Used when PPointers is used - pointer type definitions }
- PTypeList : TStringList;
-
-
- procedure shift(space_number : byte);
- var
- i : byte;
- begin
- space_array[space_index]:=space_number;
- inc(space_index);
- for i:=1 to space_number do
- aktspace:=aktspace+' ';
- end;
-
- procedure popshift;
- begin
- dec(space_index);
- if space_index<0 then
- internalerror(20);
- delete(aktspace,1,space_array[space_index]);
- end;
-
- function str(i : longint) : string;
- var
- s : string;
- begin
- system.str(i,s);
- str:=s;
- end;
-
- function hexstr(i : cardinal) : string;
-
- const
- HexTbl : array[0..15] of char='0123456789ABCDEF';
- var
- str : string;
- begin
- str:='';
- while i<>0 do
- begin
- str:=hextbl[i and $F]+str;
- i:=i shr 4;
- end;
- if str='' then str:='0';
- hexstr:='$'+str;
- end;
-
- function uppercase(s : string) : string;
- var
- i : byte;
- begin
- for i:=1 to length(s) do
- s[i]:=UpCase(s[i]);
- uppercase:=s;
- end;
-
- procedure write_type_specifier(var outfile:text; p : presobject);forward;
- procedure write_p_a_def(var outfile:text; p,simple_type : presobject);forward;
- procedure write_ifexpr(var outfile:text; p : presobject);forward;
- procedure write_funexpr(var outfile:text; p : presobject);forward;
-
- procedure yymsg(const msg : string);
- begin
- writeln('line ',line_no,': ',msg);
- end;
-
-
- { This converts pascal reserved words to
- the correct syntax.
- }
- function FixId(const s:string):string;
- const
- maxtokens = 14;
- reservedid: array[1..maxtokens] of string[14] =
- (
- 'CLASS',
- 'DISPOSE',
- 'FUNCTION',
- 'FALSE',
- 'LABEL',
- 'NEW',
- 'PROPERTY',
- 'PROCEDURE',
- 'RECORD',
- 'REPEAT',
- 'STRING',
- 'TYPE',
- 'TRUE',
- 'UNTIL'
- );
- var
- b : boolean;
- up : string;
- i: integer;
- begin
- if s='' then
- begin
- FixId:='';
- exit;
- end;
- b:=false;
- up:=Uppercase(s);
- for i:=1 to maxtokens do
- begin
- if up=reservedid[i] then
- begin
- b:=true;
- break;
- end;
- end;
- if b then
- FixId:='_'+s
- else
- FixId:=s;
- end;
-
-
-
- function TypeName(const s:string):string;
- var
- i : longint;
- begin
- i:=1;
- if RemoveUnderScore and (length(s)>1) and (s[1]='_') then
- i:=2;
- if PrependTypes then
- TypeName:='T'+Copy(s,i,255)
- else
- TypeName:=Copy(s,i,255);
- end;
-
- function IsACType(const s : String) : Boolean;
- var i : Integer;
- begin
- IsACType := True;
- for i := 0 to MAX_CTYPESARRAY do
- begin
- if s = CTypesArray[i] then
- begin
- Exit;
- end;
- end;
- IsACType := False;
- end;
-
- function PointerName(const s:string):string;
- var
- i : longint;
- begin
- if UseCTypesUnit then
- begin
- if IsACType(s) then
- begin
- PointerName := 'p'+s;
- exit;
- end;
- end;
- i:=1;
- if RemoveUnderScore and (length(s)>1) and (s[1]='_') then
- i:=2;
- if UsePPointers then
- begin
- PointerName:='P'+Copy(s,i,255);
- PTypeList.Add(PointerName);
- end
- else
- PointerName:=Copy(s,i,255);
- if PointerPrefix then
- PTypeList.Add('P'+s);
- end;
-
- procedure write_packed_fields_info(var outfile:text; p : presobject; ph : string);
- var
- hp1,hp2,hp3 : presobject;
- is_sized : boolean;
- line : string;
- flag_index : longint;
- name : pchar;
- ps : byte;
-
- begin
- { write out the tempfile created }
- close(tempfile);
- reset(tempfile);
- is_sized:=false;
- flag_index:=0;
- writeln(outfile);
- writeln(outfile,aktspace,'const');
- shift(3);
- while not eof(tempfile) do
- begin
- readln(tempfile,line);
- ps:=pos('&',line);
- if ps>0 then
- line:=copy(line,1,ps-1)+ph+'_'+copy(line,ps+1,255);
- writeln(outfile,aktspace,line);
- end;
- writeln(outfile);
- close(tempfile);
- rewrite(tempfile);
- popshift;
- (* walk through all members *)
- hp1 := p^.p1;
- while assigned(hp1) do
- begin
- (* hp2 is t_memberdec *)
- hp2:=hp1^.p1;
- (* hp3 is t_declist *)
- hp3:=hp2^.p2;
- while assigned(hp3) do
- begin
- if assigned(hp3^.p1^.p3) and
- (hp3^.p1^.p3^.typ = t_size_specifier) then
- begin
- is_sized:=true;
- name:=hp3^.p1^.p2^.p;
- { get function in interface }
- write(outfile,aktspace,'function ',name);
- write(outfile,'(var a : ',ph,') : ');
- shift(2);
- write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
- writeln(outfile,';');
- popshift;
- { get function in implementation }
- write(implemfile,aktspace,'function ',name);
- write(implemfile,'(var a : ',ph,') : ');
- if not compactmode then
- shift(2);
- write_p_a_def(implemfile,hp3^.p1^.p1,hp2^.p1);
- writeln(implemfile,';');
- writeln(implemfile,aktspace,'begin');
- shift(3);
- write(implemfile,aktspace,name,':=(a.flag',flag_index);
- writeln(implemfile,' and bm_',ph,'_',name,') shr bp_',ph,'_',name,';');
- popshift;
- writeln(implemfile,aktspace,'end;');
- if not compactmode then
- popshift;
- writeln(implemfile,'');
- { set function in interface }
- write(outfile,aktspace,'procedure set_',name);
- write(outfile,'(var a : ',ph,'; __',name,' : ');
- shift(2);
- write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
- writeln(outfile,');');
- popshift;
- { set function in implementation }
- write(implemfile,aktspace,'procedure set_',name);
- write(implemfile,'(var a : ',ph,'; __',name,' : ');
- if not compactmode then
- shift(2);
- write_p_a_def(implemfile,hp3^.p1^.p1,hp2^.p1);
- writeln(implemfile,');');
- writeln(implemfile,aktspace,'begin');
- shift(3);
- write(implemfile,aktspace,'a.flag',flag_index,':=');
- write(implemfile,'a.flag',flag_index,' or ');
- writeln(implemfile,'((__',name,' shl bp_',ph,'_',name,') and bm_',ph,'_',name,');');
- popshift;
- writeln(implemfile,aktspace,'end;');
- if not compactmode then
- popshift;
- writeln(implemfile,'');
- end
- else if is_sized then
- begin
- is_sized:=false;
- inc(flag_index);
- end;
- hp3:=hp3^.next;
- end;
- hp1:=hp1^.next;
- end;
- must_write_packed_field:=false;
- block_type:=bt_no;
- end;
-
-
- procedure write_expr(var outfile:text; p : presobject);
- begin
- if assigned(p) then
- begin
- case p^.typ of
- t_id,
- t_ifexpr :
- write(outfile,FixId(p^.p));
- t_funexprlist :
- write_funexpr(outfile,p);
- t_exprlist :
- begin
- if assigned(p^.p1) then
- write_expr(outfile,p^.p1);
- if assigned(p^.next) then
- begin
- write(', ');
- write_expr(outfile,p^.next);
- end;
- end;
- t_preop : begin
- write(outfile,p^.p,'(');
- write_expr(outfile,p^.p1);
- write(outfile,')');
- flush(outfile);
- end;
- t_typespec : begin
- write_type_specifier(outfile,p^.p1);
- write(outfile,'(');
- write_expr(outfile,p^.p2);
- write(outfile,')');
- flush(outfile);
- end;
- t_bop : begin
- if p^.p1^.typ<>t_id then
- write(outfile,'(');
- write_expr(outfile,p^.p1);
- if p^.p1^.typ<>t_id then
- write(outfile,')');
- write(outfile,p^.p);
- if p^.p2^.typ<>t_id then
- write(outfile,'(');
- write_expr(outfile,p^.p2);
- if p^.p2^.typ<>t_id then
- write(outfile,')');
- flush(outfile);
- end;
- t_arrayop :
- begin
- write_expr(outfile,p^.p1);
- write(outfile,p^.p,'[');
- write_expr(outfile,p^.p2);
- write(outfile,']');
- flush(outfile);
- end;
- t_callop :
- begin
- write_expr(outfile,p^.p1);
- write(outfile,p^.p,'(');
- write_expr(outfile,p^.p2);
- write(outfile,')');
- flush(outfile);
- end;
- else
- begin
- writeln(ord(p^.typ));
- internalerror(2);
- end;
- end;
- end;
- end;
-
-
- procedure write_ifexpr(var outfile:text; p : presobject);
- begin
- flush(outfile);
- write(outfile,'if ');
- write_expr(outfile,p^.p1);
- writeln(outfile,' then');
- write(outfile,aktspace,' ');
- write(outfile,p^.p);
- write(outfile,':=');
- write_expr(outfile,p^.p2);
- writeln(outfile);
- writeln(outfile,aktspace,'else');
- write(outfile,aktspace,' ');
- write(outfile,p^.p);
- write(outfile,':=');
- write_expr(outfile,p^.p3);
- writeln(outfile,';');
- write(outfile,aktspace);
- flush(outfile);
- end;
-
-
- procedure write_all_ifexpr(var outfile:text; p : presobject);
- begin
- if assigned(p) then
- begin
- case p^.typ of
- t_id :;
- t_preop :
- write_all_ifexpr(outfile,p^.p1);
- t_callop,
- t_arrayop,
- t_bop :
- begin
- write_all_ifexpr(outfile,p^.p1);
- write_all_ifexpr(outfile,p^.p2);
- end;
- t_ifexpr :
- begin
- write_all_ifexpr(outfile,p^.p1);
- write_all_ifexpr(outfile,p^.p2);
- write_all_ifexpr(outfile,p^.p3);
- write_ifexpr(outfile,p);
- end;
- t_typespec :
- write_all_ifexpr(outfile,p^.p2);
- t_funexprlist,
- t_exprlist :
- begin
- if assigned(p^.p1) then
- write_all_ifexpr(outfile,p^.p1);
- if assigned(p^.next) then
- write_all_ifexpr(outfile,p^.next);
- end
- else
- internalerror(6);
- end;
- end;
- end;
-
- procedure write_funexpr(var outfile:text; p : presobject);
- var
- i : longint;
-
- begin
- if assigned(p) then
- begin
- case p^.typ of
- t_ifexpr :
- write(outfile,p^.p);
- t_exprlist :
- begin
- write_expr(outfile,p^.p1);
- if assigned(p^.next) then
- begin
- write(outfile,',');
- write_funexpr(outfile,p^.next);
- end
- end;
- t_funcname :
- begin
- if not compactmode then
- shift(2);
- if if_nb>0 then
- begin
- writeln(outfile,aktspace,'var');
- write(outfile,aktspace,' ');
- for i:=1 to if_nb do
- begin
- write(outfile,'if_local',i);
- if i<if_nb then
- write(outfile,', ')
- else
- writeln(outfile,' : longint;');
- end;
- writeln(outfile,aktspace,'(* result types are not known *)');
- if_nb:=0;
- end;
- writeln(outfile,aktspace,'begin');
- shift(3);
- write(outfile,aktspace);
- write_all_ifexpr(outfile,p^.p2);
- write_expr(outfile,p^.p1);
- write(outfile,':=');
- write_funexpr(outfile,p^.p2);
- writeln(outfile,';');
- popshift;
- writeln(outfile,aktspace,'end;');
- if not compactmode then
- popshift;
- flush(outfile);
- end;
- t_funexprlist :
- begin
- if assigned(p^.p3) then
- begin
- write_type_specifier(outfile,p^.p3);
- write(outfile,'(');
- end;
- if assigned(p^.p1) then
- write_funexpr(outfile,p^.p1);
- if assigned(p^.p2) then
- begin
- write(outfile,'(');
- write_funexpr(outfile,p^.p2);
- write(outfile,')');
- end;
- if assigned(p^.p3) then
- write(outfile,')');
- end
- else internalerror(5);
- end;
- end;
- end;
-
- function ellipsisarg : presobject;
- begin
- ellipsisarg:=new(presobject,init_two(t_arg,nil,nil));
- end;
-
- const
- (* if in args *dname is replaced by pdname *)
- in_args : boolean = false;
- typedef_level : longint = 0;
-
- (* writes an argument list, where p is t_arglist *)
-
- procedure write_args(var outfile:text; p : presobject);
- var
- len,para : longint;
- old_in_args : boolean;
- varpara : boolean;
- lastp : presobject;
- hs : string;
- begin
- NeedEllipsisOverload:=false;
- para:=1;
- len:=0;
- lastp:=nil;
- old_in_args:=in_args;
- in_args:=true;
- write(outfile,'(');
- shift(2);
-
- (* walk through all arguments *)
- (* p must be of type t_arglist *)
- while assigned(p) do
- begin
- if p^.typ<>t_arglist then
- internalerror(10);
- (* is ellipsis ? *)
- if not assigned(p^.p1^.p1) and
- not assigned(p^.p1^.next) then
- begin
- write(outfile,'args:array of const');
- (* if variable number of args we must allways pop *)
- no_pop:=false;
- (* Needs 2 declarations, also one without args, becuase
- in C you can omit the second parameter. Default parameter
- doesn't help as that isn't possible with array of const *)
- NeedEllipsisOverload:=true;
- (* Remove this para *)
- if assigned(lastp) then
- lastp^.next:=nil;
- dispose(p,done);
- (* leave the loop as p isnot valid anymore *)
- break;
- end
- (* we need to correct this in the pp file after *)
- else
- begin
- (* generate a call by reference parameter ? *)
-
-// varpara:=usevarparas and
-// assigned(p^.p1^.p2^.p1) and
-// (p^.p1^.p2^.p1^.typ in [t_addrdef,t_pointerdef]) and
-// assigned(p^.p1^.p2^.p1^.p1) and
-// (p^.p1^.p2^.p1^.p1^.typ<>t_procdef);
- varpara:=usevarparas and
- assigned(p^.p1^.p1) and
- (p^.p1^.p1^.typ in [t_addrdef,t_pointerdef]) and
- assigned(p^.p1^.p1^.p1) and
- (p^.p1^.p1^.p1^.typ<>t_procdef);
- (* do not do it for char pointer !! *)
- (* para : pchar; and var para : char; are *)
- (* completely different in pascal *)
- (* here we exclude all typename containing char *)
- (* is this a good method ?? *)
- if varpara and
- (p^.p1^.p1^.typ=t_pointerdef) and
- (p^.p1^.p1^.p1^.typ=t_id) and
- (pos('CHAR',uppercase(p^.p1^.p1^.p1^.str))<>0) then
- varpara:=false;
- if varpara then
- begin
- write(outfile,'var ');
- inc(len,4);
- end;
-
- (* write new parameter name *)
- if assigned(p^.p1^.p2^.p2) then
- begin
- hs:=FixId(p^.p1^.p2^.p2^.p);
- write(outfile,hs);
- inc(len,length(hs));
- end
- else
- begin
- If removeUnderscore then
- begin
- Write (outfile,'para',para);
- inc(Len,5);
- end
- else
- begin
- write(outfile,'_para',para);
- inc(Len,6);
- end;
- end;
- write(outfile,':');
- if varpara then
- begin
- write_p_a_def(outfile,p^.p1^.p2^.p1,p^.p1^.p1^.p1);
- end
- else
- write_p_a_def(outfile,p^.p1^.p2^.p1,p^.p1^.p1);
-
- end;
- lastp:=p;
- p:=p^.next;
- if assigned(p) then
- begin
- write(outfile,'; ');
- { if len>40 then : too complicated to compute }
- if (para mod 5) = 0 then
- begin
- writeln(outfile);
- write(outfile,aktspace);
- end;
- end;
- inc(para);
- end;
- write(outfile,')');
- flush(outfile);
- in_args:=old_in_args;
- popshift;
- end;
-
-
-
- procedure write_p_a_def(var outfile:text; p,simple_type : presobject);
- var
- i : longint;
- error : integer;
- pointerwritten,
- constant : boolean;
-
- begin
- if not(assigned(p)) then
- begin
- write_type_specifier(outfile,simple_type);
- exit;
- end;
- case p^.typ of
- t_pointerdef : begin
- (* procedure variable ? *)
- if assigned(p^.p1) and (p^.p1^.typ=t_procdef) then
- begin
- is_procvar:=true;
- (* distinguish between procedure and function *)
- if (simple_type^.typ=t_void) and (p^.p1^.p1=nil) then
- begin
- write(outfile,'procedure ');
-
- shift(10);
- (* write arguments *)
- if assigned(p^.p1^.p2) then
- write_args(outfile,p^.p1^.p2);
- flush(outfile);
- popshift;
- end
- else
- begin
- write(outfile,'function ');
- shift(9);
- (* write arguments *)
- if assigned(p^.p1^.p2) then
- write_args(outfile,p^.p1^.p2);
- write(outfile,':');
- flush(outfile);
- write_p_a_def(outfile,p^.p1^.p1,simple_type);
- popshift;
- end
- end
- else
- begin
- (* generate "pointer" ? *)
- if (simple_type^.typ=t_void) and (p^.p1=nil) then
- begin
- write(outfile,'pointer');
- flush(outfile);
- end
- else
- begin
- pointerwritten:=false;
- if (p^.p1=nil) and UsePPointers then
- begin
- if (simple_type^.typ=t_id) then
- begin
- write(outfile,PointerName(simple_type^.p));
- pointerwritten:=true;
- end
- { structure }
- else if (simple_type^.typ in [t_uniondef,t_structdef]) and
- (simple_type^.p1=nil) and (simple_type^.p2^.typ=t_id) then
- begin
- write(outfile,PointerName(simple_type^.p2^.p));
- pointerwritten:=true;
- end;
- end;
- if not pointerwritten then
- begin
- if in_args then
- begin
- write(outfile,'P');
- pointerprefix:=true;
- end
- else
- write(outfile,'^');
- write_p_a_def(outfile,p^.p1,simple_type);
- pointerprefix:=false;
- end;
- end;
- end;
- end;
- t_arraydef : begin
- constant:=false;
- if assigned(p^.p2) then
- begin
- if p^.p2^.typ=t_id then
- begin
- val(p^.p2^.str,i,error);
- if error=0 then
- begin
- dec(i);
- constant:=true;
- end;
- end;
- if not constant then
- begin
- write(outfile,'array[0..(');
- write_expr(outfile,p^.p2);
- write(outfile,')-1] of ');
- end
- else
- begin
- write(outfile,'array[0..',i,'] of ');
- end;
- end
- else
- begin
- (* open array *)
- write(outfile,'array of ');
- end;
- flush(outfile);
- write_p_a_def(outfile,p^.p1,simple_type);
- end;
- else internalerror(1);
- end;
- end;
-
- procedure write_type_specifier(var outfile:text; p : presobject);
- var
- hp1,hp2,hp3,lastexpr : presobject;
- i,l,w : longint;
- error : integer;
- current_power,
- mask : cardinal;
- flag_index : longint;
- current_level : byte;
- pointerwritten,
- is_sized : boolean;
-
- begin
- case p^.typ of
- t_id :
- begin
- if pointerprefix then
- if UseCtypesUnit then
- begin
- if not IsACType(p^.p) then
- begin
- PTypeList.Add('P'+p^.str);
- end;
- end
- else
- PTypeList.Add('P'+p^.str);
- if p^.intname then
- write(outfile,p^.p)
- else
- write(outfile,TypeName(p^.p));
- end;
- { what can we do with void defs ? }
- t_void :
- write(outfile,'pointer');
- t_pointerdef :
- begin
- pointerwritten:=false;
- if (p^.p1^.typ=t_void) then
- begin
- write(outfile,'pointer');
- pointerwritten:=true;
- end
- else
- if UsePPointers then
- begin
- if (p^.p1^.typ=t_id) then
- begin
- write(outfile,PointerName(p^.p1^.p));
- pointerwritten:=true;
- end
- { structure }
- else if (p^.p1^.typ in [t_uniondef,t_structdef]) and
- (p^.p1^.p1=nil) and (p^.p1^.p2^.typ=t_id) then
- begin
- write(outfile,PointerName(p^.p1^.p2^.p));
- pointerwritten:=true;
- end;
- end;
- if not pointerwritten then
- begin
- if in_args then
- begin
- if UseCTypesUnit and (IsACType(p^.p1^.p)=False) then
- write(outfile,'P')
- else
- write(outfile,'p');
- pointerprefix:=true;
- end
- else
- begin
- if UseCTypesUnit and (IsACType(p^.p1^.p)=False) then
- write(outfile,'^')
- else
- write(outfile,'p');
- end;
- write_type_specifier(outfile,p^.p1);
- pointerprefix:=false;
- end;
- end;
- t_enumdef :
- begin
- if (typedef_level>1) and (p^.p1=nil) and
- (p^.p2^.typ=t_id) then
- begin
- if pointerprefix then
- if UseCTypesUnit and (IsACType( p^.p2^.p )=False) then
- PTypeList.Add('P'+p^.p2^.str);
- write(outfile,p^.p2^.p);
- end
- else
- if not EnumToConst then
- begin
- write(outfile,'(');
- hp1:=p^.p1;
- w:=length(aktspace);
- while assigned(hp1) do
- begin
- write(outfile,hp1^.p1^.p);
- if assigned(hp1^.p2) then
- begin
- write(outfile,' := ');
- write_expr(outfile,hp1^.p2);
- w:=w+6;(* strlen(hp1^.p); *)
- end;
- w:=w+length(hp1^.p1^.str);
- hp1:=hp1^.next;
- if assigned(hp1) then
- write(outfile,',');
- if w>40 then
- begin
- writeln(outfile);
- write(outfile,aktspace);
- w:=length(aktspace);
- end;
- flush(outfile);
- end;
- write(outfile,')');
- flush(outfile);
- end
- else
- begin
- Writeln (outfile,' Longint;');
- hp1:=p^.p1;
- l:=0;
- lastexpr:=nil;
- Writeln (outfile,copy(aktspace,1,length(aktspace)-2),'Const');
- while assigned(hp1) do
- begin
- write (outfile,aktspace,hp1^.p1^.p,' = ');
- if assigned(hp1^.p2) then
- begin
- write_expr(outfile,hp1^.p2);
- writeln(outfile,';');
- lastexpr:=hp1^.p2;
- if lastexpr^.typ=t_id then
- begin
- val(lastexpr^.str,l,error);
- if error=0 then
- begin
- inc(l);
- lastexpr:=nil;
- end
- else
- l:=1;
- end
- else
- l:=1;
- end
- else
- begin
- if assigned(lastexpr) then
- begin
- write(outfile,'(');
- write_expr(outfile,lastexpr);
- writeln(outfile,')+',l,';');
- end
- else
- writeln (outfile,l,';');
- inc(l);
- end;
- hp1:=hp1^.next;
- flush(outfile);
- end;
- block_type:=bt_const;
- end;
- end;
- t_structdef :
- begin
- inc(typedef_level);
- flag_index:=-1;
- is_sized:=false;
- current_level:=0;
- if ((in_args) or (typedef_level>1)) and
- (p^.p1=nil) and (p^.p2^.typ=t_id) then
- begin
- if pointerprefix then
- if UseCTypesUnit and (IsACType(p^.p2^.str)=false) then
- PTypeList.Add('P'+p^.p2^.str);
- write(outfile,TypeName(p^.p2^.p));
- end
- else
- begin
- if packrecords then
- writeln(outfile,'packed record')
- else
- writeln(outfile,'record');
- shift(3);
- hp1:=p^.p1;
-
- (* walk through all members *)
- while assigned(hp1) do
- begin
- (* hp2 is t_memberdec *)
- hp2:=hp1^.p1;
- (* hp3 is t_declist *)
- hp3:=hp2^.p2;
- while assigned(hp3) do
- begin
- if not assigned(hp3^.p1^.p3) or
- (hp3^.p1^.p3^.typ <> t_size_specifier) then
- begin
- if is_sized then
- begin
- if current_level <= 16 then
- writeln(outfile,'word;')
- else if current_level <= 32 then
- writeln(outfile,'longint;')
- else
- internalerror(11);
- is_sized:=false;
- end;
-
- write(outfile,aktspace,FixId(hp3^.p1^.p2^.p));
- write(outfile,' : ');
- shift(2);
- write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
- popshift;
- end;
- { size specifier or default value ? }
- if assigned(hp3^.p1^.p3) then
- begin
- { we could use mask to implement this }
- { because we need to respect the positions }
- if hp3^.p1^.p3^.typ = t_size_specifier then
- begin
- if not is_sized then
- begin
- current_power:=1;
- current_level:=0;
- inc(flag_index);
- write(outfile,aktspace,'flag',flag_index,' : ');
- end;
- must_write_packed_field:=true;
- is_sized:=true;
- { can it be something else than a constant ? }
- { it can be a macro !! }
- if hp3^.p1^.p3^.p1^.typ=t_id then
- begin
- val(hp3^.p1^.p3^.p1^.str,l,error);
- if error=0 then
- begin
- mask:=0;
- for i:=1 to l do
- begin
- inc(mask,current_power);
- current_power:=current_power*2;
- end;
- write(tempfile,'bm_&',hp3^.p1^.p2^.p);
- writeln(tempfile,' = ',hexstr(mask),';');
- write(tempfile,'bp_&',hp3^.p1^.p2^.p);
- writeln(tempfile,' = ',current_level,';');
- current_level:=current_level + l;
- { go to next flag if 31 }
- if current_level = 32 then
- begin
- write(outfile,'longint');
- is_sized:=false;
- end;
- end;
- end;
-
- end
- else if hp3^.p1^.p3^.typ = t_default_value then
- begin
- write(outfile,'{=');
- write_expr(outfile,hp3^.p1^.p3^.p1);
- write(outfile,' ignored}');
- end;
- end;
- if not is_sized then
- begin
- if is_procvar then
- begin
- if not no_pop then
- begin
- write(outfile,';cdecl');
- no_pop:=true;
- end;
- is_procvar:=false;
- end;
- writeln(outfile,';');
- end;
- hp3:=hp3^.next;
- end;
- hp1:=hp1^.next;
- end;
- if is_sized then
- begin
- if current_level <= 16 then
- writeln(outfile,'word;')
- else if current_level <= 32 then
- writeln(outfile,'longint;')
- else
- internalerror(11);
- is_sized:=false;
- end;
- popshift;
- write(outfile,aktspace,'end');
- flush(outfile);
- end;
- dec(typedef_level);
- end;
- t_uniondef :
- begin
- inc(typedef_level);
- if (typedef_level>1) and (p^.p1=nil) and
- (p^.p2^.typ=t_id) then
- begin
- write(outfile,p^.p2^.p);
- end
- else
- begin
- inc(typedef_level);
- if packrecords then
- writeln(outfile,'packed record')
- else
- writeln(outfile,'record');
- shift(2);
- writeln(outfile,aktspace,'case longint of');
- shift(3);
- l:=0;
- hp1:=p^.p1;
-
- (* walk through all members *)
- while assigned(hp1) do
- begin
- (* hp2 is t_memberdec *)
- hp2:=hp1^.p1;
- (* hp3 is t_declist *)
- hp3:=hp2^.p2;
- while assigned(hp3) do
- begin
- write(outfile,aktspace,l,' : ( ');
- write(outfile,FixId(hp3^.p1^.p2^.p),' : ');
- shift(2);
- write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
- popshift;
- writeln(outfile,' );');
- hp3:=hp3^.next;
- inc(l);
- end;
- hp1:=hp1^.next;
- end;
- popshift;
- write(outfile,aktspace,'end');
- popshift;
- flush(outfile);
- dec(typedef_level);
- end;
- dec(typedef_level);
- end;
- else
- internalerror(3);
- end;
- end;
-
- procedure write_def_params(var outfile:text; p : presobject);
- var
- hp1 : presobject;
- begin
- case p^.typ of
- t_enumdef : begin
- hp1:=p^.p1;
- while assigned(hp1) do
- begin
- write(outfile,FixId(hp1^.p1^.p));
- hp1:=hp1^.next;
- if assigned(hp1) then
- write(outfile,',')
- else
- write(outfile);
- flush(outfile);
- end;
- flush(outfile);
- end;
- else internalerror(4);
- end;
- end;
-
-
- procedure write_statement_block(var outfile:text; p : presobject);
- begin
- writeln(outfile,aktspace,'begin');
- while assigned(p) do
- begin
- shift(2);
- if assigned(p^.p1) then
- begin
- case p^.p1^.typ of
- t_whilenode:
- begin
- write(outfile,aktspace,'while ');
- write_expr(outfile,p^.p1^.p1);
- writeln(outfile,' do');
- shift(2);
- write_statement_block(outfile,p^.p1^.p2);
- popshift;
- end;
- else
- begin
- write(outfile,aktspace);
- write_expr(outfile,p^.p1);
- writeln(outfile,';');
- end;
- end;
- end;
- p:=p^.next;
- popshift;
- end;
- writeln(outfile,aktspace,'end;');
- end;
-
-%}
-
-%token _WHILE _FOR _DO _GOTO _CONTINUE _BREAK
-%token TYPEDEF DEFINE
-%token COLON SEMICOLON COMMA
-%token LKLAMMER RKLAMMER LECKKLAMMER RECKKLAMMER
-%token LGKLAMMER RGKLAMMER
-%token STRUCT UNION ENUM
-%token ID NUMBER CSTRING
-%token SHORT UNSIGNED LONG INT FLOAT _CHAR
-%token VOID _CONST
-%token _FAR _HUGE _NEAR
-%token NEW_LINE SPACE_DEFINE
-%token EXTERN STDCALL CDECL CALLBACK PASCAL WINAPI APIENTRY WINGDIAPI SYS_TRAP
-%token _PACKED
-%token ELLIPSIS
-%right _ASSIGN
-%right R_AND
-%left EQUAL UNEQUAL GT LT GTE LTE
-%left QUESTIONMARK COLON
-%left _OR
-%left _AND
-%left _PLUS MINUS
-%left _SHR _SHL
-%left STAR _SLASH
-%right _NOT
-%right LKLAMMER
-%right PSTAR
-%right P_AND
-%right LECKKLAMMER
-%left POINT DEREF
-%left COMMA
-%left STICK
-%token SIGNED
-%token INT8 INT16 INT32 INT64
-%%
-
-file : declaration_list
- ;
-
-maybe_space :
- SPACE_DEFINE
- {
- $$:=nil;
- } |
- {
- $$:=nil;
- }
- ;
-
-error_info : {
- writeln(outfile,'(* error ');
- writeln(outfile,yyline);
- };
-
-declaration_list : declaration_list declaration
- { if yydebug then writeln('declaration reduced at line ',line_no);
- if yydebug then writeln(outfile,'(* declaration reduced *)');
- }
- | declaration_list define_dec
- { if yydebug then writeln('define declaration reduced at line ',line_no);
- if yydebug then writeln(outfile,'(* define declaration reduced *)');
- }
- | declaration
- { if yydebug then writeln('declaration reduced at line ',line_no);
- }
- | define_dec
- { if yydebug then writeln('define declaration reduced at line ',line_no);
- }
- ;
-
-dec_specifier :
- EXTERN { $$:=new(presobject,init_id('extern')); }
- |{ $$:=new(presobject,init_id('intern')); }
- ;
-
-dec_modifier :
- STDCALL { $$:=new(presobject,init_id('no_pop')); }
- | CDECL { $$:=new(presobject,init_id('cdecl')); }
- | CALLBACK { $$:=new(presobject,init_id('no_pop')); }
- | PASCAL { $$:=new(presobject,init_id('no_pop')); }
- | WINAPI { $$:=new(presobject,init_id('no_pop')); }
- | APIENTRY { $$:=new(presobject,init_id('no_pop')); }
- | WINGDIAPI { $$:=new(presobject,init_id('no_pop')); }
- | { $$:=nil }
- ;
-
-systrap_specifier:
- SYS_TRAP LKLAMMER dname RKLAMMER { $$:=$3; }
- | { $$:=nil; }
- ;
-
-statement :
- expr SEMICOLON { $$:=$1; } |
- _WHILE LKLAMMER expr RKLAMMER statement_list { $$:=new(presobject,init_two(t_whilenode,$3,$5)); }
- ;
-
-
-statement_list : statement statement_list
- {
- $$:=new(presobject,init_one(t_statement_list,$1));
- $$^.next:=$2;
- } |
- statement
- {
- $$:=new(presobject,init_one(t_statement_list,$1));
- } |
- SEMICOLON
- {
- $$:=new(presobject,init_one(t_statement_list,nil));
- } |
- {
- $$:=new(presobject,init_one(t_statement_list,nil));
- }
- ;
-
-statement_block :
- LGKLAMMER statement_list RGKLAMMER { $$:=$2; }
- ;
-
-declaration :
- dec_specifier type_specifier dec_modifier declarator_list statement_block
- {
- IsExtern:=false;
- (* by default we must pop the args pushed on stack *)
- no_pop:=false;
- if (assigned($4)and assigned($4^.p1)and assigned($4^.p1^.p1))
- and ($4^.p1^.p1^.typ=t_procdef) then
- begin
- repeat
- If UseLib then
- IsExtern:=true
- else
- IsExtern:=assigned($1)and($1^.str='extern');
- no_pop:=assigned($3) and ($3^.str='no_pop');
-
- if (block_type<>bt_func) and not(createdynlib) then
- begin
- writeln(outfile);
- block_type:=bt_func;
- end;
-
- (* dyn. procedures must be put into a var block *)
- if createdynlib then
- begin
- if (block_type<>bt_var) then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'var');
- block_type:=bt_var;
- end;
- shift(2);
- end;
- if not CompactMode then
- begin
- write(outfile,aktspace);
- if not IsExtern then
- write(implemfile,aktspace);
- end;
- (* distinguish between procedure and function *)
- if assigned($2) then
- if ($2^.typ=t_void) and ($4^.p1^.p1^.p1=nil) then
- begin
- if createdynlib then
- begin
- write(outfile,$4^.p1^.p2^.p,' : procedure');
- end
- else
- begin
- shift(10);
- write(outfile,'procedure ',$4^.p1^.p2^.p);
- end;
- if assigned($4^.p1^.p1^.p2) then
- write_args(outfile,$4^.p1^.p1^.p2);
- if createdynlib then
- begin
- loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
- freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
- end
- else if not IsExtern then
- begin
- write(implemfile,'procedure ',$4^.p1^.p2^.p);
- if assigned($4^.p1^.p1^.p2) then
- write_args(implemfile,$4^.p1^.p1^.p2);
- end;
- end
- else
- begin
- if createdynlib then
- begin
- write(outfile,$4^.p1^.p2^.p,' : function');
- end
- else
- begin
- shift(9);
- write(outfile,'function ',$4^.p1^.p2^.p);
- end;
-
- if assigned($4^.p1^.p1^.p2) then
- write_args(outfile,$4^.p1^.p1^.p2);
- write(outfile,':');
- write_p_a_def(outfile,$4^.p1^.p1^.p1,$2);
- if createdynlib then
- begin
- loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
- freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
- end
- else if not IsExtern then
- begin
- write(implemfile,'function ',$4^.p1^.p2^.p);
- if assigned($4^.p1^.p1^.p2) then
- write_args(implemfile,$4^.p1^.p1^.p2);
- write(implemfile,':');
- write_p_a_def(implemfile,$4^.p1^.p1^.p1,$2);
- end;
- end;
- (* No CDECL in interface for Uselib *)
- if IsExtern and (not no_pop) then
- write(outfile,';cdecl');
- popshift;
- if createdynlib then
- begin
- writeln(outfile,';');
- end
- else if UseLib then
- begin
- if IsExtern then
- begin
- write (outfile,';external');
- If UseName then
- Write(outfile,' External_library name ''',$4^.p1^.p2^.p,'''');
- end;
- writeln(outfile,';');
- end
- else
- begin
- writeln(outfile,';');
- if not IsExtern then
- begin
- writeln(implemfile,';');
- shift(2);
- if $5^.typ=t_statement_list then
- write_statement_block(implemfile,$5);
- popshift;
- end;
- end;
- IsExtern:=false;
- if not(compactmode) and not(createdynlib) then
- writeln(outfile);
- until not NeedEllipsisOverload;
- end
- else (* $4^.p1^.p1^.typ=t_procdef *)
- if assigned($4)and assigned($4^.p1) then
- begin
- shift(2);
- if block_type<>bt_var then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'var');
- end;
- block_type:=bt_var;
-
- shift(3);
-
- IsExtern:=assigned($1)and($1^.str='extern');
- (* walk through all declarations *)
- hp:=$4;
- while assigned(hp) and assigned(hp^.p1) do
- begin
- (* write new var name *)
- if assigned(hp^.p1^.p2) and assigned(hp^.p1^.p2^.p) then
- write(outfile,aktspace,hp^.p1^.p2^.p);
- write(outfile,' : ');
- shift(2);
- (* write its type *)
- write_p_a_def(outfile,hp^.p1^.p1,$2);
- if assigned(hp^.p1^.p2)and assigned(hp^.p1^.p2^.p)then
- begin
- if isExtern then
- write(outfile,';cvar;external')
- else
- write(outfile,';cvar;public');
- end;
- writeln(outfile,';');
- popshift;
- hp:=hp^.p2;
- end;
- popshift;
- popshift;
- end;
- if assigned($1) then
- dispose($1,done);
- if assigned($2) then
- dispose($2,done);
- if assigned($3) then
- dispose($3,done);
- if assigned($4) then
- dispose($4,done);
- if assigned($5) then
- dispose($5,done);
- }
- | dec_specifier type_specifier dec_modifier declarator_list systrap_specifier SEMICOLON
- {
- IsExtern:=false;
- (* by default we must pop the args pushed on stack *)
- no_pop:=false;
- if (assigned($4)and assigned($4^.p1)and assigned($4^.p1^.p1))
- and ($4^.p1^.p1^.typ=t_procdef) then
- begin
- repeat
- If UseLib then
- IsExtern:=true
- else
- IsExtern:=assigned($1)and($1^.str='extern');
- no_pop:=assigned($3) and ($3^.str='no_pop');
-
- if (block_type<>bt_func) and not(createdynlib) then
- begin
- writeln(outfile);
- block_type:=bt_func;
- end;
-
- (* dyn. procedures must be put into a var block *)
- if createdynlib then
- begin
- if (block_type<>bt_var) then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'var');
- block_type:=bt_var;
- end;
- shift(2);
- end;
- if not CompactMode then
- begin
- write(outfile,aktspace);
- if not IsExtern then
- write(implemfile,aktspace);
- end;
- (* distinguish between procedure and function *)
- if assigned($2) then
- if ($2^.typ=t_void) and ($4^.p1^.p1^.p1=nil) then
- begin
- if createdynlib then
- begin
- write(outfile,$4^.p1^.p2^.p,' : procedure');
- end
- else
- begin
- shift(10);
- write(outfile,'procedure ',$4^.p1^.p2^.p);
- end;
- if assigned($4^.p1^.p1^.p2) then
- write_args(outfile,$4^.p1^.p1^.p2);
- if createdynlib then
- begin
- loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
- freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
- end
- else if not IsExtern then
- begin
- write(implemfile,'procedure ',$4^.p1^.p2^.p);
- if assigned($4^.p1^.p1^.p2) then
- write_args(implemfile,$4^.p1^.p1^.p2);
- end;
- end
- else
- begin
- if createdynlib then
- begin
- write(outfile,$4^.p1^.p2^.p,' : function');
- end
- else
- begin
- shift(9);
- write(outfile,'function ',$4^.p1^.p2^.p);
- end;
-
- if assigned($4^.p1^.p1^.p2) then
- write_args(outfile,$4^.p1^.p1^.p2);
- write(outfile,':');
- write_p_a_def(outfile,$4^.p1^.p1^.p1,$2);
- if createdynlib then
- begin
- loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
- freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
- end
- else if not IsExtern then
- begin
- write(implemfile,'function ',$4^.p1^.p2^.p);
- if assigned($4^.p1^.p1^.p2) then
- write_args(implemfile,$4^.p1^.p1^.p2);
- write(implemfile,':');
- write_p_a_def(implemfile,$4^.p1^.p1^.p1,$2);
- end;
- end;
- if assigned($5) then
- write(outfile,';systrap ',$5^.p);
- (* No CDECL in interface for Uselib *)
- if IsExtern and (not no_pop) then
- write(outfile,';cdecl');
- popshift;
- if createdynlib then
- begin
- writeln(outfile,';');
- end
- else if UseLib then
- begin
- if IsExtern then
- begin
- write (outfile,';external');
- If UseName then
- Write(outfile,' External_library name ''',$4^.p1^.p2^.p,'''');
- end;
- writeln(outfile,';');
- end
- else
- begin
- writeln(outfile,';');
- if not IsExtern then
- begin
- writeln(implemfile,';');
- writeln(implemfile,aktspace,'begin');
- writeln(implemfile,aktspace,' { You must implement this function }');
- writeln(implemfile,aktspace,'end;');
- end;
- end;
- IsExtern:=false;
- if not(compactmode) and not(createdynlib) then
- writeln(outfile);
- until not NeedEllipsisOverload;
- end
- else (* $4^.p1^.p1^.typ=t_procdef *)
- if assigned($4)and assigned($4^.p1) then
- begin
- shift(2);
- if block_type<>bt_var then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'var');
- end;
- block_type:=bt_var;
-
- shift(3);
-
- IsExtern:=assigned($1)and($1^.str='extern');
- (* walk through all declarations *)
- hp:=$4;
- while assigned(hp) and assigned(hp^.p1) do
- begin
- (* write new var name *)
- if assigned(hp^.p1^.p2) and assigned(hp^.p1^.p2^.p) then
- write(outfile,aktspace,hp^.p1^.p2^.p);
- write(outfile,' : ');
- shift(2);
- (* write its type *)
- write_p_a_def(outfile,hp^.p1^.p1,$2);
- if assigned(hp^.p1^.p2)and assigned(hp^.p1^.p2^.p)then
- begin
- if isExtern then
- write(outfile,';cvar;external')
- else
- write(outfile,';cvar;public');
- end;
- writeln(outfile,';');
- popshift;
- hp:=hp^.p2;
- end;
- popshift;
- popshift;
- end;
- if assigned($1)then dispose($1,done);
- if assigned($2)then dispose($2,done);
- if assigned($4)then dispose($4,done);
- } |
- special_type_specifier SEMICOLON
- {
- if block_type<>bt_type then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'type');
- block_type:=bt_type;
- end;
- shift(3);
- if ( yyv[yysp-1]^.p2 <> nil ) then
- begin
- (* write new type name *)
- TN:=TypeName($1^.p2^.p);
- PN:=PointerName($1^.p2^.p);
- (* define a Pointer type also for structs *)
- if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
- assigned($1) and ($1^.typ in [t_uniondef,t_structdef]) then
- writeln(outfile,aktspace,PN,' = ^',TN,';');
- write(outfile,aktspace,TN,' = ');
- shift(2);
- hp:=$1;
- write_type_specifier(outfile,hp);
- popshift;
- (* enum_to_const can make a switch to const *)
- if block_type=bt_type then
- writeln(outfile,';');
- writeln(outfile);
- flush(outfile);
- popshift;
- if must_write_packed_field then
- write_packed_fields_info(outfile,hp,TN);
- if assigned(hp) then
- dispose(hp,done)
- end
- else
- begin
- TN:=TypeName(yyv[yysp-1]^.str);
- PN:=PointerName(yyv[yysp-1]^.str);
- if UsePPointers then writeln(outfile,aktspace,PN,' = ^',TN,';');
- if PackRecords then
- writeln(outfile, aktspace, TN, ' = packed record')
- else
- writeln(outfile, aktspace, TN, ' = record');
- writeln(outfile, aktspace, ' {undefined structure}');
- writeln(outfile, aktspace, ' end;');
- writeln(outfile);
- popshift;
- end;
- } |
- TYPEDEF STRUCT dname dname SEMICOLON
- {
- (* TYPEDEF STRUCT dname dname SEMICOLON *)
- if block_type<>bt_type then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'type');
- block_type:=bt_type;
- end;
- PN:=TypeName($3^.p);
- TN:=TypeName($4^.p);
- if Uppercase(tn)<>Uppercase(pn) then
- begin
- shift(3);
- writeln(outfile,aktspace,PN,' = ',TN,';');
- popshift;
- end;
- if assigned($3) then
- dispose($3,done);
- if assigned($4) then
- dispose($4,done);
- } |
- TYPEDEF type_specifier LKLAMMER dec_modifier declarator RKLAMMER maybe_space LKLAMMER argument_declaration_list RKLAMMER SEMICOLON
- {
- (* TYPEDEF type_specifier LKLAMMER dec_modifier declarator RKLAMMER maybe_space LKLAMMER argument_declaration_list RKLAMMER SEMICOLON *)
- if block_type<>bt_type then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'type');
- block_type:=bt_type;
- end;
- no_pop:=assigned($4) and ($4^.str='no_pop');
- shift(3);
- (* walk through all declarations *)
- hp:=$5;
- if assigned(hp) then
- begin
- hp:=$5;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_procdef,nil,$9));
- hp:=$5;
- if assigned(hp^.p1) and assigned(hp^.p1^.p1) then
- begin
- writeln(outfile);
- (* write new type name *)
- write(outfile,aktspace,TypeName(hp^.p2^.p),' = ');
- shift(2);
- write_p_a_def(outfile,hp^.p1,$2);
- popshift;
- (* if no_pop it is normal fpc calling convention *)
- if is_procvar and
- (not no_pop) then
- write(outfile,';cdecl');
- writeln(outfile,';');
- flush(outfile);
- end;
- end;
- popshift;
- if assigned($2)then
- dispose($2,done);
- if assigned($4)then
- dispose($4,done);
- if assigned($5)then (* disposes also $9 *)
- dispose($5,done);
- } |
- TYPEDEF type_specifier dec_modifier declarator_list SEMICOLON
- {
- (* TYPEDEF type_specifier dec_modifier declarator_list SEMICOLON *)
- if block_type<>bt_type then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'type');
- block_type:=bt_type;
- end;
- no_pop:=assigned($3) and ($3^.str='no_pop');
- shift(3);
- (* Get the name to write the type definition for, try
- to use the tag name first *)
- if assigned($2^.p2) then
- begin
- ph:=$2^.p2;
- end
- else
- begin
- if not assigned($4^.p1^.p2) then
- internalerror(4444);
- ph:=$4^.p1^.p2;
- end;
- (* write type definition *)
- is_procvar:=false;
- writeln(outfile);
- TN:=TypeName(ph^.p);
- PN:=PointerName(ph^.p);
- if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
- assigned($2) and ($2^.typ<>t_procdef) then
- writeln(outfile,aktspace,PN,' = ^',TN,';');
- (* write new type name *)
- write(outfile,aktspace,TN,' = ');
- shift(2);
- write_type_specifier(outfile,$2);
- popshift;
- (* if no_pop it is normal fpc calling convention *)
- if is_procvar and
- (not no_pop) then
- write(outfile,';cdecl');
- writeln(outfile,';');
- flush(outfile);
- (* write alias names, ph points to the name already used *)
- hp:=$4;
- while assigned(hp) do
- begin
- if (hp<>ph) and assigned(hp^.p1^.p2) then
- begin
- PN:=TypeName(ph^.p);
- TN:=TypeName(hp^.p1^.p2^.p);
- if Uppercase(TN)<>Uppercase(PN) then
- begin
- write(outfile,aktspace,TN,' = ');
- write_p_a_def(outfile,hp^.p1^.p1,ph);
- writeln(outfile,';');
- PN:=PointerName(hp^.p1^.p2^.p);
- if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
- assigned($2) and ($2^.typ<>t_procdef) then
- writeln(outfile,aktspace,PN,' = ^',TN,';');
- end;
- end;
- hp:=hp^.next;
- end;
- popshift;
- if must_write_packed_field then
- if assigned(ph) then
- write_packed_fields_info(outfile,$2,ph^.str)
- else if assigned($2^.p2) then
- write_packed_fields_info(outfile,$2,$2^.p2^.str);
- if assigned($2)then
- dispose($2,done);
- if assigned($3)then
- dispose($3,done);
- if assigned($4)then
- dispose($4,done);
- } |
- TYPEDEF dname SEMICOLON
- {
- if block_type<>bt_type then
- begin
- if not(compactmode) then
- writeln(outfile);
- writeln(outfile,aktspace,'type');
- block_type:=bt_type;
- end;
- shift(3);
- (* write as pointer *)
- writeln(outfile);
- writeln(outfile,'(* generic typedef *)');
- writeln(outfile,aktspace,$2^.p,' = pointer;');
- flush(outfile);
- popshift;
- if assigned($2) then
- dispose($2,done);
- }
- | error error_info SEMICOLON
- { writeln(outfile,'in declaration at line ',line_no,' *)');
- aktspace:='';
- in_space_define:=0;
- in_define:=false;
- arglevel:=0;
- if_nb:=0;
- aktspace:=' ';
- space_index:=1;
- yyerrok;}
- ;
-
-define_dec :
- DEFINE dname LKLAMMER enum_list RKLAMMER para_def_expr NEW_LINE
- {
- (* DEFINE dname LKLAMMER enum_list RKLAMMER para_def_expr NEW_LINE *)
- if not stripinfo then
- begin
- writeln (outfile,aktspace,'{ was #define dname(params) para_def_expr }');
- writeln (implemfile,aktspace,'{ was #define dname(params) para_def_expr }');
- if assigned($4) then
- begin
- writeln (outfile,aktspace,'{ argument types are unknown }');
- writeln (implemfile,aktspace,'{ argument types are unknown }');
- end;
- if not assigned($6^.p3) then
- begin
- writeln(outfile,aktspace,'{ return type might be wrong } ');
- writeln(implemfile,aktspace,'{ return type might be wrong } ');
- end;
- end;
- block_type:=bt_func;
- write(outfile,aktspace,'function ',$2^.p);
- write(implemfile,aktspace,'function ',$2^.p);
-
- if assigned($4) then
- begin
- write(outfile,'(');
- write(implemfile,'(');
- ph:=new(presobject,init_one(t_enumdef,$4));
- write_def_params(outfile,ph);
- write_def_params(implemfile,ph);
- if assigned(ph) then dispose(ph,done);
- ph:=nil;
- (* types are unknown *)
- write(outfile,' : longint)');
- write(implemfile,' : longint)');
- end;
- if not assigned($6^.p3) then
- begin
- writeln(outfile,' : longint;',aktspace,commentstr);
- writeln(implemfile,' : longint;');
- flush(outfile);
- end
- else
- begin
- write(outfile,' : ');
- write_type_specifier(outfile,$6^.p3);
- writeln(outfile,';',aktspace,commentstr);
- flush(outfile);
- write(implemfile,' : ');
- write_type_specifier(implemfile,$6^.p3);
- writeln(implemfile,';');
- end;
- writeln(outfile);
- flush(outfile);
- hp:=new(presobject,init_two(t_funcname,$2,$6));
- write_funexpr(implemfile,hp);
- writeln(implemfile);
- flush(implemfile);
- if assigned(hp)then dispose(hp,done);
- }|
- DEFINE dname SPACE_DEFINE NEW_LINE
- {
- (* DEFINE dname SPACE_DEFINE NEW_LINE *)
- writeln(outfile,'{$define ',$2^.p,'}',aktspace,commentstr);
- flush(outfile);
- if assigned($2)then
- dispose($2,done);
- }|
- DEFINE dname NEW_LINE
- {
- writeln(outfile,'{$define ',$2^.p,'}',aktspace,commentstr);
- flush(outfile);
- if assigned($2)then
- dispose($2,done);
- } |
- DEFINE dname SPACE_DEFINE def_expr NEW_LINE
- {
- (* DEFINE dname SPACE_DEFINE def_expr NEW_LINE *)
- if ($4^.typ=t_exprlist) and
- $4^.p1^.is_const and
- not assigned($4^.next) then
- begin
- if block_type<>bt_const then
- begin
- writeln(outfile);
- writeln(outfile,aktspace,'const');
- end;
- block_type:=bt_const;
- shift(3);
- write(outfile,aktspace,$2^.p);
- write(outfile,' = ');
- flush(outfile);
- write_expr(outfile,$4^.p1);
- writeln(outfile,';',aktspace,commentstr);
- popshift;
- if assigned($2) then
- dispose($2,done);
- if assigned($4) then
- dispose($4,done);
- end
- else
- begin
- if not stripinfo then
- begin
- writeln (outfile,aktspace,'{ was #define dname def_expr }');
- writeln (implemfile,aktspace,'{ was #define dname def_expr }');
- end;
- block_type:=bt_func;
- write(outfile,aktspace,'function ',$2^.p);
- write(implemfile,aktspace,'function ',$2^.p);
- shift(2);
- if not assigned($4^.p3) then
- begin
- writeln(outfile,' : longint;');
- writeln(outfile,aktspace,' { return type might be wrong }');
- flush(outfile);
- writeln(implemfile,' : longint;');
- writeln(implemfile,aktspace,' { return type might be wrong }');
- end
- else
- begin
- write(outfile,' : ');
- write_type_specifier(outfile,$4^.p3);
- writeln(outfile,';',aktspace,commentstr);
- flush(outfile);
- write(implemfile,' : ');
- write_type_specifier(implemfile,$4^.p3);
- writeln(implemfile,';');
- end;
- writeln(outfile);
- flush(outfile);
- hp:=new(presobject,init_two(t_funcname,$2,$4));
- write_funexpr(implemfile,hp);
- popshift;
- dispose(hp,done);
- writeln(implemfile);
- flush(implemfile);
- end;
- }
- | error error_info NEW_LINE
- { writeln(outfile,'in define line ',line_no,' *)');
- aktspace:='';
- in_space_define:=0;
- in_define:=false;
- arglevel:=0;
- if_nb:=0;
- aktspace:=' ';
- space_index:=1;
-
- yyerrok;}
- ;
-
-closed_list : LGKLAMMER member_list RGKLAMMER
- {$$:=$2;} |
- error error_info RGKLAMMER
- { writeln(outfile,' in member_list *)');
- yyerrok;
- $$:=nil;
- }
- ;
-
-closed_enum_list : LGKLAMMER enum_list RGKLAMMER
- {$$:=$2;} |
- error error_info RGKLAMMER
- { writeln(outfile,' in enum_list *)');
- yyerrok;
- $$:=nil;
- }
- ;
-
-special_type_specifier :
- STRUCT dname closed_list _PACKED
- {
- if (not is_packed) and (not packrecords) then
- writeln(outfile,'{$PACKRECORDS 1}');
- is_packed:=true;
- $$:=new(presobject,init_two(t_structdef,$3,$2));
- } |
- STRUCT dname closed_list
- {
- if (is_packed) and (not packrecords) then
- writeln(outfile,'{$PACKRECORDS 4}');
- is_packed:=false;
- $$:=new(presobject,init_two(t_structdef,$3,$2));
- } |
- UNION dname closed_list _PACKED
- {
- if (not is_packed) and (not packrecords) then
- writeln(outfile,'{$PACKRECORDS 1}');
- is_packed:=true;
- $$:=new(presobject,init_two(t_uniondef,$3,$2));
- } |
- UNION dname closed_list
- {
- $$:=new(presobject,init_two(t_uniondef,$3,$2));
- } |
- UNION dname
- {
- $$:=$2;
- } |
- STRUCT dname
- {
- $$:=$2;
- } |
- ENUM dname closed_enum_list
- {
- $$:=new(presobject,init_two(t_enumdef,$3,$2));
- } |
- ENUM dname
- {
- $$:=$2;
- };
-
-type_specifier :
- _CONST type_specifier
- {
- if not stripinfo then
- writeln(outfile,'(* Const before type ignored *)');
- $$:=$2;
- } |
- UNION closed_list _PACKED
- {
- if (not is_packed) and (not packrecords)then
- writeln(outfile,'{$PACKRECORDS 1}');
- is_packed:=true;
- $$:=new(presobject,init_one(t_uniondef,$2));
- } |
- UNION closed_list
- {
- $$:=new(presobject,init_one(t_uniondef,$2));
- } |
- STRUCT closed_list _PACKED
- {
- if (not is_packed) and (not packrecords) then
- writeln(outfile,'{$PACKRECORDS 1}');
- is_packed:=true;
- $$:=new(presobject,init_one(t_structdef,$2));
- } |
- STRUCT closed_list
- {
- if (is_packed) and (not packrecords) then
- writeln(outfile,'{$PACKRECORDS 4}');
- is_packed:=false;
- $$:=new(presobject,init_one(t_structdef,$2));
- } |
- ENUM closed_enum_list
- {
- $$:=new(presobject,init_one(t_enumdef,$2));
- } |
- special_type_specifier
- {
- $$:=$1;
- } |
- simple_type_name { $$:=$1; }
- ;
-
-member_list : member_declaration member_list
- {
- $$:=new(presobject,init_one(t_memberdeclist,$1));
- $$^.next:=$2;
- } |
- member_declaration
- {
- $$:=new(presobject,init_one(t_memberdeclist,$1));
- }
- ;
-
-member_declaration :
- type_specifier declarator_list SEMICOLON
- {
- $$:=new(presobject,init_two(t_memberdec,$1,$2));
- }
- ;
-
-dname : ID { (*dname*)
- $$:=new(presobject,init_id(act_token));
- }
- ;
-special_type_name :
- SIGNED special_type_name
- {
- hp:=$2;
- $$:=hp;
- if assigned(hp) then
- begin
- s:=strpas(hp^.p);
- if UseCTypesUnit then
- begin
- if s=cint_STR then
- s:=csint_STR
- else if s=cshort_STR then
- s:=csshort_STR
- else if s=cchar_STR then
- s:=cschar_STR
- else if s=clong_STR then
- s:=cslong_STR
- else if s=clonglong_STR then
- s:=cslonglong_STR
- else if s=cint8_STR then
- s:=cint8_STR
- else if s=cint16_STR then
- s:=cint16_STR
- else if s=cint32_STR then
- s:=cint32_STR
- else if s=cint64_STR then
- s:=cint64_STR
- else
- s:='';
- end
- else
- begin
- if s=UINT_STR then
- s:=INT_STR
- else if s=USHORT_STR then
- s:=SHORT_STR
- else if s=USMALL_STR then
- s:=SMALL_STR
- else if s=UCHAR_STR then
- s:=CHAR_STR
- else if s=QWORD_STR then
- s:=INT64_STR
- else
- s:='';
- end;
- if s<>'' then
- hp^.setstr(s);
- end;
- } |
- UNSIGNED special_type_name
- {
- hp:=$2;
- $$:=hp;
- if assigned(hp) then
- begin
- s:=strpas(hp^.p);
- if UseCTypesUnit then
- begin
- if s=cint_STR then
- s:=cuint_STR
- else if s=cshort_STR then
- s:=cushort_STR
- else if s=cchar_STR then
- s:=cuchar_STR
- else if s=clong_STR then
- s:=culong_STR
- else if s=clonglong_STR then
- s:=culonglong_STR
- else if s=cint8_STR then
- s:=cuint8_STR
- else if s=cint16_STR then
- s:=cuint16_STR
- else if s=cint32_STR then
- s:=cuint32_STR
- else if s=cint64_STR then
- s:=cuint64_STR
- else
- s:='';
- end
- else
- begin
- if s=INT_STR then
- s:=UINT_STR
- else if s=SHORT_STR then
- s:=USHORT_STR
- else if s=SMALL_STR then
- s:=USMALL_STR
- else if s=CHAR_STR then
- s:=UCHAR_STR
- else if s=INT64_STR then
- s:=QWORD_STR
- else
- s:='';
- end;
- if s<>'' then
- hp^.setstr(s);
- end;
- } |
- INT
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cint_STR))
- else
- $$:=new(presobject,init_intid(INT_STR));
- } |
- LONG
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(clong_STR))
- else
- $$:=new(presobject,init_intid(INT_STR));
- } |
- LONG INT
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(clong_STR))
- else
- $$:=new(presobject,init_intid(INT_STR));
- } |
- LONG LONG
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(clonglong_STR))
- else
- $$:=new(presobject,init_intid(INT64_STR));
- } |
- LONG LONG INT
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(clonglong_STR))
- else
- $$:=new(presobject,init_intid(INT64_STR));
- } |
- SHORT
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cshort_STR))
- else
- $$:=new(presobject,init_intid(SMALL_STR));
- } |
- SHORT INT
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(csint_STR))
- else
- $$:=new(presobject,init_intid(SMALL_STR));
- } |
- INT8
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cint8_STR))
- else
- $$:=new(presobject,init_intid(SHORT_STR));
- } |
- INT16
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cint16_STR))
- else
- $$:=new(presobject,init_intid(SMALL_STR));
- } |
- INT32
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cint32_STR))
- else
- $$:=new(presobject,init_intid(INT_STR));
- } |
- INT64
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cint64_STR))
- else
- $$:=new(presobject,init_intid(INT64_STR));
- } |
- FLOAT
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cfloat_STR))
- else
- $$:=new(presobject,init_intid(FLOAT_STR));
- } |
- VOID
- {
- $$:=new(presobject,init_no(t_void));
- } |
- _CHAR
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cchar_STR))
- else
- $$:=new(presobject,init_intid(CHAR_STR));
- } |
- UNSIGNED
- {
- if UseCTypesUnit then
- $$:=new(presobject,init_id(cunsigned_STR))
- else
- $$:=new(presobject,init_intid(UINT_STR));
- }
- ;
-
-simple_type_name :
- special_type_name
- {
- $$:=$1;
- }
- |
- dname
- {
- $$:=$1;
- tn:=$$^.str;
- if removeunderscore and
- (length(tn)>1) and (tn[1]='_') then
- $$^.setstr(Copy(tn,2,length(tn)-1));
- }
- ;
-
-declarator_list :
- declarator_list COMMA declarator
- {
- $$:=$1;
- hp:=$1;
- while assigned(hp^.next) do
- hp:=hp^.next;
- hp^.next:=new(presobject,init_one(t_declist,$3));
- }|
- error error_info COMMA declarator_list
- {
- writeln(outfile,' in declarator_list *)');
- $$:=$4;
- yyerrok;
- }|
- error error_info
- {
- writeln(outfile,' in declarator_list *)');
- yyerrok;
- }|
- declarator
- {
- $$:=new(presobject,init_one(t_declist,$1));
- }
- ;
-
-argument_declaration : type_specifier declarator
- {
- $$:=new(presobject,init_two(t_arg,$1,$2));
- } |
- type_specifier STAR declarator
- {
- (* type_specifier STAR declarator *)
- hp:=new(presobject,init_one(t_pointerdef,$1));
- $$:=new(presobject,init_two(t_arg,hp,$3));
- } |
- type_specifier abstract_declarator
- {
- $$:=new(presobject,init_two(t_arg,$1,$2));
- }
- ;
-
-argument_declaration_list : argument_declaration
- {
- $$:=new(presobject,init_two(t_arglist,$1,nil));
- } |
- argument_declaration COMMA argument_declaration_list
- {
- $$:=new(presobject,init_two(t_arglist,$1,nil));
- $$^.next:=$3;
- } |
- ELLIPSIS
- {
- $$:=new(presobject,init_two(t_arglist,ellipsisarg,nil));
- } |
- {
- $$:=nil;
- }
- ;
-
-size_overrider :
- _FAR
- { $$:=new(presobject,init_id('far'));}
- | _NEAR
- { $$:=new(presobject,init_id('near'));}
- | _HUGE
- { $$:=new(presobject,init_id('huge'));}
- ;
-
-declarator :
- _CONST declarator
- {
- if not stripinfo then
- writeln(outfile,'(* Const before declarator ignored *)');
- $$:=$2;
- } |
- size_overrider STAR declarator
- {
- if not stripinfo then
- writeln(outfile,aktspace,'(* ',$1^.p,' ignored *)');
- dispose($1,done);
- hp:=$3;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
- } |
- STAR declarator
- {
- (* %prec PSTAR this was wrong!! *)
- hp:=$2;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
- } |
- _AND declarator %prec P_AND
- {
- hp:=$2;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_one(t_addrdef,nil));
- } |
- dname COLON expr
- {
- (* size specifier supported *)
- hp:=new(presobject,init_one(t_size_specifier,$3));
- $$:=new(presobject,init_three(t_dec,nil,$1,hp));
- }|
- dname ASSIGN expr
- {
- if not stripinfo then
- writeln(outfile,'(* Warning : default value for ',$1^.p,' ignored *)');
- hp:=new(presobject,init_one(t_default_value,$3));
- $$:=new(presobject,init_three(t_dec,nil,$1,hp));
- }|
- dname
- {
- $$:=new(presobject,init_two(t_dec,nil,$1));
- }|
- declarator LKLAMMER argument_declaration_list RKLAMMER
- {
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_procdef,nil,$3));
- } |
- declarator no_arg
- {
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_procdef,nil,nil));
- } |
- declarator LECKKLAMMER expr RECKKLAMMER
- {
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_arraydef,nil,$3));
- } |
- declarator LECKKLAMMER RECKKLAMMER
- {
- (* this is translated into a pointer *)
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_arraydef,nil,nil));
- } |
- LKLAMMER declarator RKLAMMER
- {
- $$:=$2;
- }
- ;
-
-no_arg : LKLAMMER RKLAMMER |
- LKLAMMER VOID RKLAMMER;
-
-abstract_declarator :
- _CONST abstract_declarator
- {
- if not stripinfo then
- writeln(outfile,'(* Const before abstract_declarator ignored *)');
- $$:=$2;
- } |
- size_overrider STAR abstract_declarator
- {
- if not stripinfo then
- writeln(outfile,aktspace,'(* ',$1^.p,' ignored *)');
- dispose($1,done);
- hp:=$3;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
- } |
- STAR abstract_declarator %prec PSTAR
- {
- hp:=$2;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
- } |
- abstract_declarator LKLAMMER argument_declaration_list RKLAMMER
- {
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_procdef,nil,$3));
- } |
- abstract_declarator no_arg
- {
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_procdef,nil,nil));
- } |
- abstract_declarator LECKKLAMMER expr RECKKLAMMER
- {
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_arraydef,nil,$3));
- } |
- declarator LECKKLAMMER RECKKLAMMER
- {
- (* this is translated into a pointer *)
- hp:=$1;
- $$:=hp;
- while assigned(hp^.p1) do
- hp:=hp^.p1;
- hp^.p1:=new(presobject,init_two(t_arraydef,nil,nil));
- } |
- LKLAMMER abstract_declarator RKLAMMER
- {
- $$:=$2;
- } |
- {
- $$:=new(presobject,init_two(t_dec,nil,nil));
- }
- ;
-
-expr : shift_expr
- { $$:=$1; }
- ;
-
-shift_expr :
- expr _ASSIGN expr
- { $$:=new(presobject,init_bop(':=',$1,$3)); }
- | expr EQUAL expr
- { $$:=new(presobject,init_bop('=',$1,$3));}
- | expr UNEQUAL expr
- { $$:=new(presobject,init_bop('<>',$1,$3));}
- | expr GT expr
- { $$:=new(presobject,init_bop('>',$1,$3));}
- | expr GTE expr
- { $$:=new(presobject,init_bop('>=',$1,$3));}
- | expr LT expr
- { $$:=new(presobject,init_bop('<',$1,$3));}
- | expr LTE expr
- { $$:=new(presobject,init_bop('<=',$1,$3));}
- | expr _PLUS expr
- { $$:=new(presobject,init_bop('+',$1,$3));}
- | expr MINUS expr
- { $$:=new(presobject,init_bop('-',$1,$3));}
- | expr STAR expr
- { $$:=new(presobject,init_bop('*',$1,$3));}
- | expr _SLASH expr
- { $$:=new(presobject,init_bop('/',$1,$3));}
- | expr _OR expr
- { $$:=new(presobject,init_bop(' or ',$1,$3));}
- | expr _AND expr
- { $$:=new(presobject,init_bop(' and ',$1,$3));}
- | expr _NOT expr
- { $$:=new(presobject,init_bop(' not ',$1,$3));}
- | expr _SHL expr
- { $$:=new(presobject,init_bop(' shl ',$1,$3));}
- | expr _SHR expr
- { $$:=new(presobject,init_bop(' shr ',$1,$3));}
- | expr QUESTIONMARK colon_expr
- {
- $3^.p1:=$1;
- $$:=$3;
- inc(if_nb);
- $$^.p:=strpnew('if_local'+str(if_nb));
- } |
- unary_expr {$$:=$1;}
- ;
-
-colon_expr : expr COLON expr
- { (* if A then B else C *)
- $$:=new(presobject,init_three(t_ifexpr,nil,$1,$3));}
- ;
-
-maybe_empty_unary_expr :
- unary_expr
- { $$:=$1; }
- |
- { $$:=nil;}
- ;
-
-unary_expr:
- dname
- {
- $$:=$1;
- } |
- special_type_name
- {
- $$:=$1;
- } |
- CSTRING
- {
- (* remove L prefix for widestrings *)
- s:=act_token;
- if Win32headers and (s[1]='L') then
- delete(s,1,1);
- $$:=new(presobject,init_id(''''+copy(s,2,length(s)-2)+''''));
- } |
- NUMBER
- {
- $$:=new(presobject,init_id(act_token));
- } |
- unary_expr POINT expr
- {
- $$:=new(presobject,init_bop('.',$1,$3));
- } |
- unary_expr DEREF expr
- {
- $$:=new(presobject,init_bop('^.',$1,$3));
- } |
- MINUS unary_expr
- {
- $$:=new(presobject,init_preop('-',$2));
- }|
- _AND unary_expr %prec R_AND
- {
- $$:=new(presobject,init_preop('@',$2));
- }|
- _NOT unary_expr
- {
- $$:=new(presobject,init_preop(' not ',$2));
- } |
- LKLAMMER dname RKLAMMER maybe_empty_unary_expr
- {
- if assigned($4) then
- $$:=new(presobject,init_two(t_typespec,$2,$4))
- else
- $$:=$2;
- } |
- LKLAMMER type_specifier RKLAMMER unary_expr
- {
- $$:=new(presobject,init_two(t_typespec,$2,$4));
- } |
- LKLAMMER type_specifier STAR RKLAMMER unary_expr
- {
- hp:=new(presobject,init_one(t_pointerdef,$2));
- $$:=new(presobject,init_two(t_typespec,hp,$5));
- } |
- LKLAMMER type_specifier size_overrider STAR RKLAMMER unary_expr
- {
- if not stripinfo then
- writeln(outfile,aktspace,'(* ',$3^.p,' ignored *)');
- dispose($3,done);
- write_type_specifier(outfile,$2);
- writeln(outfile,' ignored *)');
- hp:=new(presobject,init_one(t_pointerdef,$2));
- $$:=new(presobject,init_two(t_typespec,hp,$6));
- } |
- dname LKLAMMER exprlist RKLAMMER
- {
- hp:=new(presobject,init_one(t_exprlist,$1));
- $$:=new(presobject,init_three(t_funexprlist,hp,$3,nil));
- } |
- LKLAMMER shift_expr RKLAMMER
- {
- $$:=$2;
- } |
- LKLAMMER STAR unary_expr RKLAMMER maybe_space LKLAMMER exprlist RKLAMMER
- {
- $$:=new(presobject,init_two(t_callop,$3,$7));
- } |
- dname LECKKLAMMER exprlist RECKKLAMMER
- {
- $$:=new(presobject,init_two(t_arrayop,$1,$3));
- }
- ;
-
-enum_list :
- enum_element COMMA enum_list
- { (*enum_element COMMA enum_list *)
- $$:=$1;
- $$^.next:=$3;
- } |
- enum_element {
- $$:=$1;
- } |
- {(* empty enum list *)
- $$:=nil;};
-
-enum_element :
- dname _ASSIGN expr
- { begin (*enum_element: dname _ASSIGN expr *)
- $$:=new(presobject,init_two(t_enumlist,$1,$3));
- end;
- } |
- dname
- {
- begin (*enum_element: dname*)
- $$:=new(presobject,init_two(t_enumlist,$1,nil));
- end;
- };
-
-
-def_expr :
- unary_expr
- {
- if $1^.typ=t_funexprlist then
- $$:=$1
- else
- $$:=new(presobject,init_two(t_exprlist,$1,nil));
- (* if here is a type specifier
- we know the return type *)
- if ($1^.typ=t_typespec) then
- $$^.p3:=$1^.p1^.get_copy;
- }
- ;
-
-para_def_expr :
- SPACE_DEFINE def_expr
- {
- $$:=$2;
- } |
- maybe_space LKLAMMER def_expr RKLAMMER
- {
- $$:=$3
- }
- ;
-
-exprlist : exprelem COMMA exprlist
- { (*exprlist COMMA expr*)
- $$:=$1;
- $1^.next:=$3;
- } |
- exprelem
- {
- $$:=$1;
- } |
- { (* empty expression list *)
- $$:=nil; };
-
-exprelem :
- expr
- {
- $$:=new(presobject,init_one(t_exprlist,$1));
- };
-
-%%
-
-function yylex : Integer;
-begin
- yylex:=scan.yylex;
- line_no:=yylineno;
-end;
-
-procedure WriteFileHeader(var headerfile: Text);
-var
- i: integer;
- originalstr: string;
-begin
-{ write unit header }
- if not includefile then
- begin
- if createdynlib then
- writeln(headerfile,'{$mode objfpc}');
- writeln(headerfile,'unit ',unitname,';');
- writeln(headerfile,'interface');
- writeln(headerfile);
- if UseCTypesUnit then
- begin
- writeln(headerfile,'uses');
- writeln(headerfile,' ctypes;');
- writeln(headerfile);
- end;
- writeln(headerfile,'{');
- writeln(headerfile,' Automatically converted by H2Pas ',version,' from ',inputfilename);
- writeln(headerfile,' The following command line parameters were used:');
- for i:=1 to paramcount do
- writeln(headerfile,' ',paramstr(i));
- writeln(headerfile,'}');
- writeln(headerfile);
- end;
- if UseName then
- begin
- writeln(headerfile,aktspace,'const');
- writeln(headerfile,aktspace,' External_library=''',libfilename,'''; {Setup as you need}');
- writeln(headerfile);
- end;
- if UsePPointers then
- begin
- Writeln(headerfile,aktspace,'{ Pointers to basic pascal types, inserted by h2pas conversion program.}');
- Writeln(headerfile,aktspace,'Type');
- Writeln(headerfile,aktspace,' PLongint = ^Longint;');
- Writeln(headerfile,aktspace,' PSmallInt = ^SmallInt;');
- Writeln(headerfile,aktspace,' PByte = ^Byte;');
- Writeln(headerfile,aktspace,' PWord = ^Word;');
- Writeln(headerfile,aktspace,' PDWord = ^DWord;');
- Writeln(headerfile,aktspace,' PDouble = ^Double;');
- Writeln(headerfile);
- end;
- if PTypeList.count <> 0 then
- Writeln(headerfile,aktspace,'Type');
- for i:=0 to (PTypeList.Count-1) do
- begin
- originalstr:=copy(PTypelist[i],2,length(PTypeList[i]));
- Writeln(headerfile,aktspace,PTypeList[i],' = ^',originalstr,';');
- end;
- if not packrecords then
- begin
- writeln(headerfile,'{$IFDEF FPC}');
- writeln(headerfile,'{$PACKRECORDS C}');
- writeln(headerfile,'{$ENDIF}');
- end;
- writeln(headerfile);
-end;
-
-
-var
- SS : string;
- i : longint;
- headerfile: Text;
- finaloutfile: Text;
-begin
- pointerprefix:=false;
-{ Initialize }
- PTypeList:=TStringList.Create;
- PTypeList.Sorted := true;
- PTypeList.Duplicates := dupIgnore;
- freedynlibproc:=TStringList.Create;
- loaddynlibproc:=TStringList.Create;
- yydebug:=true;
- aktspace:='';
- block_type:=bt_no;
- IsExtern:=false;
-{ Read commandline options }
- ProcessOptions;
- if not CompactMode then
- aktspace:=' ';
-{ open input and output files }
- assign(yyinput, inputfilename);
- {$I-}
- reset(yyinput);
- {$I+}
- if ioresult<>0 then
- begin
- writeln('file ',inputfilename,' not found!');
- halt(1);
- end;
- { This is the intermediate output file }
- assign(outfile, 'ext3.tmp');
- {$I-}
- rewrite(outfile);
- {$I+}
- if ioresult<>0 then
- begin
- writeln('file ext3.tmp could not be created!');
- halt(1);
- end;
- writeln(outfile);
-{ Open tempfiles }
- { This is where the implementation section of the unit shall be stored }
- Assign(implemfile,'ext.tmp');
- rewrite(implemfile);
- Assign(tempfile,'ext2.tmp');
- rewrite(tempfile);
-{ Parse! }
- yyparse;
-{ Write implementation if needed }
- if not(includefile) then
- begin
- writeln(outfile);
- writeln(outfile,'implementation');
- writeln(outfile);
- end;
- { here we have a problem if a line is longer than 255 chars !! }
- reset(implemfile);
- while not eof(implemfile) do
- begin
- readln(implemfile,SS);
- writeln(outfile,SS);
- end;
-
- if createdynlib then
- begin
- writeln(outfile,' uses');
- writeln(outfile,' SysUtils, dynlibs;');
- writeln(outfile);
- writeln(outfile,' var');
- writeln(outfile,' hlib : tlibhandle;');
- writeln(outfile);
- writeln(outfile);
- writeln(outfile,' procedure Free',unitname,';');
- writeln(outfile,' begin');
- writeln(outfile,' FreeLibrary(hlib);');
-
- for i:=0 to (freedynlibproc.Count-1) do
- Writeln(outfile,' ',freedynlibproc[i]);
-
- writeln(outfile,' end;');
- writeln(outfile);
- writeln(outfile);
- writeln(outfile,' procedure Load',unitname,'(lib : pchar);');
- writeln(outfile,' begin');
- writeln(outfile,' Free',unitname,';');
- writeln(outfile,' hlib:=LoadLibrary(lib);');
- writeln(outfile,' if hlib=0 then');
- writeln(outfile,' raise Exception.Create(format(''Could not load library: %s'',[lib]));');
- writeln(outfile);
- for i:=0 to (loaddynlibproc.Count-1) do
- Writeln(outfile,' ',loaddynlibproc[i]);
- writeln(outfile,' end;');
-
- writeln(outfile);
- writeln(outfile);
-
- writeln(outfile,'initialization');
- writeln(outfile,' Load',unitname,'(''',unitname,''');');
- writeln(outfile,'finalization');
- writeln(outfile,' Free',unitname,';');
- end;
-
- { write end of file }
- writeln(outfile);
- if not(includefile) then
- writeln(outfile,'end.');
- { close and erase tempfiles }
- close(implemfile);
- erase(implemfile);
- close(tempfile);
- erase(tempfile);
- flush(outfile);
-
- {**** generate full file ****}
- assign(headerfile, 'ext4.tmp');
- {$I-}
- rewrite(headerfile);
- {$I+}
- if ioresult<>0 then
- begin
- writeln('file ext4.tmp could not be created!');
- halt(1);
- end;
- WriteFileHeader(HeaderFile);
-
- { Final output filename }
- assign(finaloutfile, outputfilename);
- {$I-}
- rewrite(finaloutfile);
- {$I+}
- if ioresult<>0 then
- begin
- writeln('file ',outputfilename,' could not be created!');
- halt(1);
- end;
- writeln(finaloutfile);
-
- { Read unit header file }
- reset(headerfile);
- while not eof(headerfile) do
- begin
- readln(headerfile,SS);
- writeln(finaloutfile,SS);
- end;
- { Read interface and implementation file }
- reset(outfile);
- while not eof(outfile) do
- begin
- readln(outfile,SS);
- writeln(finaloutfile,SS);
- end;
-
- close(HeaderFile);
- close(outfile);
- close(finaloutfile);
- erase(outfile);
- erase(headerfile);
-
- PTypeList.Free;
- freedynlibproc.free;
- loaddynlibproc.free;
-end.
+%{
+program h2pas;
+
+(*
+ Copyright (c) 1998-2000 by Florian Klaempfl
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************)
+
+{$message TODO: warning Unit types is only needed due to issue 7910}
+
+ uses
+ SysUtils,types, classes,
+ h2poptions,scan,converu,h2plexlib,h2pyacclib;
+
+ type
+ YYSTYPE = presobject;
+
+ const
+ SHORT_STR = 'shortint';
+ USHORT_STR = 'byte';
+ //C++ SHORT types usually map to the small types
+ SMALL_STR = 'smallint';
+ USMALL_STR = 'word';
+ INT_STR = 'longint';
+ UINT_STR = 'dword';
+ CHAR_STR = 'char';
+ UCHAR_STR = USHORT_STR; { should we use byte or char for 'unsigned char' ?? }
+
+ INT64_STR = 'int64';
+ QWORD_STR = 'qword';
+ FLOAT_STR = 'single';
+ WCHAR_STR = 'widechar';
+
+ {ctypes strings}
+ const
+ cint8_STR = 'cint8';
+ cuint8_STR = 'cuint8';
+ cchar_STR = 'cchar';
+ cschar_STR = 'cschar';
+ cuchar_STR = 'cuchar';
+
+ cint16_STR = 'cint16';
+ cuint16_STR = 'cuint16';
+ cshort_STR = 'cshort';
+ csshort_STR = 'csshort';
+ cushort_STR = 'cushort';
+
+ cint32_STR = 'cint32';
+ cuint32_STR = 'cuint32';
+ cint_STR = 'cint';
+ csint_STR = 'csint';
+ cuint_STR = 'cuint';
+
+ csigned_STR = 'csigned';
+ cunsigned_STR = 'cunsigned';
+
+ cint64_STR = 'cint64';
+ cuint64_STR = 'cuint64';
+ clonglong_STR = 'clonglong';
+ cslonglong_STR = 'cslonglong';
+ culonglong_STR = 'culonglong';
+
+ cbool_STR = 'cbool';
+
+ clong_STR = 'clong';
+ cslong_STR = 'cslong';
+ culong_STR = 'culong';
+
+ cfloat_STR = 'cfloat';
+ cdouble_STR = 'cdouble';
+ clongdouble_STR = 'clongdouble';
+
+ const
+ MAX_CTYPESARRAY = 25;
+ CTypesArray : array [0..MAX_CTYPESARRAY] of string =
+ (cint8_STR, cuint8_STR,
+ cchar_STR, cschar_STR, cuchar_STR,
+ cint16_STR, cuint16_STR,
+ cshort_STR, csshort_STR, cushort_STR,
+ csigned_STR, cunsigned_STR,
+ cint32_STR, cuint32_STR, cint_STR,
+ csint_STR, cuint_STR,
+ cint64_STR, cuint64_STR,
+ clonglong_STR, cslonglong_STR, culonglong_STR,
+
+ cbool_STR,
+ clong_STR, cslong_STR, culong_STR);
+
+
+ var
+ hp,ph : presobject;
+ implemfile : text; (* file for implementation headers extern procs *)
+ IsExtern : boolean;
+ NeedEllipsisOverload : boolean;
+ must_write_packed_field : boolean;
+ tempfile : text;
+ No_pop : boolean;
+ s,TN,PN : String;
+ pointerprefix: boolean;
+ freedynlibproc,
+ loaddynlibproc : tstringlist;
+
+
+(* $ define yydebug
+ compile with -dYYDEBUG to get debugging info *)
+
+ const
+ (* number of a?b:c construction in one define *)
+ if_nb : longint = 0;
+ is_packed : boolean = false;
+ is_procvar : boolean = false;
+
+ var space_array : array [0..255] of byte;
+ space_index : byte;
+
+ { Used when PPointers is used - pointer type definitions }
+ PTypeList : TStringList;
+
+
+ procedure shift(space_number : byte);
+ var
+ i : byte;
+ begin
+ space_array[space_index]:=space_number;
+ inc(space_index);
+ for i:=1 to space_number do
+ aktspace:=aktspace+' ';
+ end;
+
+ procedure popshift;
+ begin
+ dec(space_index);
+ if space_index<0 then
+ internalerror(20);
+ delete(aktspace,1,space_array[space_index]);
+ end;
+
+ function str(i : longint) : string;
+ var
+ s : string;
+ begin
+ system.str(i,s);
+ str:=s;
+ end;
+
+ function hexstr(i : cardinal) : string;
+
+ const
+ HexTbl : array[0..15] of char='0123456789ABCDEF';
+ var
+ str : string;
+ begin
+ str:='';
+ while i<>0 do
+ begin
+ str:=hextbl[i and $F]+str;
+ i:=i shr 4;
+ end;
+ if str='' then str:='0';
+ hexstr:='$'+str;
+ end;
+
+ function uppercase(s : string) : string;
+ var
+ i : byte;
+ begin
+ for i:=1 to length(s) do
+ s[i]:=UpCase(s[i]);
+ uppercase:=s;
+ end;
+
+ procedure write_type_specifier(var outfile:text; p : presobject);forward;
+ procedure write_p_a_def(var outfile:text; p,simple_type : presobject);forward;
+ procedure write_ifexpr(var outfile:text; p : presobject);forward;
+ procedure write_funexpr(var outfile:text; p : presobject);forward;
+
+ procedure yymsg(const msg : string);
+ begin
+ writeln('line ',line_no,': ',msg);
+ end;
+
+
+ { This converts pascal reserved words to
+ the correct syntax.
+ }
+ function FixId(const s:string):string;
+ const
+ maxtokens = 14;
+ reservedid: array[1..maxtokens] of string[14] =
+ (
+ 'CLASS',
+ 'DISPOSE',
+ 'FUNCTION',
+ 'FALSE',
+ 'LABEL',
+ 'NEW',
+ 'PROPERTY',
+ 'PROCEDURE',
+ 'RECORD',
+ 'REPEAT',
+ 'STRING',
+ 'TYPE',
+ 'TRUE',
+ 'UNTIL'
+ );
+ var
+ b : boolean;
+ up : string;
+ i: integer;
+ begin
+ if s='' then
+ begin
+ FixId:='';
+ exit;
+ end;
+ b:=false;
+ up:=Uppercase(s);
+ for i:=1 to maxtokens do
+ begin
+ if up=reservedid[i] then
+ begin
+ b:=true;
+ break;
+ end;
+ end;
+ if b then
+ FixId:='_'+s
+ else
+ FixId:=s;
+ end;
+
+
+
+ function TypeName(const s:string):string;
+ var
+ i : longint;
+ begin
+ i:=1;
+ if RemoveUnderScore and (length(s)>1) and (s[1]='_') then
+ i:=2;
+ if PrependTypes then
+ TypeName:='T'+Copy(s,i,255)
+ else
+ TypeName:=Copy(s,i,255);
+ end;
+
+ function IsACType(const s : String) : Boolean;
+ var i : Integer;
+ begin
+ IsACType := True;
+ for i := 0 to MAX_CTYPESARRAY do
+ begin
+ if s = CTypesArray[i] then
+ begin
+ Exit;
+ end;
+ end;
+ IsACType := False;
+ end;
+
+ function PointerName(const s:string):string;
+ var
+ i : longint;
+ begin
+ if UseCTypesUnit then
+ begin
+ if IsACType(s) then
+ begin
+ PointerName := 'p'+s;
+ exit;
+ end;
+ end;
+ i:=1;
+ if RemoveUnderScore and (length(s)>1) and (s[1]='_') then
+ i:=2;
+ if UsePPointers then
+ begin
+ PointerName:='P'+Copy(s,i,255);
+ PTypeList.Add(PointerName);
+ end
+ else
+ PointerName:=Copy(s,i,255);
+ if PointerPrefix then
+ PTypeList.Add('P'+s);
+ end;
+
+ procedure write_packed_fields_info(var outfile:text; p : presobject; ph : string);
+ var
+ hp1,hp2,hp3 : presobject;
+ is_sized : boolean;
+ line : string;
+ flag_index : longint;
+ name : pchar;
+ ps : byte;
+
+ begin
+ { write out the tempfile created }
+ close(tempfile);
+ reset(tempfile);
+ is_sized:=false;
+ flag_index:=0;
+ writeln(outfile);
+ writeln(outfile,aktspace,'const');
+ shift(2);
+ while not eof(tempfile) do
+ begin
+ readln(tempfile,line);
+ ps:=pos('&',line);
+ if ps>0 then
+ line:=copy(line,1,ps-1)+ph+'_'+copy(line,ps+1,255);
+ writeln(outfile,aktspace,line);
+ end;
+ writeln(outfile);
+ close(tempfile);
+ rewrite(tempfile);
+ popshift;
+ (* walk through all members *)
+ hp1 := p^.p1;
+ while assigned(hp1) do
+ begin
+ (* hp2 is t_memberdec *)
+ hp2:=hp1^.p1;
+ (* hp3 is t_declist *)
+ hp3:=hp2^.p2;
+ while assigned(hp3) do
+ begin
+ if assigned(hp3^.p1^.p3) and
+ (hp3^.p1^.p3^.typ = t_size_specifier) then
+ begin
+ is_sized:=true;
+ name:=hp3^.p1^.p2^.p;
+ { get function in interface }
+ write(outfile,aktspace,'function ',name);
+ write(outfile,'(var a : ',ph,') : ');
+ shift(2);
+ write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
+ writeln(outfile,';');
+ popshift;
+ { get function in implementation }
+ write(implemfile,aktspace,'function ',name);
+ write(implemfile,'(var a : ',ph,') : ');
+ if not compactmode then
+ shift(2);
+ write_p_a_def(implemfile,hp3^.p1^.p1,hp2^.p1);
+ writeln(implemfile,';');
+ writeln(implemfile,aktspace,'begin');
+ shift(2);
+ write(implemfile,aktspace,name,':=(a.flag',flag_index);
+ writeln(implemfile,' and bm_',ph,'_',name,') shr bp_',ph,'_',name,';');
+ popshift;
+ writeln(implemfile,aktspace,'end;');
+ if not compactmode then
+ popshift;
+ writeln(implemfile,'');
+ { set function in interface }
+ write(outfile,aktspace,'procedure set_',name);
+ write(outfile,'(var a : ',ph,'; __',name,' : ');
+ shift(2);
+ write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
+ writeln(outfile,');');
+ popshift;
+ { set function in implementation }
+ write(implemfile,aktspace,'procedure set_',name);
+ write(implemfile,'(var a : ',ph,'; __',name,' : ');
+ if not compactmode then
+ shift(2);
+ write_p_a_def(implemfile,hp3^.p1^.p1,hp2^.p1);
+ writeln(implemfile,');');
+ writeln(implemfile,aktspace,'begin');
+ shift(2);
+ write(implemfile,aktspace,'a.flag',flag_index,':=');
+ write(implemfile,'a.flag',flag_index,' or ');
+ writeln(implemfile,'((__',name,' shl bp_',ph,'_',name,') and bm_',ph,'_',name,');');
+ popshift;
+ writeln(implemfile,aktspace,'end;');
+ if not compactmode then
+ popshift;
+ writeln(implemfile,'');
+ end
+ else if is_sized then
+ begin
+ is_sized:=false;
+ inc(flag_index);
+ end;
+ hp3:=hp3^.next;
+ end;
+ hp1:=hp1^.next;
+ end;
+ must_write_packed_field:=false;
+ block_type:=bt_no;
+ end;
+
+
+ procedure write_expr(var outfile:text; p : presobject);
+ begin
+ if assigned(p) then
+ begin
+ case p^.typ of
+ t_id,
+ t_ifexpr :
+ write(outfile,FixId(p^.p));
+ t_funexprlist :
+ write_funexpr(outfile,p);
+ t_exprlist :
+ begin
+ if assigned(p^.p1) then
+ write_expr(outfile,p^.p1);
+ if assigned(p^.next) then
+ begin
+ write(', ');
+ write_expr(outfile,p^.next);
+ end;
+ end;
+ t_preop : begin
+ write(outfile,p^.p,'(');
+ write_expr(outfile,p^.p1);
+ write(outfile,')');
+ flush(outfile);
+ end;
+ t_typespec : begin
+ write_type_specifier(outfile,p^.p1);
+ write(outfile,'(');
+ write_expr(outfile,p^.p2);
+ write(outfile,')');
+ flush(outfile);
+ end;
+ t_bop : begin
+ if p^.p1^.typ<>t_id then
+ write(outfile,'(');
+ write_expr(outfile,p^.p1);
+ if p^.p1^.typ<>t_id then
+ write(outfile,')');
+ write(outfile,p^.p);
+ if p^.p2^.typ<>t_id then
+ write(outfile,'(');
+ write_expr(outfile,p^.p2);
+ if p^.p2^.typ<>t_id then
+ write(outfile,')');
+ flush(outfile);
+ end;
+ t_arrayop :
+ begin
+ write_expr(outfile,p^.p1);
+ write(outfile,p^.p,'[');
+ write_expr(outfile,p^.p2);
+ write(outfile,']');
+ flush(outfile);
+ end;
+ t_callop :
+ begin
+ write_expr(outfile,p^.p1);
+ write(outfile,p^.p,'(');
+ write_expr(outfile,p^.p2);
+ write(outfile,')');
+ flush(outfile);
+ end;
+ else
+ begin
+ writeln(ord(p^.typ));
+ internalerror(2);
+ end;
+ end;
+ end;
+ end;
+
+
+ procedure write_ifexpr(var outfile:text; p : presobject);
+ begin
+ flush(outfile);
+ write(outfile,'if ');
+ write_expr(outfile,p^.p1);
+ writeln(outfile,' then');
+ write(outfile,aktspace,' ');
+ write(outfile,p^.p);
+ write(outfile,':=');
+ write_expr(outfile,p^.p2);
+ writeln(outfile);
+ writeln(outfile,aktspace,'else');
+ write(outfile,aktspace,' ');
+ write(outfile,p^.p);
+ write(outfile,':=');
+ write_expr(outfile,p^.p3);
+ writeln(outfile,';');
+ write(outfile,aktspace);
+ flush(outfile);
+ end;
+
+
+ procedure write_all_ifexpr(var outfile:text; p : presobject);
+ begin
+ if assigned(p) then
+ begin
+ case p^.typ of
+ t_id :;
+ t_preop :
+ write_all_ifexpr(outfile,p^.p1);
+ t_callop,
+ t_arrayop,
+ t_bop :
+ begin
+ write_all_ifexpr(outfile,p^.p1);
+ write_all_ifexpr(outfile,p^.p2);
+ end;
+ t_ifexpr :
+ begin
+ write_all_ifexpr(outfile,p^.p1);
+ write_all_ifexpr(outfile,p^.p2);
+ write_all_ifexpr(outfile,p^.p3);
+ write_ifexpr(outfile,p);
+ end;
+ t_typespec :
+ write_all_ifexpr(outfile,p^.p2);
+ t_funexprlist,
+ t_exprlist :
+ begin
+ if assigned(p^.p1) then
+ write_all_ifexpr(outfile,p^.p1);
+ if assigned(p^.next) then
+ write_all_ifexpr(outfile,p^.next);
+ end
+ else
+ internalerror(6);
+ end;
+ end;
+ end;
+
+ procedure write_funexpr(var outfile:text; p : presobject);
+ var
+ i : longint;
+
+ begin
+ if assigned(p) then
+ begin
+ case p^.typ of
+ t_ifexpr :
+ write(outfile,p^.p);
+ t_exprlist :
+ begin
+ write_expr(outfile,p^.p1);
+ if assigned(p^.next) then
+ begin
+ write(outfile,',');
+ write_funexpr(outfile,p^.next);
+ end
+ end;
+ t_funcname :
+ begin
+ if if_nb>0 then
+ begin
+ writeln(outfile,aktspace,'var');
+ write(outfile,aktspace,' ');
+ for i:=1 to if_nb do
+ begin
+ write(outfile,'if_local',i);
+ if i<if_nb then
+ write(outfile,', ')
+ else
+ writeln(outfile,' : longint;');
+ end;
+ writeln(outfile,aktspace,'(* result types are not known *)');
+ if_nb:=0;
+ end;
+ writeln(outfile,aktspace,'begin');
+ shift(2);
+ write(outfile,aktspace);
+ write_all_ifexpr(outfile,p^.p2);
+ write_expr(outfile,p^.p1);
+ write(outfile,':=');
+ write_funexpr(outfile,p^.p2);
+ writeln(outfile,';');
+ popshift;
+ writeln(outfile,aktspace,'end;');
+ if not compactmode then
+ popshift;
+ flush(outfile);
+ end;
+ t_funexprlist :
+ begin
+ if assigned(p^.p3) then
+ begin
+ write_type_specifier(outfile,p^.p3);
+ write(outfile,'(');
+ end;
+ if assigned(p^.p1) then
+ write_funexpr(outfile,p^.p1);
+ if assigned(p^.p2) then
+ begin
+ write(outfile,'(');
+ write_funexpr(outfile,p^.p2);
+ write(outfile,')');
+ end;
+ if assigned(p^.p3) then
+ write(outfile,')');
+ end
+ else internalerror(5);
+ end;
+ end;
+ end;
+
+ function ellipsisarg : presobject;
+ begin
+ ellipsisarg:=new(presobject,init_two(t_arg,nil,nil));
+ end;
+
+ const
+ (* if in args *dname is replaced by pdname *)
+ in_args : boolean = false;
+ typedef_level : longint = 0;
+
+ (* writes an argument list, where p is t_arglist *)
+
+ procedure write_args(var outfile:text; p : presobject);
+ var
+ len,para : longint;
+ old_in_args : boolean;
+ varpara : boolean;
+ lastp : presobject;
+ hs : string;
+ begin
+ NeedEllipsisOverload:=false;
+ para:=1;
+ len:=0;
+ lastp:=nil;
+ old_in_args:=in_args;
+ in_args:=true;
+ write(outfile,'(');
+ shift(2);
+
+ (* walk through all arguments *)
+ (* p must be of type t_arglist *)
+ while assigned(p) do
+ begin
+ if p^.typ<>t_arglist then
+ internalerror(10);
+ (* is ellipsis ? *)
+ if not assigned(p^.p1^.p1) and
+ not assigned(p^.p1^.next) then
+ begin
+ write(outfile,'args:array of const');
+ (* if variable number of args we must allways pop *)
+ no_pop:=false;
+ (* Needs 2 declarations, also one without args, becuase
+ in C you can omit the second parameter. Default parameter
+ doesn't help as that isn't possible with array of const *)
+ NeedEllipsisOverload:=true;
+ (* Remove this para *)
+ if assigned(lastp) then
+ lastp^.next:=nil;
+ dispose(p,done);
+ (* leave the loop as p isnot valid anymore *)
+ break;
+ end
+ (* we need to correct this in the pp file after *)
+ else
+ begin
+ (* generate a call by reference parameter ? *)
+
+// varpara:=usevarparas and
+// assigned(p^.p1^.p2^.p1) and
+// (p^.p1^.p2^.p1^.typ in [t_addrdef,t_pointerdef]) and
+// assigned(p^.p1^.p2^.p1^.p1) and
+// (p^.p1^.p2^.p1^.p1^.typ<>t_procdef);
+ varpara:=usevarparas and
+ assigned(p^.p1^.p1) and
+ (p^.p1^.p1^.typ in [t_addrdef,t_pointerdef]) and
+ assigned(p^.p1^.p1^.p1) and
+ (p^.p1^.p1^.p1^.typ<>t_procdef);
+ (* do not do it for char pointer !! *)
+ (* para : pchar; and var para : char; are *)
+ (* completely different in pascal *)
+ (* here we exclude all typename containing char *)
+ (* is this a good method ?? *)
+ if varpara and
+ (p^.p1^.p1^.typ=t_pointerdef) and
+ (p^.p1^.p1^.p1^.typ=t_id) and
+ (pos('CHAR',uppercase(p^.p1^.p1^.p1^.str))<>0) then
+ varpara:=false;
+ if varpara then
+ begin
+ write(outfile,'var ');
+ inc(len,4);
+ end;
+
+ (* write new parameter name *)
+ if assigned(p^.p1^.p2^.p2) then
+ begin
+ hs:=FixId(p^.p1^.p2^.p2^.p);
+ write(outfile,hs);
+ inc(len,length(hs));
+ end
+ else
+ begin
+ If removeUnderscore then
+ begin
+ Write (outfile,'para',para);
+ inc(Len,5);
+ end
+ else
+ begin
+ write(outfile,'_para',para);
+ inc(Len,6);
+ end;
+ end;
+ write(outfile,':');
+ if varpara then
+ begin
+ write_p_a_def(outfile,p^.p1^.p2^.p1,p^.p1^.p1^.p1);
+ end
+ else
+ write_p_a_def(outfile,p^.p1^.p2^.p1,p^.p1^.p1);
+
+ end;
+ lastp:=p;
+ p:=p^.next;
+ if assigned(p) then
+ begin
+ write(outfile,'; ');
+ { if len>40 then : too complicated to compute }
+ if (para mod 5) = 0 then
+ begin
+ writeln(outfile);
+ write(outfile,aktspace);
+ end;
+ end;
+ inc(para);
+ end;
+ write(outfile,')');
+ flush(outfile);
+ in_args:=old_in_args;
+ popshift;
+ end;
+
+
+
+ procedure write_p_a_def(var outfile:text; p,simple_type : presobject);
+ var
+ i : longint;
+ error : integer;
+ pointerwritten,
+ constant : boolean;
+
+ begin
+ if not(assigned(p)) then
+ begin
+ write_type_specifier(outfile,simple_type);
+ exit;
+ end;
+ case p^.typ of
+ t_pointerdef : begin
+ (* procedure variable ? *)
+ if assigned(p^.p1) and (p^.p1^.typ=t_procdef) then
+ begin
+ is_procvar:=true;
+ (* distinguish between procedure and function *)
+ if (simple_type^.typ=t_void) and (p^.p1^.p1=nil) then
+ begin
+ write(outfile,'procedure ');
+
+ shift(10);
+ (* write arguments *)
+ if assigned(p^.p1^.p2) then
+ write_args(outfile,p^.p1^.p2);
+ flush(outfile);
+ popshift;
+ end
+ else
+ begin
+ write(outfile,'function ');
+ shift(9);
+ (* write arguments *)
+ if assigned(p^.p1^.p2) then
+ write_args(outfile,p^.p1^.p2);
+ write(outfile,':');
+ flush(outfile);
+ write_p_a_def(outfile,p^.p1^.p1,simple_type);
+ popshift;
+ end
+ end
+ else
+ begin
+ (* generate "pointer" ? *)
+ if (simple_type^.typ=t_void) and (p^.p1=nil) then
+ begin
+ write(outfile,'pointer');
+ flush(outfile);
+ end
+ else
+ begin
+ pointerwritten:=false;
+ if (p^.p1=nil) and UsePPointers then
+ begin
+ if (simple_type^.typ=t_id) then
+ begin
+ write(outfile,PointerName(simple_type^.p));
+ pointerwritten:=true;
+ end
+ { structure }
+ else if (simple_type^.typ in [t_uniondef,t_structdef]) and
+ (simple_type^.p1=nil) and (simple_type^.p2^.typ=t_id) then
+ begin
+ write(outfile,PointerName(simple_type^.p2^.p));
+ pointerwritten:=true;
+ end;
+ end;
+ if not pointerwritten then
+ begin
+ if in_args then
+ begin
+ write(outfile,'P');
+ pointerprefix:=true;
+ end
+ else
+ write(outfile,'^');
+ write_p_a_def(outfile,p^.p1,simple_type);
+ pointerprefix:=false;
+ end;
+ end;
+ end;
+ end;
+ t_arraydef : begin
+ constant:=false;
+ if assigned(p^.p2) then
+ begin
+ if p^.p2^.typ=t_id then
+ begin
+ val(p^.p2^.str,i,error);
+ if error=0 then
+ begin
+ dec(i);
+ constant:=true;
+ end;
+ end;
+ if not constant then
+ begin
+ write(outfile,'array[0..(');
+ write_expr(outfile,p^.p2);
+ write(outfile,')-1] of ');
+ end
+ else
+ begin
+ write(outfile,'array[0..',i,'] of ');
+ end;
+ end
+ else
+ begin
+ (* open array *)
+ write(outfile,'array of ');
+ end;
+ flush(outfile);
+ write_p_a_def(outfile,p^.p1,simple_type);
+ end;
+ else internalerror(1);
+ end;
+ end;
+
+ procedure write_type_specifier(var outfile:text; p : presobject);
+ var
+ hp1,hp2,hp3,lastexpr : presobject;
+ i,l,w : longint;
+ error : integer;
+ current_power,
+ mask : cardinal;
+ flag_index : longint;
+ current_level : byte;
+ pointerwritten,
+ is_sized : boolean;
+
+ begin
+ case p^.typ of
+ t_id :
+ begin
+ if pointerprefix then
+ if UseCtypesUnit then
+ begin
+ if not IsACType(p^.p) then
+ begin
+ PTypeList.Add('P'+p^.str);
+ end;
+ end
+ else
+ PTypeList.Add('P'+p^.str);
+ if p^.intname then
+ write(outfile,p^.p)
+ else
+ write(outfile,TypeName(p^.p));
+ end;
+ { what can we do with void defs ? }
+ t_void :
+ write(outfile,'pointer');
+ t_pointerdef :
+ begin
+ pointerwritten:=false;
+ if (p^.p1^.typ=t_void) then
+ begin
+ write(outfile,'pointer');
+ pointerwritten:=true;
+ end
+ else
+ if UsePPointers then
+ begin
+ if (p^.p1^.typ=t_id) then
+ begin
+ write(outfile,PointerName(p^.p1^.p));
+ pointerwritten:=true;
+ end
+ { structure }
+ else if (p^.p1^.typ in [t_uniondef,t_structdef]) and
+ (p^.p1^.p1=nil) and (p^.p1^.p2^.typ=t_id) then
+ begin
+ write(outfile,PointerName(p^.p1^.p2^.p));
+ pointerwritten:=true;
+ end;
+ end;
+ if not pointerwritten then
+ begin
+ if in_args then
+ begin
+ if UseCTypesUnit and (IsACType(p^.p1^.p)=False) then
+ write(outfile,'P')
+ else
+ write(outfile,'p');
+ pointerprefix:=true;
+ end
+ else
+ begin
+ if UseCTypesUnit and (IsACType(p^.p1^.p)=False) then
+ write(outfile,'^')
+ else
+ write(outfile,'p');
+ end;
+ write_type_specifier(outfile,p^.p1);
+ pointerprefix:=false;
+ end;
+ end;
+ t_enumdef :
+ begin
+ if (typedef_level>1) and (p^.p1=nil) and
+ (p^.p2^.typ=t_id) then
+ begin
+ if pointerprefix then
+ if UseCTypesUnit and (IsACType( p^.p2^.p )=False) then
+ PTypeList.Add('P'+p^.p2^.str);
+ write(outfile,p^.p2^.p);
+ end
+ else
+ if not EnumToConst then
+ begin
+ write(outfile,'(');
+ hp1:=p^.p1;
+ w:=length(aktspace);
+ while assigned(hp1) do
+ begin
+ write(outfile,hp1^.p1^.p);
+ if assigned(hp1^.p2) then
+ begin
+ write(outfile,' := ');
+ write_expr(outfile,hp1^.p2);
+ w:=w+6;(* strlen(hp1^.p); *)
+ end;
+ w:=w+length(hp1^.p1^.str);
+ hp1:=hp1^.next;
+ if assigned(hp1) then
+ write(outfile,',');
+ if w>40 then
+ begin
+ writeln(outfile);
+ write(outfile,aktspace);
+ w:=length(aktspace);
+ end;
+ flush(outfile);
+ end;
+ write(outfile,')');
+ flush(outfile);
+ end
+ else
+ begin
+ Writeln (outfile,' Longint;');
+ hp1:=p^.p1;
+ l:=0;
+ lastexpr:=nil;
+ Writeln (outfile,copy(aktspace,1,length(aktspace)-2),'Const');
+ while assigned(hp1) do
+ begin
+ write (outfile,aktspace,hp1^.p1^.p,' = ');
+ if assigned(hp1^.p2) then
+ begin
+ write_expr(outfile,hp1^.p2);
+ writeln(outfile,';');
+ lastexpr:=hp1^.p2;
+ if lastexpr^.typ=t_id then
+ begin
+ val(lastexpr^.str,l,error);
+ if error=0 then
+ begin
+ inc(l);
+ lastexpr:=nil;
+ end
+ else
+ l:=1;
+ end
+ else
+ l:=1;
+ end
+ else
+ begin
+ if assigned(lastexpr) then
+ begin
+ write(outfile,'(');
+ write_expr(outfile,lastexpr);
+ writeln(outfile,')+',l,';');
+ end
+ else
+ writeln (outfile,l,';');
+ inc(l);
+ end;
+ hp1:=hp1^.next;
+ flush(outfile);
+ end;
+ block_type:=bt_const;
+ end;
+ end;
+ t_structdef :
+ begin
+ inc(typedef_level);
+ flag_index:=-1;
+ is_sized:=false;
+ current_level:=0;
+ if ((in_args) or (typedef_level>1)) and
+ (p^.p1=nil) and (p^.p2^.typ=t_id) then
+ begin
+ if pointerprefix then
+ if UseCTypesUnit and (IsACType(p^.p2^.str)=false) then
+ PTypeList.Add('P'+p^.p2^.str);
+ write(outfile,TypeName(p^.p2^.p));
+ end
+ else
+ begin
+ if packrecords then
+ writeln(outfile,'packed record')
+ else
+ writeln(outfile,'record');
+ shift(2);
+ hp1:=p^.p1;
+
+ (* walk through all members *)
+ while assigned(hp1) do
+ begin
+ (* hp2 is t_memberdec *)
+ hp2:=hp1^.p1;
+ (* hp3 is t_declist *)
+ hp3:=hp2^.p2;
+ while assigned(hp3) do
+ begin
+ if not assigned(hp3^.p1^.p3) or
+ (hp3^.p1^.p3^.typ <> t_size_specifier) then
+ begin
+ if is_sized then
+ begin
+ if current_level <= 16 then
+ writeln(outfile,'word;')
+ else if current_level <= 32 then
+ writeln(outfile,'longint;')
+ else
+ internalerror(11);
+ is_sized:=false;
+ end;
+
+ write(outfile,aktspace,FixId(hp3^.p1^.p2^.p));
+ write(outfile,' : ');
+ shift(2);
+ write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
+ popshift;
+ end;
+ { size specifier or default value ? }
+ if assigned(hp3^.p1^.p3) then
+ begin
+ { we could use mask to implement this }
+ { because we need to respect the positions }
+ if hp3^.p1^.p3^.typ = t_size_specifier then
+ begin
+ if not is_sized then
+ begin
+ current_power:=1;
+ current_level:=0;
+ inc(flag_index);
+ write(outfile,aktspace,'flag',flag_index,' : ');
+ end;
+ must_write_packed_field:=true;
+ is_sized:=true;
+ { can it be something else than a constant ? }
+ { it can be a macro !! }
+ if hp3^.p1^.p3^.p1^.typ=t_id then
+ begin
+ val(hp3^.p1^.p3^.p1^.str,l,error);
+ if error=0 then
+ begin
+ mask:=0;
+ for i:=1 to l do
+ begin
+ inc(mask,current_power);
+ current_power:=current_power*2;
+ end;
+ write(tempfile,'bm_&',hp3^.p1^.p2^.p);
+ writeln(tempfile,' = ',hexstr(mask),';');
+ write(tempfile,'bp_&',hp3^.p1^.p2^.p);
+ writeln(tempfile,' = ',current_level,';');
+ current_level:=current_level + l;
+ { go to next flag if 31 }
+ if current_level = 32 then
+ begin
+ write(outfile,'longint');
+ is_sized:=false;
+ end;
+ end;
+ end;
+
+ end
+ else if hp3^.p1^.p3^.typ = t_default_value then
+ begin
+ write(outfile,'{=');
+ write_expr(outfile,hp3^.p1^.p3^.p1);
+ write(outfile,' ignored}');
+ end;
+ end;
+ if not is_sized then
+ begin
+ if is_procvar then
+ begin
+ if not no_pop then
+ begin
+ write(outfile,';cdecl');
+ no_pop:=true;
+ end;
+ is_procvar:=false;
+ end;
+ writeln(outfile,';');
+ end;
+ hp3:=hp3^.next;
+ end;
+ hp1:=hp1^.next;
+ end;
+ if is_sized then
+ begin
+ if current_level <= 16 then
+ writeln(outfile,'word;')
+ else if current_level <= 32 then
+ writeln(outfile,'longint;')
+ else
+ internalerror(11);
+ is_sized:=false;
+ end;
+ popshift;
+ write(outfile,aktspace,'end');
+ flush(outfile);
+ end;
+ dec(typedef_level);
+ end;
+ t_uniondef :
+ begin
+ inc(typedef_level);
+ if (typedef_level>1) and (p^.p1=nil) and
+ (p^.p2^.typ=t_id) then
+ begin
+ write(outfile,p^.p2^.p);
+ end
+ else
+ begin
+ inc(typedef_level);
+ if packrecords then
+ writeln(outfile,'packed record')
+ else
+ writeln(outfile,'record');
+ shift(2);
+ writeln(outfile,aktspace,'case longint of');
+ shift(2);
+ l:=0;
+ hp1:=p^.p1;
+
+ (* walk through all members *)
+ while assigned(hp1) do
+ begin
+ (* hp2 is t_memberdec *)
+ hp2:=hp1^.p1;
+ (* hp3 is t_declist *)
+ hp3:=hp2^.p2;
+ while assigned(hp3) do
+ begin
+ write(outfile,aktspace,l,' : ( ');
+ write(outfile,FixId(hp3^.p1^.p2^.p),' : ');
+ shift(2);
+ write_p_a_def(outfile,hp3^.p1^.p1,hp2^.p1);
+ popshift;
+ writeln(outfile,' );');
+ hp3:=hp3^.next;
+ inc(l);
+ end;
+ hp1:=hp1^.next;
+ end;
+ popshift;
+ write(outfile,aktspace,'end');
+ popshift;
+ flush(outfile);
+ dec(typedef_level);
+ end;
+ dec(typedef_level);
+ end;
+ else
+ internalerror(3);
+ end;
+ end;
+
+ procedure write_def_params(var outfile:text; p : presobject);
+ var
+ hp1 : presobject;
+ begin
+ case p^.typ of
+ t_enumdef : begin
+ hp1:=p^.p1;
+ while assigned(hp1) do
+ begin
+ write(outfile,FixId(hp1^.p1^.p));
+ hp1:=hp1^.next;
+ if assigned(hp1) then
+ write(outfile,',')
+ else
+ write(outfile);
+ flush(outfile);
+ end;
+ flush(outfile);
+ end;
+ else internalerror(4);
+ end;
+ end;
+
+
+ procedure write_statement_block(var outfile:text; p : presobject);
+ begin
+ writeln(outfile,aktspace,'begin');
+ while assigned(p) do
+ begin
+ shift(2);
+ if assigned(p^.p1) then
+ begin
+ case p^.p1^.typ of
+ t_whilenode:
+ begin
+ write(outfile,aktspace,'while ');
+ write_expr(outfile,p^.p1^.p1);
+ writeln(outfile,' do');
+ shift(2);
+ write_statement_block(outfile,p^.p1^.p2);
+ popshift;
+ end;
+ else
+ begin
+ write(outfile,aktspace);
+ write_expr(outfile,p^.p1);
+ writeln(outfile,';');
+ end;
+ end;
+ end;
+ p:=p^.next;
+ popshift;
+ end;
+ writeln(outfile,aktspace,'end;');
+ end;
+
+%}
+
+%token _WHILE _FOR _DO _GOTO _CONTINUE _BREAK
+%token TYPEDEF DEFINE
+%token COLON SEMICOLON COMMA
+%token LKLAMMER RKLAMMER LECKKLAMMER RECKKLAMMER
+%token LGKLAMMER RGKLAMMER
+%token STRUCT UNION ENUM
+%token ID NUMBER CSTRING
+%token SHORT UNSIGNED LONG INT FLOAT _CHAR
+%token VOID _CONST
+%token _FAR _HUGE _NEAR
+%token NEW_LINE SPACE_DEFINE
+%token EXTERN STDCALL CDECL CALLBACK PASCAL WINAPI APIENTRY WINGDIAPI SYS_TRAP
+%token _PACKED
+%token ELLIPSIS
+%right _ASSIGN
+%right R_AND
+%left EQUAL UNEQUAL GT LT GTE LTE
+%left QUESTIONMARK COLON
+%left _OR
+%left _AND
+%left _PLUS MINUS
+%left _SHR _SHL
+%left STAR _SLASH
+%right _NOT
+%right LKLAMMER
+%right PSTAR
+%right P_AND
+%right LECKKLAMMER
+%left POINT DEREF
+%left COMMA
+%left STICK
+%token SIGNED
+%token INT8 INT16 INT32 INT64
+%%
+
+file : declaration_list
+ ;
+
+maybe_space :
+ SPACE_DEFINE
+ {
+ $$:=nil;
+ } |
+ {
+ $$:=nil;
+ }
+ ;
+
+error_info : {
+ writeln(outfile,'(* error ');
+ writeln(outfile,yyline);
+ };
+
+declaration_list : declaration_list declaration
+ { if yydebug then writeln('declaration reduced at line ',line_no);
+ if yydebug then writeln(outfile,'(* declaration reduced *)');
+ }
+ | declaration_list define_dec
+ { if yydebug then writeln('define declaration reduced at line ',line_no);
+ if yydebug then writeln(outfile,'(* define declaration reduced *)');
+ }
+ | declaration
+ { if yydebug then writeln('declaration reduced at line ',line_no);
+ }
+ | define_dec
+ { if yydebug then writeln('define declaration reduced at line ',line_no);
+ }
+ ;
+
+dec_specifier :
+ EXTERN { $$:=new(presobject,init_id('extern')); }
+ |{ $$:=new(presobject,init_id('intern')); }
+ ;
+
+dec_modifier :
+ STDCALL { $$:=new(presobject,init_id('no_pop')); }
+ | CDECL { $$:=new(presobject,init_id('cdecl')); }
+ | CALLBACK { $$:=new(presobject,init_id('no_pop')); }
+ | PASCAL { $$:=new(presobject,init_id('no_pop')); }
+ | WINAPI { $$:=new(presobject,init_id('no_pop')); }
+ | APIENTRY { $$:=new(presobject,init_id('no_pop')); }
+ | WINGDIAPI { $$:=new(presobject,init_id('no_pop')); }
+ | { $$:=nil }
+ ;
+
+systrap_specifier:
+ SYS_TRAP LKLAMMER dname RKLAMMER { $$:=$3; }
+ | { $$:=nil; }
+ ;
+
+statement :
+ expr SEMICOLON { $$:=$1; } |
+ _WHILE LKLAMMER expr RKLAMMER statement_list { $$:=new(presobject,init_two(t_whilenode,$3,$5)); }
+ ;
+
+
+statement_list : statement statement_list
+ {
+ $$:=new(presobject,init_one(t_statement_list,$1));
+ $$^.next:=$2;
+ } |
+ statement
+ {
+ $$:=new(presobject,init_one(t_statement_list,$1));
+ } |
+ SEMICOLON
+ {
+ $$:=new(presobject,init_one(t_statement_list,nil));
+ } |
+ {
+ $$:=new(presobject,init_one(t_statement_list,nil));
+ }
+ ;
+
+statement_block :
+ LGKLAMMER statement_list RGKLAMMER { $$:=$2; }
+ ;
+
+declaration :
+ dec_specifier type_specifier dec_modifier declarator_list statement_block
+ {
+ IsExtern:=false;
+ (* by default we must pop the args pushed on stack *)
+ no_pop:=false;
+ if (assigned($4)and assigned($4^.p1)and assigned($4^.p1^.p1))
+ and ($4^.p1^.p1^.typ=t_procdef) then
+ begin
+ repeat
+ If UseLib then
+ IsExtern:=true
+ else
+ IsExtern:=assigned($1)and($1^.str='extern');
+ no_pop:=assigned($3) and ($3^.str='no_pop');
+
+ if (block_type<>bt_func) and not(createdynlib) then
+ begin
+ writeln(outfile);
+ block_type:=bt_func;
+ end;
+
+ (* dyn. procedures must be put into a var block *)
+ if createdynlib then
+ begin
+ if (block_type<>bt_var) then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'var');
+ block_type:=bt_var;
+ end;
+ shift(2);
+ end;
+ if not CompactMode then
+ begin
+ write(outfile,aktspace);
+ if not IsExtern then
+ write(implemfile,aktspace);
+ end;
+ (* distinguish between procedure and function *)
+ if assigned($2) then
+ if ($2^.typ=t_void) and ($4^.p1^.p1^.p1=nil) then
+ begin
+ if createdynlib then
+ begin
+ write(outfile,$4^.p1^.p2^.p,' : procedure');
+ end
+ else
+ begin
+ shift(10);
+ write(outfile,'procedure ',$4^.p1^.p2^.p);
+ end;
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(outfile,$4^.p1^.p1^.p2);
+ if createdynlib then
+ begin
+ loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
+ freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
+ end
+ else if not IsExtern then
+ begin
+ write(implemfile,'procedure ',$4^.p1^.p2^.p);
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(implemfile,$4^.p1^.p1^.p2);
+ end;
+ end
+ else
+ begin
+ if createdynlib then
+ begin
+ write(outfile,$4^.p1^.p2^.p,' : function');
+ end
+ else
+ begin
+ shift(9);
+ write(outfile,'function ',$4^.p1^.p2^.p);
+ end;
+
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(outfile,$4^.p1^.p1^.p2);
+ write(outfile,':');
+ write_p_a_def(outfile,$4^.p1^.p1^.p1,$2);
+ if createdynlib then
+ begin
+ loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
+ freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
+ end
+ else if not IsExtern then
+ begin
+ write(implemfile,'function ',$4^.p1^.p2^.p);
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(implemfile,$4^.p1^.p1^.p2);
+ write(implemfile,':');
+ write_p_a_def(implemfile,$4^.p1^.p1^.p1,$2);
+ end;
+ end;
+ (* No CDECL in interface for Uselib *)
+ if IsExtern and (not no_pop) then
+ write(outfile,';cdecl');
+ popshift;
+ if createdynlib then
+ begin
+ writeln(outfile,';');
+ end
+ else if UseLib then
+ begin
+ if IsExtern then
+ begin
+ write (outfile,';external');
+ If UseName then
+ Write(outfile,' External_library name ''',$4^.p1^.p2^.p,'''');
+ end;
+ writeln(outfile,';');
+ end
+ else
+ begin
+ writeln(outfile,';');
+ if not IsExtern then
+ begin
+ writeln(implemfile,';');
+ shift(2);
+ if $5^.typ=t_statement_list then
+ write_statement_block(implemfile,$5);
+ popshift;
+ end;
+ end;
+ IsExtern:=false;
+ if not(compactmode) and not(createdynlib) then
+ writeln(outfile);
+ until not NeedEllipsisOverload;
+ end
+ else (* $4^.p1^.p1^.typ=t_procdef *)
+ if assigned($4)and assigned($4^.p1) then
+ begin
+ shift(2);
+ if block_type<>bt_var then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'var');
+ end;
+ block_type:=bt_var;
+
+ shift(2);
+
+ IsExtern:=assigned($1)and($1^.str='extern');
+ (* walk through all declarations *)
+ hp:=$4;
+ while assigned(hp) and assigned(hp^.p1) do
+ begin
+ (* write new var name *)
+ if assigned(hp^.p1^.p2) and assigned(hp^.p1^.p2^.p) then
+ write(outfile,aktspace,hp^.p1^.p2^.p);
+ write(outfile,' : ');
+ shift(2);
+ (* write its type *)
+ write_p_a_def(outfile,hp^.p1^.p1,$2);
+ if assigned(hp^.p1^.p2)and assigned(hp^.p1^.p2^.p)then
+ begin
+ if isExtern then
+ write(outfile,';cvar;external')
+ else
+ write(outfile,';cvar;public');
+ end;
+ writeln(outfile,';');
+ popshift;
+ hp:=hp^.p2;
+ end;
+ popshift;
+ popshift;
+ end;
+ if assigned($1) then
+ dispose($1,done);
+ if assigned($2) then
+ dispose($2,done);
+ if assigned($3) then
+ dispose($3,done);
+ if assigned($4) then
+ dispose($4,done);
+ if assigned($5) then
+ dispose($5,done);
+ }
+ | dec_specifier type_specifier dec_modifier declarator_list systrap_specifier SEMICOLON
+ {
+ IsExtern:=false;
+ (* by default we must pop the args pushed on stack *)
+ no_pop:=false;
+ if (assigned($4)and assigned($4^.p1)and assigned($4^.p1^.p1))
+ and ($4^.p1^.p1^.typ=t_procdef) then
+ begin
+ repeat
+ If UseLib then
+ IsExtern:=true
+ else
+ IsExtern:=assigned($1)and($1^.str='extern');
+ no_pop:=assigned($3) and ($3^.str='no_pop');
+
+ if (block_type<>bt_func) and not(createdynlib) then
+ begin
+ writeln(outfile);
+ block_type:=bt_func;
+ end;
+
+ (* dyn. procedures must be put into a var block *)
+ if createdynlib then
+ begin
+ if (block_type<>bt_var) then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'var');
+ block_type:=bt_var;
+ end;
+ shift(2);
+ end;
+ if not CompactMode then
+ begin
+ write(outfile,aktspace);
+ if not IsExtern then
+ write(implemfile,aktspace);
+ end;
+ (* distinguish between procedure and function *)
+ if assigned($2) then
+ if ($2^.typ=t_void) and ($4^.p1^.p1^.p1=nil) then
+ begin
+ if createdynlib then
+ begin
+ write(outfile,$4^.p1^.p2^.p,' : procedure');
+ end
+ else
+ begin
+ shift(10);
+ write(outfile,'procedure ',$4^.p1^.p2^.p);
+ end;
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(outfile,$4^.p1^.p1^.p2);
+ if createdynlib then
+ begin
+ loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
+ freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
+ end
+ else if not IsExtern then
+ begin
+ write(implemfile,'procedure ',$4^.p1^.p2^.p);
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(implemfile,$4^.p1^.p1^.p2);
+ end;
+ end
+ else
+ begin
+ if createdynlib then
+ begin
+ write(outfile,$4^.p1^.p2^.p,' : function');
+ end
+ else
+ begin
+ shift(9);
+ write(outfile,'function ',$4^.p1^.p2^.p);
+ end;
+
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(outfile,$4^.p1^.p1^.p2);
+ write(outfile,':');
+ write_p_a_def(outfile,$4^.p1^.p1^.p1,$2);
+ if createdynlib then
+ begin
+ loaddynlibproc.add('pointer('+$4^.p1^.p2^.p+'):=GetProcAddress(hlib,'''+$4^.p1^.p2^.p+''');');
+ freedynlibproc.add($4^.p1^.p2^.p+':=nil;');
+ end
+ else if not IsExtern then
+ begin
+ write(implemfile,'function ',$4^.p1^.p2^.p);
+ if assigned($4^.p1^.p1^.p2) then
+ write_args(implemfile,$4^.p1^.p1^.p2);
+ write(implemfile,':');
+ write_p_a_def(implemfile,$4^.p1^.p1^.p1,$2);
+ end;
+ end;
+ if assigned($5) then
+ write(outfile,';systrap ',$5^.p);
+ (* No CDECL in interface for Uselib *)
+ if IsExtern and (not no_pop) then
+ write(outfile,';cdecl');
+ popshift;
+ if createdynlib then
+ begin
+ writeln(outfile,';');
+ end
+ else if UseLib then
+ begin
+ if IsExtern then
+ begin
+ write (outfile,';external');
+ If UseName then
+ Write(outfile,' External_library name ''',$4^.p1^.p2^.p,'''');
+ end;
+ writeln(outfile,';');
+ end
+ else
+ begin
+ writeln(outfile,';');
+ if not IsExtern then
+ begin
+ writeln(implemfile,';');
+ writeln(implemfile,aktspace,'begin');
+ writeln(implemfile,aktspace,' { You must implement this function }');
+ writeln(implemfile,aktspace,'end;');
+ end;
+ end;
+ IsExtern:=false;
+ if not(compactmode) and not(createdynlib) then
+ writeln(outfile);
+ until not NeedEllipsisOverload;
+ end
+ else (* $4^.p1^.p1^.typ=t_procdef *)
+ if assigned($4)and assigned($4^.p1) then
+ begin
+ shift(2);
+ if block_type<>bt_var then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'var');
+ end;
+ block_type:=bt_var;
+
+ shift(2);
+
+ IsExtern:=assigned($1)and($1^.str='extern');
+ (* walk through all declarations *)
+ hp:=$4;
+ while assigned(hp) and assigned(hp^.p1) do
+ begin
+ (* write new var name *)
+ if assigned(hp^.p1^.p2) and assigned(hp^.p1^.p2^.p) then
+ write(outfile,aktspace,hp^.p1^.p2^.p);
+ write(outfile,' : ');
+ shift(2);
+ (* write its type *)
+ write_p_a_def(outfile,hp^.p1^.p1,$2);
+ if assigned(hp^.p1^.p2)and assigned(hp^.p1^.p2^.p)then
+ begin
+ if isExtern then
+ write(outfile,';cvar;external')
+ else
+ write(outfile,';cvar;public');
+ end;
+ writeln(outfile,';');
+ popshift;
+ hp:=hp^.p2;
+ end;
+ popshift;
+ popshift;
+ end;
+ if assigned($1)then dispose($1,done);
+ if assigned($2)then dispose($2,done);
+ if assigned($4)then dispose($4,done);
+ } |
+ special_type_specifier SEMICOLON
+ {
+ if block_type<>bt_type then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'type');
+ block_type:=bt_type;
+ end;
+ shift(2);
+ if ( yyv[yysp-1]^.p2 <> nil ) then
+ begin
+ (* write new type name *)
+ TN:=TypeName($1^.p2^.p);
+ PN:=PointerName($1^.p2^.p);
+ (* define a Pointer type also for structs *)
+ if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
+ assigned($1) and ($1^.typ in [t_uniondef,t_structdef]) then
+ writeln(outfile,aktspace,PN,' = ^',TN,';');
+ write(outfile,aktspace,TN,' = ');
+ shift(2);
+ hp:=$1;
+ write_type_specifier(outfile,hp);
+ popshift;
+ (* enum_to_const can make a switch to const *)
+ if block_type=bt_type then
+ writeln(outfile,';');
+ writeln(outfile);
+ flush(outfile);
+ popshift;
+ if must_write_packed_field then
+ write_packed_fields_info(outfile,hp,TN);
+ if assigned(hp) then
+ dispose(hp,done)
+ end
+ else
+ begin
+ TN:=TypeName(yyv[yysp-1]^.str);
+ PN:=PointerName(yyv[yysp-1]^.str);
+ if UsePPointers then writeln(outfile,aktspace,PN,' = ^',TN,';');
+ if PackRecords then
+ writeln(outfile, aktspace, TN, ' = packed record')
+ else
+ writeln(outfile, aktspace, TN, ' = record');
+ writeln(outfile, aktspace, ' {undefined structure}');
+ writeln(outfile, aktspace, ' end;');
+ writeln(outfile);
+ popshift;
+ end;
+ } |
+ TYPEDEF STRUCT dname dname SEMICOLON
+ {
+ (* TYPEDEF STRUCT dname dname SEMICOLON *)
+ if block_type<>bt_type then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'type');
+ block_type:=bt_type;
+ end;
+ PN:=TypeName($3^.p);
+ TN:=TypeName($4^.p);
+ if Uppercase(tn)<>Uppercase(pn) then
+ begin
+ shift(2);
+ writeln(outfile,aktspace,PN,' = ',TN,';');
+ popshift;
+ end;
+ if assigned($3) then
+ dispose($3,done);
+ if assigned($4) then
+ dispose($4,done);
+ } |
+ TYPEDEF type_specifier LKLAMMER dec_modifier declarator RKLAMMER maybe_space LKLAMMER argument_declaration_list RKLAMMER SEMICOLON
+ {
+ (* TYPEDEF type_specifier LKLAMMER dec_modifier declarator RKLAMMER maybe_space LKLAMMER argument_declaration_list RKLAMMER SEMICOLON *)
+ if block_type<>bt_type then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'type');
+ block_type:=bt_type;
+ end;
+ no_pop:=assigned($4) and ($4^.str='no_pop');
+ shift(2);
+ (* walk through all declarations *)
+ hp:=$5;
+ if assigned(hp) then
+ begin
+ hp:=$5;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_procdef,nil,$9));
+ hp:=$5;
+ if assigned(hp^.p1) and assigned(hp^.p1^.p1) then
+ begin
+ writeln(outfile);
+ (* write new type name *)
+ write(outfile,aktspace,TypeName(hp^.p2^.p),' = ');
+ shift(2);
+ write_p_a_def(outfile,hp^.p1,$2);
+ popshift;
+ (* if no_pop it is normal fpc calling convention *)
+ if is_procvar and
+ (not no_pop) then
+ write(outfile,';cdecl');
+ writeln(outfile,';');
+ flush(outfile);
+ end;
+ end;
+ popshift;
+ if assigned($2)then
+ dispose($2,done);
+ if assigned($4)then
+ dispose($4,done);
+ if assigned($5)then (* disposes also $9 *)
+ dispose($5,done);
+ } |
+ TYPEDEF type_specifier dec_modifier declarator_list SEMICOLON
+ {
+ (* TYPEDEF type_specifier dec_modifier declarator_list SEMICOLON *)
+ if block_type<>bt_type then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'type');
+ block_type:=bt_type;
+ end
+ else
+ writeln(outfile);
+ no_pop:=assigned($3) and ($3^.str='no_pop');
+ shift(2);
+ (* Get the name to write the type definition for, try
+ to use the tag name first *)
+ if assigned($2^.p2) then
+ begin
+ ph:=$2^.p2;
+ end
+ else
+ begin
+ if not assigned($4^.p1^.p2) then
+ internalerror(4444);
+ ph:=$4^.p1^.p2;
+ end;
+ (* write type definition *)
+ is_procvar:=false;
+ TN:=TypeName(ph^.p);
+ PN:=PointerName(ph^.p);
+ if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
+ assigned($2) and ($2^.typ<>t_procdef) then
+ writeln(outfile,aktspace,PN,' = ^',TN,';');
+ (* write new type name *)
+ write(outfile,aktspace,TN,' = ');
+ shift(2);
+ write_p_a_def(outfile,$4^.p1^.p1,$2);
+ popshift;
+ (* if no_pop it is normal fpc calling convention *)
+ if is_procvar and
+ (not no_pop) then
+ write(outfile,';cdecl');
+ writeln(outfile,';');
+ flush(outfile);
+ (* write alias names, ph points to the name already used *)
+ hp:=$4;
+ while assigned(hp) do
+ begin
+ if (hp<>ph) and assigned(hp^.p1^.p2) then
+ begin
+ PN:=TypeName(ph^.p);
+ TN:=TypeName(hp^.p1^.p2^.p);
+ if Uppercase(TN)<>Uppercase(PN) then
+ begin
+ write(outfile,aktspace,TN,' = ');
+ write_p_a_def(outfile,hp^.p1^.p1,ph);
+ writeln(outfile,';');
+ PN:=PointerName(hp^.p1^.p2^.p);
+ if UsePPointers and (Uppercase(tn)<>Uppercase(pn)) and
+ assigned($2) and ($2^.typ<>t_procdef) then
+ writeln(outfile,aktspace,PN,' = ^',TN,';');
+ end;
+ end;
+ hp:=hp^.next;
+ end;
+ popshift;
+ if must_write_packed_field then
+ if assigned(ph) then
+ write_packed_fields_info(outfile,$2,ph^.str)
+ else if assigned($2^.p2) then
+ write_packed_fields_info(outfile,$2,$2^.p2^.str);
+ if assigned($2)then
+ dispose($2,done);
+ if assigned($3)then
+ dispose($3,done);
+ if assigned($4)then
+ dispose($4,done);
+ } |
+ TYPEDEF dname SEMICOLON
+ {
+ if block_type<>bt_type then
+ begin
+ if not(compactmode) then
+ writeln(outfile);
+ writeln(outfile,aktspace,'type');
+ block_type:=bt_type;
+ end
+ else
+ writeln(outfile);
+ shift(2);
+ (* write as pointer *)
+ writeln(outfile,'(* generic typedef *)');
+ writeln(outfile,aktspace,$2^.p,' = pointer;');
+ flush(outfile);
+ popshift;
+ if assigned($2) then
+ dispose($2,done);
+ }
+ | error error_info SEMICOLON
+ { writeln(outfile,'in declaration at line ',line_no,' *)');
+ aktspace:='';
+ in_space_define:=0;
+ in_define:=false;
+ arglevel:=0;
+ if_nb:=0;
+ aktspace:=' ';
+ space_index:=1;
+ yyerrok;}
+ ;
+
+define_dec :
+ DEFINE dname LKLAMMER enum_list RKLAMMER para_def_expr NEW_LINE
+ {
+ (* DEFINE dname LKLAMMER enum_list RKLAMMER para_def_expr NEW_LINE *)
+ if not stripinfo then
+ begin
+ writeln (outfile,aktspace,'{ was #define dname(params) para_def_expr }');
+ writeln (implemfile,aktspace,'{ was #define dname(params) para_def_expr }');
+ if assigned($4) then
+ begin
+ writeln (outfile,aktspace,'{ argument types are unknown }');
+ writeln (implemfile,aktspace,'{ argument types are unknown }');
+ end;
+ if not assigned($6^.p3) then
+ begin
+ writeln(outfile,aktspace,'{ return type might be wrong } ');
+ writeln(implemfile,aktspace,'{ return type might be wrong } ');
+ end;
+ end;
+ if block_type<>bt_func then
+ writeln(outfile);
+
+ block_type:=bt_func;
+ write(outfile,aktspace,'function ',$2^.p);
+ write(implemfile,aktspace,'function ',$2^.p);
+
+ if assigned($4) then
+ begin
+ write(outfile,'(');
+ write(implemfile,'(');
+ ph:=new(presobject,init_one(t_enumdef,$4));
+ write_def_params(outfile,ph);
+ write_def_params(implemfile,ph);
+ if assigned(ph) then dispose(ph,done);
+ ph:=nil;
+ (* types are unknown *)
+ write(outfile,' : longint)');
+ write(implemfile,' : longint)');
+ end;
+ if not assigned($6^.p3) then
+ begin
+ writeln(outfile,' : longint;',aktspace,commentstr);
+ writeln(implemfile,' : longint;');
+ flush(outfile);
+ end
+ else
+ begin
+ write(outfile,' : ');
+ write_type_specifier(outfile,$6^.p3);
+ writeln(outfile,';',aktspace,commentstr);
+ flush(outfile);
+ write(implemfile,' : ');
+ write_type_specifier(implemfile,$6^.p3);
+ writeln(implemfile,';');
+ end;
+ writeln(outfile);
+ flush(outfile);
+ hp:=new(presobject,init_two(t_funcname,$2,$6));
+ write_funexpr(implemfile,hp);
+ writeln(implemfile);
+ flush(implemfile);
+ if assigned(hp)then dispose(hp,done);
+ }|
+ DEFINE dname SPACE_DEFINE NEW_LINE
+ {
+ (* DEFINE dname SPACE_DEFINE NEW_LINE *)
+ writeln(outfile,'{$define ',$2^.p,'}',aktspace,commentstr);
+ flush(outfile);
+ if assigned($2)then
+ dispose($2,done);
+ }|
+ DEFINE dname NEW_LINE
+ {
+ writeln(outfile,'{$define ',$2^.p,'}',aktspace,commentstr);
+ flush(outfile);
+ if assigned($2)then
+ dispose($2,done);
+ } |
+ DEFINE dname SPACE_DEFINE def_expr NEW_LINE
+ {
+ (* DEFINE dname SPACE_DEFINE def_expr NEW_LINE *)
+ if ($4^.typ=t_exprlist) and
+ $4^.p1^.is_const and
+ not assigned($4^.next) then
+ begin
+ if block_type<>bt_const then
+ begin
+ if block_type<>bt_func then
+ writeln(outfile);
+ writeln(outfile,aktspace,'const');
+ end;
+ block_type:=bt_const;
+ shift(2);
+ write(outfile,aktspace,$2^.p);
+ write(outfile,' = ');
+ flush(outfile);
+ write_expr(outfile,$4^.p1);
+ writeln(outfile,';',aktspace,commentstr);
+ popshift;
+ if assigned($2) then
+ dispose($2,done);
+ if assigned($4) then
+ dispose($4,done);
+ end
+ else
+ begin
+ if block_type<>bt_func then
+ writeln(outfile);
+ if not stripinfo then
+ begin
+ writeln (outfile,aktspace,'{ was #define dname def_expr }');
+ writeln (implemfile,aktspace,'{ was #define dname def_expr }');
+ end;
+ block_type:=bt_func;
+ write(outfile,aktspace,'function ',$2^.p);
+ write(implemfile,aktspace,'function ',$2^.p);
+ shift(2);
+ if not assigned($4^.p3) then
+ begin
+ writeln(outfile,' : longint; { return type might be wrong }');
+ flush(outfile);
+ writeln(implemfile,' : longint; { return type might be wrong }');
+ end
+ else
+ begin
+ write(outfile,' : ');
+ write_type_specifier(outfile,$4^.p3);
+ writeln(outfile,';',aktspace,commentstr);
+ flush(outfile);
+ write(implemfile,' : ');
+ write_type_specifier(implemfile,$4^.p3);
+ writeln(implemfile,';');
+ end;
+ writeln(outfile);
+ flush(outfile);
+ hp:=new(presobject,init_two(t_funcname,$2,$4));
+ write_funexpr(implemfile,hp);
+ popshift;
+ dispose(hp,done);
+ writeln(implemfile);
+ flush(implemfile);
+ end;
+ }
+ | error error_info NEW_LINE
+ { writeln(outfile,'in define line ',line_no,' *)');
+ aktspace:='';
+ in_space_define:=0;
+ in_define:=false;
+ arglevel:=0;
+ if_nb:=0;
+ aktspace:=' ';
+ space_index:=1;
+
+ yyerrok;}
+ ;
+
+closed_list : LGKLAMMER member_list RGKLAMMER
+ {$$:=$2;} |
+ error error_info RGKLAMMER
+ { writeln(outfile,' in member_list *)');
+ yyerrok;
+ $$:=nil;
+ }
+ ;
+
+closed_enum_list : LGKLAMMER enum_list RGKLAMMER
+ {$$:=$2;} |
+ error error_info RGKLAMMER
+ { writeln(outfile,' in enum_list *)');
+ yyerrok;
+ $$:=nil;
+ }
+ ;
+
+special_type_specifier :
+ STRUCT dname closed_list _PACKED
+ {
+ if (not is_packed) and (not packrecords) then
+ writeln(outfile,'{$PACKRECORDS 1}');
+ is_packed:=true;
+ $$:=new(presobject,init_two(t_structdef,$3,$2));
+ } |
+ STRUCT dname closed_list
+ {
+ if (is_packed) and (not packrecords) then
+ writeln(outfile,'{$PACKRECORDS 4}');
+ is_packed:=false;
+ $$:=new(presobject,init_two(t_structdef,$3,$2));
+ } |
+ UNION dname closed_list _PACKED
+ {
+ if (not is_packed) and (not packrecords) then
+ writeln(outfile,'{$PACKRECORDS 1}');
+ is_packed:=true;
+ $$:=new(presobject,init_two(t_uniondef,$3,$2));
+ } |
+ UNION dname closed_list
+ {
+ $$:=new(presobject,init_two(t_uniondef,$3,$2));
+ } |
+ UNION dname
+ {
+ $$:=$2;
+ } |
+ STRUCT dname
+ {
+ $$:=$2;
+ } |
+ ENUM dname closed_enum_list
+ {
+ $$:=new(presobject,init_two(t_enumdef,$3,$2));
+ } |
+ ENUM dname
+ {
+ $$:=$2;
+ };
+
+type_specifier :
+ _CONST type_specifier
+ {
+ if not stripinfo then
+ writeln(outfile,'(* Const before type ignored *)');
+ $$:=$2;
+ } |
+ UNION closed_list _PACKED
+ {
+ if (not is_packed) and (not packrecords)then
+ writeln(outfile,'{$PACKRECORDS 1}');
+ is_packed:=true;
+ $$:=new(presobject,init_one(t_uniondef,$2));
+ } |
+ UNION closed_list
+ {
+ $$:=new(presobject,init_one(t_uniondef,$2));
+ } |
+ STRUCT closed_list _PACKED
+ {
+ if (not is_packed) and (not packrecords) then
+ writeln(outfile,'{$PACKRECORDS 1}');
+ is_packed:=true;
+ $$:=new(presobject,init_one(t_structdef,$2));
+ } |
+ STRUCT closed_list
+ {
+ if (is_packed) and (not packrecords) then
+ writeln(outfile,'{$PACKRECORDS 4}');
+ is_packed:=false;
+ $$:=new(presobject,init_one(t_structdef,$2));
+ } |
+ ENUM closed_enum_list
+ {
+ $$:=new(presobject,init_one(t_enumdef,$2));
+ } |
+ special_type_specifier
+ {
+ $$:=$1;
+ } |
+ simple_type_name { $$:=$1; }
+ ;
+
+member_list : member_declaration member_list
+ {
+ $$:=new(presobject,init_one(t_memberdeclist,$1));
+ $$^.next:=$2;
+ } |
+ member_declaration
+ {
+ $$:=new(presobject,init_one(t_memberdeclist,$1));
+ }
+ ;
+
+member_declaration :
+ type_specifier declarator_list SEMICOLON
+ {
+ $$:=new(presobject,init_two(t_memberdec,$1,$2));
+ }
+ ;
+
+dname : ID { (*dname*)
+ $$:=new(presobject,init_id(act_token));
+ }
+ ;
+special_type_name :
+ SIGNED special_type_name
+ {
+ hp:=$2;
+ $$:=hp;
+ if assigned(hp) then
+ begin
+ s:=strpas(hp^.p);
+ if UseCTypesUnit then
+ begin
+ if s=cint_STR then
+ s:=csint_STR
+ else if s=cshort_STR then
+ s:=csshort_STR
+ else if s=cchar_STR then
+ s:=cschar_STR
+ else if s=clong_STR then
+ s:=cslong_STR
+ else if s=clonglong_STR then
+ s:=cslonglong_STR
+ else if s=cint8_STR then
+ s:=cint8_STR
+ else if s=cint16_STR then
+ s:=cint16_STR
+ else if s=cint32_STR then
+ s:=cint32_STR
+ else if s=cint64_STR then
+ s:=cint64_STR
+ else
+ s:='';
+ end
+ else
+ begin
+ if s=UINT_STR then
+ s:=INT_STR
+ else if s=USHORT_STR then
+ s:=SHORT_STR
+ else if s=USMALL_STR then
+ s:=SMALL_STR
+ else if s=UCHAR_STR then
+ s:=CHAR_STR
+ else if s=QWORD_STR then
+ s:=INT64_STR
+ else
+ s:='';
+ end;
+ if s<>'' then
+ hp^.setstr(s);
+ end;
+ } |
+ UNSIGNED special_type_name
+ {
+ hp:=$2;
+ $$:=hp;
+ if assigned(hp) then
+ begin
+ s:=strpas(hp^.p);
+ if UseCTypesUnit then
+ begin
+ if s=cint_STR then
+ s:=cuint_STR
+ else if s=cshort_STR then
+ s:=cushort_STR
+ else if s=cchar_STR then
+ s:=cuchar_STR
+ else if s=clong_STR then
+ s:=culong_STR
+ else if s=clonglong_STR then
+ s:=culonglong_STR
+ else if s=cint8_STR then
+ s:=cuint8_STR
+ else if s=cint16_STR then
+ s:=cuint16_STR
+ else if s=cint32_STR then
+ s:=cuint32_STR
+ else if s=cint64_STR then
+ s:=cuint64_STR
+ else
+ s:='';
+ end
+ else
+ begin
+ if s=INT_STR then
+ s:=UINT_STR
+ else if s=SHORT_STR then
+ s:=USHORT_STR
+ else if s=SMALL_STR then
+ s:=USMALL_STR
+ else if s=CHAR_STR then
+ s:=UCHAR_STR
+ else if s=INT64_STR then
+ s:=QWORD_STR
+ else
+ s:='';
+ end;
+ if s<>'' then
+ hp^.setstr(s);
+ end;
+ } |
+ INT
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cint_STR))
+ else
+ $$:=new(presobject,init_intid(INT_STR));
+ } |
+ LONG
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(clong_STR))
+ else
+ $$:=new(presobject,init_intid(INT_STR));
+ } |
+ LONG INT
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(clong_STR))
+ else
+ $$:=new(presobject,init_intid(INT_STR));
+ } |
+ LONG LONG
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(clonglong_STR))
+ else
+ $$:=new(presobject,init_intid(INT64_STR));
+ } |
+ LONG LONG INT
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(clonglong_STR))
+ else
+ $$:=new(presobject,init_intid(INT64_STR));
+ } |
+ SHORT
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cshort_STR))
+ else
+ $$:=new(presobject,init_intid(SMALL_STR));
+ } |
+ SHORT INT
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(csint_STR))
+ else
+ $$:=new(presobject,init_intid(SMALL_STR));
+ } |
+ INT8
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cint8_STR))
+ else
+ $$:=new(presobject,init_intid(SHORT_STR));
+ } |
+ INT16
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cint16_STR))
+ else
+ $$:=new(presobject,init_intid(SMALL_STR));
+ } |
+ INT32
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cint32_STR))
+ else
+ $$:=new(presobject,init_intid(INT_STR));
+ } |
+ INT64
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cint64_STR))
+ else
+ $$:=new(presobject,init_intid(INT64_STR));
+ } |
+ FLOAT
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cfloat_STR))
+ else
+ $$:=new(presobject,init_intid(FLOAT_STR));
+ } |
+ VOID
+ {
+ $$:=new(presobject,init_no(t_void));
+ } |
+ _CHAR
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cchar_STR))
+ else
+ $$:=new(presobject,init_intid(CHAR_STR));
+ } |
+ UNSIGNED
+ {
+ if UseCTypesUnit then
+ $$:=new(presobject,init_id(cunsigned_STR))
+ else
+ $$:=new(presobject,init_intid(UINT_STR));
+ }
+ ;
+
+simple_type_name :
+ special_type_name
+ {
+ $$:=$1;
+ }
+ |
+ dname
+ {
+ $$:=$1;
+ tn:=$$^.str;
+ if removeunderscore and
+ (length(tn)>1) and (tn[1]='_') then
+ $$^.setstr(Copy(tn,2,length(tn)-1));
+ }
+ ;
+
+declarator_list :
+ declarator_list COMMA declarator
+ {
+ $$:=$1;
+ hp:=$1;
+ while assigned(hp^.next) do
+ hp:=hp^.next;
+ hp^.next:=new(presobject,init_one(t_declist,$3));
+ }|
+ error error_info COMMA declarator_list
+ {
+ writeln(outfile,' in declarator_list *)');
+ $$:=$4;
+ yyerrok;
+ }|
+ error error_info
+ {
+ writeln(outfile,' in declarator_list *)');
+ yyerrok;
+ }|
+ declarator
+ {
+ $$:=new(presobject,init_one(t_declist,$1));
+ }
+ ;
+
+argument_declaration : type_specifier declarator
+ {
+ $$:=new(presobject,init_two(t_arg,$1,$2));
+ } |
+ type_specifier STAR declarator
+ {
+ (* type_specifier STAR declarator *)
+ hp:=new(presobject,init_one(t_pointerdef,$1));
+ $$:=new(presobject,init_two(t_arg,hp,$3));
+ } |
+ type_specifier abstract_declarator
+ {
+ $$:=new(presobject,init_two(t_arg,$1,$2));
+ }
+ ;
+
+argument_declaration_list : argument_declaration
+ {
+ $$:=new(presobject,init_two(t_arglist,$1,nil));
+ } |
+ argument_declaration COMMA argument_declaration_list
+ {
+ $$:=new(presobject,init_two(t_arglist,$1,nil));
+ $$^.next:=$3;
+ } |
+ ELLIPSIS
+ {
+ $$:=new(presobject,init_two(t_arglist,ellipsisarg,nil));
+ } |
+ {
+ $$:=nil;
+ }
+ ;
+
+size_overrider :
+ _FAR
+ { $$:=new(presobject,init_id('far'));}
+ | _NEAR
+ { $$:=new(presobject,init_id('near'));}
+ | _HUGE
+ { $$:=new(presobject,init_id('huge'));}
+ ;
+
+declarator :
+ _CONST declarator
+ {
+ if not stripinfo then
+ writeln(outfile,'(* Const before declarator ignored *)');
+ $$:=$2;
+ } |
+ size_overrider STAR declarator
+ {
+ if not stripinfo then
+ writeln(outfile,aktspace,'(* ',$1^.p,' ignored *)');
+ dispose($1,done);
+ hp:=$3;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
+ } |
+ STAR declarator
+ {
+ (* %prec PSTAR this was wrong!! *)
+ hp:=$2;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
+ } |
+ _AND declarator %prec P_AND
+ {
+ hp:=$2;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_one(t_addrdef,nil));
+ } |
+ dname COLON expr
+ {
+ (* size specifier supported *)
+ hp:=new(presobject,init_one(t_size_specifier,$3));
+ $$:=new(presobject,init_three(t_dec,nil,$1,hp));
+ }|
+ dname ASSIGN expr
+ {
+ if not stripinfo then
+ writeln(outfile,'(* Warning : default value for ',$1^.p,' ignored *)');
+ hp:=new(presobject,init_one(t_default_value,$3));
+ $$:=new(presobject,init_three(t_dec,nil,$1,hp));
+ }|
+ dname
+ {
+ $$:=new(presobject,init_two(t_dec,nil,$1));
+ }|
+ declarator LKLAMMER argument_declaration_list RKLAMMER
+ {
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_procdef,nil,$3));
+ } |
+ declarator no_arg
+ {
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_procdef,nil,nil));
+ } |
+ declarator LECKKLAMMER expr RECKKLAMMER
+ {
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_arraydef,nil,$3));
+ } |
+ declarator LECKKLAMMER RECKKLAMMER
+ {
+ (* this is translated into a pointer *)
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_arraydef,nil,nil));
+ } |
+ LKLAMMER declarator RKLAMMER
+ {
+ $$:=$2;
+ }
+ ;
+
+no_arg : LKLAMMER RKLAMMER |
+ LKLAMMER VOID RKLAMMER;
+
+abstract_declarator :
+ _CONST abstract_declarator
+ {
+ if not stripinfo then
+ writeln(outfile,'(* Const before abstract_declarator ignored *)');
+ $$:=$2;
+ } |
+ size_overrider STAR abstract_declarator
+ {
+ if not stripinfo then
+ writeln(outfile,aktspace,'(* ',$1^.p,' ignored *)');
+ dispose($1,done);
+ hp:=$3;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
+ } |
+ STAR abstract_declarator %prec PSTAR
+ {
+ hp:=$2;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_one(t_pointerdef,nil));
+ } |
+ abstract_declarator LKLAMMER argument_declaration_list RKLAMMER
+ {
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_procdef,nil,$3));
+ } |
+ abstract_declarator no_arg
+ {
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_procdef,nil,nil));
+ } |
+ abstract_declarator LECKKLAMMER expr RECKKLAMMER
+ {
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_arraydef,nil,$3));
+ } |
+ declarator LECKKLAMMER RECKKLAMMER
+ {
+ (* this is translated into a pointer *)
+ hp:=$1;
+ $$:=hp;
+ while assigned(hp^.p1) do
+ hp:=hp^.p1;
+ hp^.p1:=new(presobject,init_two(t_arraydef,nil,nil));
+ } |
+ LKLAMMER abstract_declarator RKLAMMER
+ {
+ $$:=$2;
+ } |
+ {
+ $$:=new(presobject,init_two(t_dec,nil,nil));
+ }
+ ;
+
+expr : shift_expr
+ { $$:=$1; }
+ ;
+
+shift_expr :
+ expr _ASSIGN expr
+ { $$:=new(presobject,init_bop(':=',$1,$3)); }
+ | expr EQUAL expr
+ { $$:=new(presobject,init_bop('=',$1,$3));}
+ | expr UNEQUAL expr
+ { $$:=new(presobject,init_bop('<>',$1,$3));}
+ | expr GT expr
+ { $$:=new(presobject,init_bop('>',$1,$3));}
+ | expr GTE expr
+ { $$:=new(presobject,init_bop('>=',$1,$3));}
+ | expr LT expr
+ { $$:=new(presobject,init_bop('<',$1,$3));}
+ | expr LTE expr
+ { $$:=new(presobject,init_bop('<=',$1,$3));}
+ | expr _PLUS expr
+ { $$:=new(presobject,init_bop('+',$1,$3));}
+ | expr MINUS expr
+ { $$:=new(presobject,init_bop('-',$1,$3));}
+ | expr STAR expr
+ { $$:=new(presobject,init_bop('*',$1,$3));}
+ | expr _SLASH expr
+ { $$:=new(presobject,init_bop('/',$1,$3));}
+ | expr _OR expr
+ { $$:=new(presobject,init_bop(' or ',$1,$3));}
+ | expr _AND expr
+ { $$:=new(presobject,init_bop(' and ',$1,$3));}
+ | expr _NOT expr
+ { $$:=new(presobject,init_bop(' not ',$1,$3));}
+ | expr _SHL expr
+ { $$:=new(presobject,init_bop(' shl ',$1,$3));}
+ | expr _SHR expr
+ { $$:=new(presobject,init_bop(' shr ',$1,$3));}
+ | expr QUESTIONMARK colon_expr
+ {
+ $3^.p1:=$1;
+ $$:=$3;
+ inc(if_nb);
+ $$^.p:=strpnew('if_local'+str(if_nb));
+ } |
+ unary_expr {$$:=$1;}
+ ;
+
+colon_expr : expr COLON expr
+ { (* if A then B else C *)
+ $$:=new(presobject,init_three(t_ifexpr,nil,$1,$3));}
+ ;
+
+maybe_empty_unary_expr :
+ unary_expr
+ { $$:=$1; }
+ |
+ { $$:=nil;}
+ ;
+
+unary_expr:
+ dname
+ {
+ $$:=$1;
+ } |
+ special_type_name
+ {
+ $$:=$1;
+ } |
+ CSTRING
+ {
+ (* remove L prefix for widestrings *)
+ s:=act_token;
+ if Win32headers and (s[1]='L') then
+ delete(s,1,1);
+ $$:=new(presobject,init_id(''''+copy(s,2,length(s)-2)+''''));
+ } |
+ NUMBER
+ {
+ $$:=new(presobject,init_id(act_token));
+ } |
+ unary_expr POINT expr
+ {
+ $$:=new(presobject,init_bop('.',$1,$3));
+ } |
+ unary_expr DEREF expr
+ {
+ $$:=new(presobject,init_bop('^.',$1,$3));
+ } |
+ MINUS unary_expr
+ {
+ $$:=new(presobject,init_preop('-',$2));
+ }|
+ _PLUS unary_expr
+ {
+ $$:=new(presobject,init_preop('+',$2));
+ }|
+ _AND unary_expr %prec R_AND
+ {
+ $$:=new(presobject,init_preop('@',$2));
+ }|
+ _NOT unary_expr
+ {
+ $$:=new(presobject,init_preop(' not ',$2));
+ } |
+ LKLAMMER dname RKLAMMER maybe_empty_unary_expr
+ {
+ if assigned($4) then
+ $$:=new(presobject,init_two(t_typespec,$2,$4))
+ else
+ $$:=$2;
+ } |
+ LKLAMMER type_specifier RKLAMMER unary_expr
+ {
+ $$:=new(presobject,init_two(t_typespec,$2,$4));
+ } |
+ LKLAMMER type_specifier STAR RKLAMMER unary_expr
+ {
+ hp:=new(presobject,init_one(t_pointerdef,$2));
+ $$:=new(presobject,init_two(t_typespec,hp,$5));
+ } |
+ LKLAMMER type_specifier size_overrider STAR RKLAMMER unary_expr
+ {
+ if not stripinfo then
+ writeln(outfile,aktspace,'(* ',$3^.p,' ignored *)');
+ dispose($3,done);
+ write_type_specifier(outfile,$2);
+ writeln(outfile,' ignored *)');
+ hp:=new(presobject,init_one(t_pointerdef,$2));
+ $$:=new(presobject,init_two(t_typespec,hp,$6));
+ } |
+ dname LKLAMMER exprlist RKLAMMER
+ {
+ hp:=new(presobject,init_one(t_exprlist,$1));
+ $$:=new(presobject,init_three(t_funexprlist,hp,$3,nil));
+ } |
+ LKLAMMER shift_expr RKLAMMER
+ {
+ $$:=$2;
+ } |
+ LKLAMMER STAR unary_expr RKLAMMER maybe_space LKLAMMER exprlist RKLAMMER
+ {
+ $$:=new(presobject,init_two(t_callop,$3,$7));
+ } |
+ dname LECKKLAMMER exprlist RECKKLAMMER
+ {
+ $$:=new(presobject,init_two(t_arrayop,$1,$3));
+ }
+ ;
+
+enum_list :
+ enum_element COMMA enum_list
+ { (*enum_element COMMA enum_list *)
+ $$:=$1;
+ $$^.next:=$3;
+ } |
+ enum_element {
+ $$:=$1;
+ } |
+ {(* empty enum list *)
+ $$:=nil;};
+
+enum_element :
+ dname _ASSIGN expr
+ { begin (*enum_element: dname _ASSIGN expr *)
+ $$:=new(presobject,init_two(t_enumlist,$1,$3));
+ end;
+ } |
+ dname
+ {
+ begin (*enum_element: dname*)
+ $$:=new(presobject,init_two(t_enumlist,$1,nil));
+ end;
+ };
+
+
+def_expr :
+ unary_expr
+ {
+ if $1^.typ=t_funexprlist then
+ $$:=$1
+ else
+ $$:=new(presobject,init_two(t_exprlist,$1,nil));
+ (* if here is a type specifier
+ we know the return type *)
+ if ($1^.typ=t_typespec) then
+ $$^.p3:=$1^.p1^.get_copy;
+ }
+ ;
+
+para_def_expr :
+ SPACE_DEFINE def_expr
+ {
+ $$:=$2;
+ } |
+ maybe_space LKLAMMER def_expr RKLAMMER
+ {
+ $$:=$3
+ }
+ ;
+
+exprlist : exprelem COMMA exprlist
+ { (*exprlist COMMA expr*)
+ $$:=$1;
+ $1^.next:=$3;
+ } |
+ exprelem
+ {
+ $$:=$1;
+ } |
+ { (* empty expression list *)
+ $$:=nil; };
+
+exprelem :
+ expr
+ {
+ $$:=new(presobject,init_one(t_exprlist,$1));
+ };
+
+%%
+
+function yylex : Integer;
+begin
+ yylex:=scan.yylex;
+ line_no:=yylineno;
+end;
+
+procedure WriteFileHeader(var headerfile: Text);
+var
+ i: integer;
+ originalstr: string;
+begin
+{ write unit header }
+ if not includefile then
+ begin
+ if createdynlib then
+ writeln(headerfile,'{$mode objfpc}');
+ writeln(headerfile,'unit ',unitname,';');
+ writeln(headerfile,'interface');
+ writeln(headerfile);
+ if UseCTypesUnit then
+ begin
+ writeln(headerfile,'uses');
+ writeln(headerfile,' ctypes;');
+ writeln(headerfile);
+ end;
+ writeln(headerfile,'{');
+ writeln(headerfile,' Automatically converted by H2Pas ',version,' from ',inputfilename);
+ writeln(headerfile,' The following command line parameters were used:');
+ for i:=1 to paramcount do
+ writeln(headerfile,' ',paramstr(i));
+ writeln(headerfile,'}');
+ writeln(headerfile);
+ end;
+ if UseName then
+ begin
+ writeln(headerfile,aktspace,'const');
+ writeln(headerfile,aktspace,' External_library=''',libfilename,'''; {Setup as you need}');
+ writeln(headerfile);
+ end;
+ if UsePPointers then
+ begin
+ Writeln(headerfile,aktspace,'{ Pointers to basic pascal types, inserted by h2pas conversion program.}');
+ Writeln(headerfile,aktspace,'Type');
+ Writeln(headerfile,aktspace,' PLongint = ^Longint;');
+ Writeln(headerfile,aktspace,' PSmallInt = ^SmallInt;');
+ Writeln(headerfile,aktspace,' PByte = ^Byte;');
+ Writeln(headerfile,aktspace,' PWord = ^Word;');
+ Writeln(headerfile,aktspace,' PDWord = ^DWord;');
+ Writeln(headerfile,aktspace,' PDouble = ^Double;');
+ Writeln(headerfile);
+ end;
+ if PTypeList.count <> 0 then
+ Writeln(headerfile,aktspace,'Type');
+ for i:=0 to (PTypeList.Count-1) do
+ begin
+ originalstr:=copy(PTypelist[i],2,length(PTypeList[i]));
+ Writeln(headerfile,aktspace,PTypeList[i],' = ^',originalstr,';');
+ end;
+ if not packrecords then
+ begin
+ writeln(headerfile,'{$IFDEF FPC}');
+ writeln(headerfile,'{$PACKRECORDS C}');
+ writeln(headerfile,'{$ENDIF}');
+ end;
+ writeln(headerfile);
+end;
+
+
+var
+ SS : string;
+ i : longint;
+ headerfile: Text;
+ finaloutfile: Text;
+begin
+ pointerprefix:=false;
+{ Initialize }
+ PTypeList:=TStringList.Create;
+ PTypeList.Sorted := true;
+ PTypeList.Duplicates := dupIgnore;
+ freedynlibproc:=TStringList.Create;
+ loaddynlibproc:=TStringList.Create;
+ yydebug:=true;
+ aktspace:='';
+ block_type:=bt_no;
+ IsExtern:=false;
+{ Read commandline options }
+ ProcessOptions;
+ if not CompactMode then
+ aktspace:=' ';
+{ open input and output files }
+ assign(yyinput, inputfilename);
+ {$I-}
+ reset(yyinput);
+ {$I+}
+ if ioresult<>0 then
+ begin
+ writeln('file ',inputfilename,' not found!');
+ halt(1);
+ end;
+ { This is the intermediate output file }
+ assign(outfile, 'ext3.tmp');
+ {$I-}
+ rewrite(outfile);
+ {$I+}
+ if ioresult<>0 then
+ begin
+ writeln('file ext3.tmp could not be created!');
+ halt(1);
+ end;
+ writeln(outfile);
+{ Open tempfiles }
+ { This is where the implementation section of the unit shall be stored }
+ Assign(implemfile,'ext.tmp');
+ rewrite(implemfile);
+ Assign(tempfile,'ext2.tmp');
+ rewrite(tempfile);
+{ Parse! }
+ yyparse;
+{ Write implementation if needed }
+ if not(includefile) then
+ begin
+ writeln(outfile);
+ writeln(outfile,'implementation');
+ writeln(outfile);
+ end;
+ { here we have a problem if a line is longer than 255 chars !! }
+ reset(implemfile);
+ while not eof(implemfile) do
+ begin
+ readln(implemfile,SS);
+ writeln(outfile,SS);
+ end;
+
+ if createdynlib then
+ begin
+ writeln(outfile,' uses');
+ writeln(outfile,' SysUtils, dynlibs;');
+ writeln(outfile);
+ writeln(outfile,' var');
+ writeln(outfile,' hlib : tlibhandle;');
+ writeln(outfile);
+ writeln(outfile);
+ writeln(outfile,' procedure Free',unitname,';');
+ writeln(outfile,' begin');
+ writeln(outfile,' FreeLibrary(hlib);');
+
+ for i:=0 to (freedynlibproc.Count-1) do
+ Writeln(outfile,' ',freedynlibproc[i]);
+
+ writeln(outfile,' end;');
+ writeln(outfile);
+ writeln(outfile);
+ writeln(outfile,' procedure Load',unitname,'(lib : pchar);');
+ writeln(outfile,' begin');
+ writeln(outfile,' Free',unitname,';');
+ writeln(outfile,' hlib:=LoadLibrary(lib);');
+ writeln(outfile,' if hlib=0 then');
+ writeln(outfile,' raise Exception.Create(format(''Could not load library: %s'',[lib]));');
+ writeln(outfile);
+ for i:=0 to (loaddynlibproc.Count-1) do
+ Writeln(outfile,' ',loaddynlibproc[i]);
+ writeln(outfile,' end;');
+
+ writeln(outfile);
+ writeln(outfile);
+
+ writeln(outfile,'initialization');
+ writeln(outfile,' Load',unitname,'(''',unitname,''');');
+ writeln(outfile,'finalization');
+ writeln(outfile,' Free',unitname,';');
+ end;
+
+ { write end of file }
+ writeln(outfile);
+ if not(includefile) then
+ writeln(outfile,'end.');
+ { close and erase tempfiles }
+ close(implemfile);
+ erase(implemfile);
+ close(tempfile);
+ erase(tempfile);
+ flush(outfile);
+
+ {**** generate full file ****}
+ assign(headerfile, 'ext4.tmp');
+ {$I-}
+ rewrite(headerfile);
+ {$I+}
+ if ioresult<>0 then
+ begin
+ writeln('file ext4.tmp could not be created!');
+ halt(1);
+ end;
+ WriteFileHeader(HeaderFile);
+
+ { Final output filename }
+ assign(finaloutfile, outputfilename);
+ {$I-}
+ rewrite(finaloutfile);
+ {$I+}
+ if ioresult<>0 then
+ begin
+ writeln('file ',outputfilename,' could not be created!');
+ halt(1);
+ end;
+ writeln(finaloutfile);
+
+ { Read unit header file }
+ reset(headerfile);
+ while not eof(headerfile) do
+ begin
+ readln(headerfile,SS);
+ writeln(finaloutfile,SS);
+ end;
+ { Read interface and implementation file }
+ reset(outfile);
+ while not eof(outfile) do
+ begin
+ readln(outfile,SS);
+ writeln(finaloutfile,SS);
+ end;
+
+ close(HeaderFile);
+ close(outfile);
+ close(finaloutfile);
+ erase(outfile);
+ erase(headerfile);
+
+ PTypeList.Free;
+ freedynlibproc.free;
+ loaddynlibproc.free;
+end.
diff --git a/utils/h2pas/scan.l b/utils/h2pas/scan.l
index c21a669014..2b6ece4574 100644
--- a/utils/h2pas/scan.l
+++ b/utils/h2pas/scan.l
@@ -1,1084 +1,1082 @@
-%{
-{
- Copyright (c) 1998-2000 by Florian Klaempfl
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- ****************************************************************************}
-
-
-unit scan;
-
- interface
-
- uses
- strings,
- h2plexlib,h2pyacclib;
-
- const
- version = '1.0.0';
-
- type
- Char=system.char;
- ttyp = (
- t_id,
- { p contains the string }
- t_arraydef,
- { }
- t_pointerdef,
- { p1 contains the definition
- if in type overrider
- or nothing for args
- }
- t_addrdef,
-
- t_void,
- { no field }
- t_dec,
- { }
- t_declist,
- { p1 is t_dec
- next if exists }
- t_memberdec,
- { p1 is type specifier
- p2 is declarator_list }
- t_structdef,
- { }
- t_memberdeclist,
- { p1 is memberdec
- next is next if it exist }
- t_procdef,
- { }
- t_uniondef,
- { }
- t_enumdef,
- { }
- t_enumlist,
- { }
- t_preop,
- { p contains the operator string
- p1 contains the right expr }
- t_bop,
- { p contains the operator string
- p1 contains the left expr
- p2 contains the right expr }
- t_arrayop,
- {
- p1 contains the array expr
- p2 contains the index expressions }
- t_callop,
- {
- p1 contains the proc expr
- p2 contains the index expressions }
- t_arg,
- {
- p1 contain the typedef
- p2 the declarator (t_dec)
- }
- t_arglist,
- { }
- t_funexprlist,
- { }
- t_exprlist,
- { p1 contains the expr
- next contains the next if it exists }
- t_ifexpr,
- { p1 contains the condition expr
- p2 contains the if branch
- p3 contains the else branch }
- t_funcname,
- { p1 contains the function dname
- p2 contains the funexprlist
- p3 possibly contains the return type }
- t_typespec,
- { p1 is the type itself
- p2 the typecast expr }
- t_size_specifier,
- { p1 expr for size }
- t_default_value,
- { p1 expr for value }
- t_statement_list,
- { p1 is the statement
- next is next if it exist }
- t_whilenode,
- t_fornode,
- t_dowhilenode,
- t_switchnode,
- t_gotonode,
- t_continuenode,
- t_breaknode
- );
-
-const
- ttypstr: array[ttyp] of string =
- (
- 't_id',
- 't_arraydef',
- 't_pointerdef',
- 't_addrdef',
- 't_void',
- 't_dec',
- 't_declist',
- 't_memberdec',
- 't_structdef',
- 't_memberdeclist',
- 't_procdef',
- 't_uniondef',
- 't_enumdef',
- 't_enumlist',
- 't_preop',
- 't_bop',
- 't_arrayop',
- 't_callop',
- 't_arg',
- 't_arglist',
- 't_funexprlist',
- 't_exprlist',
- 't_ifexpr',
- 't_funcname',
- 't_typespec',
- 't_size_specifier',
- 't_default_value',
- 't_statement_list',
- 't_whilenode',
- 't_fornode',
- 't_dowhilenode',
- 't_switchnode',
- 't_gotonode',
- 't_continuenode',
- 't_breaknode'
- );
-
-type
-
- presobject = ^tresobject;
- tresobject = object
- typ : ttyp;
- p : pchar;
- next : presobject;
- p1,p2,p3 : presobject;
- { name of int/real, then no T prefix is required }
- intname : boolean;
- constructor init_no(t : ttyp);
- constructor init_one(t : ttyp;_p1 : presobject);
- constructor init_two(t : ttyp;_p1,_p2 : presobject);
- constructor init_three(t : ttyp;_p1,_p2,_p3 : presobject);
- constructor init_id(const s : string);
- constructor init_intid(const s : string);
- constructor init_bop(const s : string;_p1,_p2 : presobject);
- constructor init_preop(const s : string;_p1 : presobject);
- procedure setstr(const s:string);
- function str : string;
- function strlength : byte;
- function get_copy : presobject;
- { can this ve considered as a constant ? }
- function is_const : boolean;
- destructor done;
- end;
-
- tblocktype = (bt_type,bt_const,bt_var,bt_func,bt_no);
-
-
- var
- infile : string;
- outfile : text;
- c : char;
- aktspace : string;
- block_type : tblocktype;
- commentstr: string;
-
- const
- in_define : boolean = false;
- { True if define spans to the next line }
- cont_line : boolean = false;
- { 1 after define; 2 after the ID to print the first separating space }
- in_space_define : byte = 0;
- arglevel : longint = 0;
-
- {> 1 = ifdef level in a ifdef C++ block
- 1 = first level in an ifdef block
- 0 = not in an ifdef block
- -1 = in else part of ifdef block, process like we weren't in the block
- but skip the incoming end.
- > -1 = ifdef sublevel in an else block.
- }
- cplusblocklevel : LongInt = 0;
-
-
- function yylex : integer;
- function act_token : string;
- procedure internalerror(i : integer);
-
- function strpnew(const s : string) : pchar;
-
- procedure writetree(p: presobject);
-
-
- implementation
-
- uses
- h2poptions,converu;
-
- const
- newline = #10;
-
-
- procedure writeentry(p: presobject; var currentlevel: integer);
- begin
- if assigned(p^.p1) then
- begin
- WriteLn(' Entry p1[',ttypstr[p^.p1^.typ],']',p^.p1^.str);
- end;
- if assigned(p^.p2) then
- begin
- WriteLn(' Entry p2[',ttypstr[p^.p2^.typ],']',p^.p2^.str);
- end;
- if assigned(p^.p3) then
- begin
- WriteLn(' Entry p3[',ttypstr[p^.p3^.typ],']',p^.p3^.str);
- end;
- end;
-
- procedure writetree(p: presobject);
- var
- i : integer;
- localp: presobject;
- localp1: presobject;
- currentlevel : integer;
- begin
- localp:=p;
- currentlevel:=0;
- while assigned(localp) do
- begin
- WriteLn('Entry[',ttypstr[localp^.typ],']',localp^.str);
- case localp^.typ of
- { Some arguments sharing the same type }
- t_arglist:
- begin
- localp1:=localp;
- while assigned(localp1) do
- begin
- writeentry(localp1,currentlevel);
- localp1:=localp1^.p1;
- end;
- end;
- end;
-
- localp:=localp^.next;
- end;
- end;
-
-
-
- procedure internalerror(i : integer);
- begin
- writeln('Internal error ',i,' in line ',yylineno);
- halt(1);
- end;
-
-
- procedure commenteof;
- begin
- writeln('unexpected EOF inside comment at line ',yylineno);
- end;
-
-
- procedure copy_until_eol;
- begin
- c:=get_char;
- while c<>newline do
- begin
- write(outfile,c);
- c:=get_char;
- end;
- end;
-
-
- procedure skip_until_eol;
- begin
- c:=get_char;
- while c<>newline do
- c:=get_char;
- end;
-
-
- function strpnew(const s : string) : pchar;
- var
- p : pchar;
- begin
- getmem(p,length(s)+1);
- strpcopy(p,s);
- strpnew:=p;
- end;
-
- function NotInCPlusBlock : Boolean; inline;
- begin
- NotInCPlusBlock := cplusblocklevel < 1;
- end;
-
- constructor tresobject.init_preop(const s : string;_p1 : presobject);
- begin
- typ:=t_preop;
- p:=strpnew(s);
- p1:=_p1;
- p2:=nil;
- p3:=nil;
- next:=nil;
- intname:=false;
- end;
-
- constructor tresobject.init_bop(const s : string;_p1,_p2 : presobject);
- begin
- typ:=t_bop;
- p:=strpnew(s);
- p1:=_p1;
- p2:=_p2;
- p3:=nil;
- next:=nil;
- intname:=false;
- end;
-
- constructor tresobject.init_id(const s : string);
- begin
- typ:=t_id;
- p:=strpnew(s);
- p1:=nil;
- p2:=nil;
- p3:=nil;
- next:=nil;
- intname:=false;
- end;
-
- constructor tresobject.init_intid(const s : string);
- begin
- typ:=t_id;
- p:=strpnew(s);
- p1:=nil;
- p2:=nil;
- p3:=nil;
- next:=nil;
- intname:=true;
- end;
-
- constructor tresobject.init_two(t : ttyp;_p1,_p2 : presobject);
- begin
- typ:=t;
- p1:=_p1;
- p2:=_p2;
- p3:=nil;
- p:=nil;
- next:=nil;
- intname:=false;
- end;
-
- constructor tresobject.init_three(t : ttyp;_p1,_p2,_p3 : presobject);
- begin
- typ:=t;
- p1:=_p1;
- p2:=_p2;
- p3:=_p3;
- p:=nil;
- next:=nil;
- intname:=false;
- end;
-
- constructor tresobject.init_one(t : ttyp;_p1 : presobject);
- begin
- typ:=t;
- p1:=_p1;
- p2:=nil;
- p3:=nil;
- next:=nil;
- p:=nil;
- intname:=false;
- end;
-
- constructor tresobject.init_no(t : ttyp);
- begin
- typ:=t;
- p:=nil;
- p1:=nil;
- p2:=nil;
- p3:=nil;
- next:=nil;
- intname:=false;
- end;
-
- procedure tresobject.setstr(const s : string);
- begin
- if assigned(p) then
- strdispose(p);
- p:=strpnew(s);
- end;
-
- function tresobject.str : string;
- begin
- str:=strpas(p);
- end;
-
- function tresobject.strlength : byte;
- begin
- if assigned(p) then
- strlength:=strlen(p)
- else
- strlength:=0;
- end;
-
- { can this ve considered as a constant ? }
- function tresobject.is_const : boolean;
- begin
- case typ of
- t_id,t_void :
- is_const:=true;
- t_preop :
- is_const:= ((str='-') or (str=' not ')) and p1^.is_const;
- t_bop :
- is_const:= p2^.is_const and p1^.is_const;
- else
- is_const:=false;
- end;
- end;
-
- function tresobject.get_copy : presobject;
- var
- newres : presobject;
- begin
- newres:=new(presobject,init_no(typ));
- newres^.intname:=intname;
- if assigned(p) then
- newres^.p:=strnew(p);
- if assigned(p1) then
- newres^.p1:=p1^.get_copy;
- if assigned(p2) then
- newres^.p2:=p2^.get_copy;
- if assigned(p3) then
- newres^.p3:=p3^.get_copy;
- if assigned(next) then
- newres^.next:=next^.get_copy;
- get_copy:=newres;
- end;
-
- destructor tresobject.done;
- begin
- (* writeln('disposing ',byte(typ)); *)
- if assigned(p)then strdispose(p);
- if assigned(p1) then
- dispose(p1,done);
- if assigned(p2) then
- dispose(p2,done);
- if assigned(p3) then
- dispose(p3,done);
- if assigned(next) then
- dispose(next,done);
- end;
-%}
-
-D [0-9]
-%%
-
-"/*" if NotInCPlusBlock then
- begin
- if not stripcomment then
- write(outfile,aktspace,'{');
- repeat
- c:=get_char;
- case c of
- '*' :
- begin
- c:=get_char;
- if c='/' then
- begin
- if not stripcomment then
- write(outfile,' }');
- c:=get_char;
- if (c=newline) then
- begin
- writeln(outfile);
- unget_char(c);
- end;
- flush(outfile);
- exit;
- end
- else
- begin
- if not stripcomment then
- write(outfile,'*');
- unget_char(c)
- end;
- end;
- newline :
- begin
- if not stripcomment then
- begin
- writeln(outfile);
- write(outfile,aktspace);
- end;
- end;
- { Don't write this thing out, to
- avoid nested comments.
- }
- '{','}' :
- begin
- end;
- #0 :
- commenteof;
- else
- if not stripcomment then
- write(outfile,c);
- end;
- until false;
- flush(outfile);
- end
- else
- skip_until_eol;
-"//" if NotInCPlusBlock then
- begin
- commentstr:='';
- if (in_define) and not (stripcomment) then
- begin
- commentstr:='{';
- end
- else
- If not stripcomment then
- write(outfile,aktspace,'{');
-
- repeat
- c:=get_char;
- case c of
- newline :
- begin
- unget_char(c);
- if not stripcomment then
- begin
- if in_define then
- begin
- commentstr:=commentstr+' }';
- end
- else
- begin
- write(outfile,' }');
- writeln(outfile);
- end;
- end;
- flush(outfile);
- exit;
- end;
- { Don't write this comment out,
- to avoid nested comment problems
- }
- '{','}' :
- begin
- end;
- #0 :
- commenteof;
- else
- if not stripcomment then
- begin
- if in_define then
- begin
- commentstr:=commentstr+c;
- end
- else
- write(outfile,c);
- end;
- end;
- until false;
- flush(outfile);
- end
- else
- skip_until_eol;
-\"[^\"]*\" if NotInCPlusBlock then return(CSTRING) else skip_until_eol;
-\'[^\']*\' if NotInCPlusBlock then return(CSTRING) else skip_until_eol;
-"L"\"[^\"]*\" if NotInCPlusBlock then
- begin
- if win32headers then
- return(CSTRING)
- else
- return(256);
- end
- else skip_until_eol;
-"L"\'[^\']*\' if NotInCPlusBlock then
- begin
- if win32headers then
- return(CSTRING)
- else
- return(256);
- end
- else
- skip_until_eol;
-{D}+[Uu]?[Ll]? if NotInCPlusBlock then
- begin
- while yytext[length(yytext)] in ['L','U','l','u'] do
- Delete(yytext,length(yytext),1);
- return(NUMBER);
- end
- else skip_until_eol;
-"0x"[0-9A-Fa-f]*[Uu]?[Ll]?
- if NotInCPlusBlock then
- begin
- (* handle pre- and postfixes *)
- if copy(yytext,1,2)='0x' then
- begin
- delete(yytext,1,2);
- yytext:='$'+yytext;
- end;
- while yytext[length(yytext)] in ['L','U','l','u'] do
- Delete(yytext,length(yytext),1);
- return(NUMBER);
- end
- else
- skip_until_eol;
-{D}+(\.{D}+)?([Ee][+-]?{D}+)?
- if NotInCPlusBlock then
- begin
- return(NUMBER);
- end
- else
- skip_until_eol;
-"->" if NotInCPlusBlock then
- begin
- if in_define then
- return(DEREF)
- else
- return(256);
- end
- else
- skip_until_eol;
-"-" if NotInCPlusBlock then return(MINUS) else skip_until_eol;
-"==" if NotInCPlusBlock then return(EQUAL) else skip_until_eol;
-"!=" if NotInCPlusBlock then return(UNEQUAL) else skip_until_eol;
-">=" if NotInCPlusBlock then return(GTE) else skip_until_eol;
-"<=" if NotInCPlusBlock then return(LTE) else skip_until_eol;
-">>" if NotInCPlusBlock then return(_SHR) else skip_until_eol;
-"##" if NotInCPlusBlock then return(STICK) else skip_until_eol;
-"<<" if NotInCPlusBlock then return(_SHL) else skip_until_eol;
-">" if NotInCPlusBlock then return(GT) else skip_until_eol;
-"<" if NotInCPlusBlock then return(LT) else skip_until_eol;
-"|" if NotInCPlusBlock then return(_OR) else skip_until_eol;
-"&" if NotInCPlusBlock then return(_AND) else skip_until_eol;
-"~" if NotInCPlusBlock then return(_NOT) else skip_until_eol; (* inverse, but handled as not operation *)
-"!" if NotInCPlusBlock then return(_NOT) else skip_until_eol;
-"/" if NotInCPlusBlock then return(_SLASH) else skip_until_eol;
-"+" if NotInCPlusBlock then return(_PLUS) else skip_until_eol;
-"?" if NotInCPlusBlock then return(QUESTIONMARK) else skip_until_eol;
-":" if NotInCPlusBlock then return(COLON) else skip_until_eol;
-"," if NotInCPlusBlock then return(COMMA) else skip_until_eol;
-"[" if NotInCPlusBlock then return(LECKKLAMMER) else skip_until_eol;
-"]" if NotInCPlusBlock then return(RECKKLAMMER) else skip_until_eol;
-"(" if NotInCPlusBlock then
- begin
- inc(arglevel);
- return(LKLAMMER);
- end
- else
- skip_until_eol;
-")" if NotInCPlusBlock then
- begin
- dec(arglevel);
- return(RKLAMMER);
- end
- else
- skip_until_eol;
-"*" if NotInCPlusBlock then return(STAR) else skip_until_eol;
-"..." if NotInCPlusBlock then return(ELLIPSIS) else skip_until_eol;
-"." if NotInCPlusBlock then
- if in_define then
- return(POINT)
- else
- return(256);
-"=" if NotInCPlusBlock then return(_ASSIGN) else skip_until_eol;
-"extern" if NotInCPlusBlock then return(EXTERN) else skip_until_eol;
-"STDCALL" if NotInCPlusBlock then
- begin
- if Win32headers then
- return(STDCALL)
- else
- return(ID);
- end
- else
- begin
- skip_until_eol;
- end;
-"CDECL" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(CDECL);
- end
- else
- begin
- skip_until_eol;
- end;
-"PASCAL" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(PASCAL);
- end
- else
- begin
- skip_until_eol;
- end;
-"PACKED" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(_PACKED);
- end
- else
- begin
- skip_until_eol;
- end;
-"WINAPI" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(WINAPI);
- end
- else
- begin
- skip_until_eol;
- end;
-"SYS_TRAP" if NotInCPlusBlock then
- begin
- if not palmpilot then
- return(ID)
- else
- return(SYS_TRAP);
- end
- else
- begin
- skip_until_eol;
- end;
-"WINGDIAPI" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(WINGDIAPI);
- end
- else
- begin
- skip_until_eol;
- end;
-"CALLBACK" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(CALLBACK);
- end
- else
- begin
- skip_until_eol;
- end;
-"EXPENTRY" if NotInCPlusBlock then
- begin
- if not Win32headers then
- return(ID)
- else
- return(CALLBACK);
- end
- else
- begin
- skip_until_eol;
- end;
-"void" if NotInCPlusBlock then return(VOID) else skip_until_eol;
-"VOID" if NotInCPlusBlock then return(VOID) else skip_until_eol;
-"#ifdef"[ \t]*"__cplusplus"[ \t]*\n"extern \"C\" {"\n"#endif"
- begin
- if not stripinfo then
- writeln(outfile,'{ C++ extern C conditionnal removed }');
- end;
-"#ifdef"[ \t]*"cplusplus"[ \t]*\n"extern \"C\" {"\n"#endif"
- begin
- if not stripinfo then
- writeln(outfile,'{ C++ extern C conditionnal removed }');
- end;
-"#ifdef"[ \t]*"__cplusplus"[ \t]*\n"}"\n"#endif"
- begin
- if not stripinfo then
- writeln(outfile,'{ C++ end of extern C conditionnal removed }');
- end;
-"#ifdef"[ \t]*"cplusplus"[ \t]*\n"}"\n"#endif"
- begin
- if not stripinfo then
- writeln(outfile,'{ C++ end of extern C conditionnal removed }');
- end;
-"#ifdef"[ \t]*"cplusplus"[ \t]*
- begin
- Inc(cplusblocklevel);
- end;
-"#ifdef"[ \t]*"__cplusplus"[ \t]*
- begin
- Inc(cplusblocklevel);
- end;
-"#ifdef"[ \t]
- begin
- if cplusblocklevel > 0 then
- Inc(cplusblocklevel)
- else
- begin
- if cplusblocklevel < 0 then
- Dec(cplusblocklevel);
- write(outfile,'{$ifdef ');
- copy_until_eol;
- writeln(outfile,'}');
- flush(outfile);
- end;
- end;
-"#"[ \t]*"else" begin
- if cplusblocklevel < -1 then
- begin
- writeln(outfile,'{$else}');
- block_type:=bt_no;
- flush(outfile);
- end
- else
- case cplusblocklevel of
- 0 :
- begin
- writeln(outfile,'{$else}');
- block_type:=bt_no;
- flush(outfile);
- end;
- 1 : cplusblocklevel := -1;
- -1 : cplusblocklevel := 1;
- end;
- end;
-"#"[ \t]*"endif" begin
- if cplusblocklevel > 0 then
- begin
- Dec(cplusblocklevel);
- end
- else
- begin
- case cplusblocklevel of
- 0 : begin
- writeln(outfile,'{$endif}');
- block_type:=bt_no;
- flush(outfile);
- end;
- -1 : begin
- cplusblocklevel :=0;
- end
- else
- inc(cplusblocklevel);
- end;
- end;
-
- end;
-"#"[ \t]*"elif" begin
- if cplusblocklevel < -1 then
- begin
- if not stripinfo then
- write(outfile,'(*** was #elif ****)');
- write(outfile,'{$else');
- copy_until_eol;
- writeln(outfile,'}');
- block_type:=bt_no;
- flush(outfile);
- end
- else
- case cplusblocklevel of
- 0 :
- begin
- if not stripinfo then
- write(outfile,'(*** was #elif ****)');
- write(outfile,'{$else');
- copy_until_eol;
- writeln(outfile,'}');
- block_type:=bt_no;
- flush(outfile);
- end;
- 1 : cplusblocklevel := -1;
- -1 : cplusblocklevel := 1;
- end;
- end;
-"#"[ \t]*"undef" begin
- write(outfile,'{$undef');
- copy_until_eol;
- writeln(outfile,'}');
- flush(outfile);
- end;
-"#"[ \t]*"error" begin
- write(outfile,'{$error');
- copy_until_eol;
- writeln(outfile,'}');
- flush(outfile);
- end;
-"#"[ \t]*"include" if NotInCPlusBlock then
- begin
- write(outfile,'{$include');
- copy_until_eol;
- writeln(outfile,'}');
- flush(outfile);
- block_type:=bt_no;
- end
- else
- skip_until_eol;
-"#"[ \t]*"if" begin
- if cplusblocklevel > 0 then
- Inc(cplusblocklevel)
- else
- begin
- if cplusblocklevel < 0 then
- Dec(cplusblocklevel);
- write(outfile,'{$if');
- copy_until_eol;
- writeln(outfile,'}');
- flush(outfile);
- block_type:=bt_no;
- end;
- end;
-"# "[0-9]+" " if NotInCPlusBlock then
- (* preprocessor line info *)
- repeat
- c:=get_char;
- case c of
- newline :
- begin
- unget_char(c);
- exit;
- end;
- #0 :
- commenteof;
- end;
- until false
- else
- skip_until_eol;
-"#"[ \t]*"pragma" begin
- if not stripinfo then
- begin
- write(outfile,'(** unsupported pragma');
- write(outfile,'#pragma');
- copy_until_eol;
- writeln(outfile,'*)');
- flush(outfile);
- end
- else
- skip_until_eol;
- block_type:=bt_no;
- end;
-"#"[ \t]*"define" if NotInCPlusBlock then
- begin
- commentstr:='';
- in_define:=true;
- in_space_define:=1;
- return(DEFINE);
- end
- else
- skip_until_eol;
-"char" if NotInCPlusBlock then return(_CHAR) else skip_until_eol;
-"union" if NotInCPlusBlock then return(UNION) else skip_until_eol;
-"enum" if NotInCPlusBlock then return(ENUM) else skip_until_eol;
-"struct" if NotInCPlusBlock then return(STRUCT) else skip_until_eol;
-"{" if NotInCPlusBlock then return(LGKLAMMER) else skip_until_eol;
-"}" if NotInCPlusBlock then return(RGKLAMMER) else skip_until_eol;
-"typedef" if NotInCPlusBlock then return(TYPEDEF) else skip_until_eol;
-"int" if NotInCPlusBlock then return(INT) else skip_until_eol;
-"short" if NotInCPlusBlock then return(SHORT) else skip_until_eol;
-"long" if NotInCPlusBlock then return(LONG) else skip_until_eol;
-"signed" if NotInCPlusBlock then return(SIGNED) else skip_until_eol;
-"unsigned" if NotInCPlusBlock then return(UNSIGNED) else skip_until_eol;
-"__int8" if NotInCPlusBlock then return(INT8) else skip_until_eol;
-"__int16" if NotInCPlusBlock then return(INT16) else skip_until_eol;
-"__int32" if NotInCPlusBlock then return(INT32) else skip_until_eol;
-"__int64" if NotInCPlusBlock then return(INT64) else skip_until_eol;
-"int8" if NotInCPlusBlock then return(INT8) else skip_until_eol;
-"int16" if NotInCPlusBlock then return(INT16) else skip_until_eol;
-"int32" if NotInCPlusBlock then return(INT32) else skip_until_eol;
-"int64" if NotInCPlusBlock then return(INT64) else skip_until_eol;
-"float" if NotInCPlusBlock then return(FLOAT) else skip_until_eol;
-"const" if NotInCPlusBlock then return(_CONST) else skip_until_eol;
-"CONST" if NotInCPlusBlock then return(_CONST) else skip_until_eol;
-"FAR" if NotInCPlusBlock then return(_FAR) else skip_until_eol;
-"far" if NotInCPlusBlock then return(_FAR) else skip_until_eol;
-"NEAR" if NotInCPlusBlock then return(_NEAR) else skip_until_eol;
-"near" if NotInCPlusBlock then return(_NEAR) else skip_until_eol;
-"HUGE" if NotInCPlusBlock then return(_HUGE) else skip_until_eol;
-"huge" if NotInCPlusBlock then return(_HUGE) else skip_until_eol;
-"while" if NotInCPlusBlock then return(_WHILE) else skip_until_eol;
-[A-Za-z_][A-Za-z0-9_]* if NotInCPlusBlock then
- begin
- if in_space_define=1 then
- in_space_define:=2;
- return(ID);
- end
- else
- skip_until_eol;
-";" if NotInCPlusBlock then return(SEMICOLON) else skip_until_eol;
-[ \f\t] if NotInCPlusBlock then
- begin
- if (arglevel=0) and (in_space_define=2) then
- begin
- in_space_define:=0;
- return(SPACE_DEFINE);
- end;
- end
- else
- skip_until_eol;
-\n begin
- if in_define then
- begin
- in_space_define:=0;
- if cont_line then
- begin
- cont_line:=false;
- end
- else
- begin
- in_define:=false;
- if NotInCPlusBlock then
- return(NEW_LINE)
- else
- skip_until_eol
- end;
- end;
- end;
-\\$ begin
- if in_define then
- begin
- cont_line:=true;
- end
- else
- begin
- writeln('Unexpected wrap of line ',yylineno);
- writeln('"',yyline,'"');
- return(256);
- end;
- end;
-. begin
- writeln('Illegal character in line ',yylineno);
- writeln('"',yyline,'"');
- return(256);
- end;
-%%
-
-
-function act_token : string;
-begin
- act_token:=yytext;
-end;
-
-end.
-
-
-
-
+%{
+{
+ Copyright (c) 1998-2000 by Florian Klaempfl
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************}
+
+
+unit scan;
+
+ interface
+
+ uses
+ strings,
+ h2plexlib,h2pyacclib;
+
+ const
+ version = '1.0.0';
+
+ type
+ Char=system.char;
+ ttyp = (
+ t_id,
+ { p contains the string }
+ t_arraydef,
+ { }
+ t_pointerdef,
+ { p1 contains the definition
+ if in type overrider
+ or nothing for args
+ }
+ t_addrdef,
+
+ t_void,
+ { no field }
+ t_dec,
+ { }
+ t_declist,
+ { p1 is t_dec
+ next if exists }
+ t_memberdec,
+ { p1 is type specifier
+ p2 is declarator_list }
+ t_structdef,
+ { }
+ t_memberdeclist,
+ { p1 is memberdec
+ next is next if it exist }
+ t_procdef,
+ { }
+ t_uniondef,
+ { }
+ t_enumdef,
+ { }
+ t_enumlist,
+ { }
+ t_preop,
+ { p contains the operator string
+ p1 contains the right expr }
+ t_bop,
+ { p contains the operator string
+ p1 contains the left expr
+ p2 contains the right expr }
+ t_arrayop,
+ {
+ p1 contains the array expr
+ p2 contains the index expressions }
+ t_callop,
+ {
+ p1 contains the proc expr
+ p2 contains the index expressions }
+ t_arg,
+ {
+ p1 contain the typedef
+ p2 the declarator (t_dec)
+ }
+ t_arglist,
+ { }
+ t_funexprlist,
+ { }
+ t_exprlist,
+ { p1 contains the expr
+ next contains the next if it exists }
+ t_ifexpr,
+ { p1 contains the condition expr
+ p2 contains the if branch
+ p3 contains the else branch }
+ t_funcname,
+ { p1 contains the function dname
+ p2 contains the funexprlist
+ p3 possibly contains the return type }
+ t_typespec,
+ { p1 is the type itself
+ p2 the typecast expr }
+ t_size_specifier,
+ { p1 expr for size }
+ t_default_value,
+ { p1 expr for value }
+ t_statement_list,
+ { p1 is the statement
+ next is next if it exist }
+ t_whilenode,
+ t_fornode,
+ t_dowhilenode,
+ t_switchnode,
+ t_gotonode,
+ t_continuenode,
+ t_breaknode
+ );
+
+const
+ ttypstr: array[ttyp] of string =
+ (
+ 't_id',
+ 't_arraydef',
+ 't_pointerdef',
+ 't_addrdef',
+ 't_void',
+ 't_dec',
+ 't_declist',
+ 't_memberdec',
+ 't_structdef',
+ 't_memberdeclist',
+ 't_procdef',
+ 't_uniondef',
+ 't_enumdef',
+ 't_enumlist',
+ 't_preop',
+ 't_bop',
+ 't_arrayop',
+ 't_callop',
+ 't_arg',
+ 't_arglist',
+ 't_funexprlist',
+ 't_exprlist',
+ 't_ifexpr',
+ 't_funcname',
+ 't_typespec',
+ 't_size_specifier',
+ 't_default_value',
+ 't_statement_list',
+ 't_whilenode',
+ 't_fornode',
+ 't_dowhilenode',
+ 't_switchnode',
+ 't_gotonode',
+ 't_continuenode',
+ 't_breaknode'
+ );
+
+type
+
+ presobject = ^tresobject;
+ tresobject = object
+ typ : ttyp;
+ p : pchar;
+ next : presobject;
+ p1,p2,p3 : presobject;
+ { name of int/real, then no T prefix is required }
+ intname : boolean;
+ constructor init_no(t : ttyp);
+ constructor init_one(t : ttyp;_p1 : presobject);
+ constructor init_two(t : ttyp;_p1,_p2 : presobject);
+ constructor init_three(t : ttyp;_p1,_p2,_p3 : presobject);
+ constructor init_id(const s : string);
+ constructor init_intid(const s : string);
+ constructor init_bop(const s : string;_p1,_p2 : presobject);
+ constructor init_preop(const s : string;_p1 : presobject);
+ procedure setstr(const s:string);
+ function str : string;
+ function strlength : byte;
+ function get_copy : presobject;
+ { can this ve considered as a constant ? }
+ function is_const : boolean;
+ destructor done;
+ end;
+
+ tblocktype = (bt_type,bt_const,bt_var,bt_func,bt_no);
+
+
+ var
+ infile : string;
+ outfile : text;
+ c : char;
+ aktspace : string;
+ block_type : tblocktype;
+ commentstr: string;
+
+ const
+ in_define : boolean = false;
+ { True if define spans to the next line }
+ cont_line : boolean = false;
+ { 1 after define; 2 after the ID to print the first separating space }
+ in_space_define : byte = 0;
+ arglevel : longint = 0;
+
+ {> 1 = ifdef level in a ifdef C++ block
+ 1 = first level in an ifdef block
+ 0 = not in an ifdef block
+ -1 = in else part of ifdef block, process like we weren't in the block
+ but skip the incoming end.
+ > -1 = ifdef sublevel in an else block.
+ }
+ cplusblocklevel : LongInt = 0;
+
+
+ function yylex : integer;
+ function act_token : string;
+ procedure internalerror(i : integer);
+
+ function strpnew(const s : string) : pchar;
+
+ procedure writetree(p: presobject);
+
+
+ implementation
+
+ uses
+ h2poptions,converu;
+
+ const
+ newline = #10;
+
+
+ procedure writeentry(p: presobject; var currentlevel: integer);
+ begin
+ if assigned(p^.p1) then
+ begin
+ WriteLn(' Entry p1[',ttypstr[p^.p1^.typ],']',p^.p1^.str);
+ end;
+ if assigned(p^.p2) then
+ begin
+ WriteLn(' Entry p2[',ttypstr[p^.p2^.typ],']',p^.p2^.str);
+ end;
+ if assigned(p^.p3) then
+ begin
+ WriteLn(' Entry p3[',ttypstr[p^.p3^.typ],']',p^.p3^.str);
+ end;
+ end;
+
+ procedure writetree(p: presobject);
+ var
+ i : integer;
+ localp: presobject;
+ localp1: presobject;
+ currentlevel : integer;
+ begin
+ localp:=p;
+ currentlevel:=0;
+ while assigned(localp) do
+ begin
+ WriteLn('Entry[',ttypstr[localp^.typ],']',localp^.str);
+ case localp^.typ of
+ { Some arguments sharing the same type }
+ t_arglist:
+ begin
+ localp1:=localp;
+ while assigned(localp1) do
+ begin
+ writeentry(localp1,currentlevel);
+ localp1:=localp1^.p1;
+ end;
+ end;
+ end;
+
+ localp:=localp^.next;
+ end;
+ end;
+
+
+
+ procedure internalerror(i : integer);
+ begin
+ writeln('Internal error ',i,' in line ',yylineno);
+ halt(1);
+ end;
+
+
+ procedure commenteof;
+ begin
+ writeln('unexpected EOF inside comment at line ',yylineno);
+ end;
+
+
+ procedure copy_until_eol;
+ begin
+ c:=get_char;
+ while c<>newline do
+ begin
+ write(outfile,c);
+ c:=get_char;
+ end;
+ end;
+
+
+ procedure skip_until_eol;
+ begin
+ c:=get_char;
+ while c<>newline do
+ c:=get_char;
+ end;
+
+
+ function strpnew(const s : string) : pchar;
+ var
+ p : pchar;
+ begin
+ getmem(p,length(s)+1);
+ strpcopy(p,s);
+ strpnew:=p;
+ end;
+
+ function NotInCPlusBlock : Boolean; inline;
+ begin
+ NotInCPlusBlock := cplusblocklevel < 1;
+ end;
+
+ constructor tresobject.init_preop(const s : string;_p1 : presobject);
+ begin
+ typ:=t_preop;
+ p:=strpnew(s);
+ p1:=_p1;
+ p2:=nil;
+ p3:=nil;
+ next:=nil;
+ intname:=false;
+ end;
+
+ constructor tresobject.init_bop(const s : string;_p1,_p2 : presobject);
+ begin
+ typ:=t_bop;
+ p:=strpnew(s);
+ p1:=_p1;
+ p2:=_p2;
+ p3:=nil;
+ next:=nil;
+ intname:=false;
+ end;
+
+ constructor tresobject.init_id(const s : string);
+ begin
+ typ:=t_id;
+ p:=strpnew(s);
+ p1:=nil;
+ p2:=nil;
+ p3:=nil;
+ next:=nil;
+ intname:=false;
+ end;
+
+ constructor tresobject.init_intid(const s : string);
+ begin
+ typ:=t_id;
+ p:=strpnew(s);
+ p1:=nil;
+ p2:=nil;
+ p3:=nil;
+ next:=nil;
+ intname:=true;
+ end;
+
+ constructor tresobject.init_two(t : ttyp;_p1,_p2 : presobject);
+ begin
+ typ:=t;
+ p1:=_p1;
+ p2:=_p2;
+ p3:=nil;
+ p:=nil;
+ next:=nil;
+ intname:=false;
+ end;
+
+ constructor tresobject.init_three(t : ttyp;_p1,_p2,_p3 : presobject);
+ begin
+ typ:=t;
+ p1:=_p1;
+ p2:=_p2;
+ p3:=_p3;
+ p:=nil;
+ next:=nil;
+ intname:=false;
+ end;
+
+ constructor tresobject.init_one(t : ttyp;_p1 : presobject);
+ begin
+ typ:=t;
+ p1:=_p1;
+ p2:=nil;
+ p3:=nil;
+ next:=nil;
+ p:=nil;
+ intname:=false;
+ end;
+
+ constructor tresobject.init_no(t : ttyp);
+ begin
+ typ:=t;
+ p:=nil;
+ p1:=nil;
+ p2:=nil;
+ p3:=nil;
+ next:=nil;
+ intname:=false;
+ end;
+
+ procedure tresobject.setstr(const s : string);
+ begin
+ if assigned(p) then
+ strdispose(p);
+ p:=strpnew(s);
+ end;
+
+ function tresobject.str : string;
+ begin
+ str:=strpas(p);
+ end;
+
+ function tresobject.strlength : byte;
+ begin
+ if assigned(p) then
+ strlength:=strlen(p)
+ else
+ strlength:=0;
+ end;
+
+ { can this ve considered as a constant ? }
+ function tresobject.is_const : boolean;
+ begin
+ case typ of
+ t_id,t_void :
+ is_const:=true;
+ t_preop :
+ is_const:= ((str='-') or (str=' not ')) and p1^.is_const;
+ t_bop :
+ is_const:= p2^.is_const and p1^.is_const;
+ else
+ is_const:=false;
+ end;
+ end;
+
+ function tresobject.get_copy : presobject;
+ var
+ newres : presobject;
+ begin
+ newres:=new(presobject,init_no(typ));
+ newres^.intname:=intname;
+ if assigned(p) then
+ newres^.p:=strnew(p);
+ if assigned(p1) then
+ newres^.p1:=p1^.get_copy;
+ if assigned(p2) then
+ newres^.p2:=p2^.get_copy;
+ if assigned(p3) then
+ newres^.p3:=p3^.get_copy;
+ if assigned(next) then
+ newres^.next:=next^.get_copy;
+ get_copy:=newres;
+ end;
+
+ destructor tresobject.done;
+ begin
+ (* writeln('disposing ',byte(typ)); *)
+ if assigned(p)then strdispose(p);
+ if assigned(p1) then
+ dispose(p1,done);
+ if assigned(p2) then
+ dispose(p2,done);
+ if assigned(p3) then
+ dispose(p3,done);
+ if assigned(next) then
+ dispose(next,done);
+ end;
+%}
+
+D [0-9]
+%%
+
+"/*" if NotInCPlusBlock then
+ begin
+ if not stripcomment then
+ write(outfile,aktspace,'{');
+ repeat
+ c:=get_char;
+ case c of
+ '*' :
+ begin
+ c:=get_char;
+ if c='/' then
+ begin
+ if not stripcomment then
+ write(outfile,' }');
+ c:=get_char;
+ if c=newline then
+ writeln(outfile);
+ unget_char(c);
+ flush(outfile);
+ exit;
+ end
+ else
+ begin
+ if not stripcomment then
+ write(outfile,'*');
+ unget_char(c)
+ end;
+ end;
+ newline :
+ begin
+ if not stripcomment then
+ begin
+ writeln(outfile);
+ write(outfile,aktspace);
+ end;
+ end;
+ { Don't write this thing out, to
+ avoid nested comments.
+ }
+ '{','}' :
+ begin
+ end;
+ #0 :
+ commenteof;
+ else
+ if not stripcomment then
+ write(outfile,c);
+ end;
+ until false;
+ flush(outfile);
+ end
+ else
+ skip_until_eol;
+"//" if NotInCPlusBlock then
+ begin
+ commentstr:='';
+ if (in_define) and not (stripcomment) then
+ begin
+ commentstr:='{';
+ end
+ else
+ If not stripcomment then
+ write(outfile,aktspace,'{');
+
+ repeat
+ c:=get_char;
+ case c of
+ newline :
+ begin
+ unget_char(c);
+ if not stripcomment then
+ begin
+ if in_define then
+ begin
+ commentstr:=commentstr+' }';
+ end
+ else
+ begin
+ write(outfile,' }');
+ writeln(outfile);
+ end;
+ end;
+ flush(outfile);
+ exit;
+ end;
+ { Don't write this comment out,
+ to avoid nested comment problems
+ }
+ '{','}' :
+ begin
+ end;
+ #0 :
+ commenteof;
+ else
+ if not stripcomment then
+ begin
+ if in_define then
+ begin
+ commentstr:=commentstr+c;
+ end
+ else
+ write(outfile,c);
+ end;
+ end;
+ until false;
+ flush(outfile);
+ end
+ else
+ skip_until_eol;
+\"[^\"]*\" if NotInCPlusBlock then return(CSTRING) else skip_until_eol;
+\'[^\']*\' if NotInCPlusBlock then return(CSTRING) else skip_until_eol;
+"L"\"[^\"]*\" if NotInCPlusBlock then
+ begin
+ if win32headers then
+ return(CSTRING)
+ else
+ return(256);
+ end
+ else skip_until_eol;
+"L"\'[^\']*\' if NotInCPlusBlock then
+ begin
+ if win32headers then
+ return(CSTRING)
+ else
+ return(256);
+ end
+ else
+ skip_until_eol;
+{D}+[Uu]?[Ll]?[Ll]? if NotInCPlusBlock then
+ begin
+ while yytext[length(yytext)] in ['L','U','l','u'] do
+ Delete(yytext,length(yytext),1);
+ return(NUMBER);
+ end
+ else skip_until_eol;
+"0x"[0-9A-Fa-f]*[Uu]?[Ll]?[Ll]?
+ if NotInCPlusBlock then
+ begin
+ (* handle pre- and postfixes *)
+ if copy(yytext,1,2)='0x' then
+ begin
+ delete(yytext,1,2);
+ yytext:='$'+yytext;
+ end;
+ while yytext[length(yytext)] in ['L','U','l','u'] do
+ Delete(yytext,length(yytext),1);
+ return(NUMBER);
+ end
+ else
+ skip_until_eol;
+{D}+(\.{D}+)?([Ee][+-]?{D}+)?
+ if NotInCPlusBlock then
+ begin
+ return(NUMBER);
+ end
+ else
+ skip_until_eol;
+"->" if NotInCPlusBlock then
+ begin
+ if in_define then
+ return(DEREF)
+ else
+ return(256);
+ end
+ else
+ skip_until_eol;
+"-" if NotInCPlusBlock then return(MINUS) else skip_until_eol;
+"==" if NotInCPlusBlock then return(EQUAL) else skip_until_eol;
+"!=" if NotInCPlusBlock then return(UNEQUAL) else skip_until_eol;
+">=" if NotInCPlusBlock then return(GTE) else skip_until_eol;
+"<=" if NotInCPlusBlock then return(LTE) else skip_until_eol;
+">>" if NotInCPlusBlock then return(_SHR) else skip_until_eol;
+"##" if NotInCPlusBlock then return(STICK) else skip_until_eol;
+"<<" if NotInCPlusBlock then return(_SHL) else skip_until_eol;
+">" if NotInCPlusBlock then return(GT) else skip_until_eol;
+"<" if NotInCPlusBlock then return(LT) else skip_until_eol;
+"|" if NotInCPlusBlock then return(_OR) else skip_until_eol;
+"&" if NotInCPlusBlock then return(_AND) else skip_until_eol;
+"~" if NotInCPlusBlock then return(_NOT) else skip_until_eol; (* inverse, but handled as not operation *)
+"!" if NotInCPlusBlock then return(_NOT) else skip_until_eol;
+"/" if NotInCPlusBlock then return(_SLASH) else skip_until_eol;
+"+" if NotInCPlusBlock then return(_PLUS) else skip_until_eol;
+"?" if NotInCPlusBlock then return(QUESTIONMARK) else skip_until_eol;
+":" if NotInCPlusBlock then return(COLON) else skip_until_eol;
+"," if NotInCPlusBlock then return(COMMA) else skip_until_eol;
+"[" if NotInCPlusBlock then return(LECKKLAMMER) else skip_until_eol;
+"]" if NotInCPlusBlock then return(RECKKLAMMER) else skip_until_eol;
+"(" if NotInCPlusBlock then
+ begin
+ inc(arglevel);
+ return(LKLAMMER);
+ end
+ else
+ skip_until_eol;
+")" if NotInCPlusBlock then
+ begin
+ dec(arglevel);
+ return(RKLAMMER);
+ end
+ else
+ skip_until_eol;
+"*" if NotInCPlusBlock then return(STAR) else skip_until_eol;
+"..." if NotInCPlusBlock then return(ELLIPSIS) else skip_until_eol;
+"." if NotInCPlusBlock then
+ if in_define then
+ return(POINT)
+ else
+ return(256);
+"=" if NotInCPlusBlock then return(_ASSIGN) else skip_until_eol;
+"extern" if NotInCPlusBlock then return(EXTERN) else skip_until_eol;
+"STDCALL" if NotInCPlusBlock then
+ begin
+ if Win32headers then
+ return(STDCALL)
+ else
+ return(ID);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"CDECL" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(CDECL);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"PASCAL" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(PASCAL);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"PACKED" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(_PACKED);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"WINAPI" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(WINAPI);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"SYS_TRAP" if NotInCPlusBlock then
+ begin
+ if not palmpilot then
+ return(ID)
+ else
+ return(SYS_TRAP);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"WINGDIAPI" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(WINGDIAPI);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"CALLBACK" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(CALLBACK);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"EXPENTRY" if NotInCPlusBlock then
+ begin
+ if not Win32headers then
+ return(ID)
+ else
+ return(CALLBACK);
+ end
+ else
+ begin
+ skip_until_eol;
+ end;
+"void" if NotInCPlusBlock then return(VOID) else skip_until_eol;
+"VOID" if NotInCPlusBlock then return(VOID) else skip_until_eol;
+"#ifdef"[ \t]*"__cplusplus"[ \t]*\n"extern \"C\" {"\n"#endif"
+ begin
+ if not stripinfo then
+ writeln(outfile,'{ C++ extern C conditionnal removed }');
+ end;
+"#ifdef"[ \t]*"cplusplus"[ \t]*\n"extern \"C\" {"\n"#endif"
+ begin
+ if not stripinfo then
+ writeln(outfile,'{ C++ extern C conditionnal removed }');
+ end;
+"#ifdef"[ \t]*"__cplusplus"[ \t]*\n"}"\n"#endif"
+ begin
+ if not stripinfo then
+ writeln(outfile,'{ C++ end of extern C conditionnal removed }');
+ end;
+"#ifdef"[ \t]*"cplusplus"[ \t]*\n"}"\n"#endif"
+ begin
+ if not stripinfo then
+ writeln(outfile,'{ C++ end of extern C conditionnal removed }');
+ end;
+"#ifdef"[ \t]*"cplusplus"[ \t]*
+ begin
+ Inc(cplusblocklevel);
+ end;
+"#ifdef"[ \t]*"__cplusplus"[ \t]*
+ begin
+ Inc(cplusblocklevel);
+ end;
+"#ifdef"[ \t]
+ begin
+ if cplusblocklevel > 0 then
+ Inc(cplusblocklevel)
+ else
+ begin
+ if cplusblocklevel < 0 then
+ Dec(cplusblocklevel);
+ write(outfile,'{$ifdef ');
+ copy_until_eol;
+ writeln(outfile,'}');
+ flush(outfile);
+ end;
+ end;
+"#"[ \t]*"else" begin
+ if cplusblocklevel < -1 then
+ begin
+ writeln(outfile,'{$else}');
+ block_type:=bt_no;
+ flush(outfile);
+ end
+ else
+ case cplusblocklevel of
+ 0 :
+ begin
+ writeln(outfile,'{$else}');
+ block_type:=bt_no;
+ flush(outfile);
+ end;
+ 1 : cplusblocklevel := -1;
+ -1 : cplusblocklevel := 1;
+ end;
+ end;
+"#"[ \t]*"endif" begin
+ if cplusblocklevel > 0 then
+ begin
+ Dec(cplusblocklevel);
+ end
+ else
+ begin
+ case cplusblocklevel of
+ 0 : begin
+ writeln(outfile,'{$endif}');
+ block_type:=bt_no;
+ flush(outfile);
+ end;
+ -1 : begin
+ cplusblocklevel :=0;
+ end
+ else
+ inc(cplusblocklevel);
+ end;
+ end;
+
+ end;
+"#"[ \t]*"elif" begin
+ if cplusblocklevel < -1 then
+ begin
+ if not stripinfo then
+ write(outfile,'(*** was #elif ****)');
+ write(outfile,'{$else');
+ copy_until_eol;
+ writeln(outfile,'}');
+ block_type:=bt_no;
+ flush(outfile);
+ end
+ else
+ case cplusblocklevel of
+ 0 :
+ begin
+ if not stripinfo then
+ write(outfile,'(*** was #elif ****)');
+ write(outfile,'{$else');
+ copy_until_eol;
+ writeln(outfile,'}');
+ block_type:=bt_no;
+ flush(outfile);
+ end;
+ 1 : cplusblocklevel := -1;
+ -1 : cplusblocklevel := 1;
+ end;
+ end;
+"#"[ \t]*"undef" begin
+ write(outfile,'{$undef');
+ copy_until_eol;
+ writeln(outfile,'}');
+ flush(outfile);
+ end;
+"#"[ \t]*"error" begin
+ write(outfile,'{$error');
+ copy_until_eol;
+ writeln(outfile,'}');
+ flush(outfile);
+ end;
+"#"[ \t]*"include" if NotInCPlusBlock then
+ begin
+ write(outfile,'{$include');
+ copy_until_eol;
+ writeln(outfile,'}');
+ flush(outfile);
+ block_type:=bt_no;
+ end
+ else
+ skip_until_eol;
+"#"[ \t]*"if" begin
+ if cplusblocklevel > 0 then
+ Inc(cplusblocklevel)
+ else
+ begin
+ if cplusblocklevel < 0 then
+ Dec(cplusblocklevel);
+ write(outfile,'{$if');
+ copy_until_eol;
+ writeln(outfile,'}');
+ flush(outfile);
+ block_type:=bt_no;
+ end;
+ end;
+"# "[0-9]+" " if NotInCPlusBlock then
+ (* preprocessor line info *)
+ repeat
+ c:=get_char;
+ case c of
+ newline :
+ begin
+ unget_char(c);
+ exit;
+ end;
+ #0 :
+ commenteof;
+ end;
+ until false
+ else
+ skip_until_eol;
+"#"[ \t]*"pragma" begin
+ if not stripinfo then
+ begin
+ write(outfile,'(** unsupported pragma');
+ write(outfile,'#pragma');
+ copy_until_eol;
+ writeln(outfile,'*)');
+ flush(outfile);
+ end
+ else
+ skip_until_eol;
+ block_type:=bt_no;
+ end;
+"#"[ \t]*"define" if NotInCPlusBlock then
+ begin
+ commentstr:='';
+ in_define:=true;
+ in_space_define:=1;
+ return(DEFINE);
+ end
+ else
+ skip_until_eol;
+"char" if NotInCPlusBlock then return(_CHAR) else skip_until_eol;
+"union" if NotInCPlusBlock then return(UNION) else skip_until_eol;
+"enum" if NotInCPlusBlock then return(ENUM) else skip_until_eol;
+"struct" if NotInCPlusBlock then return(STRUCT) else skip_until_eol;
+"{" if NotInCPlusBlock then return(LGKLAMMER) else skip_until_eol;
+"}" if NotInCPlusBlock then return(RGKLAMMER) else skip_until_eol;
+"typedef" if NotInCPlusBlock then return(TYPEDEF) else skip_until_eol;
+"int" if NotInCPlusBlock then return(INT) else skip_until_eol;
+"short" if NotInCPlusBlock then return(SHORT) else skip_until_eol;
+"long" if NotInCPlusBlock then return(LONG) else skip_until_eol;
+"signed" if NotInCPlusBlock then return(SIGNED) else skip_until_eol;
+"unsigned" if NotInCPlusBlock then return(UNSIGNED) else skip_until_eol;
+"__int8" if NotInCPlusBlock then return(INT8) else skip_until_eol;
+"__int16" if NotInCPlusBlock then return(INT16) else skip_until_eol;
+"__int32" if NotInCPlusBlock then return(INT32) else skip_until_eol;
+"__int64" if NotInCPlusBlock then return(INT64) else skip_until_eol;
+"int8" if NotInCPlusBlock then return(INT8) else skip_until_eol;
+"int16" if NotInCPlusBlock then return(INT16) else skip_until_eol;
+"int32" if NotInCPlusBlock then return(INT32) else skip_until_eol;
+"int64" if NotInCPlusBlock then return(INT64) else skip_until_eol;
+"float" if NotInCPlusBlock then return(FLOAT) else skip_until_eol;
+"const" if NotInCPlusBlock then return(_CONST) else skip_until_eol;
+"CONST" if NotInCPlusBlock then return(_CONST) else skip_until_eol;
+"FAR" if NotInCPlusBlock then return(_FAR) else skip_until_eol;
+"far" if NotInCPlusBlock then return(_FAR) else skip_until_eol;
+"NEAR" if NotInCPlusBlock then return(_NEAR) else skip_until_eol;
+"near" if NotInCPlusBlock then return(_NEAR) else skip_until_eol;
+"HUGE" if NotInCPlusBlock then return(_HUGE) else skip_until_eol;
+"huge" if NotInCPlusBlock then return(_HUGE) else skip_until_eol;
+"while" if NotInCPlusBlock then return(_WHILE) else skip_until_eol;
+[A-Za-z_][A-Za-z0-9_]* if NotInCPlusBlock then
+ begin
+ if in_space_define=1 then
+ in_space_define:=2;
+ return(ID);
+ end
+ else
+ skip_until_eol;
+";" if NotInCPlusBlock then return(SEMICOLON) else skip_until_eol;
+[ \f\t] if NotInCPlusBlock then
+ begin
+ if (arglevel=0) and (in_space_define=2) then
+ begin
+ in_space_define:=0;
+ return(SPACE_DEFINE);
+ end;
+ end
+ else
+ skip_until_eol;
+\n begin
+ if in_define then
+ begin
+ in_space_define:=0;
+ if cont_line then
+ begin
+ cont_line:=false;
+ end
+ else
+ begin
+ in_define:=false;
+ if NotInCPlusBlock then
+ return(NEW_LINE)
+ else
+ skip_until_eol
+ end;
+ end;
+ end;
+\\$ begin
+ if in_define then
+ begin
+ cont_line:=true;
+ end
+ else
+ begin
+ writeln('Unexpected wrap of line ',yylineno);
+ writeln('"',yyline,'"');
+ return(256);
+ end;
+ end;
+. begin
+ writeln('Illegal character in line ',yylineno);
+ writeln('"',yyline,'"');
+ return(256);
+ end;
+%%
+
+
+function act_token : string;
+begin
+ act_token:=yytext;
+end;
+
+end.
+
+
+
+
diff --git a/utils/h2pas/scan.pas b/utils/h2pas/scan.pas
index d27473a552..d7105e449d 100644
--- a/utils/h2pas/scan.pas
+++ b/utils/h2pas/scan.pas
@@ -512,11 +512,9 @@ begin
if not stripcomment then
write(outfile,' }');
c:=get_char;
- if (c=newline) then
- begin
+ if c=newline then
writeln(outfile);
- unget_char(c);
- end;
+ unget_char(c);
flush(outfile);
exit;
end
@@ -641,7 +639,7 @@ begin
end
else skip_until_eol;
8:
-
+
if NotInCPlusBlock then
begin
(* handle pre- and postfixes *)
@@ -1191,10 +1189,10 @@ type YYTRec = record
const
-yynmarks = 343;
-yynmatches = 343;
-yyntrans = 642;
-yynstates = 369;
+yynmarks = 345;
+yynmatches = 345;
+yyntrans = 644;
+yynstates = 371;
yyk : array [1..yynmarks] of Integer = (
{ 0: }
@@ -1476,17 +1474,18 @@ yyk : array [1..yynmarks] of Integer = (
{ 120: }
6,
{ 121: }
- 9,
+ 7,
{ 122: }
- { 123: }
9,
+ { 123: }
{ 124: }
- 8,
+ 9,
{ 125: }
8,
{ 126: }
- 63,
+ 8,
{ 127: }
+ 63,
{ 128: }
{ 129: }
{ 130: }
@@ -1496,9 +1495,8 @@ yyk : array [1..yynmarks] of Integer = (
{ 134: }
{ 135: }
{ 136: }
- 35,
{ 137: }
- 97,
+ 35,
{ 138: }
97,
{ 139: }
@@ -1540,21 +1538,21 @@ yyk : array [1..yynmarks] of Integer = (
{ 157: }
97,
{ 158: }
- 74,
97,
{ 159: }
+ 74,
97,
{ 160: }
97,
{ 161: }
97,
{ 162: }
- 91,
97,
{ 163: }
- 90,
+ 91,
97,
{ 164: }
+ 90,
97,
{ 165: }
97,
@@ -1565,26 +1563,26 @@ yyk : array [1..yynmarks] of Integer = (
{ 168: }
97,
{ 169: }
+ 97,
{ 170: }
+ 8,
{ 171: }
- 63,
{ 172: }
{ 173: }
+ 63,
{ 174: }
{ 175: }
{ 176: }
{ 177: }
- 64,
{ 178: }
{ 179: }
+ 64,
{ 180: }
- 97,
{ 181: }
- 69,
- 97,
{ 182: }
97,
{ 183: }
+ 69,
97,
{ 184: }
97,
@@ -1603,17 +1601,17 @@ yyk : array [1..yynmarks] of Integer = (
{ 191: }
97,
{ 192: }
- 48,
97,
{ 193: }
- 49,
97,
{ 194: }
- 67,
+ 48,
97,
{ 195: }
+ 49,
97,
{ 196: }
+ 67,
97,
{ 197: }
97,
@@ -1626,63 +1624,63 @@ yyk : array [1..yynmarks] of Integer = (
{ 201: }
97,
{ 202: }
- 83,
97,
{ 203: }
97,
{ 204: }
+ 83,
97,
{ 205: }
97,
{ 206: }
- 76,
97,
{ 207: }
97,
{ 208: }
+ 76,
97,
{ 209: }
- 92,
97,
{ 210: }
- 93,
97,
{ 211: }
- 94,
+ 92,
97,
{ 212: }
- 95,
+ 93,
97,
{ 213: }
+ 94,
97,
{ 214: }
+ 95,
+ 97,
{ 215: }
+ 97,
{ 216: }
- 57,
{ 217: }
- 59,
{ 218: }
+ 57,
{ 219: }
+ 59,
{ 220: }
{ 221: }
{ 222: }
{ 223: }
- 97,
{ 224: }
- 97,
{ 225: }
97,
{ 226: }
- 40,
97,
{ 227: }
97,
{ 228: }
- 89,
+ 40,
97,
{ 229: }
97,
{ 230: }
+ 89,
97,
{ 231: }
97,
@@ -1691,105 +1689,105 @@ yyk : array [1..yynmarks] of Integer = (
{ 233: }
97,
{ 234: }
- 88,
97,
{ 235: }
- 68,
97,
{ 236: }
+ 88,
97,
{ 237: }
+ 68,
97,
{ 238: }
- 75,
97,
{ 239: }
97,
{ 240: }
+ 75,
97,
{ 241: }
- 84,
97,
{ 242: }
- 85,
97,
{ 243: }
- 86,
+ 84,
97,
{ 244: }
+ 85,
97,
{ 245: }
- 87,
+ 86,
97,
{ 246: }
- 96,
97,
{ 247: }
+ 87,
+ 97,
{ 248: }
+ 96,
+ 97,
{ 249: }
- 58,
{ 250: }
- 61,
{ 251: }
- 60,
+ 58,
{ 252: }
+ 61,
{ 253: }
+ 60,
{ 254: }
- 38,
- 97,
{ 255: }
- 97,
{ 256: }
+ 38,
97,
{ 257: }
97,
{ 258: }
- 41,
97,
{ 259: }
- 42,
97,
{ 260: }
- 43,
+ 41,
97,
{ 261: }
+ 42,
97,
{ 262: }
+ 43,
97,
{ 263: }
97,
{ 264: }
- 70,
97,
{ 265: }
- 77,
97,
{ 266: }
+ 70,
97,
{ 267: }
- 79,
+ 77,
97,
{ 268: }
97,
{ 269: }
+ 79,
97,
{ 270: }
97,
{ 271: }
- 56,
+ 97,
{ 272: }
+ 97,
{ 273: }
+ 56,
{ 274: }
{ 275: }
- 65,
{ 276: }
- 66,
{ 277: }
- 39,
- 97,
+ 65,
{ 278: }
- 97,
+ 66,
{ 279: }
+ 39,
97,
{ 280: }
97,
@@ -1798,43 +1796,45 @@ yyk : array [1..yynmarks] of Integer = (
{ 282: }
97,
{ 283: }
- 73,
97,
{ 284: }
- 80,
97,
{ 285: }
- 81,
+ 73,
97,
{ 286: }
- 82,
+ 80,
97,
{ 287: }
+ 81,
+ 97,
{ 288: }
+ 82,
+ 97,
{ 289: }
{ 290: }
- 62,
{ 291: }
- 44,
- 97,
{ 292: }
- 46,
- 97,
+ 62,
{ 293: }
+ 44,
97,
{ 294: }
- 47,
+ 46,
97,
{ 295: }
- 78,
97,
{ 296: }
+ 47,
+ 97,
{ 297: }
- { 298: }
- 45,
+ 78,
97,
+ { 298: }
{ 299: }
{ 300: }
+ 45,
+ 97,
{ 301: }
{ 302: }
{ 303: }
@@ -1845,13 +1845,13 @@ yyk : array [1..yynmarks] of Integer = (
{ 308: }
{ 309: }
{ 310: }
- 54,
{ 311: }
{ 312: }
+ 54,
{ 313: }
- 55,
{ 314: }
{ 315: }
+ 55,
{ 316: }
{ 317: }
{ 318: }
@@ -1879,15 +1879,15 @@ yyk : array [1..yynmarks] of Integer = (
{ 340: }
{ 341: }
{ 342: }
- 53,
{ 343: }
{ 344: }
+ 53,
{ 345: }
{ 346: }
{ 347: }
- 52,
{ 348: }
{ 349: }
+ 52,
{ 350: }
{ 351: }
{ 352: }
@@ -1905,9 +1905,11 @@ yyk : array [1..yynmarks] of Integer = (
{ 364: }
{ 365: }
{ 366: }
- 51,
{ 367: }
{ 368: }
+ 51,
+ { 369: }
+ { 370: }
50
);
@@ -2191,17 +2193,18 @@ yym : array [1..yynmatches] of Integer = (
{ 120: }
6,
{ 121: }
- 9,
+ 7,
{ 122: }
-{ 123: }
9,
+{ 123: }
{ 124: }
- 8,
+ 9,
{ 125: }
8,
{ 126: }
- 63,
+ 8,
{ 127: }
+ 63,
{ 128: }
{ 129: }
{ 130: }
@@ -2211,9 +2214,8 @@ yym : array [1..yynmatches] of Integer = (
{ 134: }
{ 135: }
{ 136: }
- 35,
{ 137: }
- 97,
+ 35,
{ 138: }
97,
{ 139: }
@@ -2255,21 +2257,21 @@ yym : array [1..yynmatches] of Integer = (
{ 157: }
97,
{ 158: }
- 74,
97,
{ 159: }
+ 74,
97,
{ 160: }
97,
{ 161: }
97,
{ 162: }
- 91,
97,
{ 163: }
- 90,
+ 91,
97,
{ 164: }
+ 90,
97,
{ 165: }
97,
@@ -2280,26 +2282,26 @@ yym : array [1..yynmatches] of Integer = (
{ 168: }
97,
{ 169: }
+ 97,
{ 170: }
+ 8,
{ 171: }
- 63,
{ 172: }
{ 173: }
+ 63,
{ 174: }
{ 175: }
{ 176: }
{ 177: }
- 64,
{ 178: }
{ 179: }
+ 64,
{ 180: }
- 97,
{ 181: }
- 69,
- 97,
{ 182: }
97,
{ 183: }
+ 69,
97,
{ 184: }
97,
@@ -2318,17 +2320,17 @@ yym : array [1..yynmatches] of Integer = (
{ 191: }
97,
{ 192: }
- 48,
97,
{ 193: }
- 49,
97,
{ 194: }
- 67,
+ 48,
97,
{ 195: }
+ 49,
97,
{ 196: }
+ 67,
97,
{ 197: }
97,
@@ -2341,63 +2343,63 @@ yym : array [1..yynmatches] of Integer = (
{ 201: }
97,
{ 202: }
- 83,
97,
{ 203: }
97,
{ 204: }
+ 83,
97,
{ 205: }
97,
{ 206: }
- 76,
97,
{ 207: }
97,
{ 208: }
+ 76,
97,
{ 209: }
- 92,
97,
{ 210: }
- 93,
97,
{ 211: }
- 94,
+ 92,
97,
{ 212: }
- 95,
+ 93,
97,
{ 213: }
+ 94,
97,
{ 214: }
+ 95,
+ 97,
{ 215: }
+ 97,
{ 216: }
- 57,
{ 217: }
- 59,
{ 218: }
+ 57,
{ 219: }
+ 59,
{ 220: }
{ 221: }
{ 222: }
{ 223: }
- 97,
{ 224: }
- 97,
{ 225: }
97,
{ 226: }
- 40,
97,
{ 227: }
97,
{ 228: }
- 89,
+ 40,
97,
{ 229: }
97,
{ 230: }
+ 89,
97,
{ 231: }
97,
@@ -2406,105 +2408,105 @@ yym : array [1..yynmatches] of Integer = (
{ 233: }
97,
{ 234: }
- 88,
97,
{ 235: }
- 68,
97,
{ 236: }
+ 88,
97,
{ 237: }
+ 68,
97,
{ 238: }
- 75,
97,
{ 239: }
97,
{ 240: }
+ 75,
97,
{ 241: }
- 84,
97,
{ 242: }
- 85,
97,
{ 243: }
- 86,
+ 84,
97,
{ 244: }
+ 85,
97,
{ 245: }
- 87,
+ 86,
97,
{ 246: }
- 96,
97,
{ 247: }
+ 87,
+ 97,
{ 248: }
+ 96,
+ 97,
{ 249: }
- 58,
{ 250: }
- 61,
{ 251: }
- 60,
+ 58,
{ 252: }
+ 61,
{ 253: }
+ 60,
{ 254: }
- 38,
- 97,
{ 255: }
- 97,
{ 256: }
+ 38,
97,
{ 257: }
97,
{ 258: }
- 41,
97,
{ 259: }
- 42,
97,
{ 260: }
- 43,
+ 41,
97,
{ 261: }
+ 42,
97,
{ 262: }
+ 43,
97,
{ 263: }
97,
{ 264: }
- 70,
97,
{ 265: }
- 77,
97,
{ 266: }
+ 70,
97,
{ 267: }
- 79,
+ 77,
97,
{ 268: }
97,
{ 269: }
+ 79,
97,
{ 270: }
97,
{ 271: }
- 56,
+ 97,
{ 272: }
+ 97,
{ 273: }
+ 56,
{ 274: }
{ 275: }
- 65,
{ 276: }
- 66,
{ 277: }
- 39,
- 97,
+ 65,
{ 278: }
- 97,
+ 66,
{ 279: }
+ 39,
97,
{ 280: }
97,
@@ -2513,43 +2515,45 @@ yym : array [1..yynmatches] of Integer = (
{ 282: }
97,
{ 283: }
- 73,
97,
{ 284: }
- 80,
97,
{ 285: }
- 81,
+ 73,
97,
{ 286: }
- 82,
+ 80,
97,
{ 287: }
+ 81,
+ 97,
{ 288: }
+ 82,
+ 97,
{ 289: }
{ 290: }
- 62,
{ 291: }
- 44,
- 97,
{ 292: }
- 46,
- 97,
+ 62,
{ 293: }
+ 44,
97,
{ 294: }
- 47,
+ 46,
97,
{ 295: }
- 78,
97,
{ 296: }
+ 47,
+ 97,
{ 297: }
-{ 298: }
- 45,
+ 78,
97,
+{ 298: }
{ 299: }
{ 300: }
+ 45,
+ 97,
{ 301: }
{ 302: }
{ 303: }
@@ -2560,13 +2564,13 @@ yym : array [1..yynmatches] of Integer = (
{ 308: }
{ 309: }
{ 310: }
- 54,
{ 311: }
{ 312: }
+ 54,
{ 313: }
- 55,
{ 314: }
{ 315: }
+ 55,
{ 316: }
{ 317: }
{ 318: }
@@ -2594,15 +2598,15 @@ yym : array [1..yynmatches] of Integer = (
{ 340: }
{ 341: }
{ 342: }
- 53,
{ 343: }
{ 344: }
+ 53,
{ 345: }
{ 346: }
{ 347: }
- 52,
{ 348: }
{ 349: }
+ 52,
{ 350: }
{ 351: }
{ 352: }
@@ -2620,9 +2624,11 @@ yym : array [1..yynmatches] of Integer = (
{ 364: }
{ 365: }
{ 366: }
- 51,
{ 367: }
{ 368: }
+ 51,
+{ 369: }
+{ 370: }
50
);
@@ -2915,15 +2921,16 @@ yyt : array [1..yyntrans] of YYTrec = (
{ 67: }
( cc: [ 'L','l' ]; s: 68),
{ 68: }
+ ( cc: [ 'L','l' ]; s: 121),
{ 69: }
- ( cc: [ '0'..'9' ]; s: 121),
+ ( cc: [ '0'..'9' ]; s: 122),
{ 70: }
- ( cc: [ '+','-' ]; s: 122),
- ( cc: [ '0'..'9' ]; s: 123),
+ ( cc: [ '+','-' ]; s: 123),
+ ( cc: [ '0'..'9' ]; s: 124),
{ 71: }
( cc: [ '0'..'9','A'..'F','a'..'f' ]; s: 71),
- ( cc: [ 'L','l' ]; s: 125),
- ( cc: [ 'U','u' ]; s: 124),
+ ( cc: [ 'L','l' ]; s: 126),
+ ( cc: [ 'U','u' ]; s: 125),
{ 72: }
{ 73: }
{ 74: }
@@ -2933,715 +2940,718 @@ yyt : array [1..yyntrans] of YYTrec = (
{ 78: }
{ 79: }
{ 80: }
- ( cc: [ 'f' ]; s: 126),
- ( cc: [ 'n' ]; s: 127),
+ ( cc: [ 'f' ]; s: 127),
+ ( cc: [ 'n' ]; s: 128),
{ 81: }
( cc: [ #9,' ' ]; s: 81),
( cc: [ 'd' ]; s: 86),
( cc: [ 'e' ]; s: 82),
- ( cc: [ 'i' ]; s: 128),
+ ( cc: [ 'i' ]; s: 129),
( cc: [ 'p' ]; s: 85),
( cc: [ 'u' ]; s: 83),
{ 82: }
- ( cc: [ 'l' ]; s: 129),
- ( cc: [ 'n' ]; s: 130),
- ( cc: [ 'r' ]; s: 131),
+ ( cc: [ 'l' ]; s: 130),
+ ( cc: [ 'n' ]; s: 131),
+ ( cc: [ 'r' ]; s: 132),
{ 83: }
- ( cc: [ 'n' ]; s: 132),
+ ( cc: [ 'n' ]; s: 133),
{ 84: }
( cc: [ #9,' ' ]; s: 81),
- ( cc: [ '0'..'9' ]; s: 133),
+ ( cc: [ '0'..'9' ]; s: 134),
( cc: [ 'd' ]; s: 86),
( cc: [ 'e' ]; s: 82),
- ( cc: [ 'i' ]; s: 128),
+ ( cc: [ 'i' ]; s: 129),
( cc: [ 'p' ]; s: 85),
( cc: [ 'u' ]; s: 83),
{ 85: }
- ( cc: [ 'r' ]; s: 134),
+ ( cc: [ 'r' ]; s: 135),
{ 86: }
- ( cc: [ 'e' ]; s: 135),
+ ( cc: [ 'e' ]; s: 136),
{ 87: }
- ( cc: [ '.' ]; s: 136),
+ ( cc: [ '.' ]; s: 137),
{ 88: }
( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 137),
+ ( cc: [ 't' ]; s: 138),
{ 89: }
( cc: [ '0'..'9','A'..'Z','_','a'..'t','v'..'z' ]; s: 65),
- ( cc: [ 'u' ]; s: 138),
+ ( cc: [ 'u' ]; s: 139),
{ 90: }
( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'D' ]; s: 139),
+ ( cc: [ 'D' ]; s: 140),
{ 91: }
( cc: [ '0'..'9','A'..'R','T'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'S' ]; s: 140),
+ ( cc: [ 'S' ]; s: 141),
{ 92: }
( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'E' ]; s: 141),
+ ( cc: [ 'E' ]; s: 142),
{ 93: }
( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'L' ]; s: 142),
+ ( cc: [ 'L' ]; s: 143),
{ 94: }
( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'N' ]; s: 143),
+ ( cc: [ 'N' ]; s: 144),
{ 95: }
( cc: [ '0'..'9','A','B','D'..'R','T'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'C' ]; s: 145),
- ( cc: [ 'S' ]; s: 144),
+ ( cc: [ 'C' ]; s: 146),
+ ( cc: [ 'S' ]; s: 145),
{ 96: }
( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'N' ]; s: 146),
+ ( cc: [ 'N' ]; s: 147),
{ 97: }
( cc: [ '0'..'9','A'..'O','Q'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'P' ]; s: 147),
+ ( cc: [ 'P' ]; s: 148),
{ 98: }
( cc: [ '0'..'9','A'..'Z','_','a'..'h','j'..'z' ]; s: 65),
- ( cc: [ 'i' ]; s: 148),
+ ( cc: [ 'i' ]; s: 149),
{ 99: }
( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'I' ]; s: 149),
+ ( cc: [ 'I' ]; s: 150),
{ 100: }
( cc: [ '0'..'9','A'..'Z','_','b'..'z' ]; s: 65),
- ( cc: [ 'a' ]; s: 150),
+ ( cc: [ 'a' ]; s: 151),
{ 101: }
( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 151),
+ ( cc: [ 'n' ]; s: 152),
{ 102: }
( cc: [ '0'..'9','A'..'Z','_','a'..'h','j'..'r','t'..'z' ]; s: 65),
- ( cc: [ 'i' ]; s: 152),
- ( cc: [ 's' ]; s: 153),
+ ( cc: [ 'i' ]; s: 153),
+ ( cc: [ 's' ]; s: 154),
{ 103: }
( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
- ( cc: [ 'r' ]; s: 154),
+ ( cc: [ 'r' ]; s: 155),
{ 104: }
( cc: [ '0'..'9','A'..'Z','_','a'..'n','p'..'z' ]; s: 65),
- ( cc: [ 'o' ]; s: 155),
+ ( cc: [ 'o' ]; s: 156),
{ 105: }
( cc: [ '0'..'9','A'..'Z','_','a'..'f','h'..'z' ]; s: 65),
- ( cc: [ 'g' ]; s: 156),
+ ( cc: [ 'g' ]; s: 157),
{ 106: }
( cc: [ '0'..'9','A'..'Z','_','a'..'o','q'..'z' ]; s: 65),
- ( cc: [ 'p' ]; s: 157),
+ ( cc: [ 'p' ]; s: 158),
{ 107: }
( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 158),
+ ( cc: [ 't' ]; s: 159),
{ 108: }
( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 159),
+ ( cc: [ 'n' ]; s: 160),
{ 109: }
( cc: [ '0'..'9','A'..'Z','_','a'..'h','j'..'z' ]; s: 65),
- ( cc: [ 'i' ]; s: 160),
+ ( cc: [ 'i' ]; s: 161),
{ 110: }
( cc: [ '0'..'9','A'..'Z','_','a'..'n','p'..'z' ]; s: 65),
- ( cc: [ 'o' ]; s: 161),
+ ( cc: [ 'o' ]; s: 162),
{ 111: }
( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
- ( cc: [ 'r' ]; s: 162),
+ ( cc: [ 'r' ]; s: 163),
{ 112: }
( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'R' ]; s: 163),
+ ( cc: [ 'R' ]; s: 164),
{ 113: }
( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 164),
+ ( cc: [ 'A' ]; s: 165),
{ 114: }
( cc: [ '0'..'9','A'..'Z','_','b'..'z' ]; s: 65),
- ( cc: [ 'a' ]; s: 165),
+ ( cc: [ 'a' ]; s: 166),
{ 115: }
( cc: [ '0'..'9','A'..'F','H'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'G' ]; s: 166),
+ ( cc: [ 'G' ]; s: 167),
{ 116: }
( cc: [ '0'..'9','A'..'Z','_','a'..'f','h'..'z' ]; s: 65),
- ( cc: [ 'g' ]; s: 167),
+ ( cc: [ 'g' ]; s: 168),
{ 117: }
( cc: [ '0'..'9','A'..'Z','_','a'..'h','j'..'z' ]; s: 65),
- ( cc: [ 'i' ]; s: 168),
+ ( cc: [ 'i' ]; s: 169),
{ 118: }
{ 119: }
{ 120: }
{ 121: }
- ( cc: [ '0'..'9' ]; s: 121),
- ( cc: [ 'E','e' ]; s: 70),
{ 122: }
- ( cc: [ '0'..'9' ]; s: 123),
+ ( cc: [ '0'..'9' ]; s: 122),
+ ( cc: [ 'E','e' ]; s: 70),
{ 123: }
- ( cc: [ '0'..'9' ]; s: 123),
+ ( cc: [ '0'..'9' ]; s: 124),
{ 124: }
- ( cc: [ 'L','l' ]; s: 125),
+ ( cc: [ '0'..'9' ]; s: 124),
{ 125: }
+ ( cc: [ 'L','l' ]; s: 126),
{ 126: }
- ( cc: [ 'd' ]; s: 169),
+ ( cc: [ 'L','l' ]; s: 170),
{ 127: }
- ( cc: [ 'c' ]; s: 170),
+ ( cc: [ 'd' ]; s: 171),
{ 128: }
- ( cc: [ 'f' ]; s: 171),
- ( cc: [ 'n' ]; s: 127),
+ ( cc: [ 'c' ]; s: 172),
{ 129: }
- ( cc: [ 'i' ]; s: 173),
- ( cc: [ 's' ]; s: 172),
+ ( cc: [ 'f' ]; s: 173),
+ ( cc: [ 'n' ]; s: 128),
{ 130: }
- ( cc: [ 'd' ]; s: 174),
+ ( cc: [ 'i' ]; s: 175),
+ ( cc: [ 's' ]; s: 174),
{ 131: }
- ( cc: [ 'r' ]; s: 175),
-{ 132: }
( cc: [ 'd' ]; s: 176),
+{ 132: }
+ ( cc: [ 'r' ]; s: 177),
{ 133: }
- ( cc: [ ' ' ]; s: 177),
- ( cc: [ '0'..'9' ]; s: 133),
+ ( cc: [ 'd' ]; s: 178),
{ 134: }
- ( cc: [ 'a' ]; s: 178),
+ ( cc: [ ' ' ]; s: 179),
+ ( cc: [ '0'..'9' ]; s: 134),
{ 135: }
- ( cc: [ 'f' ]; s: 179),
+ ( cc: [ 'a' ]; s: 180),
{ 136: }
+ ( cc: [ 'f' ]; s: 181),
{ 137: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 180),
{ 138: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'l','n'..'z' ]; s: 65),
- ( cc: [ 'm' ]; s: 181),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
+ ( cc: [ 'e' ]; s: 182),
{ 139: }
- ( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'C' ]; s: 182),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'l','n'..'z' ]; s: 65),
+ ( cc: [ 'm' ]; s: 183),
{ 140: }
- ( cc: [ '0'..'9','A'..'Z','a'..'z' ]; s: 65),
- ( cc: [ '_' ]; s: 183),
-{ 141: }
( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
( cc: [ 'C' ]; s: 184),
+{ 141: }
+ ( cc: [ '0'..'9','A'..'Z','a'..'z' ]; s: 65),
+ ( cc: [ '_' ]; s: 185),
{ 142: }
- ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'L' ]; s: 185),
+ ( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'C' ]; s: 186),
{ 143: }
- ( cc: [ '0'..'9','A'..'R','T'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'S' ]; s: 186),
+ ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'L' ]; s: 187),
{ 144: }
- ( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'C' ]; s: 187),
+ ( cc: [ '0'..'9','A'..'R','T'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'S' ]; s: 188),
{ 145: }
- ( cc: [ '0'..'9','A'..'J','L'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'K' ]; s: 188),
+ ( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'C' ]; s: 189),
{ 146: }
- ( cc: [ '0'..'9','B'..'F','H'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 189),
- ( cc: [ 'G' ]; s: 190),
+ ( cc: [ '0'..'9','A'..'J','L'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'K' ]; s: 190),
{ 147: }
- ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'E' ]; s: 191),
+ ( cc: [ '0'..'9','B'..'F','H'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'A' ]; s: 191),
+ ( cc: [ 'G' ]; s: 192),
{ 148: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
- ( cc: [ 'd' ]; s: 192),
+ ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'E' ]; s: 193),
{ 149: }
- ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'D' ]; s: 193),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
+ ( cc: [ 'd' ]; s: 194),
{ 150: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
- ( cc: [ 'r' ]; s: 194),
+ ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'D' ]; s: 195),
{ 151: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'r','t'..'z' ]; s: 65),
- ( cc: [ 's' ]; s: 195),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
+ ( cc: [ 'r' ]; s: 196),
{ 152: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'n','p'..'z' ]; s: 65),
- ( cc: [ 'o' ]; s: 196),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'r','t'..'z' ]; s: 65),
+ ( cc: [ 's' ]; s: 197),
{ 153: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'h','j'..'z' ]; s: 65),
- ( cc: [ 'i' ]; s: 197),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'n','p'..'z' ]; s: 65),
+ ( cc: [ 'o' ]; s: 198),
{ 154: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'t','v'..'z' ]; s: 65),
- ( cc: [ 'u' ]; s: 198),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'h','j'..'z' ]; s: 65),
+ ( cc: [ 'i' ]; s: 199),
{ 155: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
- ( cc: [ 'r' ]; s: 199),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'t','v'..'z' ]; s: 65),
+ ( cc: [ 'u' ]; s: 200),
{ 156: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 200),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
+ ( cc: [ 'r' ]; s: 201),
{ 157: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 201),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
+ ( cc: [ 'n' ]; s: 202),
{ 158: }
- ( cc: [ '0','2','4','5','7','9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '1' ]; s: 203),
- ( cc: [ '3' ]; s: 204),
- ( cc: [ '6' ]; s: 205),
- ( cc: [ '8' ]; s: 202),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
+ ( cc: [ 'e' ]; s: 203),
{ 159: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'f','h'..'z' ]; s: 65),
- ( cc: [ 'g' ]; s: 206),
+ ( cc: [ '0','2','4','5','7','9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '1' ]; s: 205),
+ ( cc: [ '3' ]; s: 206),
+ ( cc: [ '6' ]; s: 207),
+ ( cc: [ '8' ]; s: 204),
{ 160: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 207),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'f','h'..'z' ]; s: 65),
+ ( cc: [ 'g' ]; s: 208),
{ 161: }
- ( cc: [ '0'..'9','A'..'Z','_','b'..'z' ]; s: 65),
- ( cc: [ 'a' ]; s: 208),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
+ ( cc: [ 'n' ]; s: 209),
{ 162: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Z','_','b'..'z' ]; s: 65),
+ ( cc: [ 'a' ]; s: 210),
{ 163: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 164: }
- ( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'R' ]; s: 209),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 165: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
- ( cc: [ 'r' ]; s: 210),
+ ( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'R' ]; s: 211),
{ 166: }
- ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'E' ]; s: 211),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
+ ( cc: [ 'r' ]; s: 212),
{ 167: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 212),
+ ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'E' ]; s: 213),
{ 168: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'k','m'..'z' ]; s: 65),
- ( cc: [ 'l' ]; s: 213),
-{ 169: }
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
( cc: [ 'e' ]; s: 214),
-{ 170: }
+{ 169: }
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'k','m'..'z' ]; s: 65),
( cc: [ 'l' ]; s: 215),
+{ 170: }
{ 171: }
-{ 172: }
( cc: [ 'e' ]; s: 216),
+{ 172: }
+ ( cc: [ 'l' ]; s: 217),
{ 173: }
- ( cc: [ 'f' ]; s: 217),
{ 174: }
- ( cc: [ 'i' ]; s: 218),
+ ( cc: [ 'e' ]; s: 218),
{ 175: }
- ( cc: [ 'o' ]; s: 219),
+ ( cc: [ 'f' ]; s: 219),
{ 176: }
- ( cc: [ 'e' ]; s: 220),
+ ( cc: [ 'i' ]; s: 220),
{ 177: }
+ ( cc: [ 'o' ]; s: 221),
{ 178: }
- ( cc: [ 'g' ]; s: 221),
+ ( cc: [ 'e' ]; s: 222),
{ 179: }
- ( cc: [ 'i' ]; s: 222),
{ 180: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
- ( cc: [ 'r' ]; s: 223),
+ ( cc: [ 'g' ]; s: 223),
{ 181: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'i' ]; s: 224),
{ 182: }
- ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 224),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'q','s'..'z' ]; s: 65),
+ ( cc: [ 'r' ]; s: 225),
{ 183: }
- ( cc: [ '0'..'9','A'..'S','U'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'T' ]; s: 225),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 184: }
- ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'L' ]; s: 226),
+ ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'A' ]; s: 226),
{ 185: }
- ( cc: [ '0'..'9','A','C'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'B' ]; s: 227),
-{ 186: }
( cc: [ '0'..'9','A'..'S','U'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'T' ]; s: 228),
+ ( cc: [ 'T' ]; s: 227),
+{ 186: }
+ ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'L' ]; s: 228),
{ 187: }
- ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 229),
+ ( cc: [ '0'..'9','A','C'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'B' ]; s: 229),
{ 188: }
- ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'E' ]; s: 230),
+ ( cc: [ '0'..'9','A'..'S','U'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'T' ]; s: 230),
{ 189: }
- ( cc: [ '0'..'9','A'..'O','Q'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'P' ]; s: 231),
+ ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'A' ]; s: 231),
{ 190: }
- ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'D' ]; s: 232),
+ ( cc: [ '0'..'9','A'..'D','F'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'E' ]; s: 232),
{ 191: }
- ( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'N' ]; s: 233),
+ ( cc: [ '0'..'9','A'..'O','Q'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'P' ]; s: 233),
{ 192: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'D' ]; s: 234),
{ 193: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'M','O'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'N' ]; s: 235),
{ 194: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 195: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 234),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 196: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 235),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 197: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'f','h'..'z' ]; s: 65),
- ( cc: [ 'g' ]; s: 236),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
+ ( cc: [ 't' ]; s: 236),
{ 198: }
- ( cc: [ '0'..'9','A'..'Z','_','a','b','d'..'z' ]; s: 65),
- ( cc: [ 'c' ]; s: 237),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
+ ( cc: [ 'n' ]; s: 237),
{ 199: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 238),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'f','h'..'z' ]; s: 65),
+ ( cc: [ 'g' ]; s: 238),
{ 200: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 239),
+ ( cc: [ '0'..'9','A'..'Z','_','a','b','d'..'z' ]; s: 65),
+ ( cc: [ 'c' ]; s: 239),
{ 201: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
- ( cc: [ 'd' ]; s: 240),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
+ ( cc: [ 't' ]; s: 240),
{ 202: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
+ ( cc: [ 'e' ]; s: 241),
{ 203: }
- ( cc: [ '0'..'5','7'..'9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '6' ]; s: 241),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
+ ( cc: [ 'd' ]; s: 242),
{ 204: }
- ( cc: [ '0','1','3'..'9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '2' ]; s: 242),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 205: }
- ( cc: [ '0'..'3','5'..'9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '4' ]; s: 243),
+ ( cc: [ '0'..'5','7'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '6' ]; s: 243),
{ 206: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0','1','3'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '2' ]; s: 244),
{ 207: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 244),
+ ( cc: [ '0'..'3','5'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '4' ]; s: 245),
{ 208: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 245),
-{ 209: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+{ 209: }
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
+ ( cc: [ 't' ]; s: 246),
{ 210: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
+ ( cc: [ 't' ]; s: 247),
{ 211: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 212: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 213: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 246),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 214: }
- ( cc: [ 'f' ]; s: 247),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 215: }
- ( cc: [ 'u' ]; s: 248),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
+ ( cc: [ 'e' ]; s: 248),
{ 216: }
+ ( cc: [ 'f' ]; s: 249),
{ 217: }
+ ( cc: [ 'u' ]; s: 250),
{ 218: }
- ( cc: [ 'f' ]; s: 249),
{ 219: }
- ( cc: [ 'r' ]; s: 250),
{ 220: }
( cc: [ 'f' ]; s: 251),
{ 221: }
- ( cc: [ 'm' ]; s: 252),
+ ( cc: [ 'r' ]; s: 252),
{ 222: }
- ( cc: [ 'n' ]; s: 253),
+ ( cc: [ 'f' ]; s: 253),
{ 223: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 254),
+ ( cc: [ 'm' ]; s: 254),
{ 224: }
- ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'L' ]; s: 255),
+ ( cc: [ 'n' ]; s: 255),
{ 225: }
- ( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'R' ]; s: 256),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
+ ( cc: [ 'n' ]; s: 256),
{ 226: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'L' ]; s: 257),
{ 227: }
- ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 257),
+ ( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'R' ]; s: 258),
{ 228: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 229: }
- ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'L' ]; s: 258),
+ ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'A' ]; s: 259),
{ 230: }
- ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'D' ]; s: 259),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 231: }
- ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'I' ]; s: 260),
+ ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'L' ]; s: 260),
{ 232: }
- ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'I' ]; s: 261),
+ ( cc: [ '0'..'9','A'..'C','E'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'D' ]; s: 261),
{ 233: }
- ( cc: [ '0'..'9','A'..'S','U'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'T' ]; s: 262),
+ ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'I' ]; s: 262),
{ 234: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'I' ]; s: 263),
{ 235: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'S','U'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'T' ]; s: 264),
{ 236: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
- ( cc: [ 'n' ]; s: 263),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 237: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
- ( cc: [ 't' ]; s: 264),
-{ 238: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+{ 238: }
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'m','o'..'z' ]; s: 65),
+ ( cc: [ 'n' ]; s: 265),
{ 239: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
- ( cc: [ 'd' ]; s: 265),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'s','u'..'z' ]; s: 65),
+ ( cc: [ 't' ]; s: 266),
{ 240: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 266),
-{ 241: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+{ 241: }
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
+ ( cc: [ 'd' ]; s: 267),
{ 242: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
+ ( cc: [ 'e' ]; s: 268),
{ 243: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 244: }
- ( cc: [ '0','2','4','5','7','9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '1' ]; s: 268),
- ( cc: [ '3' ]; s: 269),
- ( cc: [ '6' ]; s: 270),
- ( cc: [ '8' ]; s: 267),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 245: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 246: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0','2','4','5','7','9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '1' ]; s: 270),
+ ( cc: [ '3' ]; s: 271),
+ ( cc: [ '6' ]; s: 272),
+ ( cc: [ '8' ]; s: 269),
{ 247: }
- ( cc: [ #9,' ' ]; s: 271),
- ( cc: [ '_' ]; s: 272),
- ( cc: [ 'c' ]; s: 273),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 248: }
- ( cc: [ 'd' ]; s: 274),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 249: }
+ ( cc: [ #9,' ' ]; s: 273),
+ ( cc: [ '_' ]; s: 274),
+ ( cc: [ 'c' ]; s: 275),
{ 250: }
+ ( cc: [ 'd' ]; s: 276),
{ 251: }
{ 252: }
- ( cc: [ 'a' ]; s: 275),
{ 253: }
- ( cc: [ 'e' ]; s: 276),
{ 254: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'a' ]; s: 277),
{ 255: }
- ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'L' ]; s: 277),
+ ( cc: [ 'e' ]; s: 278),
{ 256: }
- ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 278),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 257: }
- ( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'C' ]; s: 279),
+ ( cc: [ '0'..'9','A'..'K','M'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'L' ]; s: 279),
{ 258: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'A' ]; s: 280),
{ 259: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A','B','D'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'C' ]; s: 281),
{ 260: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 261: }
- ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'A' ]; s: 280),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 262: }
- ( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'R' ]; s: 281),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 263: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
- ( cc: [ 'e' ]; s: 282),
+ ( cc: [ '0'..'9','B'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'A' ]; s: 282),
{ 264: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Q','S'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'R' ]; s: 283),
{ 265: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'d','f'..'z' ]; s: 65),
+ ( cc: [ 'e' ]; s: 284),
{ 266: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'e','g'..'z' ]; s: 65),
- ( cc: [ 'f' ]; s: 283),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 267: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 268: }
- ( cc: [ '0'..'5','7'..'9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '6' ]; s: 284),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'e','g'..'z' ]; s: 65),
+ ( cc: [ 'f' ]; s: 285),
{ 269: }
- ( cc: [ '0','1','3'..'9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '2' ]; s: 285),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 270: }
- ( cc: [ '0'..'3','5'..'9','A'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ '4' ]; s: 286),
+ ( cc: [ '0'..'5','7'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '6' ]; s: 286),
{ 271: }
- ( cc: [ #9,' ' ]; s: 287),
- ( cc: [ '_' ]; s: 272),
- ( cc: [ 'c' ]; s: 273),
+ ( cc: [ '0','1','3'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '2' ]; s: 287),
{ 272: }
- ( cc: [ '_' ]; s: 288),
+ ( cc: [ '0'..'3','5'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '4' ]; s: 288),
{ 273: }
- ( cc: [ 'p' ]; s: 289),
+ ( cc: [ #9,' ' ]; s: 289),
+ ( cc: [ '_' ]; s: 274),
+ ( cc: [ 'c' ]; s: 275),
{ 274: }
- ( cc: [ 'e' ]; s: 290),
+ ( cc: [ '_' ]; s: 290),
{ 275: }
+ ( cc: [ 'p' ]; s: 291),
{ 276: }
+ ( cc: [ 'e' ]; s: 292),
{ 277: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 278: }
- ( cc: [ '0'..'9','A'..'O','Q'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'P' ]; s: 291),
{ 279: }
- ( cc: [ '0'..'9','A'..'J','L'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'K' ]; s: 292),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 280: }
( cc: [ '0'..'9','A'..'O','Q'..'Z','_','a'..'z' ]; s: 65),
( cc: [ 'P' ]; s: 293),
{ 281: }
- ( cc: [ '0'..'9','A'..'X','Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'Y' ]; s: 294),
+ ( cc: [ '0'..'9','A'..'J','L'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'K' ]; s: 294),
{ 282: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
- ( cc: [ 'd' ]; s: 295),
+ ( cc: [ '0'..'9','A'..'O','Q'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'P' ]; s: 295),
{ 283: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'X','Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'Y' ]; s: 296),
{ 284: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'c','e'..'z' ]; s: 65),
+ ( cc: [ 'd' ]; s: 297),
{ 285: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 286: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 287: }
- ( cc: [ #9,' ' ]; s: 287),
- ( cc: [ '_' ]; s: 272),
- ( cc: [ 'c' ]; s: 273),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 288: }
- ( cc: [ 'c' ]; s: 296),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 289: }
- ( cc: [ 'l' ]; s: 297),
+ ( cc: [ #9,' ' ]; s: 289),
+ ( cc: [ '_' ]; s: 274),
+ ( cc: [ 'c' ]; s: 275),
{ 290: }
+ ( cc: [ 'c' ]; s: 298),
{ 291: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'l' ]; s: 299),
{ 292: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 293: }
- ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
- ( cc: [ 'I' ]; s: 298),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 294: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 295: }
- ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ '0'..'9','A'..'H','J'..'Z','_','a'..'z' ]; s: 65),
+ ( cc: [ 'I' ]; s: 300),
{ 296: }
- ( cc: [ 'p' ]; s: 299),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 297: }
- ( cc: [ 'u' ]; s: 300),
-{ 298: }
( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
+{ 298: }
+ ( cc: [ 'p' ]; s: 301),
{ 299: }
- ( cc: [ 'l' ]; s: 301),
+ ( cc: [ 'u' ]; s: 302),
{ 300: }
- ( cc: [ 's' ]; s: 302),
+ ( cc: [ '0'..'9','A'..'Z','_','a'..'z' ]; s: 65),
{ 301: }
- ( cc: [ 'u' ]; s: 303),
+ ( cc: [ 'l' ]; s: 303),
{ 302: }
- ( cc: [ 'p' ]; s: 304),
+ ( cc: [ 's' ]; s: 304),
{ 303: }
- ( cc: [ 's' ]; s: 305),
+ ( cc: [ 'u' ]; s: 305),
{ 304: }
- ( cc: [ 'l' ]; s: 306),
+ ( cc: [ 'p' ]; s: 306),
{ 305: }
- ( cc: [ 'p' ]; s: 307),
+ ( cc: [ 's' ]; s: 307),
{ 306: }
- ( cc: [ 'u' ]; s: 308),
+ ( cc: [ 'l' ]; s: 308),
{ 307: }
- ( cc: [ 'l' ]; s: 309),
+ ( cc: [ 'p' ]; s: 309),
{ 308: }
- ( cc: [ 's' ]; s: 310),
+ ( cc: [ 'u' ]; s: 310),
{ 309: }
- ( cc: [ 'u' ]; s: 311),
+ ( cc: [ 'l' ]; s: 311),
{ 310: }
- ( cc: [ #9,' ' ]; s: 310),
- ( cc: [ #10 ]; s: 312),
+ ( cc: [ 's' ]; s: 312),
{ 311: }
- ( cc: [ 's' ]; s: 313),
+ ( cc: [ 'u' ]; s: 313),
{ 312: }
- ( cc: [ 'e' ]; s: 314),
- ( cc: [ '}' ]; s: 315),
+ ( cc: [ #9,' ' ]; s: 312),
+ ( cc: [ #10 ]; s: 314),
{ 313: }
- ( cc: [ #9,' ' ]; s: 313),
- ( cc: [ #10 ]; s: 316),
+ ( cc: [ 's' ]; s: 315),
{ 314: }
- ( cc: [ 'x' ]; s: 317),
+ ( cc: [ 'e' ]; s: 316),
+ ( cc: [ '}' ]; s: 317),
{ 315: }
+ ( cc: [ #9,' ' ]; s: 315),
( cc: [ #10 ]; s: 318),
{ 316: }
- ( cc: [ 'e' ]; s: 319),
- ( cc: [ '}' ]; s: 320),
+ ( cc: [ 'x' ]; s: 319),
{ 317: }
- ( cc: [ 't' ]; s: 321),
+ ( cc: [ #10 ]; s: 320),
{ 318: }
- ( cc: [ '#' ]; s: 322),
+ ( cc: [ 'e' ]; s: 321),
+ ( cc: [ '}' ]; s: 322),
{ 319: }
- ( cc: [ 'x' ]; s: 323),
+ ( cc: [ 't' ]; s: 323),
{ 320: }
- ( cc: [ #10 ]; s: 324),
+ ( cc: [ '#' ]; s: 324),
{ 321: }
- ( cc: [ 'e' ]; s: 325),
+ ( cc: [ 'x' ]; s: 325),
{ 322: }
- ( cc: [ 'e' ]; s: 326),
+ ( cc: [ #10 ]; s: 326),
{ 323: }
- ( cc: [ 't' ]; s: 327),
+ ( cc: [ 'e' ]; s: 327),
{ 324: }
- ( cc: [ '#' ]; s: 328),
+ ( cc: [ 'e' ]; s: 328),
{ 325: }
- ( cc: [ 'r' ]; s: 329),
+ ( cc: [ 't' ]; s: 329),
{ 326: }
- ( cc: [ 'n' ]; s: 330),
+ ( cc: [ '#' ]; s: 330),
{ 327: }
- ( cc: [ 'e' ]; s: 331),
+ ( cc: [ 'r' ]; s: 331),
{ 328: }
- ( cc: [ 'e' ]; s: 332),
+ ( cc: [ 'n' ]; s: 332),
{ 329: }
- ( cc: [ 'n' ]; s: 333),
+ ( cc: [ 'e' ]; s: 333),
{ 330: }
- ( cc: [ 'd' ]; s: 334),
+ ( cc: [ 'e' ]; s: 334),
{ 331: }
- ( cc: [ 'r' ]; s: 335),
+ ( cc: [ 'n' ]; s: 335),
{ 332: }
- ( cc: [ 'n' ]; s: 336),
+ ( cc: [ 'd' ]; s: 336),
{ 333: }
- ( cc: [ ' ' ]; s: 337),
+ ( cc: [ 'r' ]; s: 337),
{ 334: }
- ( cc: [ 'i' ]; s: 338),
+ ( cc: [ 'n' ]; s: 338),
{ 335: }
- ( cc: [ 'n' ]; s: 339),
+ ( cc: [ ' ' ]; s: 339),
{ 336: }
- ( cc: [ 'd' ]; s: 340),
+ ( cc: [ 'i' ]; s: 340),
{ 337: }
- ( cc: [ '"' ]; s: 341),
+ ( cc: [ 'n' ]; s: 341),
{ 338: }
- ( cc: [ 'f' ]; s: 342),
+ ( cc: [ 'd' ]; s: 342),
{ 339: }
- ( cc: [ ' ' ]; s: 343),
+ ( cc: [ '"' ]; s: 343),
{ 340: }
- ( cc: [ 'i' ]; s: 344),
+ ( cc: [ 'f' ]; s: 344),
{ 341: }
- ( cc: [ 'C' ]; s: 345),
+ ( cc: [ ' ' ]; s: 345),
{ 342: }
+ ( cc: [ 'i' ]; s: 346),
{ 343: }
- ( cc: [ '"' ]; s: 346),
+ ( cc: [ 'C' ]; s: 347),
{ 344: }
- ( cc: [ 'f' ]; s: 347),
{ 345: }
( cc: [ '"' ]; s: 348),
{ 346: }
- ( cc: [ 'C' ]; s: 349),
+ ( cc: [ 'f' ]; s: 349),
{ 347: }
+ ( cc: [ '"' ]; s: 350),
{ 348: }
- ( cc: [ ' ' ]; s: 350),
+ ( cc: [ 'C' ]; s: 351),
{ 349: }
- ( cc: [ '"' ]; s: 351),
{ 350: }
- ( cc: [ '{' ]; s: 352),
+ ( cc: [ ' ' ]; s: 352),
{ 351: }
- ( cc: [ ' ' ]; s: 353),
+ ( cc: [ '"' ]; s: 353),
{ 352: }
- ( cc: [ #10 ]; s: 354),
+ ( cc: [ '{' ]; s: 354),
{ 353: }
- ( cc: [ '{' ]; s: 355),
+ ( cc: [ ' ' ]; s: 355),
{ 354: }
- ( cc: [ '#' ]; s: 356),
+ ( cc: [ #10 ]; s: 356),
{ 355: }
- ( cc: [ #10 ]; s: 357),
+ ( cc: [ '{' ]; s: 357),
{ 356: }
- ( cc: [ 'e' ]; s: 358),
+ ( cc: [ '#' ]; s: 358),
{ 357: }
- ( cc: [ '#' ]; s: 359),
+ ( cc: [ #10 ]; s: 359),
{ 358: }
- ( cc: [ 'n' ]; s: 360),
+ ( cc: [ 'e' ]; s: 360),
{ 359: }
- ( cc: [ 'e' ]; s: 361),
+ ( cc: [ '#' ]; s: 361),
{ 360: }
- ( cc: [ 'd' ]; s: 362),
+ ( cc: [ 'n' ]; s: 362),
{ 361: }
- ( cc: [ 'n' ]; s: 363),
+ ( cc: [ 'e' ]; s: 363),
{ 362: }
- ( cc: [ 'i' ]; s: 364),
+ ( cc: [ 'd' ]; s: 364),
{ 363: }
- ( cc: [ 'd' ]; s: 365),
+ ( cc: [ 'n' ]; s: 365),
{ 364: }
- ( cc: [ 'f' ]; s: 366),
+ ( cc: [ 'i' ]; s: 366),
{ 365: }
- ( cc: [ 'i' ]; s: 367),
+ ( cc: [ 'd' ]; s: 367),
{ 366: }
+ ( cc: [ 'f' ]; s: 368),
{ 367: }
- ( cc: [ 'f' ]; s: 368)
+ ( cc: [ 'i' ]; s: 369),
{ 368: }
+{ 369: }
+ ( cc: [ 'f' ]; s: 370)
+{ 370: }
);
yykl : array [0..yynstates-1] of Integer = (
@@ -3768,20 +3778,20 @@ yykl : array [0..yynstates-1] of Integer = (
{ 120: } 157,
{ 121: } 158,
{ 122: } 159,
-{ 123: } 159,
+{ 123: } 160,
{ 124: } 160,
{ 125: } 161,
{ 126: } 162,
{ 127: } 163,
-{ 128: } 163,
-{ 129: } 163,
-{ 130: } 163,
-{ 131: } 163,
-{ 132: } 163,
-{ 133: } 163,
-{ 134: } 163,
-{ 135: } 163,
-{ 136: } 163,
+{ 128: } 164,
+{ 129: } 164,
+{ 130: } 164,
+{ 131: } 164,
+{ 132: } 164,
+{ 133: } 164,
+{ 134: } 164,
+{ 135: } 164,
+{ 136: } 164,
{ 137: } 164,
{ 138: } 165,
{ 139: } 166,
@@ -3804,31 +3814,31 @@ yykl : array [0..yynstates-1] of Integer = (
{ 156: } 183,
{ 157: } 184,
{ 158: } 185,
-{ 159: } 187,
+{ 159: } 186,
{ 160: } 188,
{ 161: } 189,
{ 162: } 190,
-{ 163: } 192,
-{ 164: } 194,
+{ 163: } 191,
+{ 164: } 193,
{ 165: } 195,
{ 166: } 196,
{ 167: } 197,
{ 168: } 198,
{ 169: } 199,
-{ 170: } 199,
-{ 171: } 199,
-{ 172: } 200,
-{ 173: } 200,
-{ 174: } 200,
-{ 175: } 200,
-{ 176: } 200,
-{ 177: } 200,
-{ 178: } 201,
-{ 179: } 201,
-{ 180: } 201,
-{ 181: } 202,
-{ 182: } 204,
-{ 183: } 205,
+{ 170: } 200,
+{ 171: } 201,
+{ 172: } 201,
+{ 173: } 201,
+{ 174: } 202,
+{ 175: } 202,
+{ 176: } 202,
+{ 177: } 202,
+{ 178: } 202,
+{ 179: } 202,
+{ 180: } 203,
+{ 181: } 203,
+{ 182: } 203,
+{ 183: } 204,
{ 184: } 206,
{ 185: } 207,
{ 186: } 208,
@@ -3838,182 +3848,184 @@ yykl : array [0..yynstates-1] of Integer = (
{ 190: } 212,
{ 191: } 213,
{ 192: } 214,
-{ 193: } 216,
-{ 194: } 218,
-{ 195: } 220,
-{ 196: } 221,
+{ 193: } 215,
+{ 194: } 216,
+{ 195: } 218,
+{ 196: } 220,
{ 197: } 222,
{ 198: } 223,
{ 199: } 224,
{ 200: } 225,
{ 201: } 226,
{ 202: } 227,
-{ 203: } 229,
-{ 204: } 230,
+{ 203: } 228,
+{ 204: } 229,
{ 205: } 231,
{ 206: } 232,
-{ 207: } 234,
-{ 208: } 235,
+{ 207: } 233,
+{ 208: } 234,
{ 209: } 236,
-{ 210: } 238,
-{ 211: } 240,
-{ 212: } 242,
-{ 213: } 244,
-{ 214: } 245,
-{ 215: } 245,
-{ 216: } 245,
-{ 217: } 246,
+{ 210: } 237,
+{ 211: } 238,
+{ 212: } 240,
+{ 213: } 242,
+{ 214: } 244,
+{ 215: } 246,
+{ 216: } 247,
+{ 217: } 247,
{ 218: } 247,
-{ 219: } 247,
-{ 220: } 247,
-{ 221: } 247,
-{ 222: } 247,
-{ 223: } 247,
-{ 224: } 248,
+{ 219: } 248,
+{ 220: } 249,
+{ 221: } 249,
+{ 222: } 249,
+{ 223: } 249,
+{ 224: } 249,
{ 225: } 249,
{ 226: } 250,
-{ 227: } 252,
-{ 228: } 253,
-{ 229: } 255,
-{ 230: } 256,
+{ 227: } 251,
+{ 228: } 252,
+{ 229: } 254,
+{ 230: } 255,
{ 231: } 257,
{ 232: } 258,
{ 233: } 259,
{ 234: } 260,
-{ 235: } 262,
-{ 236: } 264,
-{ 237: } 265,
+{ 235: } 261,
+{ 236: } 262,
+{ 237: } 264,
{ 238: } 266,
-{ 239: } 268,
-{ 240: } 269,
+{ 239: } 267,
+{ 240: } 268,
{ 241: } 270,
-{ 242: } 272,
-{ 243: } 274,
-{ 244: } 276,
-{ 245: } 277,
-{ 246: } 279,
-{ 247: } 281,
+{ 242: } 271,
+{ 243: } 272,
+{ 244: } 274,
+{ 245: } 276,
+{ 246: } 278,
+{ 247: } 279,
{ 248: } 281,
-{ 249: } 281,
-{ 250: } 282,
+{ 249: } 283,
+{ 250: } 283,
{ 251: } 283,
{ 252: } 284,
-{ 253: } 284,
-{ 254: } 284,
+{ 253: } 285,
+{ 254: } 286,
{ 255: } 286,
-{ 256: } 287,
+{ 256: } 286,
{ 257: } 288,
{ 258: } 289,
-{ 259: } 291,
-{ 260: } 293,
-{ 261: } 295,
-{ 262: } 296,
+{ 259: } 290,
+{ 260: } 291,
+{ 261: } 293,
+{ 262: } 295,
{ 263: } 297,
{ 264: } 298,
-{ 265: } 300,
-{ 266: } 302,
-{ 267: } 303,
-{ 268: } 305,
-{ 269: } 306,
+{ 265: } 299,
+{ 266: } 300,
+{ 267: } 302,
+{ 268: } 304,
+{ 269: } 305,
{ 270: } 307,
{ 271: } 308,
{ 272: } 309,
-{ 273: } 309,
-{ 274: } 309,
-{ 275: } 309,
-{ 276: } 310,
+{ 273: } 310,
+{ 274: } 311,
+{ 275: } 311,
+{ 276: } 311,
{ 277: } 311,
-{ 278: } 313,
-{ 279: } 314,
+{ 278: } 312,
+{ 279: } 313,
{ 280: } 315,
{ 281: } 316,
{ 282: } 317,
{ 283: } 318,
-{ 284: } 320,
-{ 285: } 322,
-{ 286: } 324,
-{ 287: } 326,
+{ 284: } 319,
+{ 285: } 320,
+{ 286: } 322,
+{ 287: } 324,
{ 288: } 326,
-{ 289: } 326,
-{ 290: } 326,
-{ 291: } 327,
-{ 292: } 329,
-{ 293: } 331,
-{ 294: } 332,
-{ 295: } 334,
-{ 296: } 336,
+{ 289: } 328,
+{ 290: } 328,
+{ 291: } 328,
+{ 292: } 328,
+{ 293: } 329,
+{ 294: } 331,
+{ 295: } 333,
+{ 296: } 334,
{ 297: } 336,
-{ 298: } 336,
+{ 298: } 338,
{ 299: } 338,
{ 300: } 338,
-{ 301: } 338,
-{ 302: } 338,
-{ 303: } 338,
-{ 304: } 338,
-{ 305: } 338,
-{ 306: } 338,
-{ 307: } 338,
-{ 308: } 338,
-{ 309: } 338,
-{ 310: } 338,
-{ 311: } 339,
-{ 312: } 339,
-{ 313: } 339,
-{ 314: } 340,
-{ 315: } 340,
-{ 316: } 340,
-{ 317: } 340,
-{ 318: } 340,
-{ 319: } 340,
-{ 320: } 340,
-{ 321: } 340,
-{ 322: } 340,
-{ 323: } 340,
-{ 324: } 340,
-{ 325: } 340,
-{ 326: } 340,
-{ 327: } 340,
-{ 328: } 340,
-{ 329: } 340,
-{ 330: } 340,
-{ 331: } 340,
-{ 332: } 340,
-{ 333: } 340,
-{ 334: } 340,
-{ 335: } 340,
-{ 336: } 340,
-{ 337: } 340,
-{ 338: } 340,
-{ 339: } 340,
-{ 340: } 340,
-{ 341: } 340,
-{ 342: } 340,
-{ 343: } 341,
-{ 344: } 341,
-{ 345: } 341,
-{ 346: } 341,
-{ 347: } 341,
-{ 348: } 342,
-{ 349: } 342,
-{ 350: } 342,
-{ 351: } 342,
-{ 352: } 342,
-{ 353: } 342,
-{ 354: } 342,
-{ 355: } 342,
-{ 356: } 342,
-{ 357: } 342,
-{ 358: } 342,
-{ 359: } 342,
-{ 360: } 342,
-{ 361: } 342,
-{ 362: } 342,
-{ 363: } 342,
-{ 364: } 342,
-{ 365: } 342,
-{ 366: } 342,
-{ 367: } 343,
-{ 368: } 343
+{ 301: } 340,
+{ 302: } 340,
+{ 303: } 340,
+{ 304: } 340,
+{ 305: } 340,
+{ 306: } 340,
+{ 307: } 340,
+{ 308: } 340,
+{ 309: } 340,
+{ 310: } 340,
+{ 311: } 340,
+{ 312: } 340,
+{ 313: } 341,
+{ 314: } 341,
+{ 315: } 341,
+{ 316: } 342,
+{ 317: } 342,
+{ 318: } 342,
+{ 319: } 342,
+{ 320: } 342,
+{ 321: } 342,
+{ 322: } 342,
+{ 323: } 342,
+{ 324: } 342,
+{ 325: } 342,
+{ 326: } 342,
+{ 327: } 342,
+{ 328: } 342,
+{ 329: } 342,
+{ 330: } 342,
+{ 331: } 342,
+{ 332: } 342,
+{ 333: } 342,
+{ 334: } 342,
+{ 335: } 342,
+{ 336: } 342,
+{ 337: } 342,
+{ 338: } 342,
+{ 339: } 342,
+{ 340: } 342,
+{ 341: } 342,
+{ 342: } 342,
+{ 343: } 342,
+{ 344: } 342,
+{ 345: } 343,
+{ 346: } 343,
+{ 347: } 343,
+{ 348: } 343,
+{ 349: } 343,
+{ 350: } 344,
+{ 351: } 344,
+{ 352: } 344,
+{ 353: } 344,
+{ 354: } 344,
+{ 355: } 344,
+{ 356: } 344,
+{ 357: } 344,
+{ 358: } 344,
+{ 359: } 344,
+{ 360: } 344,
+{ 361: } 344,
+{ 362: } 344,
+{ 363: } 344,
+{ 364: } 344,
+{ 365: } 344,
+{ 366: } 344,
+{ 367: } 344,
+{ 368: } 344,
+{ 369: } 345,
+{ 370: } 345
);
yykh : array [0..yynstates-1] of Integer = (
@@ -4139,20 +4151,20 @@ yykh : array [0..yynstates-1] of Integer = (
{ 119: } 156,
{ 120: } 157,
{ 121: } 158,
-{ 122: } 158,
+{ 122: } 159,
{ 123: } 159,
{ 124: } 160,
{ 125: } 161,
{ 126: } 162,
-{ 127: } 162,
-{ 128: } 162,
-{ 129: } 162,
-{ 130: } 162,
-{ 131: } 162,
-{ 132: } 162,
-{ 133: } 162,
-{ 134: } 162,
-{ 135: } 162,
+{ 127: } 163,
+{ 128: } 163,
+{ 129: } 163,
+{ 130: } 163,
+{ 131: } 163,
+{ 132: } 163,
+{ 133: } 163,
+{ 134: } 163,
+{ 135: } 163,
{ 136: } 163,
{ 137: } 164,
{ 138: } 165,
@@ -4175,31 +4187,31 @@ yykh : array [0..yynstates-1] of Integer = (
{ 155: } 182,
{ 156: } 183,
{ 157: } 184,
-{ 158: } 186,
+{ 158: } 185,
{ 159: } 187,
{ 160: } 188,
{ 161: } 189,
-{ 162: } 191,
-{ 163: } 193,
+{ 162: } 190,
+{ 163: } 192,
{ 164: } 194,
{ 165: } 195,
{ 166: } 196,
{ 167: } 197,
{ 168: } 198,
-{ 169: } 198,
-{ 170: } 198,
-{ 171: } 199,
-{ 172: } 199,
-{ 173: } 199,
-{ 174: } 199,
-{ 175: } 199,
-{ 176: } 199,
-{ 177: } 200,
-{ 178: } 200,
-{ 179: } 200,
-{ 180: } 201,
-{ 181: } 203,
-{ 182: } 204,
+{ 169: } 199,
+{ 170: } 200,
+{ 171: } 200,
+{ 172: } 200,
+{ 173: } 201,
+{ 174: } 201,
+{ 175: } 201,
+{ 176: } 201,
+{ 177: } 201,
+{ 178: } 201,
+{ 179: } 202,
+{ 180: } 202,
+{ 181: } 202,
+{ 182: } 203,
{ 183: } 205,
{ 184: } 206,
{ 185: } 207,
@@ -4209,183 +4221,185 @@ yykh : array [0..yynstates-1] of Integer = (
{ 189: } 211,
{ 190: } 212,
{ 191: } 213,
-{ 192: } 215,
-{ 193: } 217,
-{ 194: } 219,
-{ 195: } 220,
+{ 192: } 214,
+{ 193: } 215,
+{ 194: } 217,
+{ 195: } 219,
{ 196: } 221,
{ 197: } 222,
{ 198: } 223,
{ 199: } 224,
{ 200: } 225,
{ 201: } 226,
-{ 202: } 228,
-{ 203: } 229,
+{ 202: } 227,
+{ 203: } 228,
{ 204: } 230,
{ 205: } 231,
-{ 206: } 233,
-{ 207: } 234,
+{ 206: } 232,
+{ 207: } 233,
{ 208: } 235,
-{ 209: } 237,
-{ 210: } 239,
-{ 211: } 241,
-{ 212: } 243,
-{ 213: } 244,
-{ 214: } 244,
-{ 215: } 244,
-{ 216: } 245,
+{ 209: } 236,
+{ 210: } 237,
+{ 211: } 239,
+{ 212: } 241,
+{ 213: } 243,
+{ 214: } 245,
+{ 215: } 246,
+{ 216: } 246,
{ 217: } 246,
-{ 218: } 246,
-{ 219: } 246,
-{ 220: } 246,
-{ 221: } 246,
-{ 222: } 246,
-{ 223: } 247,
+{ 218: } 247,
+{ 219: } 248,
+{ 220: } 248,
+{ 221: } 248,
+{ 222: } 248,
+{ 223: } 248,
{ 224: } 248,
{ 225: } 249,
-{ 226: } 251,
-{ 227: } 252,
-{ 228: } 254,
-{ 229: } 255,
+{ 226: } 250,
+{ 227: } 251,
+{ 228: } 253,
+{ 229: } 254,
{ 230: } 256,
{ 231: } 257,
{ 232: } 258,
{ 233: } 259,
-{ 234: } 261,
-{ 235: } 263,
-{ 236: } 264,
+{ 234: } 260,
+{ 235: } 261,
+{ 236: } 263,
{ 237: } 265,
-{ 238: } 267,
-{ 239: } 268,
+{ 238: } 266,
+{ 239: } 267,
{ 240: } 269,
-{ 241: } 271,
-{ 242: } 273,
-{ 243: } 275,
-{ 244: } 276,
-{ 245: } 278,
-{ 246: } 280,
+{ 241: } 270,
+{ 242: } 271,
+{ 243: } 273,
+{ 244: } 275,
+{ 245: } 277,
+{ 246: } 278,
{ 247: } 280,
-{ 248: } 280,
-{ 249: } 281,
+{ 248: } 282,
+{ 249: } 282,
{ 250: } 282,
{ 251: } 283,
-{ 252: } 283,
-{ 253: } 283,
+{ 252: } 284,
+{ 253: } 285,
{ 254: } 285,
-{ 255: } 286,
+{ 255: } 285,
{ 256: } 287,
{ 257: } 288,
-{ 258: } 290,
-{ 259: } 292,
-{ 260: } 294,
-{ 261: } 295,
+{ 258: } 289,
+{ 259: } 290,
+{ 260: } 292,
+{ 261: } 294,
{ 262: } 296,
{ 263: } 297,
-{ 264: } 299,
-{ 265: } 301,
-{ 266: } 302,
-{ 267: } 304,
-{ 268: } 305,
+{ 264: } 298,
+{ 265: } 299,
+{ 266: } 301,
+{ 267: } 303,
+{ 268: } 304,
{ 269: } 306,
{ 270: } 307,
{ 271: } 308,
-{ 272: } 308,
-{ 273: } 308,
-{ 274: } 308,
-{ 275: } 309,
+{ 272: } 309,
+{ 273: } 310,
+{ 274: } 310,
+{ 275: } 310,
{ 276: } 310,
-{ 277: } 312,
-{ 278: } 313,
+{ 277: } 311,
+{ 278: } 312,
{ 279: } 314,
{ 280: } 315,
{ 281: } 316,
{ 282: } 317,
-{ 283: } 319,
-{ 284: } 321,
-{ 285: } 323,
-{ 286: } 325,
+{ 283: } 318,
+{ 284: } 319,
+{ 285: } 321,
+{ 286: } 323,
{ 287: } 325,
-{ 288: } 325,
-{ 289: } 325,
-{ 290: } 326,
-{ 291: } 328,
-{ 292: } 330,
-{ 293: } 331,
-{ 294: } 333,
-{ 295: } 335,
+{ 288: } 327,
+{ 289: } 327,
+{ 290: } 327,
+{ 291: } 327,
+{ 292: } 328,
+{ 293: } 330,
+{ 294: } 332,
+{ 295: } 333,
{ 296: } 335,
-{ 297: } 335,
+{ 297: } 337,
{ 298: } 337,
{ 299: } 337,
-{ 300: } 337,
-{ 301: } 337,
-{ 302: } 337,
-{ 303: } 337,
-{ 304: } 337,
-{ 305: } 337,
-{ 306: } 337,
-{ 307: } 337,
-{ 308: } 337,
-{ 309: } 337,
-{ 310: } 338,
-{ 311: } 338,
-{ 312: } 338,
-{ 313: } 339,
-{ 314: } 339,
-{ 315: } 339,
-{ 316: } 339,
-{ 317: } 339,
-{ 318: } 339,
-{ 319: } 339,
-{ 320: } 339,
-{ 321: } 339,
-{ 322: } 339,
-{ 323: } 339,
-{ 324: } 339,
-{ 325: } 339,
-{ 326: } 339,
-{ 327: } 339,
-{ 328: } 339,
-{ 329: } 339,
-{ 330: } 339,
-{ 331: } 339,
-{ 332: } 339,
-{ 333: } 339,
-{ 334: } 339,
-{ 335: } 339,
-{ 336: } 339,
-{ 337: } 339,
-{ 338: } 339,
-{ 339: } 339,
-{ 340: } 339,
-{ 341: } 339,
-{ 342: } 340,
-{ 343: } 340,
-{ 344: } 340,
-{ 345: } 340,
-{ 346: } 340,
-{ 347: } 341,
-{ 348: } 341,
-{ 349: } 341,
-{ 350: } 341,
-{ 351: } 341,
-{ 352: } 341,
-{ 353: } 341,
-{ 354: } 341,
-{ 355: } 341,
-{ 356: } 341,
-{ 357: } 341,
-{ 358: } 341,
-{ 359: } 341,
-{ 360: } 341,
-{ 361: } 341,
-{ 362: } 341,
-{ 363: } 341,
-{ 364: } 341,
-{ 365: } 341,
-{ 366: } 342,
-{ 367: } 342,
-{ 368: } 343
+{ 300: } 339,
+{ 301: } 339,
+{ 302: } 339,
+{ 303: } 339,
+{ 304: } 339,
+{ 305: } 339,
+{ 306: } 339,
+{ 307: } 339,
+{ 308: } 339,
+{ 309: } 339,
+{ 310: } 339,
+{ 311: } 339,
+{ 312: } 340,
+{ 313: } 340,
+{ 314: } 340,
+{ 315: } 341,
+{ 316: } 341,
+{ 317: } 341,
+{ 318: } 341,
+{ 319: } 341,
+{ 320: } 341,
+{ 321: } 341,
+{ 322: } 341,
+{ 323: } 341,
+{ 324: } 341,
+{ 325: } 341,
+{ 326: } 341,
+{ 327: } 341,
+{ 328: } 341,
+{ 329: } 341,
+{ 330: } 341,
+{ 331: } 341,
+{ 332: } 341,
+{ 333: } 341,
+{ 334: } 341,
+{ 335: } 341,
+{ 336: } 341,
+{ 337: } 341,
+{ 338: } 341,
+{ 339: } 341,
+{ 340: } 341,
+{ 341: } 341,
+{ 342: } 341,
+{ 343: } 341,
+{ 344: } 342,
+{ 345: } 342,
+{ 346: } 342,
+{ 347: } 342,
+{ 348: } 342,
+{ 349: } 343,
+{ 350: } 343,
+{ 351: } 343,
+{ 352: } 343,
+{ 353: } 343,
+{ 354: } 343,
+{ 355: } 343,
+{ 356: } 343,
+{ 357: } 343,
+{ 358: } 343,
+{ 359: } 343,
+{ 360: } 343,
+{ 361: } 343,
+{ 362: } 343,
+{ 363: } 343,
+{ 364: } 343,
+{ 365: } 343,
+{ 366: } 343,
+{ 367: } 343,
+{ 368: } 344,
+{ 369: } 344,
+{ 370: } 345
);
yyml : array [0..yynstates-1] of Integer = (
@@ -4512,20 +4526,20 @@ yyml : array [0..yynstates-1] of Integer = (
{ 120: } 157,
{ 121: } 158,
{ 122: } 159,
-{ 123: } 159,
+{ 123: } 160,
{ 124: } 160,
{ 125: } 161,
{ 126: } 162,
{ 127: } 163,
-{ 128: } 163,
-{ 129: } 163,
-{ 130: } 163,
-{ 131: } 163,
-{ 132: } 163,
-{ 133: } 163,
-{ 134: } 163,
-{ 135: } 163,
-{ 136: } 163,
+{ 128: } 164,
+{ 129: } 164,
+{ 130: } 164,
+{ 131: } 164,
+{ 132: } 164,
+{ 133: } 164,
+{ 134: } 164,
+{ 135: } 164,
+{ 136: } 164,
{ 137: } 164,
{ 138: } 165,
{ 139: } 166,
@@ -4548,31 +4562,31 @@ yyml : array [0..yynstates-1] of Integer = (
{ 156: } 183,
{ 157: } 184,
{ 158: } 185,
-{ 159: } 187,
+{ 159: } 186,
{ 160: } 188,
{ 161: } 189,
{ 162: } 190,
-{ 163: } 192,
-{ 164: } 194,
+{ 163: } 191,
+{ 164: } 193,
{ 165: } 195,
{ 166: } 196,
{ 167: } 197,
{ 168: } 198,
{ 169: } 199,
-{ 170: } 199,
-{ 171: } 199,
-{ 172: } 200,
-{ 173: } 200,
-{ 174: } 200,
-{ 175: } 200,
-{ 176: } 200,
-{ 177: } 200,
-{ 178: } 201,
-{ 179: } 201,
-{ 180: } 201,
-{ 181: } 202,
-{ 182: } 204,
-{ 183: } 205,
+{ 170: } 200,
+{ 171: } 201,
+{ 172: } 201,
+{ 173: } 201,
+{ 174: } 202,
+{ 175: } 202,
+{ 176: } 202,
+{ 177: } 202,
+{ 178: } 202,
+{ 179: } 202,
+{ 180: } 203,
+{ 181: } 203,
+{ 182: } 203,
+{ 183: } 204,
{ 184: } 206,
{ 185: } 207,
{ 186: } 208,
@@ -4582,182 +4596,184 @@ yyml : array [0..yynstates-1] of Integer = (
{ 190: } 212,
{ 191: } 213,
{ 192: } 214,
-{ 193: } 216,
-{ 194: } 218,
-{ 195: } 220,
-{ 196: } 221,
+{ 193: } 215,
+{ 194: } 216,
+{ 195: } 218,
+{ 196: } 220,
{ 197: } 222,
{ 198: } 223,
{ 199: } 224,
{ 200: } 225,
{ 201: } 226,
{ 202: } 227,
-{ 203: } 229,
-{ 204: } 230,
+{ 203: } 228,
+{ 204: } 229,
{ 205: } 231,
{ 206: } 232,
-{ 207: } 234,
-{ 208: } 235,
+{ 207: } 233,
+{ 208: } 234,
{ 209: } 236,
-{ 210: } 238,
-{ 211: } 240,
-{ 212: } 242,
-{ 213: } 244,
-{ 214: } 245,
-{ 215: } 245,
-{ 216: } 245,
-{ 217: } 246,
+{ 210: } 237,
+{ 211: } 238,
+{ 212: } 240,
+{ 213: } 242,
+{ 214: } 244,
+{ 215: } 246,
+{ 216: } 247,
+{ 217: } 247,
{ 218: } 247,
-{ 219: } 247,
-{ 220: } 247,
-{ 221: } 247,
-{ 222: } 247,
-{ 223: } 247,
-{ 224: } 248,
+{ 219: } 248,
+{ 220: } 249,
+{ 221: } 249,
+{ 222: } 249,
+{ 223: } 249,
+{ 224: } 249,
{ 225: } 249,
{ 226: } 250,
-{ 227: } 252,
-{ 228: } 253,
-{ 229: } 255,
-{ 230: } 256,
+{ 227: } 251,
+{ 228: } 252,
+{ 229: } 254,
+{ 230: } 255,
{ 231: } 257,
{ 232: } 258,
{ 233: } 259,
{ 234: } 260,
-{ 235: } 262,
-{ 236: } 264,
-{ 237: } 265,
+{ 235: } 261,
+{ 236: } 262,
+{ 237: } 264,
{ 238: } 266,
-{ 239: } 268,
-{ 240: } 269,
+{ 239: } 267,
+{ 240: } 268,
{ 241: } 270,
-{ 242: } 272,
-{ 243: } 274,
-{ 244: } 276,
-{ 245: } 277,
-{ 246: } 279,
-{ 247: } 281,
+{ 242: } 271,
+{ 243: } 272,
+{ 244: } 274,
+{ 245: } 276,
+{ 246: } 278,
+{ 247: } 279,
{ 248: } 281,
-{ 249: } 281,
-{ 250: } 282,
+{ 249: } 283,
+{ 250: } 283,
{ 251: } 283,
{ 252: } 284,
-{ 253: } 284,
-{ 254: } 284,
+{ 253: } 285,
+{ 254: } 286,
{ 255: } 286,
-{ 256: } 287,
+{ 256: } 286,
{ 257: } 288,
{ 258: } 289,
-{ 259: } 291,
-{ 260: } 293,
-{ 261: } 295,
-{ 262: } 296,
+{ 259: } 290,
+{ 260: } 291,
+{ 261: } 293,
+{ 262: } 295,
{ 263: } 297,
{ 264: } 298,
-{ 265: } 300,
-{ 266: } 302,
-{ 267: } 303,
-{ 268: } 305,
-{ 269: } 306,
+{ 265: } 299,
+{ 266: } 300,
+{ 267: } 302,
+{ 268: } 304,
+{ 269: } 305,
{ 270: } 307,
{ 271: } 308,
{ 272: } 309,
-{ 273: } 309,
-{ 274: } 309,
-{ 275: } 309,
-{ 276: } 310,
+{ 273: } 310,
+{ 274: } 311,
+{ 275: } 311,
+{ 276: } 311,
{ 277: } 311,
-{ 278: } 313,
-{ 279: } 314,
+{ 278: } 312,
+{ 279: } 313,
{ 280: } 315,
{ 281: } 316,
{ 282: } 317,
{ 283: } 318,
-{ 284: } 320,
-{ 285: } 322,
-{ 286: } 324,
-{ 287: } 326,
+{ 284: } 319,
+{ 285: } 320,
+{ 286: } 322,
+{ 287: } 324,
{ 288: } 326,
-{ 289: } 326,
-{ 290: } 326,
-{ 291: } 327,
-{ 292: } 329,
-{ 293: } 331,
-{ 294: } 332,
-{ 295: } 334,
-{ 296: } 336,
+{ 289: } 328,
+{ 290: } 328,
+{ 291: } 328,
+{ 292: } 328,
+{ 293: } 329,
+{ 294: } 331,
+{ 295: } 333,
+{ 296: } 334,
{ 297: } 336,
-{ 298: } 336,
+{ 298: } 338,
{ 299: } 338,
{ 300: } 338,
-{ 301: } 338,
-{ 302: } 338,
-{ 303: } 338,
-{ 304: } 338,
-{ 305: } 338,
-{ 306: } 338,
-{ 307: } 338,
-{ 308: } 338,
-{ 309: } 338,
-{ 310: } 338,
-{ 311: } 339,
-{ 312: } 339,
-{ 313: } 339,
-{ 314: } 340,
-{ 315: } 340,
-{ 316: } 340,
-{ 317: } 340,
-{ 318: } 340,
-{ 319: } 340,
-{ 320: } 340,
-{ 321: } 340,
-{ 322: } 340,
-{ 323: } 340,
-{ 324: } 340,
-{ 325: } 340,
-{ 326: } 340,
-{ 327: } 340,
-{ 328: } 340,
-{ 329: } 340,
-{ 330: } 340,
-{ 331: } 340,
-{ 332: } 340,
-{ 333: } 340,
-{ 334: } 340,
-{ 335: } 340,
-{ 336: } 340,
-{ 337: } 340,
-{ 338: } 340,
-{ 339: } 340,
-{ 340: } 340,
-{ 341: } 340,
-{ 342: } 340,
-{ 343: } 341,
-{ 344: } 341,
-{ 345: } 341,
-{ 346: } 341,
-{ 347: } 341,
-{ 348: } 342,
-{ 349: } 342,
-{ 350: } 342,
-{ 351: } 342,
-{ 352: } 342,
-{ 353: } 342,
-{ 354: } 342,
-{ 355: } 342,
-{ 356: } 342,
-{ 357: } 342,
-{ 358: } 342,
-{ 359: } 342,
-{ 360: } 342,
-{ 361: } 342,
-{ 362: } 342,
-{ 363: } 342,
-{ 364: } 342,
-{ 365: } 342,
-{ 366: } 342,
-{ 367: } 343,
-{ 368: } 343
+{ 301: } 340,
+{ 302: } 340,
+{ 303: } 340,
+{ 304: } 340,
+{ 305: } 340,
+{ 306: } 340,
+{ 307: } 340,
+{ 308: } 340,
+{ 309: } 340,
+{ 310: } 340,
+{ 311: } 340,
+{ 312: } 340,
+{ 313: } 341,
+{ 314: } 341,
+{ 315: } 341,
+{ 316: } 342,
+{ 317: } 342,
+{ 318: } 342,
+{ 319: } 342,
+{ 320: } 342,
+{ 321: } 342,
+{ 322: } 342,
+{ 323: } 342,
+{ 324: } 342,
+{ 325: } 342,
+{ 326: } 342,
+{ 327: } 342,
+{ 328: } 342,
+{ 329: } 342,
+{ 330: } 342,
+{ 331: } 342,
+{ 332: } 342,
+{ 333: } 342,
+{ 334: } 342,
+{ 335: } 342,
+{ 336: } 342,
+{ 337: } 342,
+{ 338: } 342,
+{ 339: } 342,
+{ 340: } 342,
+{ 341: } 342,
+{ 342: } 342,
+{ 343: } 342,
+{ 344: } 342,
+{ 345: } 343,
+{ 346: } 343,
+{ 347: } 343,
+{ 348: } 343,
+{ 349: } 343,
+{ 350: } 344,
+{ 351: } 344,
+{ 352: } 344,
+{ 353: } 344,
+{ 354: } 344,
+{ 355: } 344,
+{ 356: } 344,
+{ 357: } 344,
+{ 358: } 344,
+{ 359: } 344,
+{ 360: } 344,
+{ 361: } 344,
+{ 362: } 344,
+{ 363: } 344,
+{ 364: } 344,
+{ 365: } 344,
+{ 366: } 344,
+{ 367: } 344,
+{ 368: } 344,
+{ 369: } 345,
+{ 370: } 345
);
yymh : array [0..yynstates-1] of Integer = (
@@ -4883,20 +4899,20 @@ yymh : array [0..yynstates-1] of Integer = (
{ 119: } 156,
{ 120: } 157,
{ 121: } 158,
-{ 122: } 158,
+{ 122: } 159,
{ 123: } 159,
{ 124: } 160,
{ 125: } 161,
{ 126: } 162,
-{ 127: } 162,
-{ 128: } 162,
-{ 129: } 162,
-{ 130: } 162,
-{ 131: } 162,
-{ 132: } 162,
-{ 133: } 162,
-{ 134: } 162,
-{ 135: } 162,
+{ 127: } 163,
+{ 128: } 163,
+{ 129: } 163,
+{ 130: } 163,
+{ 131: } 163,
+{ 132: } 163,
+{ 133: } 163,
+{ 134: } 163,
+{ 135: } 163,
{ 136: } 163,
{ 137: } 164,
{ 138: } 165,
@@ -4919,31 +4935,31 @@ yymh : array [0..yynstates-1] of Integer = (
{ 155: } 182,
{ 156: } 183,
{ 157: } 184,
-{ 158: } 186,
+{ 158: } 185,
{ 159: } 187,
{ 160: } 188,
{ 161: } 189,
-{ 162: } 191,
-{ 163: } 193,
+{ 162: } 190,
+{ 163: } 192,
{ 164: } 194,
{ 165: } 195,
{ 166: } 196,
{ 167: } 197,
{ 168: } 198,
-{ 169: } 198,
-{ 170: } 198,
-{ 171: } 199,
-{ 172: } 199,
-{ 173: } 199,
-{ 174: } 199,
-{ 175: } 199,
-{ 176: } 199,
-{ 177: } 200,
-{ 178: } 200,
-{ 179: } 200,
-{ 180: } 201,
-{ 181: } 203,
-{ 182: } 204,
+{ 169: } 199,
+{ 170: } 200,
+{ 171: } 200,
+{ 172: } 200,
+{ 173: } 201,
+{ 174: } 201,
+{ 175: } 201,
+{ 176: } 201,
+{ 177: } 201,
+{ 178: } 201,
+{ 179: } 202,
+{ 180: } 202,
+{ 181: } 202,
+{ 182: } 203,
{ 183: } 205,
{ 184: } 206,
{ 185: } 207,
@@ -4953,183 +4969,185 @@ yymh : array [0..yynstates-1] of Integer = (
{ 189: } 211,
{ 190: } 212,
{ 191: } 213,
-{ 192: } 215,
-{ 193: } 217,
-{ 194: } 219,
-{ 195: } 220,
+{ 192: } 214,
+{ 193: } 215,
+{ 194: } 217,
+{ 195: } 219,
{ 196: } 221,
{ 197: } 222,
{ 198: } 223,
{ 199: } 224,
{ 200: } 225,
{ 201: } 226,
-{ 202: } 228,
-{ 203: } 229,
+{ 202: } 227,
+{ 203: } 228,
{ 204: } 230,
{ 205: } 231,
-{ 206: } 233,
-{ 207: } 234,
+{ 206: } 232,
+{ 207: } 233,
{ 208: } 235,
-{ 209: } 237,
-{ 210: } 239,
-{ 211: } 241,
-{ 212: } 243,
-{ 213: } 244,
-{ 214: } 244,
-{ 215: } 244,
-{ 216: } 245,
+{ 209: } 236,
+{ 210: } 237,
+{ 211: } 239,
+{ 212: } 241,
+{ 213: } 243,
+{ 214: } 245,
+{ 215: } 246,
+{ 216: } 246,
{ 217: } 246,
-{ 218: } 246,
-{ 219: } 246,
-{ 220: } 246,
-{ 221: } 246,
-{ 222: } 246,
-{ 223: } 247,
+{ 218: } 247,
+{ 219: } 248,
+{ 220: } 248,
+{ 221: } 248,
+{ 222: } 248,
+{ 223: } 248,
{ 224: } 248,
{ 225: } 249,
-{ 226: } 251,
-{ 227: } 252,
-{ 228: } 254,
-{ 229: } 255,
+{ 226: } 250,
+{ 227: } 251,
+{ 228: } 253,
+{ 229: } 254,
{ 230: } 256,
{ 231: } 257,
{ 232: } 258,
{ 233: } 259,
-{ 234: } 261,
-{ 235: } 263,
-{ 236: } 264,
+{ 234: } 260,
+{ 235: } 261,
+{ 236: } 263,
{ 237: } 265,
-{ 238: } 267,
-{ 239: } 268,
+{ 238: } 266,
+{ 239: } 267,
{ 240: } 269,
-{ 241: } 271,
-{ 242: } 273,
-{ 243: } 275,
-{ 244: } 276,
-{ 245: } 278,
-{ 246: } 280,
+{ 241: } 270,
+{ 242: } 271,
+{ 243: } 273,
+{ 244: } 275,
+{ 245: } 277,
+{ 246: } 278,
{ 247: } 280,
-{ 248: } 280,
-{ 249: } 281,
+{ 248: } 282,
+{ 249: } 282,
{ 250: } 282,
{ 251: } 283,
-{ 252: } 283,
-{ 253: } 283,
+{ 252: } 284,
+{ 253: } 285,
{ 254: } 285,
-{ 255: } 286,
+{ 255: } 285,
{ 256: } 287,
{ 257: } 288,
-{ 258: } 290,
-{ 259: } 292,
-{ 260: } 294,
-{ 261: } 295,
+{ 258: } 289,
+{ 259: } 290,
+{ 260: } 292,
+{ 261: } 294,
{ 262: } 296,
{ 263: } 297,
-{ 264: } 299,
-{ 265: } 301,
-{ 266: } 302,
-{ 267: } 304,
-{ 268: } 305,
+{ 264: } 298,
+{ 265: } 299,
+{ 266: } 301,
+{ 267: } 303,
+{ 268: } 304,
{ 269: } 306,
{ 270: } 307,
{ 271: } 308,
-{ 272: } 308,
-{ 273: } 308,
-{ 274: } 308,
-{ 275: } 309,
+{ 272: } 309,
+{ 273: } 310,
+{ 274: } 310,
+{ 275: } 310,
{ 276: } 310,
-{ 277: } 312,
-{ 278: } 313,
+{ 277: } 311,
+{ 278: } 312,
{ 279: } 314,
{ 280: } 315,
{ 281: } 316,
{ 282: } 317,
-{ 283: } 319,
-{ 284: } 321,
-{ 285: } 323,
-{ 286: } 325,
+{ 283: } 318,
+{ 284: } 319,
+{ 285: } 321,
+{ 286: } 323,
{ 287: } 325,
-{ 288: } 325,
-{ 289: } 325,
-{ 290: } 326,
-{ 291: } 328,
-{ 292: } 330,
-{ 293: } 331,
-{ 294: } 333,
-{ 295: } 335,
+{ 288: } 327,
+{ 289: } 327,
+{ 290: } 327,
+{ 291: } 327,
+{ 292: } 328,
+{ 293: } 330,
+{ 294: } 332,
+{ 295: } 333,
{ 296: } 335,
-{ 297: } 335,
+{ 297: } 337,
{ 298: } 337,
{ 299: } 337,
-{ 300: } 337,
-{ 301: } 337,
-{ 302: } 337,
-{ 303: } 337,
-{ 304: } 337,
-{ 305: } 337,
-{ 306: } 337,
-{ 307: } 337,
-{ 308: } 337,
-{ 309: } 337,
-{ 310: } 338,
-{ 311: } 338,
-{ 312: } 338,
-{ 313: } 339,
-{ 314: } 339,
-{ 315: } 339,
-{ 316: } 339,
-{ 317: } 339,
-{ 318: } 339,
-{ 319: } 339,
-{ 320: } 339,
-{ 321: } 339,
-{ 322: } 339,
-{ 323: } 339,
-{ 324: } 339,
-{ 325: } 339,
-{ 326: } 339,
-{ 327: } 339,
-{ 328: } 339,
-{ 329: } 339,
-{ 330: } 339,
-{ 331: } 339,
-{ 332: } 339,
-{ 333: } 339,
-{ 334: } 339,
-{ 335: } 339,
-{ 336: } 339,
-{ 337: } 339,
-{ 338: } 339,
-{ 339: } 339,
-{ 340: } 339,
-{ 341: } 339,
-{ 342: } 340,
-{ 343: } 340,
-{ 344: } 340,
-{ 345: } 340,
-{ 346: } 340,
-{ 347: } 341,
-{ 348: } 341,
-{ 349: } 341,
-{ 350: } 341,
-{ 351: } 341,
-{ 352: } 341,
-{ 353: } 341,
-{ 354: } 341,
-{ 355: } 341,
-{ 356: } 341,
-{ 357: } 341,
-{ 358: } 341,
-{ 359: } 341,
-{ 360: } 341,
-{ 361: } 341,
-{ 362: } 341,
-{ 363: } 341,
-{ 364: } 341,
-{ 365: } 341,
-{ 366: } 342,
-{ 367: } 342,
-{ 368: } 343
+{ 300: } 339,
+{ 301: } 339,
+{ 302: } 339,
+{ 303: } 339,
+{ 304: } 339,
+{ 305: } 339,
+{ 306: } 339,
+{ 307: } 339,
+{ 308: } 339,
+{ 309: } 339,
+{ 310: } 339,
+{ 311: } 339,
+{ 312: } 340,
+{ 313: } 340,
+{ 314: } 340,
+{ 315: } 341,
+{ 316: } 341,
+{ 317: } 341,
+{ 318: } 341,
+{ 319: } 341,
+{ 320: } 341,
+{ 321: } 341,
+{ 322: } 341,
+{ 323: } 341,
+{ 324: } 341,
+{ 325: } 341,
+{ 326: } 341,
+{ 327: } 341,
+{ 328: } 341,
+{ 329: } 341,
+{ 330: } 341,
+{ 331: } 341,
+{ 332: } 341,
+{ 333: } 341,
+{ 334: } 341,
+{ 335: } 341,
+{ 336: } 341,
+{ 337: } 341,
+{ 338: } 341,
+{ 339: } 341,
+{ 340: } 341,
+{ 341: } 341,
+{ 342: } 341,
+{ 343: } 341,
+{ 344: } 342,
+{ 345: } 342,
+{ 346: } 342,
+{ 347: } 342,
+{ 348: } 342,
+{ 349: } 343,
+{ 350: } 343,
+{ 351: } 343,
+{ 352: } 343,
+{ 353: } 343,
+{ 354: } 343,
+{ 355: } 343,
+{ 356: } 343,
+{ 357: } 343,
+{ 358: } 343,
+{ 359: } 343,
+{ 360: } 343,
+{ 361: } 343,
+{ 362: } 343,
+{ 363: } 343,
+{ 364: } 343,
+{ 365: } 343,
+{ 366: } 343,
+{ 367: } 343,
+{ 368: } 344,
+{ 369: } 344,
+{ 370: } 345
);
yytl : array [0..yynstates-1] of Integer = (
@@ -5202,75 +5220,75 @@ yytl : array [0..yynstates-1] of Integer = (
{ 66: } 210,
{ 67: } 215,
{ 68: } 216,
-{ 69: } 216,
-{ 70: } 217,
-{ 71: } 219,
-{ 72: } 222,
-{ 73: } 222,
-{ 74: } 222,
-{ 75: } 222,
-{ 76: } 222,
-{ 77: } 222,
-{ 78: } 222,
-{ 79: } 222,
-{ 80: } 222,
-{ 81: } 224,
-{ 82: } 230,
-{ 83: } 233,
-{ 84: } 234,
-{ 85: } 241,
-{ 86: } 242,
-{ 87: } 243,
-{ 88: } 244,
-{ 89: } 246,
-{ 90: } 248,
-{ 91: } 250,
-{ 92: } 252,
-{ 93: } 254,
-{ 94: } 256,
-{ 95: } 258,
-{ 96: } 261,
-{ 97: } 263,
-{ 98: } 265,
-{ 99: } 267,
-{ 100: } 269,
-{ 101: } 271,
-{ 102: } 273,
-{ 103: } 276,
-{ 104: } 278,
-{ 105: } 280,
-{ 106: } 282,
-{ 107: } 284,
-{ 108: } 286,
-{ 109: } 288,
-{ 110: } 290,
-{ 111: } 292,
-{ 112: } 294,
-{ 113: } 296,
-{ 114: } 298,
-{ 115: } 300,
-{ 116: } 302,
-{ 117: } 304,
-{ 118: } 306,
-{ 119: } 306,
-{ 120: } 306,
-{ 121: } 306,
-{ 122: } 308,
+{ 69: } 217,
+{ 70: } 218,
+{ 71: } 220,
+{ 72: } 223,
+{ 73: } 223,
+{ 74: } 223,
+{ 75: } 223,
+{ 76: } 223,
+{ 77: } 223,
+{ 78: } 223,
+{ 79: } 223,
+{ 80: } 223,
+{ 81: } 225,
+{ 82: } 231,
+{ 83: } 234,
+{ 84: } 235,
+{ 85: } 242,
+{ 86: } 243,
+{ 87: } 244,
+{ 88: } 245,
+{ 89: } 247,
+{ 90: } 249,
+{ 91: } 251,
+{ 92: } 253,
+{ 93: } 255,
+{ 94: } 257,
+{ 95: } 259,
+{ 96: } 262,
+{ 97: } 264,
+{ 98: } 266,
+{ 99: } 268,
+{ 100: } 270,
+{ 101: } 272,
+{ 102: } 274,
+{ 103: } 277,
+{ 104: } 279,
+{ 105: } 281,
+{ 106: } 283,
+{ 107: } 285,
+{ 108: } 287,
+{ 109: } 289,
+{ 110: } 291,
+{ 111: } 293,
+{ 112: } 295,
+{ 113: } 297,
+{ 114: } 299,
+{ 115: } 301,
+{ 116: } 303,
+{ 117: } 305,
+{ 118: } 307,
+{ 119: } 307,
+{ 120: } 307,
+{ 121: } 307,
+{ 122: } 307,
{ 123: } 309,
{ 124: } 310,
{ 125: } 311,
-{ 126: } 311,
-{ 127: } 312,
-{ 128: } 313,
+{ 126: } 312,
+{ 127: } 313,
+{ 128: } 314,
{ 129: } 315,
{ 130: } 317,
-{ 131: } 318,
-{ 132: } 319,
-{ 133: } 320,
+{ 131: } 319,
+{ 132: } 320,
+{ 133: } 321,
{ 134: } 322,
-{ 135: } 323,
-{ 136: } 324,
-{ 137: } 324,
+{ 135: } 324,
+{ 136: } 325,
+{ 137: } 326,
{ 138: } 326,
{ 139: } 328,
{ 140: } 330,
@@ -5280,7 +5298,7 @@ yytl : array [0..yynstates-1] of Integer = (
{ 144: } 338,
{ 145: } 340,
{ 146: } 342,
-{ 147: } 345,
+{ 147: } 344,
{ 148: } 347,
{ 149: } 349,
{ 150: } 351,
@@ -5292,143 +5310,143 @@ yytl : array [0..yynstates-1] of Integer = (
{ 156: } 363,
{ 157: } 365,
{ 158: } 367,
-{ 159: } 372,
+{ 159: } 369,
{ 160: } 374,
{ 161: } 376,
{ 162: } 378,
-{ 163: } 379,
-{ 164: } 380,
+{ 163: } 380,
+{ 164: } 381,
{ 165: } 382,
{ 166: } 384,
{ 167: } 386,
{ 168: } 388,
{ 169: } 390,
-{ 170: } 391,
+{ 170: } 392,
{ 171: } 392,
-{ 172: } 392,
-{ 173: } 393,
+{ 172: } 393,
+{ 173: } 394,
{ 174: } 394,
{ 175: } 395,
{ 176: } 396,
{ 177: } 397,
-{ 178: } 397,
-{ 179: } 398,
+{ 178: } 398,
+{ 179: } 399,
{ 180: } 399,
-{ 181: } 401,
-{ 182: } 402,
-{ 183: } 404,
-{ 184: } 406,
-{ 185: } 408,
-{ 186: } 410,
-{ 187: } 412,
-{ 188: } 414,
-{ 189: } 416,
-{ 190: } 418,
-{ 191: } 420,
-{ 192: } 422,
-{ 193: } 423,
+{ 181: } 400,
+{ 182: } 401,
+{ 183: } 403,
+{ 184: } 404,
+{ 185: } 406,
+{ 186: } 408,
+{ 187: } 410,
+{ 188: } 412,
+{ 189: } 414,
+{ 190: } 416,
+{ 191: } 418,
+{ 192: } 420,
+{ 193: } 422,
{ 194: } 424,
{ 195: } 425,
-{ 196: } 427,
-{ 197: } 429,
-{ 198: } 431,
-{ 199: } 433,
-{ 200: } 435,
-{ 201: } 437,
-{ 202: } 439,
-{ 203: } 440,
-{ 204: } 442,
-{ 205: } 444,
-{ 206: } 446,
-{ 207: } 447,
-{ 208: } 449,
-{ 209: } 451,
-{ 210: } 452,
+{ 196: } 426,
+{ 197: } 427,
+{ 198: } 429,
+{ 199: } 431,
+{ 200: } 433,
+{ 201: } 435,
+{ 202: } 437,
+{ 203: } 439,
+{ 204: } 441,
+{ 205: } 442,
+{ 206: } 444,
+{ 207: } 446,
+{ 208: } 448,
+{ 209: } 449,
+{ 210: } 451,
{ 211: } 453,
{ 212: } 454,
{ 213: } 455,
-{ 214: } 457,
-{ 215: } 458,
+{ 214: } 456,
+{ 215: } 457,
{ 216: } 459,
-{ 217: } 459,
-{ 218: } 459,
-{ 219: } 460,
+{ 217: } 460,
+{ 218: } 461,
+{ 219: } 461,
{ 220: } 461,
{ 221: } 462,
{ 222: } 463,
{ 223: } 464,
-{ 224: } 466,
-{ 225: } 468,
-{ 226: } 470,
-{ 227: } 471,
-{ 228: } 473,
-{ 229: } 474,
-{ 230: } 476,
-{ 231: } 478,
-{ 232: } 480,
-{ 233: } 482,
-{ 234: } 484,
-{ 235: } 485,
+{ 224: } 465,
+{ 225: } 466,
+{ 226: } 468,
+{ 227: } 470,
+{ 228: } 472,
+{ 229: } 473,
+{ 230: } 475,
+{ 231: } 476,
+{ 232: } 478,
+{ 233: } 480,
+{ 234: } 482,
+{ 235: } 484,
{ 236: } 486,
-{ 237: } 488,
-{ 238: } 490,
-{ 239: } 491,
-{ 240: } 493,
-{ 241: } 495,
-{ 242: } 496,
+{ 237: } 487,
+{ 238: } 488,
+{ 239: } 490,
+{ 240: } 492,
+{ 241: } 493,
+{ 242: } 495,
{ 243: } 497,
{ 244: } 498,
-{ 245: } 503,
-{ 246: } 504,
+{ 245: } 499,
+{ 246: } 500,
{ 247: } 505,
-{ 248: } 508,
-{ 249: } 509,
-{ 250: } 509,
-{ 251: } 509,
-{ 252: } 509,
-{ 253: } 510,
+{ 248: } 506,
+{ 249: } 507,
+{ 250: } 510,
+{ 251: } 511,
+{ 252: } 511,
+{ 253: } 511,
{ 254: } 511,
{ 255: } 512,
-{ 256: } 514,
-{ 257: } 516,
-{ 258: } 518,
-{ 259: } 519,
+{ 256: } 513,
+{ 257: } 514,
+{ 258: } 516,
+{ 259: } 518,
{ 260: } 520,
{ 261: } 521,
-{ 262: } 523,
-{ 263: } 525,
-{ 264: } 527,
-{ 265: } 528,
+{ 262: } 522,
+{ 263: } 523,
+{ 264: } 525,
+{ 265: } 527,
{ 266: } 529,
-{ 267: } 531,
-{ 268: } 532,
-{ 269: } 534,
-{ 270: } 536,
-{ 271: } 538,
-{ 272: } 541,
-{ 273: } 542,
+{ 267: } 530,
+{ 268: } 531,
+{ 269: } 533,
+{ 270: } 534,
+{ 271: } 536,
+{ 272: } 538,
+{ 273: } 540,
{ 274: } 543,
{ 275: } 544,
-{ 276: } 544,
-{ 277: } 544,
-{ 278: } 545,
-{ 279: } 547,
-{ 280: } 549,
-{ 281: } 551,
-{ 282: } 553,
-{ 283: } 555,
-{ 284: } 556,
+{ 276: } 545,
+{ 277: } 546,
+{ 278: } 546,
+{ 279: } 546,
+{ 280: } 547,
+{ 281: } 549,
+{ 282: } 551,
+{ 283: } 553,
+{ 284: } 555,
{ 285: } 557,
{ 286: } 558,
{ 287: } 559,
-{ 288: } 562,
-{ 289: } 563,
+{ 288: } 560,
+{ 289: } 561,
{ 290: } 564,
-{ 291: } 564,
-{ 292: } 565,
+{ 291: } 565,
+{ 292: } 566,
{ 293: } 566,
-{ 294: } 568,
-{ 295: } 569,
+{ 294: } 567,
+{ 295: } 568,
{ 296: } 570,
{ 297: } 571,
{ 298: } 572,
@@ -5444,14 +5462,14 @@ yytl : array [0..yynstates-1] of Integer = (
{ 308: } 582,
{ 309: } 583,
{ 310: } 584,
-{ 311: } 586,
-{ 312: } 587,
-{ 313: } 589,
-{ 314: } 591,
-{ 315: } 592,
+{ 311: } 585,
+{ 312: } 586,
+{ 313: } 588,
+{ 314: } 589,
+{ 315: } 591,
{ 316: } 593,
-{ 317: } 595,
-{ 318: } 596,
+{ 317: } 594,
+{ 318: } 595,
{ 319: } 597,
{ 320: } 598,
{ 321: } 599,
@@ -5476,13 +5494,13 @@ yytl : array [0..yynstates-1] of Integer = (
{ 340: } 618,
{ 341: } 619,
{ 342: } 620,
-{ 343: } 620,
-{ 344: } 621,
+{ 343: } 621,
+{ 344: } 622,
{ 345: } 622,
{ 346: } 623,
{ 347: } 624,
-{ 348: } 624,
-{ 349: } 625,
+{ 348: } 625,
+{ 349: } 626,
{ 350: } 626,
{ 351: } 627,
{ 352: } 628,
@@ -5500,8 +5518,10 @@ yytl : array [0..yynstates-1] of Integer = (
{ 364: } 640,
{ 365: } 641,
{ 366: } 642,
-{ 367: } 642,
-{ 368: } 643
+{ 367: } 643,
+{ 368: } 644,
+{ 369: } 644,
+{ 370: } 645
);
yyth : array [0..yynstates-1] of Integer = (
@@ -5573,75 +5593,75 @@ yyth : array [0..yynstates-1] of Integer = (
{ 65: } 209,
{ 66: } 214,
{ 67: } 215,
-{ 68: } 215,
-{ 69: } 216,
-{ 70: } 218,
-{ 71: } 221,
-{ 72: } 221,
-{ 73: } 221,
-{ 74: } 221,
-{ 75: } 221,
-{ 76: } 221,
-{ 77: } 221,
-{ 78: } 221,
-{ 79: } 221,
-{ 80: } 223,
-{ 81: } 229,
-{ 82: } 232,
-{ 83: } 233,
-{ 84: } 240,
-{ 85: } 241,
-{ 86: } 242,
-{ 87: } 243,
-{ 88: } 245,
-{ 89: } 247,
-{ 90: } 249,
-{ 91: } 251,
-{ 92: } 253,
-{ 93: } 255,
-{ 94: } 257,
-{ 95: } 260,
-{ 96: } 262,
-{ 97: } 264,
-{ 98: } 266,
-{ 99: } 268,
-{ 100: } 270,
-{ 101: } 272,
-{ 102: } 275,
-{ 103: } 277,
-{ 104: } 279,
-{ 105: } 281,
-{ 106: } 283,
-{ 107: } 285,
-{ 108: } 287,
-{ 109: } 289,
-{ 110: } 291,
-{ 111: } 293,
-{ 112: } 295,
-{ 113: } 297,
-{ 114: } 299,
-{ 115: } 301,
-{ 116: } 303,
-{ 117: } 305,
-{ 118: } 305,
-{ 119: } 305,
-{ 120: } 305,
-{ 121: } 307,
+{ 68: } 216,
+{ 69: } 217,
+{ 70: } 219,
+{ 71: } 222,
+{ 72: } 222,
+{ 73: } 222,
+{ 74: } 222,
+{ 75: } 222,
+{ 76: } 222,
+{ 77: } 222,
+{ 78: } 222,
+{ 79: } 222,
+{ 80: } 224,
+{ 81: } 230,
+{ 82: } 233,
+{ 83: } 234,
+{ 84: } 241,
+{ 85: } 242,
+{ 86: } 243,
+{ 87: } 244,
+{ 88: } 246,
+{ 89: } 248,
+{ 90: } 250,
+{ 91: } 252,
+{ 92: } 254,
+{ 93: } 256,
+{ 94: } 258,
+{ 95: } 261,
+{ 96: } 263,
+{ 97: } 265,
+{ 98: } 267,
+{ 99: } 269,
+{ 100: } 271,
+{ 101: } 273,
+{ 102: } 276,
+{ 103: } 278,
+{ 104: } 280,
+{ 105: } 282,
+{ 106: } 284,
+{ 107: } 286,
+{ 108: } 288,
+{ 109: } 290,
+{ 110: } 292,
+{ 111: } 294,
+{ 112: } 296,
+{ 113: } 298,
+{ 114: } 300,
+{ 115: } 302,
+{ 116: } 304,
+{ 117: } 306,
+{ 118: } 306,
+{ 119: } 306,
+{ 120: } 306,
+{ 121: } 306,
{ 122: } 308,
{ 123: } 309,
{ 124: } 310,
-{ 125: } 310,
-{ 126: } 311,
-{ 127: } 312,
+{ 125: } 311,
+{ 126: } 312,
+{ 127: } 313,
{ 128: } 314,
{ 129: } 316,
-{ 130: } 317,
-{ 131: } 318,
-{ 132: } 319,
+{ 130: } 318,
+{ 131: } 319,
+{ 132: } 320,
{ 133: } 321,
-{ 134: } 322,
-{ 135: } 323,
-{ 136: } 323,
+{ 134: } 323,
+{ 135: } 324,
+{ 136: } 325,
{ 137: } 325,
{ 138: } 327,
{ 139: } 329,
@@ -5651,7 +5671,7 @@ yyth : array [0..yynstates-1] of Integer = (
{ 143: } 337,
{ 144: } 339,
{ 145: } 341,
-{ 146: } 344,
+{ 146: } 343,
{ 147: } 346,
{ 148: } 348,
{ 149: } 350,
@@ -5663,143 +5683,143 @@ yyth : array [0..yynstates-1] of Integer = (
{ 155: } 362,
{ 156: } 364,
{ 157: } 366,
-{ 158: } 371,
+{ 158: } 368,
{ 159: } 373,
{ 160: } 375,
{ 161: } 377,
-{ 162: } 378,
-{ 163: } 379,
+{ 162: } 379,
+{ 163: } 380,
{ 164: } 381,
{ 165: } 383,
{ 166: } 385,
{ 167: } 387,
{ 168: } 389,
-{ 169: } 390,
+{ 169: } 391,
{ 170: } 391,
-{ 171: } 391,
-{ 172: } 392,
+{ 171: } 392,
+{ 172: } 393,
{ 173: } 393,
{ 174: } 394,
{ 175: } 395,
{ 176: } 396,
-{ 177: } 396,
-{ 178: } 397,
+{ 177: } 397,
+{ 178: } 398,
{ 179: } 398,
-{ 180: } 400,
-{ 181: } 401,
-{ 182: } 403,
-{ 183: } 405,
-{ 184: } 407,
-{ 185: } 409,
-{ 186: } 411,
-{ 187: } 413,
-{ 188: } 415,
-{ 189: } 417,
-{ 190: } 419,
-{ 191: } 421,
-{ 192: } 422,
+{ 180: } 399,
+{ 181: } 400,
+{ 182: } 402,
+{ 183: } 403,
+{ 184: } 405,
+{ 185: } 407,
+{ 186: } 409,
+{ 187: } 411,
+{ 188: } 413,
+{ 189: } 415,
+{ 190: } 417,
+{ 191: } 419,
+{ 192: } 421,
{ 193: } 423,
{ 194: } 424,
-{ 195: } 426,
-{ 196: } 428,
-{ 197: } 430,
-{ 198: } 432,
-{ 199: } 434,
-{ 200: } 436,
-{ 201: } 438,
-{ 202: } 439,
-{ 203: } 441,
-{ 204: } 443,
-{ 205: } 445,
-{ 206: } 446,
-{ 207: } 448,
-{ 208: } 450,
-{ 209: } 451,
+{ 195: } 425,
+{ 196: } 426,
+{ 197: } 428,
+{ 198: } 430,
+{ 199: } 432,
+{ 200: } 434,
+{ 201: } 436,
+{ 202: } 438,
+{ 203: } 440,
+{ 204: } 441,
+{ 205: } 443,
+{ 206: } 445,
+{ 207: } 447,
+{ 208: } 448,
+{ 209: } 450,
{ 210: } 452,
{ 211: } 453,
{ 212: } 454,
-{ 213: } 456,
-{ 214: } 457,
+{ 213: } 455,
+{ 214: } 456,
{ 215: } 458,
-{ 216: } 458,
-{ 217: } 458,
-{ 218: } 459,
+{ 216: } 459,
+{ 217: } 460,
+{ 218: } 460,
{ 219: } 460,
{ 220: } 461,
{ 221: } 462,
{ 222: } 463,
-{ 223: } 465,
-{ 224: } 467,
-{ 225: } 469,
-{ 226: } 470,
-{ 227: } 472,
-{ 228: } 473,
-{ 229: } 475,
-{ 230: } 477,
-{ 231: } 479,
-{ 232: } 481,
-{ 233: } 483,
-{ 234: } 484,
+{ 223: } 464,
+{ 224: } 465,
+{ 225: } 467,
+{ 226: } 469,
+{ 227: } 471,
+{ 228: } 472,
+{ 229: } 474,
+{ 230: } 475,
+{ 231: } 477,
+{ 232: } 479,
+{ 233: } 481,
+{ 234: } 483,
{ 235: } 485,
-{ 236: } 487,
-{ 237: } 489,
-{ 238: } 490,
-{ 239: } 492,
-{ 240: } 494,
-{ 241: } 495,
+{ 236: } 486,
+{ 237: } 487,
+{ 238: } 489,
+{ 239: } 491,
+{ 240: } 492,
+{ 241: } 494,
{ 242: } 496,
{ 243: } 497,
-{ 244: } 502,
-{ 245: } 503,
+{ 244: } 498,
+{ 245: } 499,
{ 246: } 504,
-{ 247: } 507,
-{ 248: } 508,
-{ 249: } 508,
-{ 250: } 508,
-{ 251: } 508,
-{ 252: } 509,
+{ 247: } 505,
+{ 248: } 506,
+{ 249: } 509,
+{ 250: } 510,
+{ 251: } 510,
+{ 252: } 510,
{ 253: } 510,
{ 254: } 511,
-{ 255: } 513,
-{ 256: } 515,
-{ 257: } 517,
-{ 258: } 518,
+{ 255: } 512,
+{ 256: } 513,
+{ 257: } 515,
+{ 258: } 517,
{ 259: } 519,
{ 260: } 520,
-{ 261: } 522,
-{ 262: } 524,
-{ 263: } 526,
-{ 264: } 527,
+{ 261: } 521,
+{ 262: } 522,
+{ 263: } 524,
+{ 264: } 526,
{ 265: } 528,
-{ 266: } 530,
-{ 267: } 531,
-{ 268: } 533,
-{ 269: } 535,
-{ 270: } 537,
-{ 271: } 540,
-{ 272: } 541,
+{ 266: } 529,
+{ 267: } 530,
+{ 268: } 532,
+{ 269: } 533,
+{ 270: } 535,
+{ 271: } 537,
+{ 272: } 539,
{ 273: } 542,
{ 274: } 543,
-{ 275: } 543,
-{ 276: } 543,
-{ 277: } 544,
-{ 278: } 546,
-{ 279: } 548,
-{ 280: } 550,
-{ 281: } 552,
-{ 282: } 554,
-{ 283: } 555,
+{ 275: } 544,
+{ 276: } 545,
+{ 277: } 545,
+{ 278: } 545,
+{ 279: } 546,
+{ 280: } 548,
+{ 281: } 550,
+{ 282: } 552,
+{ 283: } 554,
{ 284: } 556,
{ 285: } 557,
{ 286: } 558,
-{ 287: } 561,
-{ 288: } 562,
+{ 287: } 559,
+{ 288: } 560,
{ 289: } 563,
-{ 290: } 563,
-{ 291: } 564,
+{ 290: } 564,
+{ 291: } 565,
{ 292: } 565,
-{ 293: } 567,
-{ 294: } 568,
+{ 293: } 566,
+{ 294: } 567,
{ 295: } 569,
{ 296: } 570,
{ 297: } 571,
@@ -5815,14 +5835,14 @@ yyth : array [0..yynstates-1] of Integer = (
{ 307: } 581,
{ 308: } 582,
{ 309: } 583,
-{ 310: } 585,
-{ 311: } 586,
-{ 312: } 588,
-{ 313: } 590,
-{ 314: } 591,
+{ 310: } 584,
+{ 311: } 585,
+{ 312: } 587,
+{ 313: } 588,
+{ 314: } 590,
{ 315: } 592,
-{ 316: } 594,
-{ 317: } 595,
+{ 316: } 593,
+{ 317: } 594,
{ 318: } 596,
{ 319: } 597,
{ 320: } 598,
@@ -5847,13 +5867,13 @@ yyth : array [0..yynstates-1] of Integer = (
{ 339: } 617,
{ 340: } 618,
{ 341: } 619,
-{ 342: } 619,
-{ 343: } 620,
+{ 342: } 620,
+{ 343: } 621,
{ 344: } 621,
{ 345: } 622,
{ 346: } 623,
-{ 347: } 623,
-{ 348: } 624,
+{ 347: } 624,
+{ 348: } 625,
{ 349: } 625,
{ 350: } 626,
{ 351: } 627,
@@ -5871,9 +5891,11 @@ yyth : array [0..yynstates-1] of Integer = (
{ 363: } 639,
{ 364: } 640,
{ 365: } 641,
-{ 366: } 641,
-{ 367: } 642,
-{ 368: } 642
+{ 366: } 642,
+{ 367: } 643,
+{ 368: } 643,
+{ 369: } 644,
+{ 370: } 644
);
diff --git a/utils/rmwait/Makefile.fpc b/utils/rmwait/Makefile.fpc
new file mode 100644
index 0000000000..2f3772e39d
--- /dev/null
+++ b/utils/rmwait/Makefile.fpc
@@ -0,0 +1,15 @@
+#
+# Makefile.fpc for Free Pascal Utils
+#
+
+[target]
+programs=rmwait
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[rules]
+rmwait$(EXEEXT): rmwait.pp
diff --git a/utils/rmwait/rmwait.pas b/utils/rmwait/rmwait.pas
new file mode 100644
index 0000000000..7877b057fb
--- /dev/null
+++ b/utils/rmwait/rmwait.pas
@@ -0,0 +1,559 @@
+{
+ rmwait - remove (delete) file(s) with optional retries
+ Copyright (C) 2009 by Tomas Hajny, member of the Free Pascal team
+
+ This tool tries to mimic behaviour of GNU rm, but it provides
+ the additional feature of retries and it also fixes some issues
+ appearing at least with the Win32 port of version 3.13.
+
+ See the file COPYING, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+}
+
+program rmwait;
+{$D
+Remove (delete) file(s) with optional retries.
+}
+
+{ $DEFINE DONOTHING}
+
+uses
+{$IFDEF GO32V2}
+ Go32,
+{$ENDIF GO32V2}
+{$IFDEF OS2}
+ DosCalls,
+{$ENDIF OS2}
+{$IFDEF WINDOWS}
+ Windows,
+{$ENDIF WINDOWS}
+{$IFDEF UNIX}
+ BaseUnix,
+{$ENDIF UNIX}
+ Dos;
+
+const
+ OptDirectories: boolean = false;
+ OptForce: boolean = false;
+ OptInteractive: boolean = false;
+ OptRecursive: boolean = false;
+ OptVerbose: boolean = false;
+ OptRetries: longint = 1;
+ OptWait: longint = 5;
+ OptsStop: boolean = false;
+
+
+var
+ OldExit: pointer;
+ Deleted: cardinal;
+
+procedure VerbLine (S: string); inline;
+begin
+ if OptVerbose then
+ WriteLn (S);
+end;
+
+
+procedure ForceErrorLn (S: string); inline;
+begin
+ WriteLn (ParamStr (0), ': ', S);
+end;
+
+
+procedure ErrorLn (S: string); inline;
+begin
+{ if not (OptForce) then}
+ ForceErrorLn (S);
+end;
+
+
+procedure GenericErrorLn (S: string; N: longint); inline;
+begin
+ if not (OptForce) then
+ WriteLn (ParamStr (0), ': ', S, ' (', N, ')');
+end;
+
+
+procedure ClearIO; inline;
+begin
+ if IOResult <> 0 then ;
+end;
+
+
+procedure Wait (Seconds: Cardinal);
+{$IFDEF GO32v2}
+var
+ R: Registers;
+ T0, T1, T2: int64;
+ DayOver: boolean;
+begin
+(* Sleep is supposed to give up time slice - DOS Idle Interrupt chosen
+ because it should be supported in all DOS versions. *)
+ R.AH := $2C;
+ RealIntr($21, R);
+ T0 := R.CH * 3600 + R.CL * 60 + R.DH;
+ T2 := T0 + Seconds;
+ DayOver := T2 > (24 * 3600);
+ repeat
+ Intr ($28, R);
+(* R.AH := $2C; - should be preserved. *)
+ RealIntr($21, R);
+ T1 := R.CH * 3600 + R.CL * 60 + R.DH;
+ if DayOver and (T1 < T0) then
+ Inc (T1, 24 * 3600);
+ until T1 >= T2;
+end;
+{$ELSE GO32v2}
+ {$IFDEF OS2}
+begin
+ DosSleep (Seconds * 1000);
+end;
+ {$ELSE OS2}
+ {$IFDEF UNIX}
+begin
+ fpSleep (Seconds * 1000);
+end;
+ {$ELSE UNIX}
+ {$IFDEF WINDOWS}
+begin
+ Sleep (Seconds * 1000);
+end;
+ {$ELSE WINDOWS}
+var
+ T0, T1, T2: int64;
+begin
+{$WARNING No sleeping is performed with this platform!}
+ T0 := GetMSCount;
+ T2 := T0 + Seconds * 1000;
+ repeat
+ T1 := GetMSCount;
+(* GetMSCount returning lower value than in the first check indicates overflow
+ and is treated as end of the waiting period due to undefined range. *)
+ until (T1 >= T2) or (T1 < T0);
+end;
+ {$ENDIF WINDOWS}
+ {$ENDIF UNIX}
+ {$ENDIF OS2}
+{$ENDIF GO32v2}
+
+
+procedure ClearAttribs (var F: file); inline;
+var
+ W: word;
+begin
+{$I-}
+ GetFAttr (F, W);
+ if W and (ReadOnly or SysFile) <> 0 then
+ SetFAttr (F, W and not ReadOnly and not SysFile);
+ ClearIO;
+{$I+}
+end;
+
+
+function StrF (U: cardinal): string; inline;
+begin
+ Str (U, StrF);
+end;
+
+
+function CheckOK (Msg: string; FN: PathStr): boolean;
+var
+ Resp: string;
+begin
+ Write (ParamStr (0), ': ', Msg, '''', FN, '''? ');
+ ReadLn (Resp);
+ CheckOK := (Length (Resp) > 0) and (UpCase (Resp [1]) = 'Y');
+end;
+
+
+procedure DelFile (FN: PathStr); inline;
+var
+ F: file;
+ R, Tries: longint;
+begin
+ VerbLine ('removing ''' + FN + '''');
+ Inc (Deleted);
+ if not (OptInteractive) or CheckOK ('remove ', FN) then
+ begin
+ Assign (F, FN);
+ if OptForce then
+ ClearAttribs (F);
+ Tries := 1;
+ repeat
+{$I-}
+{$IFDEF DONOTHING}
+ WriteLn ('Debug: ', FN);
+{$ELSE DONOTHING}
+ Erase (F);
+{$ENDIF DONOTHING}
+ R := IOResult;
+{$I+}
+ Inc (Tries);
+ if (R = 5) and (Tries <= OptRetries) then
+ Wait (OptWait);
+ until (R <> 5) or (Tries > OptRetries);
+ case R of
+ 0: ;
+ 2: ErrorLn (FN + ': No such file or directory');
+ 5: ErrorLn (FN + ': Permission denied');
+ else
+ GenericErrorLn (FN + ': Cannot be removed', R);
+ end;
+ end;
+end;
+
+
+procedure DelDir (FN: PathStr); inline;
+var
+ F: file;
+ R, Tries: longint;
+begin
+ VerbLine ('removing ''' + FN + '''');
+ Inc (Deleted);
+ if not (OptInteractive) or CheckOK ('remove directory ', FN) then
+ begin
+ if OptForce then
+ begin
+ Assign (F, FN);
+ ClearAttribs (F);
+ end;
+ Tries := 1;
+ repeat
+{$I-}
+{$IFDEF DONOTHING}
+ WriteLn ('Debug: Directory ', FN);
+{$ELSE DONOTHING}
+ RmDir (FN);
+{$ENDIF DONOTHING}
+ R := IOResult;
+{$I+}
+ Inc (Tries);
+ if (R = 5) and (Tries <= OptRetries) then
+ begin
+ VerbLine ('Removal attempt failed, waiting ' + StrF (OptWait) + ' seconds before trying again...');
+ Wait (OptWait);
+ end;
+ until (R <> 5) or (Tries > OptRetries);
+ case R of
+ 0: ;
+ 5: ErrorLn (FN + ': Permission denied');
+ else
+ GenericErrorLn (FN + ': Cannot be removed', R);
+ end;
+ end;
+end;
+
+
+procedure Syntax;
+begin
+ WriteLn;
+ WriteLn ('RMWait - remove (delete) file(s) with optional retries');
+ WriteLn;
+ WriteLn ('Syntax:');
+ WriteLn (ParamStr (0) + ' [<options>...] [<file specifications>...]');
+ WriteLn;
+ WriteLn ('<file specifications> may contain wildcards ''*'' and ''?''.');
+ WriteLn;
+ WriteLn ('Options:');
+ WriteLn (' -d, --directory remove directory. even if non-empty');
+ WriteLn (' -f, --force ignore non-existent files, never prompt');
+ WriteLn (' -i, --interactive prompt before any removal');
+ WriteLn (' -r, -R, --recursive remove the contents of directories recursively');
+ WriteLn (' -v, --verbose explain what is being done');
+ WriteLn (' --version output version information and exit');
+ WriteLn (' -h, -?, --help display this help and exit');
+ WriteLn (' -t[<N>[,<T>]], --try[<N>[,<T>]] in case of errors, retry deleting N times');
+ WriteLn (' (default 3 times) waiting T seconds between');
+ WriteLn (' individual attempts (default 5 seconds)');
+ WriteLn (' -- stop processing of options');
+ WriteLn;
+ WriteLn ('To remove a file whose name starts with a ''-'', for example ''-file'',');
+ WriteLn ('use one of these commands:');
+ WriteLn (' rm -- -file');
+ WriteLn (' rm ./-file');
+ WriteLn;
+ Halt;
+end;
+
+
+procedure ParError (S: string); inline;
+begin
+ ForceErrorLn (S);
+ WriteLn;
+ Syntax;
+end;
+
+
+procedure ProcessFSpec (FN: PathStr);
+var
+ SR: SearchRec;
+ D, BaseDir: DirStr;
+ N, BaseName: NameStr;
+ E: ExtStr;
+ RemFNDir: boolean;
+begin
+ RemFNDir := false;
+{$IF NOT DEFINED (OS2) and NOT DEFINED (WINDOWS) and NOT DEFINED (DPMI) and NOT DEFINED (UNIX) and NOT DEFINED (MACOS) and NOT DEFINED (AMIGA) and NOT DEFINED (NETWARE)}
+ {$WARNING Proper behaviour for this target platform has not been checked!}
+{$ENDIF}
+{$IF NOT DEFINED (MACOS) and NOT DEFINED (AMIGA)}
+(* Special case - root directory needs to be treated in a special way. *)
+ {$IFDEF UNIX}
+ if (Length (FN) = 1)
+ {$ELSE UNIX}
+ {$IF DEFINED (OS2) or DEFINED (WINDOWS) or DEFINED (DPMI)}
+ if (((Length (FN) = 3) and (FN [2] = DriveSeparator))
+ or ((Length (FN) = 2) and (FN [1] = DirectorySeparator)))
+(* Root of UNC path - nonsense, but changing it to root of current drive would be dangerous. *)
+ {$ELSE}
+ {$IFDEF NETWARE}
+ if (Length (FN) = Pos (DirectorySeparator, FN))
+ {$ENDIF NETWARE}
+ {$ENDIF}
+ and (FN [Length (FN)] = DirectorySeparator) then
+ {$ENDIF UNIX}
+ if OptRecursive then
+ begin
+ BaseDir := FN;
+ BaseName := AllFilesMask;
+ end
+ else
+ begin
+ ErrorLn (FN + ': is a directory');
+ Exit;
+ end
+ else
+{$ENDIF}
+ begin
+(* Check if the specification directly corresponds to a directory *)
+ if FN [Length (FN)] = DirectorySeparator then
+ Delete (FN, Length (FN), 1);
+ FSplit (FN, D, N, E);
+ FindFirst (FN, (AnyFile or Directory) and not VolumeID, SR);
+ if (DosError = 0) and (SR.Attr and Directory = Directory) and
+ ((SR.Name = N + E) or
+(* Checking equal names is not sufficient with case preserving file systems. *)
+ (Pos ('?', FN) = 0) and (Pos ('*', FN) = 0)) then
+ if OptRecursive then
+ begin
+ BaseDir := FN;
+ if BaseDir [Length (BaseDir)] <> DirectorySeparator then
+ BaseDir := BaseDir + DirectorySeparator;
+ BaseName := AllFilesMask;
+ RemFNDir := true;
+ end
+ else
+ if OptDirectories then
+ RemFNDir := true
+ else
+ begin
+ ErrorLn (FN + ': is a directory');
+ Exit;
+ end
+ else
+ begin
+ BaseDir := D;
+ BaseName := N + E;
+ end;
+ FindClose (SR);
+ end;
+ FindFirst (BaseDir + BaseName, AnyFile and not Directory and not VolumeID, SR);
+ while DosError = 0 do
+ begin
+ DelFile (BaseDir + SR.Name);
+ FindNext (SR);
+ end;
+ FindClose (SR);
+
+ if OptRecursive then
+ begin
+ FindFirst (BaseDir + BaseName, (AnyFile or Directory) and not VolumeID, SR);
+ while DosError = 0 do
+ begin
+ if (SR.Attr and Directory > 0) and
+ ((Length (SR.Name) <> 1) or (SR.Name [1] <> '.')) and
+ ((Length (SR.Name) <> 2) or (SR.Name [1] <> '.') or (SR.Name [2] <> '.')) and
+ (not (OptInteractive) or CheckOK ('descend directory ', BaseDir + SR.Name)) then
+ ProcessFSpec (BaseDir + SR.Name);
+ FindNext (SR);
+ end;
+ FindClose (SR);
+ end;
+ if RemFNDir then
+ DelDir (FN);
+end;
+
+
+procedure NewExit; far;
+begin
+ ExitProc := OldExit;
+ if (ErrorAddr <> nil) or (ExitCode <> 0) then
+ begin
+ ErrorAddr := nil;
+ case ExitCode of
+ 202: WriteLn ('Directory tree too deep!!');
+ 4: WriteLn ('Increase the FILES directive in CONFIG.SYS!!');
+ 5, 101, 150..152, 154, 156..158, 160..162: WriteLn ('I/O error (',
+ ExitCode, ')!!');
+ else
+ WriteLn ('Internal error (', ExitCode, ')!!');
+ end;
+ WriteLn;
+ end;
+end;
+
+
+procedure AllowSlash (var S: string); inline;
+var
+ I: byte;
+begin
+ if DirectorySeparator <> '/' then
+ for I := 1 to Length (S) do
+ begin
+ if S [I] = '/' then
+ S [I] := DirectorySeparator;
+ end;
+end;
+
+
+procedure ProcessOpts (S: string);
+var
+ I: longint;
+
+ procedure ParseOptTries; inline;
+ var
+ SN: string;
+ J, N, Err: longint;
+ begin
+ J := Succ (I);
+ while (J <= Length (S)) and (S [J] in ['0'..'9']) do
+ Inc (J);
+ if J = Succ (I) then
+ OptRetries := 3
+ else
+ begin
+ SN := Copy (S, Succ (I), J - I - 1);
+ Val (SN, N, Err);
+ if Err <> 0 then
+ ParError ('invalid value for retry attempts ''' + SN + '''');
+ OptRetries := N;
+ I := Pred (J);
+ if (J < Length (S)) and (S [J] = ',') then
+ begin
+ Inc (J);
+ Inc (I);
+ while (J <= Length (S)) and (S [J] in ['0'..'9']) do
+ Inc (J);
+ if J > Succ (I) then
+ begin
+ SN := Copy (S, Succ (I), J - I - 1);
+ Val (SN, N, Err);
+ if Err <> 0 then
+ ParError ('invalid value for retry wait time ''' + SN + '''');
+ OptWait := N;
+ I := Pred (J);
+ end;
+ end;
+ end;
+ end;
+
+begin
+ if S [2] = '-' then
+ if Length (S) = 2 then
+ OptsStop := true
+ else
+ begin
+ Delete (S, 1, 2);
+ for I := 1 to Length (S) do
+ S [I] := Upcase (S [I]);
+ if S = 'HELP' then Syntax;
+ if S = 'DIRECTORY' then
+ OptDirectories := true
+ else if S = 'FORCE' then
+ OptForce := true
+ else if S = 'INTERACTIVE' then
+ OptInteractive := true
+ else if S = 'RECURSIVE' then
+ OptRecursive := true
+ else if S = 'VERBOSE' then
+ OptVerbose := true
+ else if S = 'VERSION' then
+ begin
+ WriteLn ('rmwait - version 20091101');
+ Halt;
+ end
+ else if Copy (S, 1, 3) = 'TRY' then
+ begin
+ I := 3;
+ ParseOptTries;
+ if I <> Length (S) then
+ ParError ('unrecognized option ''' + S + '''');
+ end
+ else
+ ParError ('unrecognized option ''' + S + '''');
+ end
+ else
+ begin
+ I := 2;
+ repeat
+ case Upcase (S [I]) of
+ 'H', '?': Syntax;
+ 'D': OptDirectories := true;
+ 'F': OptForce := true;
+ 'I': OptInteractive := true;
+ 'R': OptRecursive := true;
+ 'V': OptVerbose := true;
+ 'T': ParseOptTries;
+ else
+ ParError ('invalid option -- ' + S [I])
+ end;
+ Inc (I);
+ until (I > Length (S));
+ end;
+end;
+
+var
+ J, K: longint;
+ Par: string;
+
+begin
+{$IFDEF OS2}
+ DosCalls.DosError (0);
+{$ENDIF}
+
+ OldExit := ExitProc;
+ ExitProc := @NewExit;
+
+ J := ParamCount;
+ if J = 0 then
+ Syntax
+ else
+ begin
+ K := 1;
+ Par := ParamStr (K);
+
+ while (K <= J) and (Par [1] = '-') and (Length (Par) > 1) and not OptsStop do
+ begin
+ ProcessOpts (Par);
+ Inc (K);
+ Par := ParamStr (K);
+ end;
+
+ if K > J then
+ Syntax
+ else
+ repeat
+ AllowSlash (Par);
+ Deleted := 0;
+ ProcessFSpec (FExpand (Par));
+ if Deleted = 0 then
+ ErrorLn (ParamStr (K) + ': No such file or directory');
+ Inc (K);
+ Par := ParamStr (K);
+ until K > J;
+ end;
+end.