Преглед изворни кода

--- Merging r15331 into '.':
A packages/fcl-web/src/base
A packages/fcl-web/src/base/custcgi.pp
A packages/fcl-web/src/base/ezcgi.pp
A packages/fcl-web/src/base/cgiapp.pp
A packages/fcl-web/src/base/fpweb.pp
A packages/fcl-web/src/base/fphttp.pp
A packages/fcl-web/src/base/custfcgi.pp
A packages/fcl-web/src/base/fpapache.pp
A packages/fcl-web/src/base/fcgigate.pp
A packages/fcl-web/src/base/webpage.pp
A packages/fcl-web/src/base/webutil.pp
A packages/fcl-web/src/base/custweb.pp
A packages/fcl-web/src/base/websession.pp
A packages/fcl-web/src/base/httpdefs.pp
A packages/fcl-web/src/base/fpcgi.pp
A packages/fcl-web/src/base/fphtml.pp
A packages/fcl-web/src/base/README.txt
A packages/fcl-web/src/base/fpfcgi.pp
A packages/fcl-web/src/base/fpdatasetform.pp
D packages/fcl-web/src/httpdefs.pp
D packages/fcl-web/src/websession.pp
D packages/fcl-web/src/fpcgi.pp
D packages/fcl-web/src/fphtml.pp
D packages/fcl-web/src/README.txt
D packages/fcl-web/src/fpfcgi.pp
D packages/fcl-web/src/fpdatasetform.pp
D packages/fcl-web/src/ezcgi.pp
D packages/fcl-web/src/custcgi.pp
D packages/fcl-web/src/fpweb.pp
D packages/fcl-web/src/cgiapp.pp
D packages/fcl-web/src/fphttp.pp
D packages/fcl-web/src/fpapache.pp
D packages/fcl-web/src/custfcgi.pp
D packages/fcl-web/src/fcgigate.pp
D packages/fcl-web/src/webpage.pp
D packages/fcl-web/src/webutil.pp
D packages/fcl-web/src/custweb.pp
--- Merging r15332 into '.':
U packages/fcl-web/tests/cgigateway.lpi
U packages/fcl-web/Makefile.fpc
C packages/fcl-web/Makefile
--- Merging r15333 into '.':
A packages/fcl-web/examples
A packages/fcl-web/examples/webdata
A packages/fcl-web/examples/webdata/demo
A packages/fcl-web/examples/webdata/demo/extgrid-xml.js
A packages/fcl-web/examples/webdata/demo/extgrid-json.html
A packages/fcl-web/examples/webdata/demo/lazwebdata.pas
A packages/fcl-web/examples/webdata/demo/createusers.lpr
A packages/fcl-web/examples/webdata/demo/extgrid.lpr
A packages/fcl-web/examples/webdata/demo/wmusers.lfm
A packages/fcl-web/examples/webdata/demo/wmusers.pp
A packages/fcl-web/examples/webdata/demo/wmusers.lrs
A packages/fcl-web/examples/webdata/demo/extgrid-xml.html
A packages/fcl-web/examples/webdata/demo/createusers.lpi
A packages/fcl-web/examples/webdata/demo/extgrid-json.js
A packages/fcl-web/examples/webdata/demo/extgrid.lpi
A packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
A packages/fcl-web/examples/webdata/demos.txt
A packages/fcl-web/examples/webdata/demo2
A packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
A packages/fcl-web/examples/webdata/demo2/extgrid-json.html
A packages/fcl-web/examples/webdata/demo2/extgrid.lpr
A packages/fcl-web/examples/webdata/demo2/wmusers.lfm
A packages/fcl-web/examples/webdata/demo2/wmusers.pp
A packages/fcl-web/examples/webdata/demo2/wmusers.lrs
A packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
A packages/fcl-web/examples/webdata/demo2/extgrid-json.js
A packages/fcl-web/examples/webdata/demo2/extgrid.lpi
A packages/fcl-web/examples/webdata/demo3
A packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
A packages/fcl-web/examples/webdata/demo3/tralala.lrs
A packages/fcl-web/examples/webdata/demo3/extgrid-json.html
A packages/fcl-web/examples/webdata/demo3/extgrid.lpr
A packages/fcl-web/examples/webdata/demo3/wmusers.lfm
A packages/fcl-web/examples/webdata/demo3/wmusers.pp
A packages/fcl-web/examples/webdata/demo3/wmusers.lrs
A packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
A packages/fcl-web/examples/webdata/demo3/extgrid-json.js
A packages/fcl-web/examples/webdata/demo3/extgrid.lpi
A packages/fcl-web/examples/webdata/demo3/tralala.lfm
A packages/fcl-web/examples/webdata/demo3/tralala.pp
A packages/fcl-web/examples/webdata/demo4
A packages/fcl-web/examples/webdata/demo4/dmusers.lfm
A packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
A packages/fcl-web/examples/webdata/demo4/dmusers.pp
A packages/fcl-web/examples/webdata/demo4/extgrid-json.html
A packages/fcl-web/examples/webdata/demo4/dmusers.lrs
A packages/fcl-web/examples/webdata/demo4/extgrid.lpr
A packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
A packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
A packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
A packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
A packages/fcl-web/examples/webdata/demo4/extgrid-json.js
A packages/fcl-web/examples/webdata/demo4/extgrid.lpi
A packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
A packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
A packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
A packages/fcl-web/examples/webdata/demo5
A packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
A packages/fcl-web/examples/webdata/demo5/extgrid-json.html
A packages/fcl-web/examples/webdata/demo5/extgrid.lpr
A packages/fcl-web/examples/webdata/demo5/wmusers.lfm
A packages/fcl-web/examples/webdata/demo5/wmusers.pp
A packages/fcl-web/examples/webdata/demo5/wmusers.lrs
A packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
A packages/fcl-web/examples/webdata/demo5/extgrid-json.js
A packages/fcl-web/examples/webdata/demo5/extgrid.lpi
A packages/fcl-web/examples/webdata/demo6
A packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
A packages/fcl-web/examples/webdata/demo6/extgrid-json.html
A packages/fcl-web/examples/webdata/demo6/extgrid.lpr
A packages/fcl-web/examples/webdata/demo6/wmusers.lfm
A packages/fcl-web/examples/webdata/demo6/wmusers.pp
A packages/fcl-web/examples/webdata/demo6/extgrid.ini
A packages/fcl-web/examples/webdata/demo6/wmusers.lrs
A packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
A packages/fcl-web/examples/webdata/demo6/extgrid-json.js
A packages/fcl-web/examples/webdata/demo6/extgrid.lpi
A packages/fcl-web/examples/webdata/users.dbf
--- Merging r15334 into '.':
A packages/fcl-web/src/webdata
A packages/fcl-web/src/webdata/fpextjs.pp
A packages/fcl-web/src/webdata/Makefile.fpc
A packages/fcl-web/src/webdata/extjsjson.pp
A packages/fcl-web/src/webdata/webdata.txt
A packages/fcl-web/src/webdata/fpwebdata.pp
A packages/fcl-web/src/webdata/sqldbwebdata.pp
A packages/fcl-web/src/webdata/extjsxml.pp
A packages/fcl-web/src/webdata/Makefile
--- Merging r15335 into '.':
A packages/fcl-web/src/base/Makefile.fpc
A packages/fcl-web/src/base/Makefile
--- Merging r15336 into '.':
G packages/fcl-web/Makefile.fpc
G packages/fcl-web/Makefile
--- Merging r15337 into '.':
C packages/Makefile
U packages/Makefile.fpc
--- Merging r15338 into '.':
U packages/fcl-web/src/base/Makefile.fpc
U packages/fcl-web/src/base/Makefile
--- Merging r15339 into '.':
U packages/fcl-json/tests/testjsondata.pp
U packages/fcl-json/tests/testjsonparser.pp
U packages/fcl-json/tests/testjson.lpi
U packages/fcl-json/src/fpjson.pp
--- Merging r15340 into '.':
U packages/fcl-web/fpmake.pp
--- Merging r15341 into '.':
G packages/fcl-web/Makefile.fpc
C packages/fcl-web/Makefile
--- Merging r15342 into '.':
G packages/fcl-json/tests/testjsondata.pp
G packages/fcl-json/tests/testjsonparser.pp
G packages/fcl-json/src/fpjson.pp
Summary of conflicts:
Text conflicts: 3

# revisions: 15331,15332,15333,15334,15335,15336,15337,15338,15339,15340,15341,15342
------------------------------------------------------------------------
r15331 | michael | 2010-05-27 15:36:04 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
D /trunk/packages/fcl-web/src/README.txt
A /trunk/packages/fcl-web/src/base
A /trunk/packages/fcl-web/src/base/README.txt (from /trunk/packages/fcl-web/src/README.txt:15321)
A /trunk/packages/fcl-web/src/base/cgiapp.pp (from /trunk/packages/fcl-web/src/cgiapp.pp:15321)
A /trunk/packages/fcl-web/src/base/custcgi.pp (from /trunk/packages/fcl-web/src/custcgi.pp:15329)
A /trunk/packages/fcl-web/src/base/custfcgi.pp (from /trunk/packages/fcl-web/src/custfcgi.pp:15321)
A /trunk/packages/fcl-web/src/base/custweb.pp (from /trunk/packages/fcl-web/src/custweb.pp:15322)
A /trunk/packages/fcl-web/src/base/ezcgi.pp (from /trunk/packages/fcl-web/src/ezcgi.pp:15321)
A /trunk/packages/fcl-web/src/base/fcgigate.pp (from /trunk/packages/fcl-web/src/fcgigate.pp:15329)
A /trunk/packages/fcl-web/src/base/fpapache.pp (from /trunk/packages/fcl-web/src/fpapache.pp:15322)
A /trunk/packages/fcl-web/src/base/fpcgi.pp (from /trunk/packages/fcl-web/src/fpcgi.pp:15321)
A /trunk/packages/fcl-web/src/base/fpdatasetform.pp (from /trunk/packages/fcl-web/src/fpdatasetform.pp:15321)
A /trunk/packages/fcl-web/src/base/fpfcgi.pp (from /trunk/packages/fcl-web/src/fpfcgi.pp:15321)
A /trunk/packages/fcl-web/src/base/fphtml.pp (from /trunk/packages/fcl-web/src/fphtml.pp:15321)
A /trunk/packages/fcl-web/src/base/fphttp.pp (from /trunk/packages/fcl-web/src/fphttp.pp:15322)
A /trunk/packages/fcl-web/src/base/fpweb.pp (from /trunk/packages/fcl-web/src/fpweb.pp:15321)
A /trunk/packages/fcl-web/src/base/httpdefs.pp (from /trunk/packages/fcl-web/src/httpdefs.pp:15322)
A /trunk/packages/fcl-web/src/base/webpage.pp (from /trunk/packages/fcl-web/src/webpage.pp:15321)
A /trunk/packages/fcl-web/src/base/websession.pp (from /trunk/packages/fcl-web/src/websession.pp:15321)
A /trunk/packages/fcl-web/src/base/webutil.pp (from /trunk/packages/fcl-web/src/webutil.pp:15322)
D /trunk/packages/fcl-web/src/cgiapp.pp
D /trunk/packages/fcl-web/src/custcgi.pp
D /trunk/packages/fcl-web/src/custfcgi.pp
D /trunk/packages/fcl-web/src/custweb.pp
D /trunk/packages/fcl-web/src/ezcgi.pp
D /trunk/packages/fcl-web/src/fcgigate.pp
D /trunk/packages/fcl-web/src/fpapache.pp
D /trunk/packages/fcl-web/src/fpcgi.pp
D /trunk/packages/fcl-web/src/fpdatasetform.pp
D /trunk/packages/fcl-web/src/fpfcgi.pp
D /trunk/packages/fcl-web/src/fphtml.pp
D /trunk/packages/fcl-web/src/fphttp.pp
D /trunk/packages/fcl-web/src/fpweb.pp
D /trunk/packages/fcl-web/src/httpdefs.pp
D /trunk/packages/fcl-web/src/webpage.pp
D /trunk/packages/fcl-web/src/websession.pp
D /trunk/packages/fcl-web/src/webutil.pp

* Moved all to base directory
------------------------------------------------------------------------
------------------------------------------------------------------------
r15332 | michael | 2010-05-27 15:43:05 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-web/Makefile
M /trunk/packages/fcl-web/Makefile.fpc
M /trunk/packages/fcl-web/tests/cgigateway.lpi

* Reordered directories
------------------------------------------------------------------------
------------------------------------------------------------------------
r15333 | michael | 2010-05-27 16:06:12 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
A /trunk/packages/fcl-web/examples
A /trunk/packages/fcl-web/examples/webdata
A /trunk/packages/fcl-web/examples/webdata/demo
A /trunk/packages/fcl-web/examples/webdata/demo/createusers.lpi
A /trunk/packages/fcl-web/examples/webdata/demo/createusers.lpr
A /trunk/packages/fcl-web/examples/webdata/demo/extgrid-json.html
A /trunk/packages/fcl-web/examples/webdata/demo/extgrid-json.js
A /trunk/packages/fcl-web/examples/webdata/demo/extgrid-xml.html
A /trunk/packages/fcl-web/examples/webdata/demo/extgrid-xml.js
A /trunk/packages/fcl-web/examples/webdata/demo/extgrid.lpi
A /trunk/packages/fcl-web/examples/webdata/demo/extgrid.lpr
A /trunk/packages/fcl-web/examples/webdata/demo/lazwebdata.pas
A /trunk/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
A /trunk/packages/fcl-web/examples/webdata/demo/wmusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo/wmusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo/wmusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo2
A /trunk/packages/fcl-web/examples/webdata/demo2/extgrid-json.html
A /trunk/packages/fcl-web/examples/webdata/demo2/extgrid-json.js
A /trunk/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
A /trunk/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
A /trunk/packages/fcl-web/examples/webdata/demo2/extgrid.lpi
A /trunk/packages/fcl-web/examples/webdata/demo2/extgrid.lpr
A /trunk/packages/fcl-web/examples/webdata/demo2/wmusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo2/wmusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo2/wmusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo3
A /trunk/packages/fcl-web/examples/webdata/demo3/extgrid-json.html
A /trunk/packages/fcl-web/examples/webdata/demo3/extgrid-json.js
A /trunk/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
A /trunk/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
A /trunk/packages/fcl-web/examples/webdata/demo3/extgrid.lpi
A /trunk/packages/fcl-web/examples/webdata/demo3/extgrid.lpr
A /trunk/packages/fcl-web/examples/webdata/demo3/tralala.lfm
A /trunk/packages/fcl-web/examples/webdata/demo3/tralala.lrs
A /trunk/packages/fcl-web/examples/webdata/demo3/tralala.pp
A /trunk/packages/fcl-web/examples/webdata/demo3/wmusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo3/wmusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo3/wmusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo4
A /trunk/packages/fcl-web/examples/webdata/demo4/dmusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo4/dmusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo4/dmusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo4/extgrid-json.html
A /trunk/packages/fcl-web/examples/webdata/demo4/extgrid-json.js
A /trunk/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
A /trunk/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
A /trunk/packages/fcl-web/examples/webdata/demo4/extgrid.lpi
A /trunk/packages/fcl-web/examples/webdata/demo4/extgrid.lpr
A /trunk/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo5
A /trunk/packages/fcl-web/examples/webdata/demo5/extgrid-json.html
A /trunk/packages/fcl-web/examples/webdata/demo5/extgrid-json.js
A /trunk/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
A /trunk/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
A /trunk/packages/fcl-web/examples/webdata/demo5/extgrid.lpi
A /trunk/packages/fcl-web/examples/webdata/demo5/extgrid.lpr
A /trunk/packages/fcl-web/examples/webdata/demo5/wmusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo5/wmusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo5/wmusers.pp
A /trunk/packages/fcl-web/examples/webdata/demo6
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid-json.html
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid-json.js
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid.ini
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid.lpi
A /trunk/packages/fcl-web/examples/webdata/demo6/extgrid.lpr
A /trunk/packages/fcl-web/examples/webdata/demo6/wmusers.lfm
A /trunk/packages/fcl-web/examples/webdata/demo6/wmusers.lrs
A /trunk/packages/fcl-web/examples/webdata/demo6/wmusers.pp
A /trunk/packages/fcl-web/examples/webdata/demos.txt
A /trunk/packages/fcl-web/examples/webdata/users.dbf

* Examples added
------------------------------------------------------------------------
------------------------------------------------------------------------
r15334 | michael | 2010-05-27 17:22:02 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
A /trunk/packages/fcl-web/src/webdata
A /trunk/packages/fcl-web/src/webdata/Makefile
A /trunk/packages/fcl-web/src/webdata/Makefile.fpc
A /trunk/packages/fcl-web/src/webdata/extjsjson.pp
A /trunk/packages/fcl-web/src/webdata/extjsxml.pp
A /trunk/packages/fcl-web/src/webdata/fpextjs.pp
A /trunk/packages/fcl-web/src/webdata/fpwebdata.pp
A /trunk/packages/fcl-web/src/webdata/sqldbwebdata.pp
A /trunk/packages/fcl-web/src/webdata/webdata.txt

* Added webdata
------------------------------------------------------------------------
------------------------------------------------------------------------
r15335 | michael | 2010-05-27 17:48:23 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
A /trunk/packages/fcl-web/src/base/Makefile
A /trunk/packages/fcl-web/src/base/Makefile.fpc

* Forgot to add
------------------------------------------------------------------------
------------------------------------------------------------------------
r15336 | michael | 2010-05-27 18:59:23 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-web/Makefile
M /trunk/packages/fcl-web/Makefile.fpc

* Added dependency on fcl-net for ssockets
------------------------------------------------------------------------
------------------------------------------------------------------------
r15337 | jonas | 2010-05-27 21:56:46 +0200 (Thu, 27 May 2010) | 2 lines
Changed paths:
M /trunk/packages/Makefile
M /trunk/packages/Makefile.fpc

* fcl-web now depends on fcl-net and fcl-json

------------------------------------------------------------------------
------------------------------------------------------------------------
r15338 | michael | 2010-05-27 22:39:34 +0200 (Thu, 27 May 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-web/src/base/Makefile
M /trunk/packages/fcl-web/src/base/Makefile.fpc

* fcl-net dependency
------------------------------------------------------------------------
------------------------------------------------------------------------
r15339 | michael | 2010-05-28 11:36:09 +0200 (Fri, 28 May 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-json/src/fpjson.pp
M /trunk/packages/fcl-json/tests/testjson.lpi
M /trunk/packages/fcl-json/tests/testjsondata.pp
M /trunk/packages/fcl-json/tests/testjsonparser.pp

* Added Clone and extract methods
------------------------------------------------------------------------
------------------------------------------------------------------------
r15340 | michael | 2010-05-28 11:50:37 +0200 (Fri, 28 May 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-web/fpmake.pp

* Fixed to match new directory structure, added all new units
------------------------------------------------------------------------
------------------------------------------------------------------------
r15341 | jonas | 2010-05-28 11:53:58 +0200 (Fri, 28 May 2010) | 4 lines
Changed paths:
M /trunk/packages/fcl-web/Makefile
M /trunk/packages/fcl-web/Makefile.fpc

* added ".NOTPARALLEL:", because some of the units in webdata depend
on the units in base
* regenerated with an up-to-date fpcmake

------------------------------------------------------------------------
------------------------------------------------------------------------
r15342 | michael | 2010-05-28 13:20:01 +0200 (Fri, 28 May 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-json/src/fpjson.pp
M /trunk/packages/fcl-json/tests/testjsondata.pp
M /trunk/packages/fcl-json/tests/testjsonparser.pp

Null -> null (B*y case sensitive languages)
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_4@16385 -

marco пре 14 година
родитељ
комит
1d7b9ace64
100 измењених фајлова са 8353 додато и 561 уклоњено
  1. 98 18
      .gitattributes
  2. 5 5
      packages/Makefile
  3. 5 5
      packages/Makefile.fpc
  4. 91 3
      packages/fcl-json/src/fpjson.pp
  5. 6 8
      packages/fcl-json/tests/testjson.lpi
  6. 243 13
      packages/fcl-json/tests/testjsondata.pp
  7. 8 8
      packages/fcl-json/tests/testjsonparser.pp
  8. 180 477
      packages/fcl-web/Makefile
  9. 8 21
      packages/fcl-web/Makefile.fpc
  10. 77 0
      packages/fcl-web/examples/webdata/demo/createusers.lpi
  11. 136 0
      packages/fcl-web/examples/webdata/demo/createusers.lpr
  12. 11 0
      packages/fcl-web/examples/webdata/demo/extgrid-json.html
  13. 95 0
      packages/fcl-web/examples/webdata/demo/extgrid-json.js
  14. 11 0
      packages/fcl-web/examples/webdata/demo/extgrid-xml.html
  15. 98 0
      packages/fcl-web/examples/webdata/demo/extgrid-xml.js
  16. 73 0
      packages/fcl-web/examples/webdata/demo/extgrid.lpi
  17. 14 0
      packages/fcl-web/examples/webdata/demo/extgrid.lpr
  18. 22 0
      packages/fcl-web/examples/webdata/demo/lazwebdata.pas
  19. 78 0
      packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
  20. 36 0
      packages/fcl-web/examples/webdata/demo/wmusers.lfm
  21. 12 0
      packages/fcl-web/examples/webdata/demo/wmusers.lrs
  22. 337 0
      packages/fcl-web/examples/webdata/demo/wmusers.pp
  23. 11 0
      packages/fcl-web/examples/webdata/demo2/extgrid-json.html
  24. 97 0
      packages/fcl-web/examples/webdata/demo2/extgrid-json.js
  25. 11 0
      packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
  26. 100 0
      packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
  27. 84 0
      packages/fcl-web/examples/webdata/demo2/extgrid.lpi
  28. 16 0
      packages/fcl-web/examples/webdata/demo2/extgrid.lpr
  29. 46 0
      packages/fcl-web/examples/webdata/demo2/wmusers.lfm
  30. 18 0
      packages/fcl-web/examples/webdata/demo2/wmusers.lrs
  31. 86 0
      packages/fcl-web/examples/webdata/demo2/wmusers.pp
  32. 11 0
      packages/fcl-web/examples/webdata/demo3/extgrid-json.html
  33. 97 0
      packages/fcl-web/examples/webdata/demo3/extgrid-json.js
  34. 11 0
      packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
  35. 100 0
      packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
  36. 334 0
      packages/fcl-web/examples/webdata/demo3/extgrid.lpi
  37. 16 0
      packages/fcl-web/examples/webdata/demo3/extgrid.lpr
  38. 9 0
      packages/fcl-web/examples/webdata/demo3/tralala.lfm
  39. 7 0
      packages/fcl-web/examples/webdata/demo3/tralala.lrs
  40. 28 0
      packages/fcl-web/examples/webdata/demo3/tralala.pp
  41. 49 0
      packages/fcl-web/examples/webdata/demo3/wmusers.lfm
  42. 21 0
      packages/fcl-web/examples/webdata/demo3/wmusers.lrs
  43. 68 0
      packages/fcl-web/examples/webdata/demo3/wmusers.pp
  44. 27 0
      packages/fcl-web/examples/webdata/demo4/dmusers.lfm
  45. 12 0
      packages/fcl-web/examples/webdata/demo4/dmusers.lrs
  46. 52 0
      packages/fcl-web/examples/webdata/demo4/dmusers.pp
  47. 11 0
      packages/fcl-web/examples/webdata/demo4/extgrid-json.html
  48. 97 0
      packages/fcl-web/examples/webdata/demo4/extgrid-json.js
  49. 11 0
      packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
  50. 100 0
      packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
  51. 93 0
      packages/fcl-web/examples/webdata/demo4/extgrid.lpi
  52. 15 0
      packages/fcl-web/examples/webdata/demo4/extgrid.lpr
  53. 18 0
      packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
  54. 11 0
      packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
  55. 34 0
      packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
  56. 18 0
      packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
  57. 11 0
      packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
  58. 34 0
      packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
  59. 11 0
      packages/fcl-web/examples/webdata/demo5/extgrid-json.html
  60. 97 0
      packages/fcl-web/examples/webdata/demo5/extgrid-json.js
  61. 11 0
      packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
  62. 100 0
      packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
  63. 75 0
      packages/fcl-web/examples/webdata/demo5/extgrid.lpi
  64. 15 0
      packages/fcl-web/examples/webdata/demo5/extgrid.lpr
  65. 29 0
      packages/fcl-web/examples/webdata/demo5/wmusers.lfm
  66. 15 0
      packages/fcl-web/examples/webdata/demo5/wmusers.lrs
  67. 85 0
      packages/fcl-web/examples/webdata/demo5/wmusers.pp
  68. 11 0
      packages/fcl-web/examples/webdata/demo6/extgrid-json.html
  69. 97 0
      packages/fcl-web/examples/webdata/demo6/extgrid-json.js
  70. 11 0
      packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
  71. 100 0
      packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
  72. 4 0
      packages/fcl-web/examples/webdata/demo6/extgrid.ini
  73. 362 0
      packages/fcl-web/examples/webdata/demo6/extgrid.lpi
  74. 16 0
      packages/fcl-web/examples/webdata/demo6/extgrid.lpr
  75. 131 0
      packages/fcl-web/examples/webdata/demo6/wmusers.lfm
  76. 43 0
      packages/fcl-web/examples/webdata/demo6/wmusers.lrs
  77. 107 0
      packages/fcl-web/examples/webdata/demo6/wmusers.pp
  78. 40 0
      packages/fcl-web/examples/webdata/demos.txt
  79. BIN
      packages/fcl-web/examples/webdata/users.dbf
  80. 45 3
      packages/fcl-web/fpmake.pp
  81. 3498 0
      packages/fcl-web/src/base/Makefile
  82. 42 0
      packages/fcl-web/src/base/Makefile.fpc
  83. 0 0
      packages/fcl-web/src/base/README.txt
  84. 0 0
      packages/fcl-web/src/base/cgiapp.pp
  85. 0 0
      packages/fcl-web/src/base/custcgi.pp
  86. 0 0
      packages/fcl-web/src/base/custfcgi.pp
  87. 0 0
      packages/fcl-web/src/base/custweb.pp
  88. 0 0
      packages/fcl-web/src/base/ezcgi.pp
  89. 0 0
      packages/fcl-web/src/base/fcgigate.pp
  90. 0 0
      packages/fcl-web/src/base/fpapache.pp
  91. 0 0
      packages/fcl-web/src/base/fpcgi.pp
  92. 0 0
      packages/fcl-web/src/base/fpdatasetform.pp
  93. 0 0
      packages/fcl-web/src/base/fpfcgi.pp
  94. 0 0
      packages/fcl-web/src/base/fphtml.pp
  95. 0 0
      packages/fcl-web/src/base/fphttp.pp
  96. 0 0
      packages/fcl-web/src/base/fpweb.pp
  97. 0 0
      packages/fcl-web/src/base/httpdefs.pp
  98. 0 0
      packages/fcl-web/src/base/webpage.pp
  99. 0 0
      packages/fcl-web/src/base/websession.pp
  100. 0 0
      packages/fcl-web/src/base/webutil.pp

+ 98 - 18
.gitattributes

@@ -1648,26 +1648,106 @@ packages/fcl-res/xml/versiontypes.xml svneol=native#text/plain
 packages/fcl-res/xml/winpeimagereader.xml svneol=native#text/plain
 packages/fcl-web/Makefile svneol=native#text/plain
 packages/fcl-web/Makefile.fpc svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/createusers.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/createusers.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/extgrid-json.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/extgrid-json.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/extgrid-xml.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/extgrid-xml.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/extgrid.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/extgrid.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/lazwebdata.pas svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/reglazwebdata.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/wmusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/wmusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo/wmusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/extgrid-json.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/extgrid-json.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/extgrid-xml.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/extgrid-xml.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/extgrid.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/extgrid.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/wmusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/wmusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo2/wmusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/extgrid-json.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/extgrid-json.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/extgrid-xml.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/extgrid-xml.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/extgrid.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/extgrid.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/tralala.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/tralala.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/tralala.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/wmusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/wmusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo3/wmusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/dmusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/dmusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/dmusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/extgrid-json.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/extgrid-json.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/extgrid-xml.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/extgrid-xml.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/extgrid.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/extgrid.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/extgrid-json.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/extgrid-json.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/extgrid-xml.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/extgrid-xml.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/extgrid.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/extgrid.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/wmusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/wmusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo5/wmusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid-json.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid-json.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid-xml.html svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid-xml.js svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid.ini svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid.lpi svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/extgrid.lpr svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/wmusers.lfm svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/wmusers.lrs svneol=native#text/plain
+packages/fcl-web/examples/webdata/demo6/wmusers.pp svneol=native#text/plain
+packages/fcl-web/examples/webdata/demos.txt svneol=native#text/plain
+packages/fcl-web/examples/webdata/users.dbf -text
 packages/fcl-web/fpmake.pp svneol=native#text/plain
 packages/fcl-web/fptemplate.txt svneol=native#text/plain
-packages/fcl-web/src/README.txt svneol=native#text/plain
-packages/fcl-web/src/cgiapp.pp svneol=native#text/plain
-packages/fcl-web/src/custcgi.pp svneol=native#text/plain
-packages/fcl-web/src/custfcgi.pp svneol=native#text/plain
-packages/fcl-web/src/custweb.pp svneol=native#text/plain
-packages/fcl-web/src/ezcgi.pp svneol=native#text/plain
-packages/fcl-web/src/fcgigate.pp svneol=native#text/plain
-packages/fcl-web/src/fpapache.pp svneol=native#text/plain
-packages/fcl-web/src/fpcgi.pp svneol=native#text/plain
-packages/fcl-web/src/fpdatasetform.pp svneol=native#text/plain
-packages/fcl-web/src/fpfcgi.pp svneol=native#text/plain
-packages/fcl-web/src/fphtml.pp svneol=native#text/plain
-packages/fcl-web/src/fphttp.pp svneol=native#text/plain
-packages/fcl-web/src/fpweb.pp svneol=native#text/plain
-packages/fcl-web/src/httpdefs.pp svneol=native#text/plain
-packages/fcl-web/src/webpage.pp svneol=native#text/plain
-packages/fcl-web/src/websession.pp svneol=native#text/plain
-packages/fcl-web/src/webutil.pp svneol=native#text/plain
+packages/fcl-web/src/base/Makefile svneol=native#text/plain
+packages/fcl-web/src/base/Makefile.fpc svneol=native#text/plain
+packages/fcl-web/src/base/README.txt svneol=native#text/plain
+packages/fcl-web/src/base/cgiapp.pp svneol=native#text/plain
+packages/fcl-web/src/base/custcgi.pp svneol=native#text/plain
+packages/fcl-web/src/base/custfcgi.pp svneol=native#text/plain
+packages/fcl-web/src/base/custweb.pp svneol=native#text/plain
+packages/fcl-web/src/base/ezcgi.pp svneol=native#text/plain
+packages/fcl-web/src/base/fcgigate.pp svneol=native#text/plain
+packages/fcl-web/src/base/fpapache.pp svneol=native#text/plain
+packages/fcl-web/src/base/fpcgi.pp svneol=native#text/plain
+packages/fcl-web/src/base/fpdatasetform.pp svneol=native#text/plain
+packages/fcl-web/src/base/fpfcgi.pp svneol=native#text/plain
+packages/fcl-web/src/base/fphtml.pp svneol=native#text/plain
+packages/fcl-web/src/base/fphttp.pp svneol=native#text/plain
+packages/fcl-web/src/base/fpweb.pp svneol=native#text/plain
+packages/fcl-web/src/base/httpdefs.pp svneol=native#text/plain
+packages/fcl-web/src/base/webpage.pp svneol=native#text/plain
+packages/fcl-web/src/base/websession.pp svneol=native#text/plain
+packages/fcl-web/src/base/webutil.pp svneol=native#text/plain
+packages/fcl-web/src/webdata/Makefile svneol=native#text/plain
+packages/fcl-web/src/webdata/Makefile.fpc svneol=native#text/plain
+packages/fcl-web/src/webdata/extjsjson.pp svneol=native#text/plain
+packages/fcl-web/src/webdata/extjsxml.pp svneol=native#text/plain
+packages/fcl-web/src/webdata/fpextjs.pp svneol=native#text/plain
+packages/fcl-web/src/webdata/fpwebdata.pp svneol=native#text/plain
+packages/fcl-web/src/webdata/sqldbwebdata.pp svneol=native#text/plain
+packages/fcl-web/src/webdata/webdata.txt svneol=native#text/plain
 packages/fcl-web/tests/cgigateway.lpi svneol=native#text/plain
 packages/fcl-web/tests/cgigateway.pp svneol=native#text/plain
 packages/fcl-web/tests/testcgiapp.lpi svneol=native#text/plain

+ 5 - 5
packages/Makefile

@@ -9007,11 +9007,11 @@ fcl-net_smart: fcl-passrc_smart fcl-xml_smart fcl-async_smart
 fcl-net_release: fcl-passrc_release fcl-xml_release fcl-async_release
 fcl-net_shared: fcl-passrc_shared fcl-xml_shared fcl-async_shared
 endif
-fcl-web_all: fcl-db_all fcl-xml_all fcl-process_all httpd22_all fastcgi_all
-fcl-web_debug: fcl-db_debug fcl-xml_debug fcl-process_debug httpd22_debug fastcgi_debug
-fcl-web_smart: fcl-db_smart fcl-xml_smart fcl-process_smart httpd22_smart fastcgi_smart
-fcl-web_release: fcl-db_release fcl-xml_release fcl-process_release httpd22_release fastcgi_release
-fcl-web_shared: fcl-db_shared fcl-xml_shared fcl-process_shared httpd22_shared fastcgi_shared
+fcl-web_all: fcl-db_all fcl-xml_all fcl-process_all httpd22_all fastcgi_all fcl-net_all fcl-json_all
+fcl-web_debug: fcl-db_debug fcl-xml_debug fcl-process_debug httpd22_debug fastcgi_debug fcl-net_debug fcl-json_debug
+fcl-web_smart: fcl-db_smart fcl-xml_smart fcl-process_smart httpd22_smart fastcgi_smart fcl-net_smart fcl-json_smart
+fcl-web_release: fcl-db_release fcl-xml_release fcl-process_release httpd22_release fastcgi_release fcl-net_release fcl-json_release
+fcl-web_shared: fcl-db_shared fcl-xml_shared fcl-process_shared httpd22_shared fastcgi_shared fcl-net_shared fcl-json_shared
 ifneq ($(findstring $(OS_TARGET),linux freebsd openbsd netbsd win32 beos haiku),)
 fcl-db_all: fcl-xml_all mysql_all ibase_all oracle_all odbc_all postgres_all sqlite_all pxlib_all
 fcl-db_debug: fcl-xml_debug mysql_debug ibase_debug oracle_debug odbc_debug postgres_debug sqlite_debug pxlib_debug

+ 5 - 5
packages/Makefile.fpc

@@ -163,11 +163,11 @@ fcl-net_release: fcl-passrc_release fcl-xml_release fcl-async_release
 fcl-net_shared: fcl-passrc_shared fcl-xml_shared fcl-async_shared
 endif
 
-fcl-web_all: fcl-db_all fcl-xml_all fcl-process_all httpd22_all fastcgi_all
-fcl-web_debug: fcl-db_debug fcl-xml_debug fcl-process_debug httpd22_debug fastcgi_debug
-fcl-web_smart: fcl-db_smart fcl-xml_smart fcl-process_smart httpd22_smart fastcgi_smart
-fcl-web_release: fcl-db_release fcl-xml_release fcl-process_release httpd22_release fastcgi_release
-fcl-web_shared: fcl-db_shared fcl-xml_shared fcl-process_shared httpd22_shared fastcgi_shared
+fcl-web_all: fcl-db_all fcl-xml_all fcl-process_all httpd22_all fastcgi_all fcl-net_all fcl-json_all
+fcl-web_debug: fcl-db_debug fcl-xml_debug fcl-process_debug httpd22_debug fastcgi_debug fcl-net_debug fcl-json_debug
+fcl-web_smart: fcl-db_smart fcl-xml_smart fcl-process_smart httpd22_smart fastcgi_smart fcl-net_smart fcl-json_smart
+fcl-web_release: fcl-db_release fcl-xml_release fcl-process_release httpd22_release fastcgi_release fcl-net_release fcl-json_release
+fcl-web_shared: fcl-db_shared fcl-xml_shared fcl-process_shared httpd22_shared fastcgi_shared fcl-net_shared fcl-json_shared
 
 ifneq ($(findstring $(OS_TARGET),linux freebsd openbsd netbsd win32 beos haiku),)
 fcl-db_all: fcl-xml_all mysql_all ibase_all oracle_all odbc_all postgres_all sqlite_all pxlib_all

+ 91 - 3
packages/fcl-json/src/fpjson.pp

@@ -57,6 +57,7 @@ type
     Constructor Create; virtual;
     Class function JSONType: TJSONType; virtual;
     Procedure Clear;  virtual; Abstract;
+    Function Clone : TJSONData; virtual; abstract;
     property Count: Integer read GetCount;
     property Items[Index: Integer]: TJSONData read GetItem write SetItem;
     property Value: variant read GetValue write SetValue;
@@ -102,6 +103,7 @@ type
     Constructor Create(AValue : TJSONFloat); reintroduce;
     class function NumberType : TJSONNumberType; override;
     Procedure Clear;  override;
+    Function Clone : TJSONData; override;
   end;
   
   { TJSONIntegerNumber }
@@ -127,6 +129,7 @@ type
     Constructor Create(AValue : Integer); reintroduce;
     class function NumberType : TJSONNumberType; override;
     Procedure Clear;  override;
+    Function Clone : TJSONData; override;
   end;
 
   { TJSONInt64Number }
@@ -152,6 +155,7 @@ type
     Constructor Create(AValue : Int64); reintroduce;
     class function NumberType : TJSONNumberType; override;
     Procedure Clear;  override;
+    Function Clone : TJSONData; override;
   end;
 
   { TJSONString }
@@ -177,6 +181,7 @@ type
     Constructor Create(AValue : TJSONStringType); reintroduce;
     class function JSONType: TJSONType; override;
     Procedure Clear;  override;
+    Function Clone : TJSONData; override;
   end;
 
   { TJSONboolean }
@@ -202,6 +207,7 @@ type
     Constructor Create(AValue : Boolean); reintroduce;
     class function JSONType: TJSONType; override;
     Procedure Clear;  override;
+    Function Clone : TJSONData; override;
   end;
 
   { TJSONnull }
@@ -226,6 +232,7 @@ type
   public
     class function JSONType: TJSONType; override;
     Procedure Clear;  override;
+    Function Clone : TJSONData; override;
   end;
 
   TJSONArrayIterator = procedure(Item: TJSONData; Data: TObject; var Continue: Boolean) of object;
@@ -275,6 +282,7 @@ type
     Constructor Create(const Elements : Array of Const); overload;
     Destructor Destroy; override;
     class function JSONType: TJSONType; override;
+    Function Clone : TJSONData; override;
     // Examine
     procedure Iterate(Iterator : TJSONArrayIterator; Data: TObject);
     function IndexOf(obj: TJSONData): Integer;
@@ -354,6 +362,7 @@ type
     Constructor Create(const Elements : Array of Const); overload;
     destructor Destroy; override;
     class function JSONType: TJSONType; override;
+    Function Clone : TJSONData; override;
     // Examine
     procedure Iterate(Iterator : TJSONObjectIterator; Data: TObject);
     function IndexOf(Item: TJSONData): Integer;
@@ -370,6 +379,7 @@ type
     function Add(const AName: TJSONStringType; AValue : TJSONArray): Integer; overload;
     procedure Delete(Index : Integer);
     procedure Remove(Item : TJSONData);
+    Function Extract(Index : Integer) : TJSONData;
 
     // Easy access properties.
     property Names[Index : Integer] : TJSONStringType read GetNameOf;
@@ -551,6 +561,12 @@ begin
   FValue:='';
 end;
 
+function TJSONString.Clone: TJSONData;
+
+begin
+  Result:=TJSONString.Create(Self.FValue);
+end;
+
 function TJSONstring.GetValue: Variant;
 begin
   Result:=FValue;
@@ -647,6 +663,11 @@ begin
   FValue:=False;
 end;
 
+function TJSONBoolean.Clone: TJSONData;
+begin
+  Result:=TJSONBoolean.Create(Self.Fvalue);
+end;
+
 
 procedure TJSONboolean.SetValue(const AValue: Variant);
 begin
@@ -696,9 +717,9 @@ end;
 function TJSONboolean.GetAsJSON: TJSONStringType;
 begin
   If FValue then
-    Result:='True'
+    Result:='true'
   else
-    Result:='False';
+    Result:='false';
 end;
 
 function TJSONboolean.GetAsString: TJSONStringType;
@@ -774,7 +795,7 @@ end;
 
 function TJSONnull.GetAsJSON: TJSONStringType;
 begin
-  Result:='Null';
+  Result:='null';
 end;
 
 function TJSONnull.GetAsString: TJSONStringType;
@@ -806,6 +827,12 @@ procedure TJSONNull.Clear;
 begin
   // Do nothing
 end;
+
+function TJSONNull.Clone: TJSONData;
+begin
+  Result:=TJSONNull.Create;
+end;
+
 {$warnings on}
 
 
@@ -898,6 +925,12 @@ begin
   FValue:=0;
 end;
 
+function TJSONFloatNumber.Clone: TJSONData;
+
+begin
+  Result:=TJSONFloatNumber.Create(Self.FValue);
+end;
+
 { TJSONIntegerNumber }
 
 function TJSONIntegerNumber.GetAsBoolean: Boolean;
@@ -980,6 +1013,12 @@ begin
   FValue:=0;
 end;
 
+function TJSONIntegerNumber.Clone: TJSONData;
+
+begin
+  Result:=TJSONIntegerNumber.Create(Self.FValue);
+end;
+
 { TJSONInt64Number }
 
 function TJSONInt64Number.GetAsInt64: Int64;
@@ -1062,6 +1101,12 @@ begin
   FValue:=0;
 end;
 
+function TJSONInt64Number.Clone: TJSONData;
+
+begin
+  Result:=TJSONInt64Number.Create(Self.FValue);
+end;
+
 { TJSONArray }
 
 function TJSONArray.GetBooleans(Index : Integer): Boolean;
@@ -1310,6 +1355,24 @@ begin
   Result:=jtArray;
 end;
 
+function TJSONArray.Clone: TJSONData;
+
+Var
+  A : TJSONArray;
+  I : Integer;
+
+begin
+  A:=TJSONArray.Create;
+  try
+    For I:=0 to Count-1 do
+      A.Add(Self.Items[I].Clone);
+    Result:=A;
+  except
+    A.Free;
+    Raise;
+  end;
+end;
+
 procedure TJSONArray.Iterate(Iterator: TJSONArrayIterator; Data: TObject);
 
 Var
@@ -1664,6 +1727,25 @@ begin
   Result:=jtObject;
 end;
 
+function TJSONObject.Clone: TJSONData;
+
+Var
+  O : TJSONObject;
+  I: Integer;
+  N : TJSONStringType;
+
+begin
+  O:=TJSONObject.Create;
+  try
+    For I:=0 to Count-1 do
+      O.Add(Self.Names[I],Self.Items[I].Clone);
+    Result:=O;
+  except
+    FreeAndNil(O);
+    Raise;
+  end;
+end;
+
 procedure TJSONObject.Iterate(Iterator: TJSONObjectIterator; Data: TObject);
 
 Var
@@ -1748,5 +1830,11 @@ begin
   FHash.Remove(Item);
 end;
 
+function TJSONObject.Extract(Index: Integer): TJSONData;
+begin
+  Result:=Items[Index];
+  FHash.Extract(Result);
+end;
+
 end.
 

+ 6 - 8
packages/fcl-json/tests/testjson.lpi

@@ -1,16 +1,17 @@
 <?xml version="1.0"?>
 <CONFIG>
   <ProjectOptions>
-    <PathDelim Value="/"/>
-    <Version Value="5"/>
+    <Version Value="7"/>
     <General>
+      <Flags>
+        <LRSInOutputDirectory Value="False"/>
+      </Flags>
       <SessionStorage Value="InProjectDir"/>
       <MainUnit Value="0"/>
-      <IconPath Value="./"/>
       <TargetFileExt Value=""/>
     </General>
     <VersionInfo>
-      <ProjectVersion Value=""/>
+      <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="0.0.0.0" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/>
     </VersionInfo>
     <PublishOptions>
       <Version Value="2"/>
@@ -57,13 +58,10 @@
     </Units>
   </ProjectOptions>
   <CompilerOptions>
-    <Version Value="5"/>
+    <Version Value="8"/>
     <SearchPaths>
       <OtherUnitFiles Value="../src/"/>
     </SearchPaths>
-    <CodeGeneration>
-      <Generate Value="Faster"/>
-    </CodeGeneration>
     <Other>
       <CompilerPath Value="$(CompPath)"/>
     </Other>

+ 243 - 13
packages/fcl-json/tests/testjsondata.pp

@@ -55,6 +55,7 @@ type
   TTestNull = class(TTestJSON)
   published
     procedure TestNull;
+    Procedure TestClone;
   end;
   
   { TTestBoolean }
@@ -63,6 +64,7 @@ type
   published
     procedure TestTrue;
     procedure TestFalse;
+    Procedure TestClone;
   end;
   
   { TTestInteger }
@@ -74,6 +76,7 @@ type
     procedure TestPositive;
     procedure TestNegative;
     procedure TestZero;
+    Procedure TestClone;
   end;
 
   { TTestInt64 }
@@ -85,6 +88,7 @@ type
     procedure TestPositive;
     procedure TestNegative;
     procedure TestZero;
+    Procedure TestClone;
   end;
   
   { TTestFloat }
@@ -96,6 +100,7 @@ type
     procedure TestPositive;
     procedure TestNegative;
     procedure TestZero;
+    Procedure TestClone;
   end;
 
   { TTestString }
@@ -111,6 +116,7 @@ type
     procedure TestNegativeFloat;
     Procedure TestBooleanTrue;
     Procedure TestBooleanFalse;
+    Procedure TestClone;
   end;
   
   { TTestArray }
@@ -143,6 +149,7 @@ type
     procedure TestAddArray;
     procedure TestDelete;
     procedure TestRemove;
+    Procedure TestClone;
   end;
   
   { TTestObject }
@@ -175,6 +182,8 @@ type
     procedure TestAddArray;
     procedure TestDelete;
     procedure TestRemove;
+    procedure TestClone;
+    procedure TestExtract;
   end;
 
 
@@ -383,7 +392,7 @@ begin
   try
     TestJSONType(J,jtBoolean);
     TestItemCount(J,0);
-    TestJSON(J,'True');
+    TestJSON(J,'true');
     TestIsNull(J,False);
     TestAsBoolean(J,True);
     TestAsInteger(J,1);
@@ -405,7 +414,7 @@ begin
   try
     TestJSONType(J,jtBoolean);
     TestItemCount(J,0);
-    TestJSON(J,'False');
+    TestJSON(J,'false');
     TestIsNull(J,False);
     TestAsBoolean(J,False);
     TestAsInteger(J,0);
@@ -417,6 +426,27 @@ begin
   end;
 end;
 
+procedure TTestBoolean.TestClone;
+
+Var
+  B : TJSONBoolean;
+  D : TJSONData;
+
+begin
+  B:=TJSONBoolean.Create(true);
+  try
+    D:=B.Clone;
+    try
+     TestJSONType(D,jtBoolean);
+     TestAsBoolean(D,true);
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(B);
+  end;
+end;
+
 
 
 { TTestNull }
@@ -431,7 +461,7 @@ begin
   try
     TestJSONType(J,jtNull);
     TestItemCount(J,0);
-    TestJSON(J,'Null');
+    TestJSON(J,'null');
     TestIsNull(J,True);
     TestAsBoolean(J,False,True);
     TestAsInteger(J,0,true);
@@ -443,6 +473,26 @@ begin
   end;
 end;
 
+procedure TTestNull.TestClone;
+
+Var
+  J : TJSONNull;
+  D : TJSONData;
+
+begin
+  J:=TJSONNull.Create;
+  try
+    D:=J.Clone;
+    try
+      TestIsNull(D,True);
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(J);
+  end;
+end;
+
 
 { TTestString }
 
@@ -543,7 +593,7 @@ end;
 procedure TTestString.TestBooleanTrue;
 
 Const
-  S = 'True';
+  S = 'true';
 
 Var
   J : TJSONString;
@@ -568,7 +618,7 @@ end;
 procedure TTestString.TestBooleanFalse;
 
 Const
-  S = 'False';
+  S = 'false';
 
 Var
   J : TJSONString;
@@ -590,6 +640,27 @@ begin
   end;
 end;
 
+procedure TTestString.TestClone;
+
+Var
+  S : TJSONString;
+  D : TJSONData;
+
+begin
+  S:=TJSONString.Create('aloha');
+  try
+    D:=S.Clone;
+    try
+     TestJSONType(D,jtString);
+     TestAsString(D,'aloha');
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(S);
+  end;
+end;
+
 procedure TTestString.DoTestFloat(F : TJSOnFloat;S : String; OK : Boolean);
 
 Var
@@ -654,6 +725,28 @@ begin
   DoTest(0);
 end;
 
+procedure TTestInteger.TestClone;
+
+Var
+  I : TJSONIntegerNumber;
+  D : TJSONData;
+
+begin
+  I:=TJSONIntegerNumber.Create(99);
+  try
+    D:=I.Clone;
+    try
+     TestJSONType(D,jtNumber);
+     TestAsInteger(D,99);
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(I);
+  end;
+
+end;
+
 { TTestInt64 }
 
 procedure TTestInt64.DoTest(I: Int64);
@@ -695,6 +788,29 @@ begin
   DoTest(0);
 end;
 
+procedure TTestInt64.TestClone;
+
+Var
+  I : TJSONInt64Number;
+  D : TJSONData;
+
+begin
+  I:=TJSONInt64Number.Create(99);
+  try
+    D:=I.Clone;
+    try
+     TestJSONType(D,jtNumber);
+     AssertEquals('Numbertype is ntInt64',ord(ntInt64),Ord(TJSONInt64Number(D).NumberType));
+     TestAsInteger(D,99);
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(I);
+  end;
+
+end;
+
 { TTestFloat }
 
 procedure TTestFloat.DoTest(F: TJSONFloat);
@@ -747,6 +863,29 @@ begin
   DoTest(0.0);
 end;
 
+procedure TTestFloat.TestClone;
+
+Var
+  F : TJSONFloatNumber;
+  D : TJSONData;
+
+begin
+  F:=TJSONFloatNumber.Create(1.23);
+  try
+    D:=F.Clone;
+    try
+     TestJSONType(D,jtNumber);
+     AssertEquals('Numbertype is ntFloat',ord(ntFloat),Ord(TJSONFloatNumber(D).NumberType));
+     TestAsFloat(D,1.23);
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(F);
+  end;
+
+end;
+
 { TTestArray }
 
 procedure TTestArray.TestCreate;
@@ -912,7 +1051,7 @@ begin
     TestJSONType(J,jtArray);
     TestItemCount(J,1);
     TestJSONType(J[0],jtBoolean);
-    TestJSON(J,'[True]');
+    TestJSON(J,'[true]');
   finally
     FreeAndNil(J);
   end;
@@ -1093,9 +1232,9 @@ begin
     TestAsBoolean(J[0],B);
     AssertEquals('J.Booleans[0]='+BoolToStr(B)+'"',B,J.Booleans[0]);
     If B then
-      TestJSON(J,'[True]')
+      TestJSON(J,'[true]')
     else
-      TestJSON(J,'[False]');
+      TestJSON(J,'[false]');
   finally
     FreeAndNil(J);
   end;
@@ -1153,7 +1292,7 @@ begin
     AssertEquals('J[0] is TJSONNull',TJSONNull,J[0].ClassType);
     AssertEquals('J.Nulls[0]=True',True,J.Nulls[0]);
     TestIsNull(J[0],true);
-    TestJSON(J,'[Null]');
+    TestJSON(J,'[null]');
   finally
     FreeAndNil(J);
   end;
@@ -1268,6 +1407,34 @@ begin
   end;
 end;
 
+procedure TTestArray.TestClone;
+
+Var
+  J,J2 : TJSONArray;
+  D : TJSONData;
+
+begin
+  J:=TJSonArray.Create;
+  try
+    J.Add(1);
+    J.Add('aloha');
+    D:=J.Clone;
+    try
+      TestJSONType(D,jtArray);
+      J2:=TJSonArray(D);
+      TestItemCount(J2,2);
+      TestJSONType(J2[0],jtNumber);
+      TestJSONType(J2[1],jtString);
+      TestAsInteger(J2[0],1);
+      TestAsString(J2[1],'aloha');
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(J);
+  end;
+end;
+
 { TTestObject }
 
 procedure TTestObject.TestCreate;
@@ -1388,9 +1555,9 @@ begin
     TestAsBoolean(J[a],B);
     AssertEquals('J.Booleans[''a'']='+BoolToStr(B)+'"',B,J.Booleans[a]);
     If B then
-      TestJSON(J,'{ "'+a+'" : True }')
+      TestJSON(J,'{ "'+a+'" : true }')
     else
-      TestJSON(J,'{ "'+a+'" : False }');
+      TestJSON(J,'{ "'+a+'" : false }');
   finally
     FreeAndNil(J);
   end;
@@ -1454,7 +1621,7 @@ begin
     AssertEquals('J[''a''] is TJSONNull',TJSONNull,J[A].ClassType);
     AssertEquals('J.Nulls[''a'']=True',True,J.Nulls[A]);
     TestIsNull(J[a],true);
-    TestJSON(J,'{ "'+a+'" : Null }');
+    TestJSON(J,'{ "'+a+'" : null }');
   finally
     FreeAndNil(J);
   end;
@@ -1582,6 +1749,69 @@ begin
   end;
 end;
 
+procedure TTestObject.TestClone;
+
+Var
+  J,J2 : TJSONObject;
+  D : TJSONData;
+
+begin
+  J:=TJSonObject.Create;
+  try
+    J.Add('p1',1);
+    J.Add('p2','aloha');
+    D:=J.Clone;
+    try
+      TestJSONType(D,jtObject);
+      J2:=TJSonObject(D);
+      TestItemCount(J2,2);
+      TestJSONType(J2['p1'],jtNumber);
+      TestJSONType(J2['p2'],jtString);
+      TestAsInteger(J2['p1'],1);
+      TestAsString(J2['p2'],'aloha');
+    finally
+      D.Free;
+    end;
+  finally
+    FreeAndNil(J);
+  end;
+end;
+
+procedure TTestObject.TestExtract;
+
+Const
+  A = 'a';
+  B = 'b';
+
+Var
+  J : TJSONObject;
+  JA,JB : TJSONData;
+  E : TJSONData;
+begin
+  J:=TJSonObject.Create;
+  try
+    J.Add(A,0);
+    J.Add(B,1);
+    TestItemCount(J,2);
+    JA:=J[A];
+    JB:=J[B];
+    TestJSONType(JA,jtNumber);
+    TestJSONType(JB,jtNumber);
+    TestJSON(J,'{ "a" : 0, "b" : 1 }');
+    E:=J.Extract(1);
+    AssertSame('Extracted JA',JB,E);
+    E.Free;
+    TestItemCount(J,1);
+    E:=J.Extract(0);
+    AssertSame('Extracted JB',JA,E);
+    E.Free;
+    TestItemCount(J,0);
+  finally
+    FreeAndNil(J);
+  end;
+
+end;
+
 
 procedure TTestObject.TestCreateString;
 
@@ -1732,7 +1962,7 @@ begin
     TestJSONType(J,jtObject);
     TestItemCount(J,1);
     TestJSONType(J[A],jtBoolean);
-    TestJSON(J,'{ "A" : True }');
+    TestJSON(J,'{ "A" : true }');
   finally
     FreeAndNil(J);
   end;

+ 8 - 8
packages/fcl-json/tests/testjsonparser.pp

@@ -116,11 +116,11 @@ Var
   J : TJSONData;
 
 begin
-  P:=TJSONParser.Create('Null');
+  P:=TJSONParser.Create('null');
   Try
     J:=P.Parse;
     If (J=Nil) then
-      Fail('Parse of Null fails');
+      Fail('Parse of null fails');
     TestJSONType(J,jtNull);
   Finally
     FreeAndNil(J);
@@ -200,9 +200,9 @@ Var
 
 begin
   DoTestArray('[]',0);
-  DoTestArray('[Null]',1);
-  DoTestArray('[True]',1);
-  DoTestArray('[False]',1);
+  DoTestArray('[null]',1);
+  DoTestArray('[true]',1);
+  DoTestArray('[false]',1);
   DoTestArray('[1]',1);
   DoTestArray('[1, 2]',2);
   DoTestArray('[1, 2, 3]',3);
@@ -218,9 +218,9 @@ begin
   DoTestArray('["A string"]',1);
   DoTestArray('["A string", "Another string"]',2);
   DoTestArray('["A string", "Another string", "Yet another string"]',3);
-  DoTestArray('[Null, False]',2);
-  DoTestArray('[True, False]',2);
-  DoTestArray('[Null, 1]',2);
+  DoTestArray('[null, false]',2);
+  DoTestArray('[true, false]',2);
+  DoTestArray('[null, 1]',2);
   DoTestArray('[1, "A string"]',2);
   DoTestArray('[1, []]',2);
   DoTestArray('[1, [1, 2]]',2);

Разлика између датотеке није приказан због своје велике величине
+ 180 - 477
packages/fcl-web/Makefile


+ 8 - 21
packages/fcl-web/Makefile.fpc

@@ -1,5 +1,5 @@
 #
-#   Makefile.fpc for FCL Web components
+#   Makefile.fpc for TDataSet for FCL
 #
 
 [package]
@@ -7,30 +7,13 @@ name=fcl-web
 version=2.4.3
 
 [target]
-units=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb \
-      webutil fpdatasetform cgiapp ezcgi fpapache webpage
-rsts=fpcgi fphtml fpweb websession cgiapp
-
-# these units are listed separately because they don't work for
-# darwin (which does support the rest of fcl-web)
-units_beos=custfcgi fpfcgi
-units_haiku=custfcgi fpfcgi
-units_freebsd=custfcgi fpfcgi
-units_solaris=custfcgi fpfcgi
-units_netbsd=custfcgi fpfcgi
-units_openbsd=custfcgi fpfcgi
-units_linux=custfcgi fpfcgi
-units_win32=custfcgi fpfcgi
-units_win64=custfcgi fpfcgi
-units_wince=custfcgi fpfcgi
+dirs=src/base src/webdata
 
 [require]
-packages=fcl-base fcl-xml fcl-db fcl-process httpd22 fastcgi
-packages_darwin=univint
+packages=fcl-base fcl-xml fcl-db fcl-json fcl-net
 
 [compiler]
 options=-S2h
-sourcedir=src
 
 [install]
 fpcpackage=y
@@ -38,6 +21,10 @@ fpcpackage=y
 [default]
 fpcdir=../..
 
-
 [rules]
 .NOTPARALLEL:
+distclean: $(addsuffix _distclean,$(TARGET_DIRS)) fpc_distclean 
+clean: $(addsuffix _clean,$(TARGET_DIRS)) fpc_clean
+cleanall: $(addsuffix _cleanall,$(TARGET_DIRS)) fpc_cleanall
+
+

+ 77 - 0
packages/fcl-web/examples/webdata/demo/createusers.lpi

@@ -0,0 +1,77 @@
+<?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"/>
+    </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="2">
+      <Unit0>
+        <Filename Value="createusers.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="createusers"/>
+        <CursorPos X="16" Y="35"/>
+        <TopLine Value="15"/>
+        <UsageCount Value="20"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="../../fpc/packages/fcl-db/src/dbase/dbf.pas"/>
+        <UnitName Value="dbf"/>
+        <CursorPos X="3" Y="1477"/>
+        <TopLine Value="1436"/>
+        <UsageCount Value="10"/>
+      </Unit1>
+    </Units>
+    <JumpHistory Count="0" HistoryIndex="-1"/>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="createusers"/>
+    </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>

+ 136 - 0
packages/fcl-web/examples/webdata/demo/createusers.lpr

@@ -0,0 +1,136 @@
+program createusers;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$IFDEF UNIX}{$IFDEF UseCThreads}
+  cthreads,
+  {$ENDIF}{$ENDIF}
+  Classes, SysUtils, dbf, CustApp, db
+  { you can add units after this };
+
+type
+
+  { TMyApplication }
+
+  TMyApplication = class(TCustomApplication)
+  private
+    procedure CreateUsers(DS: TDataset);
+  protected
+    procedure DoRun; override;
+  public
+    constructor Create(TheOwner: TComponent); override;
+    destructor Destroy; override;
+    procedure WriteHelp; virtual;
+  end;
+
+{ TMyApplication }
+
+Type
+  TUserRecord = Record
+    L,N,E : string;
+  end;
+
+Const
+  UserCount = 8;
+  Users : Array[1..UserCount] of TUserRecord = (
+   (L:'Daniel';N:'Daniel mantione'; E:'[email protected]'),
+   (L:'Florian';N:'Florian Klaempfl'; E:'[email protected]'),
+   (L:'Joost';N:'Joost van der Sluis'; E:'[email protected]'),
+   (L:'Jonas';N:'Jonas Maebe'; E:'[email protected]'),
+   (L:'Michael';N:'Michael van canneyt'; E:'[email protected]'),
+   (L:'Marco';N:'Marco Van De Voort'; E:'[email protected]'),
+   (L:'Pierre';N:'Pierre Muller'; E:'[email protected]'),
+   (L:'Tomas';N:'Tomas Hajny'; E:'[email protected]')
+   )  ;
+
+
+procedure TMyApplication.CreateUsers(DS : TDataset);
+
+Var
+  I : integer;
+
+begin
+  For I:=1 to UserCount do
+    begin
+    DS.Append;
+    DS.FieldByName('Login').AsString:=Users[i].L;
+    DS.FieldByName('Name').AsString:=Users[i].N;
+    DS.FieldByName('Email').AsString:=Users[i].E;
+    If Random(2)<1 then
+      DS.FieldByname('LastLogin').AsDatetime:=Date-Random(10);
+    DS.Post;
+    end;
+end;
+procedure TMyApplication.DoRun;
+var
+  ErrorMsg: String;
+  DB : TDBF;
+begin
+  // quick check parameters
+  ErrorMsg:=CheckOptions('h','help');
+  if ErrorMsg<>'' then begin
+    ShowException(Exception.Create(ErrorMsg));
+    Terminate;
+    Exit;
+  end;
+
+  // parse parameters
+  if HasOption('h','help') then begin
+    WriteHelp;
+    Terminate;
+    Exit;
+  end;
+
+  { add your program here }
+  DB:=TDBF.Create(Self);
+  try
+    With DB.FieldDefs do
+      begin
+      Add('ID',ftAutoInc,0,True);
+      Add('Login',ftString,30,true);
+      Add('Name',ftString,50,True);
+      Add('Email',ftString,50,False);
+      Add('LastLogin',ftDate,0,False);
+      end;
+    DB.TableName:='users.dbf';
+    DB.TableLevel:=7;
+    DB.CreateTable;
+    DB.Open;
+    CreateUsers(DB);
+  finally
+    DB.Free;
+  end;
+  // stop program loop
+  Terminate;
+end;
+
+constructor TMyApplication.Create(TheOwner: TComponent);
+begin
+  inherited Create(TheOwner);
+  StopOnException:=True;
+end;
+
+destructor TMyApplication.Destroy;
+begin
+  inherited Destroy;
+end;
+
+procedure TMyApplication.WriteHelp;
+begin
+  { add your help code here }
+  writeln('Usage: ',ExeName,' -h');
+end;
+
+var
+  Application: TMyApplication;
+
+{$IFDEF WINDOWS}{$R createusers.rc}{$ENDIF}
+
+begin
+  Application:=TMyApplication.Create(nil);
+  Application.Title:='My Application';
+  Application.Run;
+  Application.Free;
+end.
+

+ 11 - 0
packages/fcl-web/examples/webdata/demo/extgrid-json.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 95 - 0
packages/fcl-web/examples/webdata/demo/extgrid-json.js

@@ -0,0 +1,95 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/Read/name/",
+      update: "extgrid.cgi/Provider/Update/name/",
+      create: "extgrid.cgi/Provider/Insert/name/",
+      destroy: "extgrid.cgi/Provider/Delete/name/"
+    }
+  });
+  var myreader = new Ext.data.JsonReader ({
+      root: "rows",
+      idProperty: "ID",
+      messageProperty: 'message', // Must be specified here
+      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.JsonWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID"
+  });
+  var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 11 - 0
packages/fcl-web/examples/webdata/demo/extgrid-xml.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 98 - 0
packages/fcl-web/examples/webdata/demo/extgrid-xml.js

@@ -0,0 +1,98 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/Read/name/?format=xml",
+      update: "extgrid.cgi/Provider/Update/name/?format=xml",
+      create: "extgrid.cgi/Provider/Insert/name/?format=xml",
+      destroy: "extgrid.cgi/Provider/Delete/name/?format=xml",
+    }
+  });
+  var myreader = new Ext.data.XmlReader ({
+      totalProperty: "total",
+      record: "row",
+      idProperty: "ID",
+      successProperty: "success",
+      messageProperty: "message",
+      fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.XmlWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID",
+      root: "records"
+  }); 
+    var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 73 - 0
packages/fcl-web/examples/webdata/demo/extgrid.lpi

@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="7"/>
+    <General>
+      <Flags>
+        <SaveClosedFiles Value="False"/>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <Runnable Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <TargetFileExt Value=""/>
+      <Icon Value="0"/>
+      <UseXPManifest Value="True"/>
+    </General>
+    <VersionInfo>
+      <ProjectVersion 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>
+    <RequiredPackages Count="3">
+      <Item1>
+        <PackageName Value="DBFLaz"/>
+        <MinVersion Minor="1" Release="1" Valid="True"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="WebLaz"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="FCL"/>
+      </Item3>
+    </RequiredPackages>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="extgrid.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="extgrid"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="wmusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+      </Unit1>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="extgrid.cgi"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)/"/>
+      <OtherUnitFiles Value="/home/michael/public_html/extjs/"/>
+    </SearchPaths>
+    <Other>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+</CONFIG>

+ 14 - 0
packages/fcl-web/examples/webdata/demo/extgrid.lpr

@@ -0,0 +1,14 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+  fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+  Application.Initialize;
+  Application.Run;
+end.
+

+ 22 - 0
packages/fcl-web/examples/webdata/demo/lazwebdata.pas

@@ -0,0 +1,22 @@
+{ This file was automatically created by Lazarus. do not edit!
+  This source is only used to compile and install the package.
+ }
+
+unit lazwebdata; 
+
+interface
+
+uses
+    reglazwebdata, extjsjson, extjsxml, fpextjs, fpwebdata, sqldbwebdata, 
+  LazarusPackageIntf;
+
+implementation
+
+procedure Register; 
+begin
+  RegisterUnit('reglazwebdata', @reglazwebdata.Register); 
+end; 
+
+initialization
+  RegisterPackage('lazwebdata', @Register); 
+end.

+ 78 - 0
packages/fcl-web/examples/webdata/demo/reglazwebdata.pp

@@ -0,0 +1,78 @@
+unit reglazwebdata;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, fpwebdata, sqldbwebdata, LazIDEIntf, ProjectIntf, fpextjs, extjsjson, extjsxml;
+
+Type
+
+  { TFileDescWebProviderDataModule }
+
+  TFileDescWebProviderDataModule = class(TFileDescPascalUnitWithResource)
+  public
+    constructor Create; override;
+    function GetInterfaceUsesSection: string; override;
+    function GetLocalizedName: string; override;
+    function GetLocalizedDescription: string; override;
+    function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
+  end;
+
+Procedure Register;
+
+Var
+   FileDescriptorWebProviderDataModule: TFileDescWebProviderDataModule;
+
+implementation
+
+uses FormEditingIntf;
+
+constructor TFileDescWebProviderDataModule.Create;
+begin
+  inherited Create;
+  Name:='Web DataProvider Module';
+  ResourceClass:=TFPWebProviderDataModule;
+  UseCreateFormStatements:=False;
+end;
+
+function TFileDescWebProviderDataModule.GetInterfaceUsesSection: string;
+begin
+  Result:=inherited GetInterfaceUsesSection;
+  Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpwebdata';
+end;
+
+function TFileDescWebProviderDataModule.GetLocalizedName: string;
+begin
+  Result:='Web DataProvider Module';
+end;
+
+function TFileDescWebProviderDataModule.GetLocalizedDescription: string;
+begin
+  Result:='WEB DataProvider Module'#13
+         +'A datamodule to handle data requests for WEB (HTTP) applications using WebDataProvider components.';
+end;
+
+function TFileDescWebProviderDataModule.GetImplementationSource(const Filename,
+  SourceName, ResourceName: string): string;
+begin
+  Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
+  Result:=Result+'  RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding;
+end;
+
+
+Procedure Register;
+
+begin
+   RegisterComponents('fpWeb',[TWebdataInputAdaptor,TFPWebDataProvider, TSQLDBWebDataProvider,
+                               TExtJSJSonWebdataInputAdaptor,TExtJSJSONDataFormatter,
+                               TExtJSXMLWebdataInputAdaptor,TExtJSXMLDataFormatter]);
+   FileDescriptorWebProviderDataModule:=TFileDescWebProviderDataModule.Create;
+   RegisterProjectFileDescriptor(FileDescriptorWebProviderDataModule);
+   FormEditingHook.RegisterDesignerBaseClass(TFPCustomWebProviderDataModule);
+   FormEditingHook.RegisterDesignerBaseClass(TFPWebProviderDataModule);
+end;
+
+end.
+

+ 36 - 0
packages/fcl-web/examples/webdata/demo/wmusers.lfm

@@ -0,0 +1,36 @@
+object FPWebModule1: TFPWebModule1
+  OldCreateOrder = False
+  Actions = <  
+    item
+      Name = 'Read'
+      Default = False
+      OnRequest = TFPWebActions0Request
+    end  
+    item
+      Name = 'Insert'
+      Default = False
+      OnRequest = TFPWebActions1Request
+    end  
+    item
+      Name = 'Update'
+      Default = False
+      OnRequest = TFPWebActions2Request
+    end  
+    item
+      Name = 'Delete'
+      Default = False
+      OnRequest = TFPWebActions3Request
+    end>
+  CreateSession = False
+  Height = 300
+  HorizontalOffset = 696
+  VerticalOffset = 366
+  Width = 400
+  object Dbf1: TDbf
+    IndexDefs = <>
+    TableLevel = 4
+    FilterOptions = []
+    left = 23
+    top = 53
+  end
+end

+ 12 - 0
packages/fcl-web/examples/webdata/demo/wmusers.lrs

@@ -0,0 +1,12 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebModule1','FORMDATA',[
+  'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#1
+  +#4'Name'#6#4'Read'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions0Request'#0#1
+  +#4'Name'#6#6'Insert'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions1Request'#0
+  +#1#4'Name'#6#6'Update'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions2Request'
+  +#0#1#4'Name'#6#6'Delete'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions3Reques'
+  +'t'#0#0#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#184#2#14
+  +'VerticalOffset'#3'n'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#9'IndexDefs'#14#0
+  +#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2#23#3'top'#2'5'#0#0#0
+]);

+ 337 - 0
packages/fcl-web/examples/webdata/demo/wmusers.pp

@@ -0,0 +1,337 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+  db, dbf, fpwebdata, fpextjs,extjsjson,extjsxml;
+
+type
+
+  { TFPWebModule1 }
+
+  TFPWebModule1 = class(TFPWebModule)
+    Dbf1: TDbf;
+    procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest;
+      AResponse: TResponse; var Handled: Boolean);
+    procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest;
+      AResponse: TResponse; var Handled: Boolean);
+    procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest;
+      AResponse: TResponse; var Handled: Boolean);
+    procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest;
+      AResponse: TResponse; var Handled: Boolean);
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebModule1: TFPWebModule1; 
+
+implementation
+{$define wmdebug}
+
+{$ifdef wmdebug}
+uses dbugintf;
+{$endif}
+
+{ TFPWebModule1 }
+
+procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject;
+  ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+
+Var
+  PN : String;
+  P : TFPWebDataProvider;
+  F : TExtJSDataFormatter;
+  DS : TDatasource;
+  M : TMemoryStream;
+  L : Text;
+
+begin
+  // Providername;
+  PN:=ARequest.GetNextPathInfo;
+//  P:=GetWebDataProvider(PN);
+  P:=TFPWebDataProvider.Create(Self);
+  try
+    P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+    P.Adaptor.Request:=ARequest;
+    If Request.QueryFields.values['format']='xml' then
+      begin
+      F:=TExtJSXMLDataFormatter.Create(Self);
+      TExtJSXMLDataFormatter(F).TotalProperty:='total';
+      AResponse.ContentType:='text/xml';
+      end
+    else
+      F:=TExtJSJSONDataFormatter.Create(Self);
+    {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
+    try
+      DS:=TDatasource.Create(Self);
+      try
+        DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+        DS.Dataset:=DBf1;
+        DBF1.Open;
+        try
+          F.ADaptor:=P.Adaptor;
+          P.Datasource:=DS;
+          P.Adaptor.Action:=wdaRead;
+          P.ApplyParams;
+          F.Provider:=P;
+          M:=TMemoryStream.Create;
+          try
+            F.GetContent(ARequest,M,Handled);
+            M.Position:=0;
+            Response.ContentStream:=M;
+            Response.SendResponse;
+            Response.ContentStream:=Nil;
+            With TFileStream.Create('/tmp/data.xml',fmCreate) do
+              try
+                CopyFrom(M,0);
+              finally
+                Free;
+              end;
+          finally
+            M.Free;
+          end;
+        finally
+          DBF1.Close;
+        end;
+      finally
+        DS.Free;
+      end;
+    finally
+      F.Free;
+    end;
+  finally
+    P.Free;
+  end;
+end;
+
+procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject;
+  ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+Var
+  PN : String;
+  P : TFPWebDataProvider;
+  F : TExtJSDataFormatter;
+  DS : TDatasource;
+  M : TMemoryStream;
+  L : Text;
+
+begin
+  // Providername;
+  PN:=ARequest.GetNextPathInfo;
+//  P:=GetWebDataProvider(PN);
+  P:=TFPWebDataProvider.Create(Self);
+  try
+    P.IDFieldName:='ID';
+    If Request.QueryFields.values['format']='xml' then
+      begin
+      F:=TExtJSXMLDataFormatter.Create(Self);
+      AResponse.ContentType:='text/xml';
+      P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+      end
+    else
+      begin
+      F:=TExtJSJSONDataFormatter.Create(Self);
+      P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
+      end;
+    P.Adaptor.Request:=ARequest;
+    {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
+    try
+      DS:=TDatasource.Create(Self);
+      try
+        DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+        DS.Dataset:=DBf1;
+        DBF1.Open;
+        try
+          F.ADaptor:=P.Adaptor;
+          P.Datasource:=DS;
+          P.Adaptor.Action:=wdaInsert;
+          P.ApplyParams;
+          F.Provider:=P;
+          M:=TMemoryStream.Create;
+          try
+            F.GetContent(ARequest,M,Handled);
+            M.Position:=0;
+            Response.ContentStream:=M;
+            Response.SendResponse;
+            Response.ContentStream:=Nil;
+            With TFileStream.Create('/tmp/data.xml',fmCreate) do
+              try
+                CopyFrom(M,0);
+              finally
+                Free;
+              end;
+          finally
+            M.Free;
+          end;
+        finally
+          DBF1.Close;
+        end;
+      finally
+        DS.Free;
+      end;
+    finally
+      F.Free;
+    end;
+  finally
+    P.Free;
+  end;
+end;
+
+procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject;
+  ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+Var
+  PN : String;
+  P : TFPWebDataProvider;
+  F : TExtJSDataFormatter;
+  DS : TDatasource;
+  M : TMemoryStream;
+  L : Text;
+
+begin
+  // Providername;
+  {$ifdef wmdebug} SendDebug('Update request received');{$endif}
+  PN:=ARequest.GetNextPathInfo;
+//  P:=GetWebDataProvider(PN);
+  P:=TFPWebDataProvider.Create(Self);
+  try
+    P.IDFieldName:='ID';
+    If Request.QueryFields.values['format']='xml' then
+      begin
+      {$ifdef wmdebug} SendDebug('Update request received in XML');{$endif}
+      F:=TExtJSXMLDataFormatter.Create(Self);
+      AResponse.ContentType:='text/xml';
+      P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+      end
+    else
+      begin
+      F:=TExtJSJSONDataFormatter.Create(Self);
+      P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
+      end;
+    P.Adaptor.Request:=ARequest;
+    {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
+    try
+      DS:=TDatasource.Create(Self);
+      try
+        DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+        DS.Dataset:=DBf1;
+        DBF1.Open;
+        try
+          F.ADaptor:=P.Adaptor;
+          P.Datasource:=DS;
+          P.Adaptor.Action:=wdaUpdate;
+          P.ApplyParams;
+          F.Provider:=P;
+          M:=TMemoryStream.Create;
+          try
+            F.GetContent(ARequest,M,Handled);
+            M.Position:=0;
+            Response.ContentStream:=M;
+            Response.SendResponse;
+            Response.ContentStream:=Nil;
+            With TFileStream.Create('/tmp/data.xml',fmCreate) do
+              try
+                CopyFrom(M,0);
+              finally
+                Free;
+              end;
+          finally
+            M.Free;
+          end;
+        finally
+          DBF1.Close;
+        end;
+      finally
+        DS.Free;
+      end;
+    finally
+      F.Free;
+    end;
+  finally
+    P.Free;
+  end;
+end;
+
+procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject;
+  ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+
+Var
+  PN : String;
+  P : TFPWebDataProvider;
+  F : TExtJSDataFormatter;
+  DS : TDatasource;
+  M : TMemoryStream;
+  L : Text;
+
+begin
+  // Providername;
+  PN:=ARequest.GetNextPathInfo;
+//  P:=GetWebDataProvider(PN);
+  P:=TFPWebDataProvider.Create(Self);
+  try
+    P.IDFieldName:='ID';
+    If Request.QueryFields.values['format']='xml' then
+      begin
+      F:=TExtJSXMLDataFormatter.Create(Self);
+      AResponse.ContentType:='text/xml';
+      P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+      end
+    else
+      begin
+      F:=TExtJSJSONDataFormatter.Create(Self);
+      P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
+      end;
+    P.Adaptor.Request:=ARequest;
+    {$ifdef wmdebug} SendDebug('className '+F.ClassName);{$endif}
+    try
+      DS:=TDatasource.Create(Self);
+      try
+        DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+        DS.Dataset:=DBf1;
+        DBF1.Open;
+        try
+          F.ADaptor:=P.Adaptor;
+          P.Datasource:=DS;
+          P.Adaptor.Action:=wdaDelete;
+          P.ApplyParams;
+          F.Provider:=P;
+          M:=TMemoryStream.Create;
+          try
+            F.GetContent(ARequest,M,Handled);
+            M.Position:=0;
+            Response.ContentStream:=M;
+            Response.SendResponse;
+            Response.ContentStream:=Nil;
+            With TFileStream.Create('/tmp/data.xml',fmCreate) do
+              try
+                CopyFrom(M,0);
+              finally
+                Free;
+              end;
+          finally
+            M.Free;
+          end;
+        finally
+          DBF1.Close;
+        end;
+      finally
+        DS.Free;
+      end;
+    finally
+      F.Free;
+    end;
+  finally
+    P.Free;
+  end;
+end;
+
+initialization
+  {$I wmusers.lrs}
+
+  RegisterHTTPModule('Provider', TFPWebModule1);
+end.
+

+ 11 - 0
packages/fcl-web/examples/webdata/demo2/extgrid-json.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 97 - 0
packages/fcl-web/examples/webdata/demo2/extgrid-json.js

@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/Name/Read/",
+      update: "extgrid.cgi/Provider/Name/Update/",
+      create: "extgrid.cgi/Provider/Name/Insert/",
+      destroy: "extgrid.cgi/Provider/Name/Delete/"
+    }
+  });
+  var myreader = new Ext.data.JsonReader ({
+      root: "rows",
+      idProperty: "ID",
+      messageProperty: 'message', // Must be specified here
+      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.JsonWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID"
+  }); 
+  var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 11 - 0
packages/fcl-web/examples/webdata/demo2/extgrid-xml.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 100 - 0
packages/fcl-web/examples/webdata/demo2/extgrid-xml.js

@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/Name/Read/?format=xml",
+      update: "extgrid.cgi/Provider/Name/Update/?format=xml",
+      create: "extgrid.cgi/Provider/Name/Insert/?format=xml",
+      destroy: "extgrid.cgi/Provider/Name/Delete/?format=xml",
+    }
+  });
+  var myreader = new Ext.data.XmlReader ({
+      totalProperty: "total",
+      record: "row",
+      idProperty: "ID",
+      successProperty: "success",
+      messageProperty: "message",
+      fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.XmlWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID",
+      root: "records"
+  }); 
+    var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 84 - 0
packages/fcl-web/examples/webdata/demo2/extgrid.lpi

@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="7"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <Runnable Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <TargetFileExt Value=""/>
+      <Title Value="ExtJS Grid demo for fpwebdata"/>
+      <Icon Value="0"/>
+      <UseXPManifest Value="True"/>
+    </General>
+    <VersionInfo>
+      <ProjectVersion 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>
+    <RequiredPackages Count="5">
+      <Item1>
+        <PackageName Value="lazwebdata"/>
+        <MinVersion Valid="True"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="DBFLaz"/>
+        <MinVersion Minor="1" Release="1" Valid="True"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="WebLaz"/>
+      </Item3>
+      <Item4>
+        <PackageName Value="LCL"/>
+      </Item4>
+      <Item5>
+        <PackageName Value="FCL"/>
+      </Item5>
+    </RequiredPackages>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="extgrid.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="extgrid"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="wmusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+      </Unit1>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="extgrid.cgi"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)/"/>
+    </SearchPaths>
+    <CodeGeneration>
+      <Optimizations>
+        <OptimizationLevel Value="0"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Other>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+</CONFIG>

+ 16 - 0
packages/fcl-web/examples/webdata/demo2/extgrid.lpr

@@ -0,0 +1,16 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$ifdef unix}cwstring,xmliconv,{$endif}
+  fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+  Application.Title:='ExtJS Grid demo for fpwebdata';
+  Application.Initialize;
+  Application.Run;
+end.
+

+ 46 - 0
packages/fcl-web/examples/webdata/demo2/wmusers.lfm

@@ -0,0 +1,46 @@
+object FPWebModule1: TFPWebModule1
+  OnCreate = DataModuleCreate
+  OldCreateOrder = False
+  Actions = <>
+  OnRequest = DataModuleRequest
+  CreateSession = False
+  Height = 300
+  HorizontalOffset = 477
+  VerticalOffset = 302
+  Width = 400
+  object Dbf1: TDbf
+    FilePath = '/home/michael/public_html/extjs/demo2/'
+    IndexDefs = <>
+    TableName = 'users.dbf'
+    TableLevel = 4
+    FilterOptions = []
+    left = 51
+    top = 64
+  end
+  object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+    left = 146
+    top = 63
+  end
+  object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+    left = 207
+    top = 61
+  end
+  object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+    left = 151
+    top = 101
+  end
+  object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+    left = 211
+    top = 100
+  end
+  object FPWebDataProvider1: TFPWebDataProvider
+    DataSource = Datasource1
+    left = 105
+    top = 89
+  end
+  object Datasource1: TDatasource
+    DataSet = Dbf1
+    left = 48
+    top = 104
+  end
+end

+ 18 - 0
packages/fcl-web/examples/webdata/demo2/wmusers.lrs

@@ -0,0 +1,18 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebModule1','FORMDATA',[
+  'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#8'OnCreate'#7#16'DataModuleCreate'
+  +#14'OldCreateOrder'#8#7'Actions'#14#0#9'OnRequest'#7#17'DataModuleRequest'#13
+  +'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#221#1#14'VerticalO'
+  +'ffset'#3'.'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/micha'
+  +'el/public_html/extjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'
+  +#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2'3'#3'top'#2'@'#0#0#29'T'
+  +'ExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3
+  +#146#0#3'top'#2'?'#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter'
+  +'1'#4'left'#3#207#0#3'top'#2'='#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ'
+  +'SXMLWebdataInputAdaptor1'#4'left'#3#151#0#3'top'#2'e'#0#0#22'TExtJSXMLDataF'
+  +'ormatter'#22'ExtJSXMLDataFormatter1'#4'left'#3#211#0#3'top'#2'd'#0#0#18'TFP'
+  +'WebDataProvider'#18'FPWebDataProvider1'#10'DataSource'#7#11'Datasource1'#4
+  +'left'#2'i'#3'top'#2'Y'#0#0#11'TDatasource'#11'Datasource1'#7'DataSet'#7#4'D'
+  +'bf1'#4'left'#2'0'#3'top'#2'h'#0#0#0
+]);

+ 86 - 0
packages/fcl-web/examples/webdata/demo2/wmusers.pp

@@ -0,0 +1,86 @@
+unit wmusers; 
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, fpwebdata, extjsjson, extjsxml,
+  HTTPDefs, websession, fpHTTP, fpWeb, dbf, db;
+
+type
+
+  { TFPWebModule1 }
+
+  TFPWebModule1 = class(TFPWebModule)
+    Datasource1: TDatasource;
+    Dbf1: TDbf;
+    ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+    ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+    ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+    ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+    FPWebDataProvider1: TFPWebDataProvider;
+    procedure DataModuleCreate(Sender: TObject);
+    procedure DataModuleRequest(Sender: TObject; ARequest: TRequest;
+      AResponse: TResponse; var Handled: Boolean);
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebModule1: TFPWebModule1; 
+
+implementation
+
+uses dbugintf;
+
+{ TFPWebModule1 }
+
+procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
+  AResponse: TResponse; var Handled: Boolean);
+
+Var
+  CP : TCustomHTTPDataContentProducer;
+  M : TMemoryStream;
+  A : TCustomWebDataInputAdaptor;
+  PN : String;
+
+begin
+  PN:=ARequest.GetNextPathInfo;
+  If ARequest.QueryFields.values['format']='xml' then
+    begin
+    A:=ExtJSXMLWebdataInputAdaptor1;
+    CP:=ExtJSXMLDataFormatter1;
+    end
+  else
+    begin
+    A:=ExtJSJSONWebdataInputAdaptor1;
+    cp:=ExtJSJSONDataFormatter1;
+    end;
+  FPWebDataProvider1.Adaptor:=A;
+  CP.Adaptor:=A;
+  CP.Adaptor.Request:=ARequest;
+  CP.Provider:=FPWebDataProvider1;
+  M:=TmemoryStream.Create;
+  AResponse.ContentStream:=M;
+  AResponse.ContentType:=CP.DataContentType;
+  CP.GetContent(ARequest,M,Handled);
+  M.Position:=0;
+  AResponse.SendContent;
+end;
+
+procedure TFPWebModule1.DataModuleCreate(Sender: TObject);
+begin
+  DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+  DBF1.Open;
+  With DBF1.FieldByname('ID') do
+    ProviderFlags:=ProviderFlags+[pfInKey];
+end;
+
+initialization
+  {$I wmusers.lrs}
+  RegisterHTTPModule('Provider', TFPWebModule1);
+end.
+

+ 11 - 0
packages/fcl-web/examples/webdata/demo3/extgrid-json.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 97 - 0
packages/fcl-web/examples/webdata/demo3/extgrid-json.js

@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/AName/Read/",
+      update: "extgrid.cgi/Provider/AName/Update/",
+      create: "extgrid.cgi/Provider/AName/Insert/",
+      destroy: "extgrid.cgi/Provider/AName/Delete/"
+    }
+  });
+  var myreader = new Ext.data.JsonReader ({
+      root: "rows",
+      idProperty: "ID",
+      messageProperty: 'message', // Must be specified here
+      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.JsonWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID"
+  }); 
+  var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 11 - 0
packages/fcl-web/examples/webdata/demo3/extgrid-xml.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 100 - 0
packages/fcl-web/examples/webdata/demo3/extgrid-xml.js

@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/AName/Read/?format=xml",
+      update: "extgrid.cgi/Provider/AName/Update/?format=xml",
+      create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
+      destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
+    }
+  });
+  var myreader = new Ext.data.XmlReader ({
+      totalProperty: "total",
+      record: "row",
+      idProperty: "ID",
+      successProperty: "success",
+      messageProperty: "message",
+      fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.XmlWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID",
+      root: "records"
+  }); 
+    var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 334 - 0
packages/fcl-web/examples/webdata/demo3/extgrid.lpi

@@ -0,0 +1,334 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="7"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <Runnable Value="False"/>
+      </Flags>
+      <MainUnit Value="0"/>
+      <TargetFileExt Value=""/>
+      <Icon Value="0"/>
+      <UseXPManifest Value="True"/>
+      <ActiveEditorIndexAtStart Value="3"/>
+    </General>
+    <VersionInfo>
+      <ProjectVersion 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>
+    <RequiredPackages Count="5">
+      <Item1>
+        <PackageName Value="DBFLaz"/>
+        <MinVersion Minor="1" Release="1" Valid="True"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="lazwebdata"/>
+        <MinVersion Valid="True"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="WebLaz"/>
+      </Item3>
+      <Item4>
+        <PackageName Value="LCL"/>
+      </Item4>
+      <Item5>
+        <PackageName Value="FCL"/>
+      </Item5>
+    </RequiredPackages>
+    <Units Count="16">
+      <Unit0>
+        <Filename Value="extgrid.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="extgrid"/>
+        <CursorPos X="24" Y="6"/>
+        <TopLine Value="1"/>
+        <EditorIndex Value="3"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="wmusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebProviderDataModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+        <CursorPos X="33" Y="60"/>
+        <TopLine Value="27"/>
+        <EditorIndex Value="2"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="../demo2/wmusers.pp"/>
+        <ComponentName Value="FPWebModule1"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+        <CursorPos X="1" Y="80"/>
+        <TopLine Value="45"/>
+        <UsageCount Value="10"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="../fpwebdata.pp"/>
+        <ComponentName Value="FPWebProviderDataModule"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="fpwebdata"/>
+        <CursorPos X="26" Y="1530"/>
+        <TopLine Value="1526"/>
+        <EditorIndex Value="4"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit3>
+      <Unit4>
+        <Filename Value="wmusers.lfm"/>
+        <UsageCount Value="10"/>
+        <SyntaxHighlighter Value="LFM"/>
+      </Unit4>
+      <Unit5>
+        <Filename Value="../demo/reglazwebdata.pp"/>
+        <UnitName Value="reglazwebdata"/>
+        <CursorPos X="53" Y="50"/>
+        <TopLine Value="34"/>
+        <EditorIndex Value="0"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit5>
+      <Unit6>
+        <Filename Value="../../../fpc/rtl/objpas/classes/classesh.inc"/>
+        <CursorPos X="17" Y="1833"/>
+        <TopLine Value="1812"/>
+        <UsageCount Value="10"/>
+      </Unit6>
+      <Unit7>
+        <Filename Value="../../../fpc/rtl/objpas/classes/dm.inc"/>
+        <CursorPos X="3" Y="18"/>
+        <TopLine Value="16"/>
+        <UsageCount Value="10"/>
+      </Unit7>
+      <Unit8>
+        <Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/>
+        <UnitName Value="fphttp"/>
+        <CursorPos X="3" Y="105"/>
+        <TopLine Value="108"/>
+        <EditorIndex Value="5"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit8>
+      <Unit9>
+        <Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/>
+        <UnitName Value="fpWeb"/>
+        <CursorPos X="3" Y="421"/>
+        <TopLine Value="419"/>
+        <EditorIndex Value="6"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit9>
+      <Unit10>
+        <Filename Value="../../../fpc/lazarus/components/fpweb/weblazideintf.pp"/>
+        <UnitName Value="WebLazIDEIntf"/>
+        <CursorPos X="52" Y="173"/>
+        <TopLine Value="145"/>
+        <UsageCount Value="10"/>
+      </Unit10>
+      <Unit11>
+        <Filename Value="../../../fpc/lazarus/components/fpweb/lazweb.pp"/>
+        <UnitName Value="lazweb"/>
+        <CursorPos X="12" Y="7"/>
+        <TopLine Value="1"/>
+        <UsageCount Value="10"/>
+      </Unit11>
+      <Unit12>
+        <Filename Value="tralala.pp"/>
+        <ComponentName Value="FPWebModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="tralala"/>
+        <CursorPos X="7" Y="11"/>
+        <TopLine Value="1"/>
+        <UsageCount Value="20"/>
+      </Unit12>
+      <Unit13>
+        <Filename Value="../fpwebdata.lfm"/>
+        <CursorPos X="1" Y="1"/>
+        <TopLine Value="1"/>
+        <UsageCount Value="10"/>
+        <SyntaxHighlighter Value="LFM"/>
+      </Unit13>
+      <Unit14>
+        <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+        <UnitName Value="websession"/>
+        <CursorPos X="20" Y="40"/>
+        <TopLine Value="20"/>
+        <EditorIndex Value="1"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit14>
+      <Unit15>
+        <Filename Value="../../../fpc/packages/fcl-xml/src/xmliconv.pas"/>
+        <UnitName Value="xmliconv"/>
+        <CursorPos X="1" Y="64"/>
+        <TopLine Value="37"/>
+        <UsageCount Value="10"/>
+      </Unit15>
+    </Units>
+    <JumpHistory Count="30" HistoryIndex="29">
+      <Position1>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="385" Column="53" TopLine="364"/>
+      </Position1>
+      <Position2>
+        <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+        <Caret Line="381" Column="25" TopLine="345"/>
+      </Position2>
+      <Position3>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="385" Column="51" TopLine="364"/>
+      </Position3>
+      <Position4>
+        <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+        <Caret Line="27" Column="39" TopLine="20"/>
+      </Position4>
+      <Position5>
+        <Filename Value="wmusers.pp"/>
+        <Caret Line="34" Column="29" TopLine="3"/>
+      </Position5>
+      <Position6>
+        <Filename Value="wmusers.pp"/>
+        <Caret Line="48" Column="45" TopLine="15"/>
+      </Position6>
+      <Position7>
+        <Filename Value="wmusers.pp"/>
+        <Caret Line="49" Column="45" TopLine="14"/>
+      </Position7>
+      <Position8>
+        <Filename Value="wmusers.pp"/>
+        <Caret Line="50" Column="45" TopLine="14"/>
+      </Position8>
+      <Position9>
+        <Filename Value="wmusers.pp"/>
+        <Caret Line="17" Column="18" TopLine="14"/>
+      </Position9>
+      <Position10>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="395" Column="32" TopLine="387"/>
+      </Position10>
+      <Position11>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1066" Column="1" TopLine="1039"/>
+      </Position11>
+      <Position12>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1624" Column="20" TopLine="1606"/>
+      </Position12>
+      <Position13>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="955" Column="46" TopLine="933"/>
+      </Position13>
+      <Position14>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="956" Column="19" TopLine="933"/>
+      </Position14>
+      <Position15>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="957" Column="16" TopLine="933"/>
+      </Position15>
+      <Position16>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="971" Column="38" TopLine="933"/>
+      </Position16>
+      <Position17>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="975" Column="77" TopLine="954"/>
+      </Position17>
+      <Position18>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="985" Column="43" TopLine="954"/>
+      </Position18>
+      <Position19>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1013" Column="66" TopLine="992"/>
+      </Position19>
+      <Position20>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1017" Column="77" TopLine="992"/>
+      </Position20>
+      <Position21>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1042" Column="62" TopLine="1013"/>
+      </Position21>
+      <Position22>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1066" Column="35" TopLine="1055"/>
+      </Position22>
+      <Position23>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1646" Column="22" TopLine="1630"/>
+      </Position23>
+      <Position24>
+        <Filename Value="wmusers.pp"/>
+        <Caret Line="15" Column="41" TopLine="1"/>
+      </Position24>
+      <Position25>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1655" Column="28" TopLine="1632"/>
+      </Position25>
+      <Position26>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1587" Column="17" TopLine="1565"/>
+      </Position26>
+      <Position27>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="414" Column="15" TopLine="393"/>
+      </Position27>
+      <Position28>
+        <Filename Value="extgrid.lpr"/>
+        <Caret Line="6" Column="36" TopLine="1"/>
+      </Position28>
+      <Position29>
+        <Filename Value="extgrid.lpr"/>
+        <Caret Line="11" Column="17" TopLine="1"/>
+      </Position29>
+      <Position30>
+        <Filename Value="extgrid.lpr"/>
+        <Caret Line="6" Column="33" TopLine="1"/>
+      </Position30>
+    </JumpHistory>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="extgrid.cgi"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)/"/>
+    </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>

+ 16 - 0
packages/fcl-web/examples/webdata/demo3/extgrid.lpr

@@ -0,0 +1,16 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$ifdef unix}cwstring, xmliconv,{$endif}
+  fpCGI,
+  wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+  Application.Initialize;
+  Application.Run;
+end.
+

+ 9 - 0
packages/fcl-web/examples/webdata/demo3/tralala.lfm

@@ -0,0 +1,9 @@
+object FPWebModule1: TFPWebModule1
+  OldCreateOrder = False
+  Actions = <>
+  CreateSession = False
+  Height = 300
+  HorizontalOffset = 585
+  VerticalOffset = 230
+  Width = 400
+end

+ 7 - 0
packages/fcl-web/examples/webdata/demo3/tralala.lrs

@@ -0,0 +1,7 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebModule1','FORMDATA',[
+  'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#0
+  +#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3'I'#2#14'Vertica'
+  +'lOffset'#3#230#0#5'Width'#3#144#1#0#0
+]);

+ 28 - 0
packages/fcl-web/examples/webdata/demo3/tralala.pp

@@ -0,0 +1,28 @@
+unit tralala; 
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb; 
+
+type
+  TFPWebModule1 = class(TFPWebModule)
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebModule1: TFPWebModule1; 
+
+implementation
+
+initialization
+  {$I tralala.lrs}
+
+  RegisterHTTPModule('TFPWebModule1', TFPWebModule1); 
+end.
+

+ 49 - 0
packages/fcl-web/examples/webdata/demo3/wmusers.lfm

@@ -0,0 +1,49 @@
+object FPWebProviderDataModule1: TFPWebProviderDataModule1
+  OnCreate = DataModuleCreate
+  OldCreateOrder = False
+  InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+  ContentProducer = ExtJSJSONDataFormatter1
+  OnGetContentProducer = DataModuleGetContentProducer
+  OnGetInputAdaptor = DataModuleGetInputAdaptor
+  Height = 300
+  HorizontalOffset = 539
+  VerticalOffset = 447
+  Width = 400
+  object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+    left = 176
+    top = 96
+  end
+  object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+    AllowPageSize = False
+    left = 176
+    top = 136
+  end
+  object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+    left = 216
+    top = 96
+  end
+  object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+    AllowPageSize = False
+    left = 216
+    top = 136
+  end
+  object Dbf1: TDbf
+    FilePath = '/home/michael/public_html/extjs/demo2/'
+    IndexDefs = <>
+    TableName = 'users.dbf'
+    TableLevel = 7
+    FilterOptions = []
+    left = 79
+    top = 92
+  end
+  object Datasource1: TDatasource
+    DataSet = Dbf1
+    left = 76
+    top = 132
+  end
+  object AName: TFPWebDataProvider
+    DataSource = Datasource1
+    left = 133
+    top = 117
+  end
+end

+ 21 - 0
packages/fcl-web/examples/webdata/demo3/wmusers.lrs

@@ -0,0 +1,21 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
+  'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate'
+  +#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon'
+  +'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20
+  +'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt'
+  +'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3
+  +#27#2#14'VerticalOffset'#3#191#1#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu'
+  +'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#176#0#3'top'#2'`'#0#0
+  +#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8
+  +#4'left'#3#176#0#3'top'#3#136#0#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ'
+  +'SXMLWebdataInputAdaptor1'#4'left'#3#216#0#3'top'#2'`'#0#0#22'TExtJSXMLDataF'
+  +'ormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#216#0#3
+  +'top'#3#136#0#0#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/michael/public_html/e'
+  +'xtjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2
+  +#7#13'FilterOptions'#11#0#4'left'#2'O'#3'top'#2'\'#0#0#11'TDatasource'#11'Da'
+  +'tasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'L'#3'top'#3#132#0#0#0#18'TFPWebDa'
+  +'taProvider'#5'AName'#10'DataSource'#7#11'Datasource1'#4'left'#3#133#0#3'top'
+  +#2'u'#0#0#0
+]);

+ 68 - 0
packages/fcl-web/examples/webdata/demo3/wmusers.pp

@@ -0,0 +1,68 @@
+unit wmusers; 
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+  dbf, db, fpwebdata, extjsjson, extjsxml;
+
+type
+
+  { TFPWebProviderDataModule1 }
+
+  TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
+    Datasource1: TDatasource;
+    Dbf1: TDbf;
+    ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+    ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+    ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+    ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+    AName: TFPWebDataProvider;
+    procedure DataModuleCreate(Sender: TObject);
+    procedure DataModuleGetContentProducer(Sender: TObject;
+      var AContentProducer: TCustomHTTPDataContentProducer);
+    procedure DataModuleGetInputAdaptor(Sender: TObject;
+      var AInputAdaptor: TCustomWebdataInputAdaptor);
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebProviderDataModule1: TFPWebProviderDataModule1; 
+
+implementation
+
+{ TFPWebProviderDataModule1 }
+
+procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject;
+  var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+  If Request.QueryFields.values['format']='xml' then
+    AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleGetContentProducer(
+  Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+  If Request.QueryFields.values['format']='xml' then
+    AContentProducer:=ExtJSXMLDataFormatter1;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject);
+begin
+  DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+  DBF1.Open;
+  With DBF1.FieldByname('ID') do
+    ProviderFlags:=ProviderFlags+[pfInKey];
+end;
+
+initialization
+  {$I wmusers.lrs}
+
+  RegisterHTTPModule('Provider', TFPWebProviderDataModule1);
+end.
+

+ 27 - 0
packages/fcl-web/examples/webdata/demo4/dmusers.lfm

@@ -0,0 +1,27 @@
+object DataModule1: TDataModule1
+  OnCreate = DataModuleCreate
+  OldCreateOrder = False
+  Height = 300
+  HorizontalOffset = 356
+  VerticalOffset = 360
+  Width = 400
+  object AName: TFPWebDataProvider
+    DataSource = Datasource1
+    left = 161
+    top = 145
+  end
+  object Datasource1: TDatasource
+    DataSet = Dbf1
+    left = 104
+    top = 160
+  end
+  object Dbf1: TDbf
+    FilePath = '/home/michael/public_html/extjs/demo2/'
+    IndexDefs = <>
+    TableName = 'users.dbf'
+    TableLevel = 7
+    FilterOptions = []
+    left = 107
+    top = 120
+  end
+end

+ 12 - 0
packages/fcl-web/examples/webdata/demo4/dmusers.lrs

@@ -0,0 +1,12 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TDataModule1','FORMDATA',[
+  'TPF0'#12'TDataModule1'#11'DataModule1'#8'OnCreate'#7#16'DataModuleCreate'#14
+  +'OldCreateOrder'#8#6'Height'#3','#1#16'HorizontalOffset'#3'd'#1#14'VerticalO'
+  +'ffset'#3'h'#1#5'Width'#3#144#1#0#18'TFPWebDataProvider'#5'AName'#10'DataSou'
+  +'rce'#7#11'Datasource1'#4'left'#3#161#0#3'top'#3#145#0#0#0#11'TDatasource'#11
+  +'Datasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'h'#3'top'#3#160#0#0#0#4'TDbf'#4
+  +'Dbf1'#8'FilePath'#6'&/home/michael/public_html/extjs/demo2/'#9'IndexDefs'#14
+  +#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2#7#13'FilterOptions'#11#0#4'l'
+  +'eft'#2'k'#3'top'#2'x'#0#0#0
+]);

+ 52 - 0
packages/fcl-web/examples/webdata/demo4/dmusers.pp

@@ -0,0 +1,52 @@
+unit dmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, db, dbf,
+  fpwebdata;
+
+type
+
+  { TDataModule1 }
+
+  TDataModule1 = class(TDataModule)
+    AName: TFPWebDataProvider;
+    Datasource1: TDatasource;
+    Dbf1: TDbf;
+    procedure DataModuleCreate(Sender: TObject);
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  DataModule1: TDataModule1; 
+
+implementation
+
+uses dbugintf;
+{ TDataModule1 }
+
+procedure TDataModule1.DataModuleCreate(Sender: TObject);
+begin
+  senddebug('Creating datamodule 1 '+InTToStr(Ord(WebDataProviderManager.Registering)));
+  If not WebDataProviderManager.Registering then
+    begin
+    DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+    DBF1.Open;
+    With DBF1.FieldByname('ID') do
+      ProviderFlags:=ProviderFlags+[pfInKey];
+    DBF1.First;
+    end;
+end;
+
+initialization
+  {$I dmusers.lrs}
+  WebDataProviderManager.RegisterDatamodule(TDataModule1)
+
+end.
+

+ 11 - 0
packages/fcl-web/examples/webdata/demo4/extgrid-json.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 97 - 0
packages/fcl-web/examples/webdata/demo4/extgrid-json.js

@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/JSONProvider/AName/Read/",
+      update: "extgrid.cgi/JSONProvider/AName/Update/",
+      create: "extgrid.cgi/JSONProvider/AName/Insert/",
+      destroy: "extgrid.cgi/JSONProvider/AName/Delete/"
+    }
+  });
+  var myreader = new Ext.data.JsonReader ({
+      root: "rows",
+      idProperty: "ID",
+      messageProperty: 'message', // Must be specified here
+      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.JsonWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID"
+  }); 
+  var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 11 - 0
packages/fcl-web/examples/webdata/demo4/extgrid-xml.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 100 - 0
packages/fcl-web/examples/webdata/demo4/extgrid-xml.js

@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/XMLProvider/AName/Read/",
+      update: "extgrid.cgi/XMLProvider/AName/Update/",
+      create: "extgrid.cgi/XMLProvider/AName/Insert/",
+      destroy: "extgrid.cgi/XMLProvider/AName/Delete/",
+    }
+  });
+  var myreader = new Ext.data.XmlReader ({
+      totalProperty: "total",
+      record: "row",
+      idProperty: "ID",
+      successProperty: "success",
+      messageProperty: "message",
+      fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.XmlWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID",
+      root: "records"
+  }); 
+    var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 93 - 0
packages/fcl-web/examples/webdata/demo4/extgrid.lpi

@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="7"/>
+    <General>
+      <Flags>
+        <SaveClosedFiles Value="False"/>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <Runnable Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <TargetFileExt Value=""/>
+      <Icon Value="0"/>
+      <UseXPManifest Value="True"/>
+    </General>
+    <VersionInfo>
+      <ProjectVersion 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>
+    <RequiredPackages Count="5">
+      <Item1>
+        <PackageName Value="DBFLaz"/>
+        <MinVersion Minor="1" Release="1" Valid="True"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="lazwebdata"/>
+        <MinVersion Valid="True"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="WebLaz"/>
+      </Item3>
+      <Item4>
+        <PackageName Value="LCL"/>
+      </Item4>
+      <Item5>
+        <PackageName Value="FCL"/>
+      </Item5>
+    </RequiredPackages>
+    <Units Count="4">
+      <Unit0>
+        <Filename Value="extgrid.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="extgrid"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="wmjsonusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebProviderDataModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmjsonusers"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="wmxmlusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebProviderDataModule2"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmxmlusers"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="dmusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="DataModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="dmusers"/>
+      </Unit3>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="extgrid.cgi"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)/"/>
+    </SearchPaths>
+    <Other>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+</CONFIG>

+ 15 - 0
packages/fcl-web/examples/webdata/demo4/extgrid.lpr

@@ -0,0 +1,15 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$ifdef unix}cwstring,xmliconv,{$endif}
+  fpCGI, wmjsonusers, wmxmlusers, dmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+  Application.Initialize;
+  Application.Run;
+end.
+

+ 18 - 0
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm

@@ -0,0 +1,18 @@
+object FPWebProviderDataModule1: TFPWebProviderDataModule1
+  OldCreateOrder = False
+  InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+  ContentProducer = ExtJSJSONDataFormatter1
+  Height = 300
+  HorizontalOffset = 635
+  VerticalOffset = 230
+  Width = 400
+  object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+    left = 204
+    top = 124
+  end
+  object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+    AllowPageSize = False
+    left = 204
+    top = 164
+  end
+end

+ 11 - 0
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs

@@ -0,0 +1,11 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
+  'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#14'OldCreat'
+  +'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr'
+  +'oducer'#7#23'ExtJSJSONDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'
+  +#3'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataIn'
+  +'putAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#204#0#3'top'#2'|'#0
+  +#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'
+  +#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0
+]);

+ 34 - 0
packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp

@@ -0,0 +1,34 @@
+unit wmjsonusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, 
+    fpwebdata, extjsjson;
+
+type
+
+  { TFPWebProviderDataModule1 }
+
+  TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
+    ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+    ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebProviderDataModule1: TFPWebProviderDataModule1; 
+
+implementation
+
+initialization
+  {$I wmjsonusers.lrs}
+
+  RegisterHTTPModule('JSONProvider', TFPWebProviderDataModule1);
+end.
+

+ 18 - 0
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm

@@ -0,0 +1,18 @@
+object FPWebProviderDataModule2: TFPWebProviderDataModule2
+  OldCreateOrder = False
+  InputAdaptor = ExtJSXMLWebdataInputAdaptor1
+  ContentProducer = ExtJSXMLDataFormatter1
+  Height = 300
+  HorizontalOffset = 545
+  VerticalOffset = 399
+  Width = 400
+  object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+    left = 244
+    top = 124
+  end
+  object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+    AllowPageSize = False
+    left = 244
+    top = 164
+  end
+end

+ 11 - 0
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs

@@ -0,0 +1,11 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[
+  'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat'
+  +'eOrder'#8#12'InputAdaptor'#7#28'ExtJSXMLWebdataInputAdaptor1'#15'ContentPro'
+  +'ducer'#7#22'ExtJSXMLDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'#3
+  +'!'#2#14'VerticalOffset'#3#143#1#5'Width'#3#144#1#0#28'TExtJSXMLWebdataInput'
+  +'Adaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22
+  +'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'le'
+  +'ft'#3#244#0#3'top'#3#164#0#0#0#0
+]);

+ 34 - 0
packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp

@@ -0,0 +1,34 @@
+unit wmxmlusers; 
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, 
+    fpwebdata, extjsxml;
+
+type
+
+  { TFPWebProviderDataModule2 }
+
+  TFPWebProviderDataModule2 = class(TFPWebProviderDataModule)
+    ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+    ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebProviderDataModule2: TFPWebProviderDataModule2; 
+
+implementation
+
+initialization
+  {$I wmxmlusers.lrs}
+
+  RegisterHTTPModule('XMLProvider', TFPWebProviderDataModule2);
+end.
+

+ 11 - 0
packages/fcl-web/examples/webdata/demo5/extgrid-json.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 97 - 0
packages/fcl-web/examples/webdata/demo5/extgrid-json.js

@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/AName/Read/",
+      update: "extgrid.cgi/Provider/AName/Update/",
+      create: "extgrid.cgi/Provider/AName/Insert/",
+      destroy: "extgrid.cgi/Provider/AName/Delete/"
+    }
+  });
+  var myreader = new Ext.data.JsonReader ({
+      root: "rows",
+      idProperty: "ID",
+      messageProperty: 'message', // Must be specified here
+      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.JsonWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID"
+  }); 
+  var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 11 - 0
packages/fcl-web/examples/webdata/demo5/extgrid-xml.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 100 - 0
packages/fcl-web/examples/webdata/demo5/extgrid-xml.js

@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/AName/Read/?format=xml",
+      update: "extgrid.cgi/Provider/AName/Update/?format=xml",
+      create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
+      destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
+    }
+  });
+  var myreader = new Ext.data.XmlReader ({
+      totalProperty: "total",
+      record: "row",
+      idProperty: "ID",
+      successProperty: "success",
+      messageProperty: "message",
+      fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.XmlWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID",
+      root: "records"
+  }); 
+    var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 75 - 0
packages/fcl-web/examples/webdata/demo5/extgrid.lpi

@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="7"/>
+    <General>
+      <Flags>
+        <SaveClosedFiles Value="False"/>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <Runnable Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <TargetFileExt Value=""/>
+      <Icon Value="0"/>
+      <UseXPManifest Value="True"/>
+    </General>
+    <VersionInfo>
+      <ProjectVersion 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>
+    <RequiredPackages Count="4">
+      <Item1>
+        <PackageName Value="lazwebdata"/>
+        <MinVersion Valid="True"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="WebLaz"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="LCL"/>
+      </Item3>
+      <Item4>
+        <PackageName Value="FCL"/>
+      </Item4>
+    </RequiredPackages>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="extgrid.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="extgrid"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="wmusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebProviderDataModule2"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+      </Unit1>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="extgrid.cgi"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)/"/>
+    </SearchPaths>
+    <Other>
+      <CompilerPath Value="$(CompPath)"/>
+    </Other>
+  </CompilerOptions>
+</CONFIG>

+ 15 - 0
packages/fcl-web/examples/webdata/demo5/extgrid.lpr

@@ -0,0 +1,15 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$ifdef unix}cwstring, xmliconv,{$endif}
+  fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+  Application.Initialize;
+  Application.Run;
+end.
+

+ 29 - 0
packages/fcl-web/examples/webdata/demo5/wmusers.lfm

@@ -0,0 +1,29 @@
+object FPWebProviderDataModule2: TFPWebProviderDataModule2
+  OldCreateOrder = False
+  InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+  ContentProducer = ExtJSJSONDataFormatter1
+  OnGetContentProducer = DataModuleGetContentProducer
+  OnGetInputAdaptor = DataModuleGetInputAdaptor
+  Height = 300
+  HorizontalOffset = 538
+  VerticalOffset = 460
+  Width = 400
+  object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+    left = 204
+    top = 124
+  end
+  object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+    left = 244
+    top = 124
+  end
+  object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+    AllowPageSize = False
+    left = 244
+    top = 164
+  end
+  object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+    AllowPageSize = False
+    left = 204
+    top = 164
+  end
+end

+ 15 - 0
packages/fcl-web/examples/webdata/demo5/wmusers.lrs

@@ -0,0 +1,15 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[
+  'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat'
+  +'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr'
+  +'oducer'#7#23'ExtJSJSONDataFormatter1'#20'OnGetContentProducer'#7#28'DataMod'
+  +'uleGetContentProducer'#17'OnGetInputAdaptor'#7#25'DataModuleGetInputAdaptor'
+  +#6'Height'#3','#1#16'HorizontalOffset'#3#26#2#14'VerticalOffset'#3#204#1#5'W'
+  +'idth'#3#144#1#0#29'TExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputA'
+  +'daptor1'#4'left'#3#204#0#3'top'#2'|'#0#0#28'TExtJSXMLWebdataInputAdaptor'#28
+  +'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22'TExtJSXMLD'
+  +'ataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#244#0
+  +#3'top'#3#164#0#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'
+  +#13'AllowPageSize'#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0
+]);

+ 85 - 0
packages/fcl-web/examples/webdata/demo5/wmusers.pp

@@ -0,0 +1,85 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb, 
+  db, dbf, fpwebdata, extjsjson, extjsxml;
+
+type
+
+  { TFPWebProviderDataModule2 }
+
+  TFPWebProviderDataModule2 = class(TFPWebProviderDataModule)
+    ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+    ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+    ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+    ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+    procedure DataModuleGetContentProducer(Sender: TObject;
+      var AContentProducer: TCustomHTTPDataContentProducer);
+    procedure DataModuleGetInputAdaptor(Sender: TObject;
+      var AInputAdaptor: TCustomWebdataInputAdaptor);
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebProviderDataModule2: TFPWebProviderDataModule2; 
+
+implementation
+
+Type
+
+    { TDBFWebDataProvider }
+
+    TDBFWebDataProvider = Class(TFPCustomWebDataProvider)
+      FDBF : TDBF;
+    Public
+      Constructor Create(AOwner : TComponent); override;
+      Function GetDataset : TDataset; override;
+    end;
+
+{ TDBFWebDataProvider }
+
+constructor TDBFWebDataProvider.Create(AOwner: TComponent);
+begin
+  inherited Create(AOwner);
+  FDBF:=TDBF.Create(Self);
+  FDBF.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+  FDBF.Open;
+  With FDBF.FieldByname('ID') do
+    ProviderFlags:=ProviderFlags+[pfInKey];
+end;
+
+function TDBFWebDataProvider.GetDataset: TDataset;
+begin
+  Result:=FDBF;
+end;
+
+{ TFPWebProviderDataModule2 }
+
+procedure TFPWebProviderDataModule2.DataModuleGetInputAdaptor(Sender: TObject;
+  var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+  If Request.QueryFields.values['format']='xml' then
+    AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
+end;
+
+procedure TFPWebProviderDataModule2.DataModuleGetContentProducer(
+  Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+  If Request.QueryFields.values['format']='xml' then
+    AContentProducer:=ExtJSXMLDataFormatter1;
+end;
+
+initialization
+  {$I wmusers.lrs}
+
+  RegisterHTTPModule('Provider', TFPWebProviderDataModule2);
+  WebDataProviderManager.RegisterProvider('AName',TDBFWebDataProvider);
+end.
+

+ 11 - 0
packages/fcl-web/examples/webdata/demo6/extgrid-json.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 97 - 0
packages/fcl-web/examples/webdata/demo6/extgrid-json.js

@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/AName/Read/",
+      update: "extgrid.cgi/Provider/AName/Update/",
+      create: "extgrid.cgi/Provider/AName/Insert/",
+      destroy: "extgrid.cgi/Provider/AName/Delete/"
+    }
+  });
+  var myreader = new Ext.data.JsonReader ({
+      root: "rows",
+      idProperty: "ID",
+      messageProperty: 'message', // Must be specified here
+      fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.JsonWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID"
+  }); 
+  var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 11 - 0
packages/fcl-web/examples/webdata/demo6/extgrid-xml.html

@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html>

+ 100 - 0
packages/fcl-web/examples/webdata/demo6/extgrid-xml.js

@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+  var myproxy = new Ext.data.HttpProxy ( {
+    api : {
+      read: "extgrid.cgi/Provider/AName/Read/?format=xml",
+      update: "extgrid.cgi/Provider/AName/Update/?format=xml",
+      create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
+      destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
+    }
+  });
+  var myreader = new Ext.data.XmlReader ({
+      totalProperty: "total",
+      record: "row",
+      idProperty: "ID",
+      successProperty: "success",
+      messageProperty: "message",
+      fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+  });
+  var mywriter = new Ext.data.XmlWriter({
+      encode: true,
+      writeAllFields: true,
+      idProperty: "ID",
+      root: "records"
+  }); 
+    var data = new Ext.data.Store({
+    proxy: myproxy,
+    reader: myreader,
+    writer: mywriter,
+    autoSave: false,
+    idProperty: "ID",
+  });
+  // Listen to errors.
+  data.addListener('exception', function(proxy, type, action, options, res) {
+    if (type === 'remote') {
+        Ext.Msg.show({
+            title: 'REMOTE EXCEPTION',
+            msg: res.message, 
+            icon: Ext.MessageBox.ERROR,
+            buttons: Ext.Msg.OK
+        });
+    }
+  });
+  data.load({ params:{start: 0, limit: 30}});
+  var grid = new Ext.grid.EditorGridPanel({
+    renderTo: Ext.getBody(),
+    frame: true,
+    title: "Known users",
+    height: 600,
+    width: 800,
+    store: data,
+    columns: [
+      {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+      {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+      {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+    ],
+    bbar: new Ext.PagingToolbar({
+      pageSize: 30,
+      store: data,
+      displayInfo: true
+    }),
+    tbar : [{
+            text: 'Add',
+            iconCls: 'icon-add',
+            handler: function(btn, ev) {
+              var u = new grid.store.recordType();
+              grid.stopEditing();
+              grid.store.insert(0, u);
+              grid.startEditing(0, 1);
+            },
+            scope: grid
+        }, '-', {
+            text: 'Delete',
+            iconCls: 'icon-delete',
+            handler: function(btn, ev) {
+	      var index = grid.getSelectionModel().getSelectedCell();
+	      if (!index) {
+		  return false;
+	      }
+	      var rec = grid.store.getAt(index[0]);
+	      grid.store.remove(rec);
+	      },
+            scope: grid
+        }, '-', {
+            text: 'Save',
+            iconCls: 'icon-save',
+            handler: function(btn, ev) {
+	      grid.store.save();
+	    },
+            scope: grid
+        }
+	]
+ //          F.ContentToStream(M);
+
+  });
+  grid.show();
+}
+Ext.onReady(FPC.ShowPage);

+ 4 - 0
packages/fcl-web/examples/webdata/demo6/extgrid.ini

@@ -0,0 +1,4 @@
+[Database]
+Path=/wisa/firebird/fpcusers.fb
+UserName=WISASOFT
+Password=SysteemD

+ 362 - 0
packages/fcl-web/examples/webdata/demo6/extgrid.lpi

@@ -0,0 +1,362 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="7"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <Runnable Value="False"/>
+      </Flags>
+      <MainUnit Value="0"/>
+      <TargetFileExt Value=""/>
+      <Title Value="SQLDBWebDataProvider demo using ExtJS"/>
+      <UseXPManifest Value="True"/>
+      <Icon Value="0"/>
+      <ActiveWindowIndexAtStart Value="0"/>
+    </General>
+    <VersionInfo>
+      <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="0.0.0.0" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/>
+    </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>
+    <RequiredPackages Count="5">
+      <Item1>
+        <PackageName Value="SQLDBLaz"/>
+        <MinVersion Major="1" Release="1" Valid="True"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="lazwebdata"/>
+        <MinVersion Valid="True"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="WebLaz"/>
+      </Item3>
+      <Item4>
+        <PackageName Value="LCL"/>
+      </Item4>
+      <Item5>
+        <PackageName Value="FCL"/>
+      </Item5>
+    </RequiredPackages>
+    <Units Count="16">
+      <Unit0>
+        <Filename Value="extgrid.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="extgrid"/>
+        <EditorIndex Value="12"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="1"/>
+        <CursorPos X="33" Y="8"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="wmusers.pp"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FPWebProviderDataModule1"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+        <EditorIndex Value="0"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="78"/>
+        <CursorPos X="29" Y="86"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="../demo5/wmusers.pp"/>
+        <ComponentName Value="FPWebProviderDataModule2"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="wmusers"/>
+        <TopLine Value="44"/>
+        <CursorPos X="1" Y="70"/>
+        <UsageCount Value="10"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="../fpwebdata.pp"/>
+        <ComponentName Value="FPWebProviderDataModule"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="DataModule"/>
+        <UnitName Value="fpwebdata"/>
+        <IsVisibleTab Value="True"/>
+        <EditorIndex Value="1"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="1584"/>
+        <CursorPos X="8" Y="1600"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit3>
+      <Unit4>
+        <Filename Value="../sqldbwebdata.pp"/>
+        <UnitName Value="sqldbwebdata"/>
+        <EditorIndex Value="3"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="49"/>
+        <CursorPos X="2" Y="70"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit4>
+      <Unit5>
+        <Filename Value="../extjsjson.pp"/>
+        <UnitName Value="extjsjson"/>
+        <EditorIndex Value="11"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="25"/>
+        <CursorPos X="3" Y="45"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit5>
+      <Unit6>
+        <Filename Value="../extjsxml.pp"/>
+        <UnitName Value="extjsxml"/>
+        <EditorIndex Value="4"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="49"/>
+        <CursorPos X="13" Y="54"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit6>
+      <Unit7>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <UnitName Value="wstmodule"/>
+        <EditorIndex Value="5"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="25"/>
+        <CursorPos X="48" Y="22"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit7>
+      <Unit8>
+        <Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/>
+        <UnitName Value="fphttp"/>
+        <EditorIndex Value="8"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="109"/>
+        <CursorPos X="92" Y="100"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit8>
+      <Unit9>
+        <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+        <UnitName Value="websession"/>
+        <EditorIndex Value="10"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="1"/>
+        <CursorPos X="3" Y="27"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit9>
+      <Unit10>
+        <Filename Value="../../../fpc/packages/fcl-web/src/httpdefs.pp"/>
+        <UnitName Value="HTTPDefs"/>
+        <EditorIndex Value="7"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="264"/>
+        <CursorPos X="18" Y="285"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit10>
+      <Unit11>
+        <Filename Value="../../../source/wst/tests/apache_module/wst_apache_binding.pas"/>
+        <UnitName Value="wst_apache_binding"/>
+        <TopLine Value="142"/>
+        <CursorPos X="1" Y="178"/>
+        <UsageCount Value="10"/>
+      </Unit11>
+      <Unit12>
+        <Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/>
+        <UnitName Value="fpWeb"/>
+        <EditorIndex Value="2"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="412"/>
+        <CursorPos X="18" Y="452"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit12>
+      <Unit13>
+        <Filename Value="../../../Documents/source/wst/wst_global.inc"/>
+        <TopLine Value="1"/>
+        <CursorPos X="30" Y="19"/>
+        <UsageCount Value="10"/>
+      </Unit13>
+      <Unit14>
+        <Filename Value="../../wst/regwstmodule.pp"/>
+        <UnitName Value="regwstmodule"/>
+        <EditorIndex Value="6"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="1"/>
+        <CursorPos X="2" Y="1"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit14>
+      <Unit15>
+        <Filename Value="../demo/reglazwebdata.pp"/>
+        <UnitName Value="reglazwebdata"/>
+        <EditorIndex Value="9"/>
+        <WindowIndex Value="0"/>
+        <TopLine Value="37"/>
+        <CursorPos X="1" Y="73"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+      </Unit15>
+    </Units>
+    <JumpHistory Count="30" HistoryIndex="29">
+      <Position1>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="135" Column="3" TopLine="115"/>
+      </Position1>
+      <Position2>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="130" Column="16" TopLine="109"/>
+      </Position2>
+      <Position3>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="148" Column="1" TopLine="127"/>
+      </Position3>
+      <Position4>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="122" Column="92" TopLine="121"/>
+      </Position4>
+      <Position5>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="137" Column="1" TopLine="122"/>
+      </Position5>
+      <Position6>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="169" Column="26" TopLine="135"/>
+      </Position6>
+      <Position7>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="34" Column="1" TopLine="1"/>
+      </Position7>
+      <Position8>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="123" Column="17" TopLine="92"/>
+      </Position8>
+      <Position9>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="128" Column="36" TopLine="104"/>
+      </Position9>
+      <Position10>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="46" Column="48" TopLine="25"/>
+      </Position10>
+      <Position11>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="147" Column="1" TopLine="126"/>
+      </Position11>
+      <Position12>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="138" Column="6" TopLine="115"/>
+      </Position12>
+      <Position13>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="150" Column="1" TopLine="137"/>
+      </Position13>
+      <Position14>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="151" Column="3" TopLine="130"/>
+      </Position14>
+      <Position15>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="15" Column="1" TopLine="1"/>
+      </Position15>
+      <Position16>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="177" Column="37" TopLine="145"/>
+      </Position16>
+      <Position17>
+        <Filename Value="../../wst/wstmodule.pas"/>
+        <Caret Line="58" Column="1" TopLine="22"/>
+      </Position17>
+      <Position18>
+        <Filename Value="../demo/reglazwebdata.pp"/>
+        <Caret Line="17" Column="15" TopLine="1"/>
+      </Position18>
+      <Position19>
+        <Filename Value="../../wst/regwstmodule.pp"/>
+        <Caret Line="55" Column="79" TopLine="16"/>
+      </Position19>
+      <Position20>
+        <Filename Value="../../wst/regwstmodule.pp"/>
+        <Caret Line="26" Column="3" TopLine="1"/>
+      </Position20>
+      <Position21>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="446" Column="14" TopLine="433"/>
+      </Position21>
+      <Position22>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="969" Column="79" TopLine="954"/>
+      </Position22>
+      <Position23>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1171" Column="41" TopLine="1154"/>
+      </Position23>
+      <Position24>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1281" Column="32" TopLine="1280"/>
+      </Position24>
+      <Position25>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1296" Column="30" TopLine="1282"/>
+      </Position25>
+      <Position26>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="327" Column="14" TopLine="324"/>
+      </Position26>
+      <Position27>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1296" Column="51" TopLine="1280"/>
+      </Position27>
+      <Position28>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1594" Column="19" TopLine="1579"/>
+      </Position28>
+      <Position29>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1606" Column="58" TopLine="1591"/>
+      </Position29>
+      <Position30>
+        <Filename Value="../fpwebdata.pp"/>
+        <Caret Line="1607" Column="1" TopLine="1592"/>
+      </Position30>
+    </JumpHistory>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="8"/>
+    <Target>
+      <Filename Value="extgrid.cgi"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)/"/>
+    </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>

+ 16 - 0
packages/fcl-web/examples/webdata/demo6/extgrid.lpr

@@ -0,0 +1,16 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+  {$ifdef unix}cwstring,xmliconv,{$endif}
+  fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+  Application.Title:='SQLDBWebDataProvider demo using ExtJS';
+  Application.Initialize;
+  Application.Run;
+end.
+

+ 131 - 0
packages/fcl-web/examples/webdata/demo6/wmusers.lfm

@@ -0,0 +1,131 @@
+object FPWebProviderDataModule1: TFPWebProviderDataModule1
+  OnCreate = DataModuleCreate
+  OldCreateOrder = False
+  InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+  ContentProducer = ExtJSJSONDataFormatter1
+  OnGetContentProducer = DataModuleGetContentProducer
+  OnGetInputAdaptor = DataModuleGetInputAdaptor
+  Height = 300
+  HorizontalOffset = 635
+  VerticalOffset = 230
+  Width = 400
+  object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+    left = 232
+    top = 152
+  end
+  object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+    left = 272
+    top = 152
+  end
+  object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+    AllowPageSize = False
+    left = 272
+    top = 192
+  end
+  object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+    AllowPageSize = False
+    left = 232
+    top = 192
+  end
+  object ANAME: TSQLDBWebDataProvider
+    SelectSQL.Strings = (
+      'SELECT * FROM FPCUSERS'
+    )
+    UpdateSQL.Strings = (
+      'UPDATE FPCUSERS SET'
+      '  NAME=:NAME,'
+      '  LOGIN=:LOGIN,'
+      '  EMAIL=:EMAIL,'
+      '  LASTLOGIN=:LASTLOGIN'
+      'WHERE'
+      '  (ID=:ID)'
+    )
+    DeleteSQL.Strings = (
+      'DELETE FROM FPCUSERS WHERE (ID=:ID)'
+    )
+    InsertSQL.Strings = (
+      'INSERT INTO FPCUSERS '
+      '(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'
+      'VALUES'
+      '(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'
+    )
+    Connection = IBConnection1
+    IDFieldName = 'ID'
+    OnGetNewID = ANAMEGetNewID
+    left = 113
+    top = 120
+  end
+  object IBConnection1: TIBConnection
+    Connected = False
+    LoginPrompt = False
+    DatabaseName = '/wisa/firebird/fpcusers.fb'
+    KeepConnection = False
+    Password = 'SysteemD'
+    Transaction = SQLTransaction1
+    UserName = 'WISASOFT'
+    left = 72
+    top = 120
+  end
+  object QGetID: TSQLQuery
+    IndexName = 'DEFAULT_ORDER'
+    AutoCalcFields = False
+    Database = IBConnection1
+    Transaction = SQLTransaction1
+    ReadOnly = False
+    SQL.Strings = (
+      'SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID  FROM RDB$DATABASE'
+    )
+    Params = <>
+    left = 155
+    top = 63
+  end
+  object SQLTransaction1: TSQLTransaction
+    Active = False
+    Action = caNone
+    Database = IBConnection1
+    left = 74
+    top = 64
+  end
+  object SQLQuery1: TSQLQuery
+    IndexName = 'DEFAULT_ORDER'
+    AutoCalcFields = False
+    Database = IBConnection1
+    Transaction = SQLTransaction1
+    ReadOnly = False
+    SQL.Strings = (
+      'INSERT INTO FPCUSERS'
+      '(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'
+      'VALUES'
+      '(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'
+      ''
+    )
+    Params = <    
+      item
+        DataType = ftUnknown
+        Name = 'ID'
+        ParamType = ptUnknown
+      end    
+      item
+        DataType = ftUnknown
+        Name = 'LOGIN'
+        ParamType = ptUnknown
+      end    
+      item
+        DataType = ftUnknown
+        Name = 'NAME'
+        ParamType = ptUnknown
+      end    
+      item
+        DataType = ftUnknown
+        Name = 'EMAIL'
+        ParamType = ptUnknown
+      end    
+      item
+        DataType = ftUnknown
+        Name = 'LASTLOGIN'
+        ParamType = ptUnknown
+      end>
+    left = 174
+    top = 111
+  end
+end

+ 43 - 0
packages/fcl-web/examples/webdata/demo6/wmusers.lrs

@@ -0,0 +1,43 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
+  'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate'
+  +#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon'
+  +'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20
+  +'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt'
+  +'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3
+  +'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu'
+  +'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#232#0#3'top'#3#152#0#0
+  +#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'
+  +#3#16#1#3'top'#3#152#0#0#0#22'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatt'
+  +'er1'#13'AllowPageSize'#8#4'left'#3#16#1#3'top'#3#192#0#0#0#23'TExtJSJSONDat'
+  +'aFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8#4'left'#3#232#0
+  +#3'top'#3#192#0#0#0#21'TSQLDBWebDataProvider'#5'ANAME'#17'SelectSQL.Strings'
+  +#1#6#22'SELECT * FROM FPCUSERS'#0#17'UpdateSQL.Strings'#1#6#19'UPDATE FPCUSE'
+  +'RS SET'#6#13'  NAME=:NAME,'#6#15'  LOGIN=:LOGIN,'#6#15'  EMAIL=:EMAIL,'#6#22
+  +'  LASTLOGIN=:LASTLOGIN'#6#5'WHERE'#6#10'  (ID=:ID)'#0#17'DeleteSQL.Strings'
+  +#1#6'#DELETE FROM FPCUSERS WHERE (ID=:ID)'#0#17'InsertSQL.Strings'#1#6#21'IN'
+  +'SERT INTO FPCUSERS '#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6
+  +'((:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'#0#10'Connection'#7#13'IBConnecti'
+  +'on1'#11'IDFieldName'#6#2'ID'#10'OnGetNewID'#7#13'ANAMEGetNewID'#4'left'#2'q'
+  +#3'top'#2'x'#0#0#13'TIBConnection'#13'IBConnection1'#9'Connected'#8#11'Login'
+  +'Prompt'#8#12'DatabaseName'#6#26'/wisa/firebird/fpcusers.fb'#14'KeepConnecti'
+  +'on'#8#8'Password'#6#8'SysteemD'#11'Transaction'#7#15'SQLTransaction1'#8'Use'
+  +'rName'#6#8'WISASOFT'#4'left'#2'H'#3'top'#2'x'#0#0#9'TSQLQuery'#6'QGetID'#9
+  +'IndexName'#6#13'DEFAULT_ORDER'#14'AutoCalcFields'#8#8'Database'#7#13'IBConn'
+  +'ection1'#11'Transaction'#7#15'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'
+  +#1#6'9SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID  FROM RDB$DATABASE'#0#6'Params'
+  +#14#0#4'left'#3#155#0#3'top'#2'?'#0#0#15'TSQLTransaction'#15'SQLTransaction1'
+  +#6'Active'#8#6'Action'#7#6'caNone'#8'Database'#7#13'IBConnection1'#4'left'#2
+  +'J'#3'top'#2'@'#0#0#9'TSQLQuery'#9'SQLQuery1'#9'IndexName'#6#13'DEFAULT_ORDE'
+  +'R'#14'AutoCalcFields'#8#8'Database'#7#13'IBConnection1'#11'Transaction'#7#15
+  +'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'#1#6#20'INSERT INTO FPCUSERS'
+  +#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6'((:ID, :LOGIN, :NAME,'
+  +' :EMAIL, :LASTLOGIN)'#6#0#0#6'Params'#14#1#8'DataType'#7#9'ftUnknown'#4'Nam'
+  +'e'#6#2'ID'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4'Nam'
+  +'e'#6#5'LOGIN'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4
+  +'Name'#6#4'NAME'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4
+  +'Name'#6#5'EMAIL'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'
+  +#4'Name'#6#9'LASTLOGIN'#9'ParamType'#7#9'ptUnknown'#0#0#4'left'#3#174#0#3'to'
+  +'p'#2'o'#0#0#0
+]);

+ 107 - 0
packages/fcl-web/examples/webdata/demo6/wmusers.pp

@@ -0,0 +1,107 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+  IBConnection, sqldb, fpwebdata, extjsjson, extjsxml, sqldbwebdata;
+
+type
+
+  { TFPWebProviderDataModule1 }
+
+  TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
+    ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+    ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+    ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+    ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+    IBConnection1: TIBConnection;
+    ANAME: TSQLDBWebDataProvider;
+    QGetID: TSQLQuery;
+    SQLQuery1: TSQLQuery;
+    SQLTransaction1: TSQLTransaction;
+    procedure ANAMEGetNewID(Sender: TObject; out AID: String);
+    procedure DataModuleCreate(Sender: TObject);
+    procedure DataModuleGetContentProducer(Sender: TObject;
+      var AContentProducer: TCustomHTTPDataContentProducer);
+    procedure DataModuleGetInputAdaptor(Sender: TObject;
+      var AInputAdaptor: TCustomWebdataInputAdaptor);
+  private
+    { private declarations }
+  public
+    { public declarations }
+  end; 
+
+var
+  FPWebProviderDataModule1: TFPWebProviderDataModule1; 
+
+implementation
+
+uses inifiles;
+
+{ TFPWebProviderDataModule1 }
+
+procedure TFPWebProviderDataModule1.DataModuleGetContentProducer(
+  Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+  If Request.QueryFields.values['format']='xml' then
+    AContentProducer:=ExtJSXMLDataFormatter1;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject);
+
+Var
+  FN : String;
+  Ini : TMemIniFile;
+
+begin
+  FN:=ChangeFileExt(Paramstr(0),'.ini');
+  If FileExists(FN) then
+    begin
+    Ini:=TMemIniFile.Create(FN);
+    try
+      With IBConnection1 do
+        begin
+        DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
+        UserName:=Ini.ReadString('Database','UserName',UserName);
+        Password:=Ini.ReadString('Database','Password',Password);
+        end;
+    finally
+      Ini.Free;
+    end;
+    end;
+  IBConnection1.Connected:=True;
+end;
+
+procedure TFPWebProviderDataModule1.ANAMEGetNewID(Sender: TObject; out
+  AID: String);
+begin
+  With QGetID Do
+    begin
+    Close;
+    Open;
+    try
+      if (EOF and BOF) then
+        Raise Exception.Create('No ID generated');
+      AID:=Fields[0].AsString;
+    finally
+      Close;
+    end;
+    end;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject;
+  var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+  If Request.QueryFields.values['format']='xml' then
+    AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
+end;
+
+initialization
+  {$I wmusers.lrs}
+
+  RegisterHTTPModule('Provider', TFPWebProviderDataModule1);
+end.
+

+ 40 - 0
packages/fcl-web/examples/webdata/demos.txt

@@ -0,0 +1,40 @@
+
+The demo directories demonstrate the use of the TFPWebDataProvider
+components, using ExtJS. It demonstrates the use of JSON and XML
+communitation between a ExtJS Datastore and the webdataprovider.
+
+ExtJS must be installed, it can be downloaded for free from
+http://www.extjs.com/
+
+The examples assume that it is reachable through /ext/
+
+Demo1 shows how to use the component with a plain webdatamodule,
+using actions, and creating all components on the fly.
+
+Demo2 shows how to use the components by dropping them on a plain
+webdatamodule, and handling all in the OnRequest handler of the
+webdatamodule.
+
+Demo3 shows how to use the components in combination with a
+WebProviderDatamodule.
+
+Demo4 shows how webdataprovider components can be dropped
+on plain datamodules, and how these modules can be made
+available to the webdatamodule.
+
+Demo5 shows how to register your own TWebdataProvider instances, which
+are created on the fly to perform their action.
+
+Demo6 demonstrates the use of the TSQLDBWebDataProvider component.
+
+All demos except Demo6 use CGI and a TDBF component to feed data to 
+the webpage, which means they are not very suitable for real life 
+situations due to file locking etc.
+
+
+To try a demo, compile one of the appropriate CGI apps, and open 
+the extgrid-json.html or extgrid-xml.html page in your browser 
+through the webserver, something like:
+
+http://localhost/~myuser/extjs/demo2/extgrid-json.html
+

BIN
packages/fcl-web/examples/webdata/users.dbf


+ 45 - 3
packages/fcl-web/fpmake.pp

@@ -17,9 +17,11 @@ begin
     P.Directory:='fcl-web';
 {$endif ALLPACKAGES}
     P.Version:='2.4.3';
+    P.Dependencies.Add('fcl-base');
     P.Dependencies.Add('fcl-db');
     P.Dependencies.Add('fcl-xml');
-    P.Dependencies.Add('fcl-base');
+    P.Dependencies.Add('fcl-json');
+    P.Dependencies.Add('fcl-net');
     P.Dependencies.Add('fcl-process');
     P.Dependencies.Add('fastcgi');
     P.Dependencies.Add('httpd22');
@@ -31,7 +33,8 @@ begin
     P.Description := 'Web(app) related parts of Free Component Libraries (FCL), FPC''s OOP library.';
     P.NeedLibC:= false;
 
-    P.SourcePath.Add('src');
+    P.SourcePath.Add('src/base');
+    P.SourcePath.Add('src/webdata');
 
     T:=P.Targets.AddUnit('cgiapp.pp');
     T.ResourceStrings:=true;
@@ -116,7 +119,46 @@ begin
         Dependencies.AddUnit('custweb');
         ResourceStrings:=true;
       end;
-
+    T:=P.Targets.AddUnit('fcgigate.pp');
+    With T.Dependencies do
+      begin
+      AddUnit('httpdefs');
+      AddUnit('custcgi');
+      end;
+    T:=P.Targets.AddUnit('fpwebdata.pp');
+    With T.Dependencies do
+      begin
+      AddUnit('httpdefs');
+      AddUnit('fphttp');
+      AddUnit('websession');
+      end;
+    T:=P.Targets.AddUnit('sqldbwebdata.pp');
+    With T.Dependencies do
+      begin
+      AddUnit('fpwebdata');
+      AddUnit('fphttp');
+      end;
+    T:=P.Targets.AddUnit('fpextjs.pp');
+    With T.Dependencies do
+      begin
+      AddUnit('fpwebdata');
+      AddUnit('httpdefs');
+      AddUnit('fphttp');
+      end;
+    T:=P.Targets.AddUnit('extjsxml.pp');
+    With T.Dependencies do
+      begin
+      AddUnit('fpwebdata');
+      AddUnit('httpdefs');
+      AddUnit('fpextjs');
+      end;
+    T:=P.Targets.AddUnit('extjsjson.pp');
+    With T.Dependencies do
+      begin
+      AddUnit('fpwebdata');
+      AddUnit('httpdefs');
+      AddUnit('fpextjs');
+      end;
 {$ifndef ALLPACKAGES}
     Run;
     end;

+ 3498 - 0
packages/fcl-web/src/base/Makefile

@@ -0,0 +1,3498 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/11/05]
+#
+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)),)
+RUNBATCH=$(COMSPEC) /C
+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-web
+override PACKAGE_VERSION=2.5.1
+PACKAGEDIR_MAIN:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-web/Makefile.fpc,$(PACKAGESDIR))))))
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate  custfcgi fpfcgi
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_UNITS+=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_RSTS+=fpcgi fphtml fpweb websession cgiapp
+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
+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
+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
+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 fcl-xml fcl-db fcl-process httpd22 fastcgi fcl-net
+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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_UNIVINT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_UNIVINT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_UNIVINT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_UNIVINT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_UNIVINT=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_ICONVENC=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_ODBC=1
+REQUIRE_PACKAGES_ORACLE=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_PXLIB=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+REQUIRE_PACKAGES_FCL-DB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HTTPD22=1
+REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FCL-PASSRC=1
+REQUIRE_PACKAGES_FCL-ASYNC=1
+REQUIRE_PACKAGES_FCL-NET=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_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-DB
+PACKAGEDIR_FCL-DB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-db/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-DB),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-DB)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-DB=$(PACKAGEDIR_FCL-DB)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-DB=$(PACKAGEDIR_FCL-DB)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-DB)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-DB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-DB)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-DB=
+UNITDIR_FCL-DB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-db/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-DB),)
+UNITDIR_FCL-DB:=$(firstword $(UNITDIR_FCL-DB))
+else
+UNITDIR_FCL-DB=
+endif
+endif
+ifdef UNITDIR_FCL-DB
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-DB)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-PROCESS
+PACKAGEDIR_FCL-PROCESS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-process/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-PROCESS),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-PROCESS)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-PROCESS) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-PROCESS)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-PROCESS=
+UNITDIR_FCL-PROCESS:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-process/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-PROCESS),)
+UNITDIR_FCL-PROCESS:=$(firstword $(UNITDIR_FCL-PROCESS))
+else
+UNITDIR_FCL-PROCESS=
+endif
+endif
+ifdef UNITDIR_FCL-PROCESS
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-PROCESS)
+endif
+endif
+ifdef REQUIRE_PACKAGES_HTTPD22
+PACKAGEDIR_HTTPD22:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /httpd22/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_HTTPD22),)
+ifneq ($(wildcard $(PACKAGEDIR_HTTPD22)/units/$(TARGETSUFFIX)),)
+UNITDIR_HTTPD22=$(PACKAGEDIR_HTTPD22)/units/$(TARGETSUFFIX)
+else
+UNITDIR_HTTPD22=$(PACKAGEDIR_HTTPD22)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_HTTPD22)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_HTTPD22) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_HTTPD22)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_HTTPD22=
+UNITDIR_HTTPD22:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /httpd22/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_HTTPD22),)
+UNITDIR_HTTPD22:=$(firstword $(UNITDIR_HTTPD22))
+else
+UNITDIR_HTTPD22=
+endif
+endif
+ifdef UNITDIR_HTTPD22
+override COMPILER_UNITDIR+=$(UNITDIR_HTTPD22)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FASTCGI
+PACKAGEDIR_FASTCGI:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fastcgi/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FASTCGI),)
+ifneq ($(wildcard $(PACKAGEDIR_FASTCGI)/units/$(TARGETSUFFIX)),)
+UNITDIR_FASTCGI=$(PACKAGEDIR_FASTCGI)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FASTCGI=$(PACKAGEDIR_FASTCGI)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FASTCGI)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FASTCGI) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FASTCGI)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FASTCGI=
+UNITDIR_FASTCGI:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fastcgi/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FASTCGI),)
+UNITDIR_FASTCGI:=$(firstword $(UNITDIR_FASTCGI))
+else
+UNITDIR_FASTCGI=
+endif
+endif
+ifdef UNITDIR_FASTCGI
+override COMPILER_UNITDIR+=$(UNITDIR_FASTCGI)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-PASSRC
+PACKAGEDIR_FCL-PASSRC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-passrc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-PASSRC),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PASSRC)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-PASSRC=$(PACKAGEDIR_FCL-PASSRC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-PASSRC=$(PACKAGEDIR_FCL-PASSRC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-PASSRC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-PASSRC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-PASSRC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-PASSRC=
+UNITDIR_FCL-PASSRC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-passrc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-PASSRC),)
+UNITDIR_FCL-PASSRC:=$(firstword $(UNITDIR_FCL-PASSRC))
+else
+UNITDIR_FCL-PASSRC=
+endif
+endif
+ifdef UNITDIR_FCL-PASSRC
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-PASSRC)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-ASYNC
+PACKAGEDIR_FCL-ASYNC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-async/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-ASYNC),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-ASYNC)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-ASYNC=$(PACKAGEDIR_FCL-ASYNC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-ASYNC=$(PACKAGEDIR_FCL-ASYNC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-ASYNC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-ASYNC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-ASYNC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-ASYNC=
+UNITDIR_FCL-ASYNC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-async/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-ASYNC),)
+UNITDIR_FCL-ASYNC:=$(firstword $(UNITDIR_FCL-ASYNC))
+else
+UNITDIR_FCL-ASYNC=
+endif
+endif
+ifdef UNITDIR_FCL-ASYNC
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-ASYNC)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-NET
+PACKAGEDIR_FCL-NET:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-net/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-NET),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-NET)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-NET=$(PACKAGEDIR_FCL-NET)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-NET=$(PACKAGEDIR_FCL-NET)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-NET)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-NET) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-NET)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-NET=
+UNITDIR_FCL-NET:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-net/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-NET),)
+UNITDIR_FCL-NET:=$(firstword $(UNITDIR_FCL-NET))
+else
+UNITDIR_FCL-NET=
+endif
+endif
+ifdef UNITDIR_FCL-NET
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-NET)
+endif
+endif
+ifdef REQUIRE_PACKAGES_IBASE
+PACKAGEDIR_IBASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /ibase/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_IBASE),)
+ifneq ($(wildcard $(PACKAGEDIR_IBASE)/units/$(TARGETSUFFIX)),)
+UNITDIR_IBASE=$(PACKAGEDIR_IBASE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_IBASE=$(PACKAGEDIR_IBASE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_IBASE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_IBASE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_IBASE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_IBASE=
+UNITDIR_IBASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /ibase/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_IBASE),)
+UNITDIR_IBASE:=$(firstword $(UNITDIR_IBASE))
+else
+UNITDIR_IBASE=
+endif
+endif
+ifdef UNITDIR_IBASE
+override COMPILER_UNITDIR+=$(UNITDIR_IBASE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_POSTGRES
+PACKAGEDIR_POSTGRES:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /postgres/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_POSTGRES),)
+ifneq ($(wildcard $(PACKAGEDIR_POSTGRES)/units/$(TARGETSUFFIX)),)
+UNITDIR_POSTGRES=$(PACKAGEDIR_POSTGRES)/units/$(TARGETSUFFIX)
+else
+UNITDIR_POSTGRES=$(PACKAGEDIR_POSTGRES)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_POSTGRES)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_POSTGRES) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_POSTGRES)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_POSTGRES=
+UNITDIR_POSTGRES:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /postgres/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_POSTGRES),)
+UNITDIR_POSTGRES:=$(firstword $(UNITDIR_POSTGRES))
+else
+UNITDIR_POSTGRES=
+endif
+endif
+ifdef UNITDIR_POSTGRES
+override COMPILER_UNITDIR+=$(UNITDIR_POSTGRES)
+endif
+endif
+ifdef REQUIRE_PACKAGES_MYSQL
+PACKAGEDIR_MYSQL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mysql/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_MYSQL),)
+ifneq ($(wildcard $(PACKAGEDIR_MYSQL)/units/$(TARGETSUFFIX)),)
+UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_MYSQL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_MYSQL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_MYSQL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_MYSQL=
+UNITDIR_MYSQL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mysql/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_MYSQL),)
+UNITDIR_MYSQL:=$(firstword $(UNITDIR_MYSQL))
+else
+UNITDIR_MYSQL=
+endif
+endif
+ifdef UNITDIR_MYSQL
+override COMPILER_UNITDIR+=$(UNITDIR_MYSQL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_ODBC
+PACKAGEDIR_ODBC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /odbc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_ODBC),)
+ifneq ($(wildcard $(PACKAGEDIR_ODBC)/units/$(TARGETSUFFIX)),)
+UNITDIR_ODBC=$(PACKAGEDIR_ODBC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_ODBC=$(PACKAGEDIR_ODBC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_ODBC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_ODBC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_ODBC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_ODBC=
+UNITDIR_ODBC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /odbc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_ODBC),)
+UNITDIR_ODBC:=$(firstword $(UNITDIR_ODBC))
+else
+UNITDIR_ODBC=
+endif
+endif
+ifdef UNITDIR_ODBC
+override COMPILER_UNITDIR+=$(UNITDIR_ODBC)
+endif
+endif
+ifdef REQUIRE_PACKAGES_ORACLE
+PACKAGEDIR_ORACLE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /oracle/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_ORACLE),)
+ifneq ($(wildcard $(PACKAGEDIR_ORACLE)/units/$(TARGETSUFFIX)),)
+UNITDIR_ORACLE=$(PACKAGEDIR_ORACLE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_ORACLE=$(PACKAGEDIR_ORACLE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_ORACLE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_ORACLE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_ORACLE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_ORACLE=
+UNITDIR_ORACLE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /oracle/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_ORACLE),)
+UNITDIR_ORACLE:=$(firstword $(UNITDIR_ORACLE))
+else
+UNITDIR_ORACLE=
+endif
+endif
+ifdef UNITDIR_ORACLE
+override COMPILER_UNITDIR+=$(UNITDIR_ORACLE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_SQLITE
+PACKAGEDIR_SQLITE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_SQLITE),)
+ifneq ($(wildcard $(PACKAGEDIR_SQLITE)/units/$(TARGETSUFFIX)),)
+UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)/units/$(TARGETSUFFIX)
+else
+UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_SQLITE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_SQLITE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_SQLITE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_SQLITE=
+UNITDIR_SQLITE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_SQLITE),)
+UNITDIR_SQLITE:=$(firstword $(UNITDIR_SQLITE))
+else
+UNITDIR_SQLITE=
+endif
+endif
+ifdef UNITDIR_SQLITE
+override COMPILER_UNITDIR+=$(UNITDIR_SQLITE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_PXLIB
+PACKAGEDIR_PXLIB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /pxlib/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_PXLIB),)
+ifneq ($(wildcard $(PACKAGEDIR_PXLIB)/units/$(TARGETSUFFIX)),)
+UNITDIR_PXLIB=$(PACKAGEDIR_PXLIB)/units/$(TARGETSUFFIX)
+else
+UNITDIR_PXLIB=$(PACKAGEDIR_PXLIB)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_PXLIB)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_PXLIB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PXLIB)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_PXLIB=
+UNITDIR_PXLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /pxlib/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PXLIB),)
+UNITDIR_PXLIB:=$(firstword $(UNITDIR_PXLIB))
+else
+UNITDIR_PXLIB=
+endif
+endif
+ifdef UNITDIR_PXLIB
+override COMPILER_UNITDIR+=$(UNITDIR_PXLIB)
+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 GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+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_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:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+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:

+ 42 - 0
packages/fcl-web/src/base/Makefile.fpc

@@ -0,0 +1,42 @@
+#
+#   Makefile.fpc for FCL Web components
+#
+
+[package]
+main=fcl-web
+version=2.5.1
+
+[target]
+units=httpdefs fphttp custweb custcgi fpcgi fphtml websession fpweb \
+      webutil fpdatasetform cgiapp ezcgi fpapache webpage fcgigate
+rsts=fpcgi fphtml fpweb websession cgiapp
+
+# these units are listed separately because they don't work for
+# darwin (which does support the rest of fcl-web)
+units_beos=custfcgi fpfcgi
+units_haiku=custfcgi fpfcgi
+units_freebsd=custfcgi fpfcgi
+units_solaris=custfcgi fpfcgi
+units_netbsd=custfcgi fpfcgi
+units_openbsd=custfcgi fpfcgi
+units_linux=custfcgi fpfcgi
+units_win32=custfcgi fpfcgi
+units_win64=custfcgi fpfcgi
+units_wince=custfcgi fpfcgi
+
+[require]
+packages=fcl-base fcl-xml fcl-db fcl-process httpd22 fastcgi fcl-net
+packages_darwin=univint
+
+[compiler]
+options=-S2h
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../..
+
+
+[rules]
+.NOTPARALLEL:

+ 0 - 0
packages/fcl-web/src/README.txt → packages/fcl-web/src/base/README.txt


+ 0 - 0
packages/fcl-web/src/cgiapp.pp → packages/fcl-web/src/base/cgiapp.pp


+ 0 - 0
packages/fcl-web/src/custcgi.pp → packages/fcl-web/src/base/custcgi.pp


+ 0 - 0
packages/fcl-web/src/custfcgi.pp → packages/fcl-web/src/base/custfcgi.pp


+ 0 - 0
packages/fcl-web/src/custweb.pp → packages/fcl-web/src/base/custweb.pp


+ 0 - 0
packages/fcl-web/src/ezcgi.pp → packages/fcl-web/src/base/ezcgi.pp


+ 0 - 0
packages/fcl-web/src/fcgigate.pp → packages/fcl-web/src/base/fcgigate.pp


+ 0 - 0
packages/fcl-web/src/fpapache.pp → packages/fcl-web/src/base/fpapache.pp


+ 0 - 0
packages/fcl-web/src/fpcgi.pp → packages/fcl-web/src/base/fpcgi.pp


+ 0 - 0
packages/fcl-web/src/fpdatasetform.pp → packages/fcl-web/src/base/fpdatasetform.pp


+ 0 - 0
packages/fcl-web/src/fpfcgi.pp → packages/fcl-web/src/base/fpfcgi.pp


+ 0 - 0
packages/fcl-web/src/fphtml.pp → packages/fcl-web/src/base/fphtml.pp


+ 0 - 0
packages/fcl-web/src/fphttp.pp → packages/fcl-web/src/base/fphttp.pp


+ 0 - 0
packages/fcl-web/src/fpweb.pp → packages/fcl-web/src/base/fpweb.pp


+ 0 - 0
packages/fcl-web/src/httpdefs.pp → packages/fcl-web/src/base/httpdefs.pp


+ 0 - 0
packages/fcl-web/src/webpage.pp → packages/fcl-web/src/base/webpage.pp


+ 0 - 0
packages/fcl-web/src/websession.pp → packages/fcl-web/src/base/websession.pp


+ 0 - 0
packages/fcl-web/src/webutil.pp → packages/fcl-web/src/base/webutil.pp


Неке датотеке нису приказане због велике количине промена