Browse Source

--- Merging r19871 into '.':
U packages/libgbafpc/Makefile.fpc
A packages/libgbafpc/src/maxmod
A packages/libgbafpc/src/maxmod/maxmod.pp
A packages/libgbafpc/src/maxmod/inc
A packages/libgbafpc/src/maxmod/inc/mm_types.inc
A packages/libgbafpc/src/maxmod/inc/maxmod.inc
U packages/libgbafpc/examples/graphics/SimpleBGScroll/SimpleBGScroll.pp
--- Merging r19932 into '.':
U packages/libndsfpc/Makefile.fpc
U packages/libndsfpc/src/nds/arm9/videoGL.inc
A packages/libndsfpc/src/gl2d
A packages/libndsfpc/src/gl2d/gl2d.pp
C packages/libndsfpc/Makefile
U packages/libndsfpc/examples/Makefile.fpc
A packages/libndsfpc/examples/gl2d
A packages/libndsfpc/examples/gl2d/2Dplus3D
A packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas
A packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile.fpc
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.grit
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.bmp
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.png
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.grit
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.grit
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.bmp
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.png
A packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.grit
A packages/libndsfpc/examples/gl2d/2Dplus3D/uvcoord_enemies.pas
A packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile
A packages/libndsfpc/examples/gl2d/2Dplus3D/cearn_atan.pas
A packages/libndsfpc/examples/gl2d/2Dplus3D/2Dplus3D.pp
A packages/libndsfpc/examples/gl2d/Makefile.fpc
A packages/libndsfpc/examples/gl2d/dual_screen
A packages/libndsfpc/examples/gl2d/dual_screen/dual_screen.pp
A packages/libndsfpc/examples/gl2d/dual_screen/Makefile.fpc
A packages/libndsfpc/examples/gl2d/dual_screen/Makefile
A packages/libndsfpc/examples/gl2d/fonts
A packages/libndsfpc/examples/gl2d/fonts/Makefile.fpc
A packages/libndsfpc/examples/gl2d/fonts/gfx
A packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.grit
A packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.grit
A packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.bmp
A packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.bmp
A packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_si.pas
A packages/libndsfpc/examples/gl2d/fonts/fonts.pp
A packages/libndsfpc/examples/gl2d/fonts/Makefile
A packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_16x16.pas
A packages/libndsfpc/examples/gl2d/sprites
A packages/libndsfpc/examples/gl2d/sprites/uvcoord_zero.pas
A packages/libndsfpc/examples/gl2d/sprites/Makefile.fpc
A packages/libndsfpc/examples/gl2d/sprites/gfx
A packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/zero.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/font.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/zero.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/anya.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.bmp
A packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.png
A packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/font.grit
A packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.png
A packages/libndsfpc/examples/gl2d/sprites/gfx/anya.png
A packages/libndsfpc/examples/gl2d/sprites/sprites.pp
A packages/libndsfpc/examples/gl2d/sprites/uvcoord_enemies.pas
A packages/libndsfpc/examples/gl2d/sprites/Makefile
A packages/libndsfpc/examples/gl2d/sprites/cearn_atan.pas
A packages/libndsfpc/examples/gl2d/primitives
A packages/libndsfpc/examples/gl2d/primitives/Makefile.fpc
A packages/libndsfpc/examples/gl2d/primitives/primitives.pp
A packages/libndsfpc/examples/gl2d/primitives/Makefile
A packages/libndsfpc/examples/gl2d/scrolling
A packages/libndsfpc/examples/gl2d/scrolling/uvcoord_crono.pas
A packages/libndsfpc/examples/gl2d/scrolling/Makefile.fpc
A packages/libndsfpc/examples/gl2d/scrolling/gfx
A packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.grit
A packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.grit
A packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.bmp
A packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.bmp
A packages/libndsfpc/examples/gl2d/scrolling/scrolling.pp
A packages/libndsfpc/examples/gl2d/scrolling/Makefile
A packages/libndsfpc/examples/gl2d/Makefile
C packages/libndsfpc/examples/Makefile
--- Merging r19949 into '.':
U packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas
--- Merging r19969 into '.':
C compiler/Makefile
U compiler/Makefile.fpc
--- Merging r19974 into '.':
U rtl/gba/Makefile.fpc
C rtl/gba/Makefile
--- Merging r19975 into '.':
U rtl/gba/sysutils.pp
Summary of conflicts:
Text conflicts: 4

# revisions: 19871,19932,19949,19969,19974,19975
------------------------------------------------------------------------
r19871 | Legolas | 2011-12-18 12:35:30 +0100 (Sun, 18 Dec 2011) | 3 lines
Changed paths:
M /trunk/packages/libgbafpc/Makefile.fpc
M /trunk/packages/libgbafpc/examples/graphics/SimpleBGScroll/SimpleBGScroll.pp
A /trunk/packages/libgbafpc/src/maxmod
A /trunk/packages/libgbafpc/src/maxmod/inc
A /trunk/packages/libgbafpc/src/maxmod/inc/maxmod.inc
A /trunk/packages/libgbafpc/src/maxmod/inc/mm_types.inc
A /trunk/packages/libgbafpc/src/maxmod/maxmod.pp

+ Added maxmod library for GBA
* Fixed makefile for cleaning examples
* Fixed SimpleBGScroll example compilation
------------------------------------------------------------------------
------------------------------------------------------------------------
r19932 | Legolas | 2011-12-31 15:14:12 +0100 (Sat, 31 Dec 2011) | 2 lines
Changed paths:
M /trunk/packages/libndsfpc/Makefile
M /trunk/packages/libndsfpc/Makefile.fpc
M /trunk/packages/libndsfpc/examples/Makefile
M /trunk/packages/libndsfpc/examples/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/2Dplus3D.pp
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/cearn_atan.pas
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.bmp
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.grit
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.grit
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.png
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.bmp
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.grit
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.grit
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.png
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/uvcoord_enemies.pas
A /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas
A /trunk/packages/libndsfpc/examples/gl2d/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/dual_screen
A /trunk/packages/libndsfpc/examples/gl2d/dual_screen/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/dual_screen/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/dual_screen/dual_screen.pp
A /trunk/packages/libndsfpc/examples/gl2d/fonts
A /trunk/packages/libndsfpc/examples/gl2d/fonts/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/fonts/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/fonts/fonts.pp
A /trunk/packages/libndsfpc/examples/gl2d/fonts/gfx
A /trunk/packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.bmp
A /trunk/packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.grit
A /trunk/packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.bmp
A /trunk/packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.grit
A /trunk/packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_16x16.pas
A /trunk/packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_si.pas
A /trunk/packages/libndsfpc/examples/gl2d/primitives
A /trunk/packages/libndsfpc/examples/gl2d/primitives/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/primitives/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/primitives/primitives.pp
A /trunk/packages/libndsfpc/examples/gl2d/scrolling
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/gfx
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.bmp
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.grit
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.bmp
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.grit
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/scrolling.pp
A /trunk/packages/libndsfpc/examples/gl2d/scrolling/uvcoord_crono.pas
A /trunk/packages/libndsfpc/examples/gl2d/sprites
A /trunk/packages/libndsfpc/examples/gl2d/sprites/Makefile
A /trunk/packages/libndsfpc/examples/gl2d/sprites/Makefile.fpc
A /trunk/packages/libndsfpc/examples/gl2d/sprites/cearn_atan.pas
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/anya.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/anya.png
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.png
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/font.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/font.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.png
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/zero.bmp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/gfx/zero.grit
A /trunk/packages/libndsfpc/examples/gl2d/sprites/sprites.pp
A /trunk/packages/libndsfpc/examples/gl2d/sprites/uvcoord_enemies.pas
A /trunk/packages/libndsfpc/examples/gl2d/sprites/uvcoord_zero.pas
A /trunk/packages/libndsfpc/src/gl2d
A /trunk/packages/libndsfpc/src/gl2d/gl2d.pp
M /trunk/packages/libndsfpc/src/nds/arm9/videoGL.inc

+ Added Easy gl2d library for Nintendo DS and 6 new examples
* libndsfpc: Fixed glMaterialShinyness()
------------------------------------------------------------------------
------------------------------------------------------------------------
r19949 | Legolas | 2012-01-02 14:13:34 +0100 (Mon, 02 Jan 2012) | 1 line
Changed paths:
M /trunk/packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas

* Fixed typo
------------------------------------------------------------------------
------------------------------------------------------------------------
r19969 | florian | 2012-01-05 00:31:08 +0100 (Thu, 05 Jan 2012) | 1 line
Changed paths:
M /trunk/compiler/Makefile
M /trunk/compiler/Makefile.fpc

* don't try to build a native compiler for arm-gba
------------------------------------------------------------------------
------------------------------------------------------------------------
r19974 | florian | 2012-01-05 18:27:44 +0100 (Thu, 05 Jan 2012) | 1 line
Changed paths:
M /trunk/rtl/gba/Makefile
M /trunk/rtl/gba/Makefile.fpc

* build strutils for gba, some packages require it
------------------------------------------------------------------------
------------------------------------------------------------------------
r19975 | florian | 2012-01-05 18:29:41 +0100 (Thu, 05 Jan 2012) | 2 lines
Changed paths:
M /trunk/rtl/gba/sysutils.pp

+ sysutils.sleep for gba
+ dummy sysutils.getlastoserror for gba
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_6@20043 -

marco 13 years ago
parent
commit
4a9ba94ef4
82 changed files with 17215 additions and 260 deletions
  1. 69 0
      .gitattributes
  2. 4 0
      compiler/Makefile
  3. 6 0
      compiler/Makefile.fpc
  4. 1 1
      packages/libgbafpc/Makefile.fpc
  5. 3 0
      packages/libgbafpc/examples/graphics/SimpleBGScroll/SimpleBGScroll.pp
  6. 80 0
      packages/libgbafpc/src/maxmod/inc/maxmod.inc
  7. 234 0
      packages/libgbafpc/src/maxmod/inc/mm_types.inc
  8. 56 0
      packages/libgbafpc/src/maxmod/maxmod.pp
  9. 126 126
      packages/libndsfpc/Makefile
  10. 2 2
      packages/libndsfpc/Makefile.fpc
  11. 171 63
      packages/libndsfpc/examples/Makefile
  12. 1 1
      packages/libndsfpc/examples/Makefile.fpc
  13. 331 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/2Dplus3D.pp
  14. 1577 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile
  15. 111 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile.fpc
  16. 177 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/cearn_atan.pas
  17. BIN
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.bmp
  18. 8 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.grit
  19. 11 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.grit
  20. BIN
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.png
  21. BIN
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.bmp
  22. 8 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.grit
  23. 11 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.grit
  24. BIN
      packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.png
  25. 118 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/uvcoord_enemies.pas
  26. 495 0
      packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas
  27. 1591 0
      packages/libndsfpc/examples/gl2d/Makefile
  28. 18 0
      packages/libndsfpc/examples/gl2d/Makefile.fpc
  29. 1577 0
      packages/libndsfpc/examples/gl2d/dual_screen/Makefile
  30. 111 0
      packages/libndsfpc/examples/gl2d/dual_screen/Makefile.fpc
  31. 339 0
      packages/libndsfpc/examples/gl2d/dual_screen/dual_screen.pp
  32. 1577 0
      packages/libndsfpc/examples/gl2d/fonts/Makefile
  33. 111 0
      packages/libndsfpc/examples/gl2d/fonts/Makefile.fpc
  34. 277 0
      packages/libndsfpc/examples/gl2d/fonts/fonts.pp
  35. BIN
      packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.bmp
  36. 11 0
      packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.grit
  37. BIN
      packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.bmp
  38. 9 0
      packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.grit
  39. 117 0
      packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_16x16.pas
  40. 117 0
      packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_si.pas
  41. 1577 0
      packages/libndsfpc/examples/gl2d/primitives/Makefile
  42. 111 0
      packages/libndsfpc/examples/gl2d/primitives/Makefile.fpc
  43. 270 0
      packages/libndsfpc/examples/gl2d/primitives/primitives.pp
  44. 1577 0
      packages/libndsfpc/examples/gl2d/scrolling/Makefile
  45. 111 0
      packages/libndsfpc/examples/gl2d/scrolling/Makefile.fpc
  46. BIN
      packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.bmp
  47. 8 0
      packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.grit
  48. BIN
      packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.bmp
  49. 9 0
      packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.grit
  50. 400 0
      packages/libndsfpc/examples/gl2d/scrolling/scrolling.pp
  51. 49 0
      packages/libndsfpc/examples/gl2d/scrolling/uvcoord_crono.pas
  52. 1577 0
      packages/libndsfpc/examples/gl2d/sprites/Makefile
  53. 111 0
      packages/libndsfpc/examples/gl2d/sprites/Makefile.fpc
  54. 176 0
      packages/libndsfpc/examples/gl2d/sprites/cearn_atan.pas
  55. 10 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/anya.grit
  56. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/anya.png
  57. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.bmp
  58. 11 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.grit
  59. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.bmp
  60. 8 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.grit
  61. 11 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.grit
  62. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.png
  63. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/font.bmp
  64. 20 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/font.grit
  65. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.bmp
  66. 20 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.grit
  67. 11 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.grit
  68. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.png
  69. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.bmp
  70. 11 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.grit
  71. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.bmp
  72. 9 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.grit
  73. BIN
      packages/libndsfpc/examples/gl2d/sprites/gfx/zero.bmp
  74. 11 0
      packages/libndsfpc/examples/gl2d/sprites/gfx/zero.grit
  75. 460 0
      packages/libndsfpc/examples/gl2d/sprites/sprites.pp
  76. 117 0
      packages/libndsfpc/examples/gl2d/sprites/uvcoord_enemies.pas
  77. 31 0
      packages/libndsfpc/examples/gl2d/sprites/uvcoord_zero.pas
  78. 952 0
      packages/libndsfpc/src/gl2d/gl2d.pp
  79. 1 1
      packages/libndsfpc/src/nds/arm9/videoGL.inc
  80. 66 63
      rtl/gba/Makefile
  81. 6 1
      rtl/gba/Makefile.fpc
  82. 29 2
      rtl/gba/sysutils.pp

+ 69 - 0
.gitattributes

@@ -4200,6 +4200,9 @@ packages/libgbafpc/src/gba/helper.inc svneol=native#text/plain
 packages/libgbafpc/src/gba/mappy.inc svneol=native#text/plain
 packages/libgbafpc/src/gba/mappy.inc svneol=native#text/plain
 packages/libgbafpc/src/gba/mbv2.inc svneol=native#text/plain
 packages/libgbafpc/src/gba/mbv2.inc svneol=native#text/plain
 packages/libgbafpc/src/gba/pcx.inc svneol=native#text/plain
 packages/libgbafpc/src/gba/pcx.inc svneol=native#text/plain
+packages/libgbafpc/src/maxmod/inc/maxmod.inc svneol=native#text/plain
+packages/libgbafpc/src/maxmod/inc/mm_types.inc svneol=native#text/plain
+packages/libgbafpc/src/maxmod/maxmod.pp svneol=native#text/plain
 packages/libgd/Makefile svneol=native#text/plain
 packages/libgd/Makefile svneol=native#text/plain
 packages/libgd/Makefile.fpc svneol=native#text/plain
 packages/libgd/Makefile.fpc svneol=native#text/plain
 packages/libgd/README.txt svneol=native#text/plain
 packages/libgd/README.txt svneol=native#text/plain
@@ -4298,6 +4301,71 @@ packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/dir1/test.txt
 packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/dir2/subdir1/subsubdir1/file2.txt svneol=native#text/plain
 packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/dir2/subdir1/subsubdir1/file2.txt svneol=native#text/plain
 packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/dir2/subdir1/test2.txt svneol=native#text/plain
 packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/dir2/subdir1/test2.txt svneol=native#text/plain
 packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/file1.txt svneol=native#text/plain
 packages/libndsfpc/examples/filesystem/nitrofs/nitrodir/nitrofiles/file1.txt svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/2Dplus3D.pp svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/cearn_atan.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.bmp -text
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.png -text
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.bmp -text
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.png -text
+packages/libndsfpc/examples/gl2d/2Dplus3D/uvcoord_enemies.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/dual_screen/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/dual_screen/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/dual_screen/dual_screen.pp svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/fonts.pp svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.bmp -text
+packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.bmp -text
+packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_16x16.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_si.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/primitives/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/primitives/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/primitives/primitives.pp svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/scrolling/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/scrolling/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.bmp -text
+packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.bmp -text
+packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/scrolling/scrolling.pp svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/scrolling/uvcoord_crono.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/Makefile svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/Makefile.fpc svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/cearn_atan.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/anya.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/anya.png -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.png -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/font.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/font.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.png -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/gfx/zero.bmp -text
+packages/libndsfpc/examples/gl2d/sprites/gfx/zero.grit svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/sprites.pp svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/uvcoord_enemies.pas svneol=native#text/plain
+packages/libndsfpc/examples/gl2d/sprites/uvcoord_zero.pas svneol=native#text/plain
 packages/libndsfpc/examples/graphics/3D/3D_Both_Screens/3DBothScreens.pp svneol=native#text/plain
 packages/libndsfpc/examples/graphics/3D/3D_Both_Screens/3DBothScreens.pp svneol=native#text/plain
 packages/libndsfpc/examples/graphics/3D/3D_Both_Screens/Makefile svneol=native#text/plain
 packages/libndsfpc/examples/graphics/3D/3D_Both_Screens/Makefile svneol=native#text/plain
 packages/libndsfpc/examples/graphics/3D/3D_Both_Screens/Makefile.fpc svneol=native#text/plain
 packages/libndsfpc/examples/graphics/3D/3D_Both_Screens/Makefile.fpc svneol=native#text/plain
@@ -4564,6 +4632,7 @@ packages/libndsfpc/src/fat/filesystem.inc svneol=native#text/plain
 packages/libndsfpc/src/fat/filesystem.pp svneol=native#text/plain
 packages/libndsfpc/src/fat/filesystem.pp svneol=native#text/plain
 packages/libndsfpc/src/fat/gbfs.inc svneol=native#text/plain
 packages/libndsfpc/src/fat/gbfs.inc svneol=native#text/plain
 packages/libndsfpc/src/fat/gbfs.pp svneol=native#text/plain
 packages/libndsfpc/src/fat/gbfs.pp svneol=native#text/plain
+packages/libndsfpc/src/gl2d/gl2d.pp svneol=native#text/plain
 packages/libndsfpc/src/maxmod/inc/maxmod.inc svneol=native#text/plain
 packages/libndsfpc/src/maxmod/inc/maxmod.inc svneol=native#text/plain
 packages/libndsfpc/src/maxmod/inc/maxmod7.inc svneol=native#text/plain
 packages/libndsfpc/src/maxmod/inc/maxmod7.inc svneol=native#text/plain
 packages/libndsfpc/src/maxmod/inc/maxmod9.inc svneol=native#text/plain
 packages/libndsfpc/src/maxmod/inc/maxmod9.inc svneol=native#text/plain

+ 4 - 0
compiler/Makefile

@@ -3465,10 +3465,12 @@ cycle:
 ifndef CROSSINSTALL
 ifndef CROSSINSTALL
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' rtlclean rtl
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' rtlclean rtl
 ifneq ($(OS_TARGET),embedded)
 ifneq ($(OS_TARGET),embedded)
+ifneq ($(OS_TARGET),gba)
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' cycleclean compiler
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' cycleclean compiler
 endif
 endif
 endif
 endif
 endif
 endif
+endif
 else
 else
 cycle: override FPC=
 cycle: override FPC=
 cycle:
 cycle:
@@ -3479,10 +3481,12 @@ cycle:
 ifndef CROSSINSTALL
 ifndef CROSSINSTALL
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' rtlclean rtl
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' rtlclean rtl
 ifneq ($(OS_TARGET),embedded)
 ifneq ($(OS_TARGET),embedded)
+ifneq ($(OS_TARGET),gba)
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' cycleclean compiler
 	$(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' cycleclean compiler
 endif
 endif
 endif
 endif
 endif
 endif
+endif
 cycledep:
 cycledep:
 	$(MAKE) cycle USEDEPEND=1
 	$(MAKE) cycle USEDEPEND=1
 extcycle:
 extcycle:

+ 6 - 0
compiler/Makefile.fpc

@@ -574,9 +574,12 @@ ifndef CROSSINSTALL
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' rtlclean rtl
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' rtlclean rtl
 # building a native compiler for embedded targets is not possible
 # building a native compiler for embedded targets is not possible
 ifneq ($(OS_TARGET),embedded)
 ifneq ($(OS_TARGET),embedded)
+# building a native compiler for the arm-gba target is not possible
+ifneq ($(OS_TARGET),gba)
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' cycleclean compiler
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' cycleclean compiler
 endif
 endif
 endif
 endif
+endif
 
 
 endif
 endif
 
 
@@ -604,9 +607,12 @@ ifndef CROSSINSTALL
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' rtlclean rtl
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' rtlclean rtl
 # building a native compiler for embedded targets is not possible
 # building a native compiler for embedded targets is not possible
 ifneq ($(OS_TARGET),embedded)
 ifneq ($(OS_TARGET),embedded)
+# building a native compiler for the arm-gba target is not possible
+ifneq ($(OS_TARGET),gba)
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' cycleclean compiler
         $(MAKE) 'FPC=$(BASEDIR)/$(PPCROSSNAME)' 'OPT=$(OPT) $(CROSSOPT)' cycleclean compiler
 endif
 endif
 endif
 endif
+endif
 
 
 endif
 endif
 
 

+ 1 - 1
packages/libgbafpc/Makefile.fpc

@@ -9,7 +9,7 @@ version=2.6.1
 [target]
 [target]
 loaders=core_asm
 loaders=core_asm
 units=gba maxmod
 units=gba maxmod
-#exampledirs=examples
+exampledirs=examples
 
 
 
 
 [compiler]
 [compiler]

+ 3 - 0
packages/libgbafpc/examples/graphics/SimpleBGScroll/SimpleBGScroll.pp

@@ -1,5 +1,8 @@
 program SimpleBGScroll;
 program SimpleBGScroll;
 
 
+{$mode objfpc}
+{$H+}
+
 uses
 uses
   ctypes, gba;
   ctypes, gba;
 
 

+ 80 - 0
packages/libgbafpc/src/maxmod/inc/maxmod.inc

@@ -0,0 +1,80 @@
+(****************************************************************************
+ *                                                          __              *
+ *                ____ ___  ____ __  ______ ___  ____  ____/ /              *
+ *               / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __  /               *
+ *              / / / / / / /_/ />  </ / / / / / /_/ / /_/ /                *
+ *             /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/                 *
+ *                                                                          *
+ *                            ARM7 Definitions                              *
+ *                                                                          *
+ *         Copyright (c) 2008, Mukunda Johnson ([email protected])         *
+ *                                                                          *
+ * Permission to use, copy, modify, and/or distribute this software for any *
+ * purpose with or without fee is hereby granted, provided that the above   *
+ * copyright notice and this permission notice appear in all copies.        *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF         *
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR  *
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   *
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    *
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.           *
+ ****************************************************************************)
+
+{$ifdef NDS_INTERFACE}
+const
+  // precalculated mix buffer lengths (in bytes)
+  MM_MIXLEN_8KHZ    = 544;    // (8121 hz)
+  MM_MIXLEN_10KHZ   = 704;    // (10512 hz)	
+  MM_MIXLEN_13KHZ   = 896;    // (13379 hz)	
+  MM_MIXLEN_16KHZ   = 1056;   // (15768 hz)
+  MM_MIXLEN_18KHZ   = 1216;   // (18157 hz)
+  MM_MIXLEN_21KHZ   = 1408;   // (21024 hz)
+  MM_MIXLEN_27KHZ   = 1792;   // (26758 hz)
+  MM_MIXLEN_31KHZ   = 2112;   // (31536 hz)
+  
+  // measurements of channel types (bytes)
+  MM_SIZEOF_MODCH   = 40;
+  MM_SIZEOF_ACTCH   = 28;
+  MM_SIZEOF_MIXCH   = 24;
+ 
+procedure mmInitDefault(soundbank:  mm_addr; number_of_channels: mm_word); cdecl; external;
+procedure mmInit(var setup: mm_gba_system); cdecl; external;
+procedure mmVBlank(); cdecl; external;
+procedure mmSetVBlankHandler(func: pointer); cdecl; external;
+procedure mmSetEventHandler(handler: mm_callback); cdecl; external; 
+procedure mmFrame(); cdecl; external; //__attribute((long_call)) ???
+procedure mmStart(id: mm_word; mode: mm_pmode); cdecl; external;
+procedure mmPause(); cdecl; external;
+procedure mmResume(); cdecl; external;
+procedure mmStop(); cdecl; external;
+procedure mmPosition(position: mm_word); cdecl; external;
+function mmActive(): cint; cdecl; external;
+procedure mmJingle(module_ID: mm_word); cdecl; external;
+function mmActiveSub(): cint; cdecl; external;
+procedure mmSetModuleVolume(volume: mm_word); cdecl; external;
+procedure mmSetJingleVolume(volume: mm_word); cdecl; external;
+procedure mmSetModuleTempo(tempo: mm_word); cdecl; external;
+procedure mmSetModulePitch(pitch: mm_word); cdecl; external;
+procedure mmPlayModule(address, mode, layer: mm_word); cdecl; external;
+function mmEffect(sample_ID: mm_word): mm_sfxhand; cdecl; external;
+function mmEffectEx(var sound: mm_sound_effect): mm_sfxhand; cdecl; external;
+procedure mmEffectVolume(handle: mm_sfxhand; volume: mm_word); cdecl; external;
+procedure mmEffectPanning(handle: mm_sfxhand; panning: mm_byte); cdecl; external;
+procedure mmEffectRate(handle: mm_sfxhand; rate: mm_word); cdecl; external;
+procedure mmEffectScaleRate(handle: mm_sfxhand; factor: mm_word); cdecl; external;
+procedure mmEffectCancel(handle: mm_sfxhand); cdecl; external;
+procedure mmEffectRelease(handle: mm_sfxhand); cdecl; external;
+procedure mmSetEffectsVolume(volume: mm_word); cdecl; external;
+procedure mmEffectCancelAll(); cdecl; external;
+
+const 
+  MMCB_SONGMESSAGE = $2A;
+  MMCB_SONGFINISHED = $2B;
+
+var
+  mp_mix_seg: mm_byte; cvar; external;			// current mixing segment
+  mp_writepos: mm_word; cvar; external;		// mixer's write position
+
+{$endif NDS_INTERFACE}

+ 234 - 0
packages/libgbafpc/src/maxmod/inc/mm_types.inc

@@ -0,0 +1,234 @@
+(****************************************************************************
+ *                                                          __              *
+ *                ____ ___  ____ __  ______ ___  ____  ____/ /              *
+ *               / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __  /               *
+ *              / / / / / / /_/ />  </ / / / / / /_/ / /_/ /                *
+ *             /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/                 *
+ *                                                                          *
+ *         Copyright (c) 2008, Mukunda Johnson ([email protected])         *
+ *                                                                          *
+ * Permission to use, copy, modify, and/or distribute this software for any *
+ * purpose with or without fee is hereby granted, provided that the above   *
+ * copyright notice and this permission notice appear in all copies.        *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF         *
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR  *
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   *
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    *
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.           *
+ ****************************************************************************)
+
+
+{$ifdef NDS_INTERFACE}
+type
+  mm_word     = cuint;
+  pmm_word    = ^mm_word;
+
+  mm_hword    = cushort;
+  pmm_hword   = ^mm_hword;
+
+  mm_byte     = cuchar;
+  pmm_byte    = ^mm_byte;
+
+  mm_sfxhand  = cushort;
+  pmm_sfxhand = ^mm_sfxhand;
+
+  mm_bool     = cuchar;
+
+  mm_addr     = pointer;
+  mm_reg      = pointer;
+
+type
+  mm_mode_enum = integer;
+const
+  MM_MODE_A: mm_mode_enum = 0;
+  MM_MODE_B: mm_mode_enum = 1;
+  MM_MODE_C: mm_mode_enum = 2;
+
+type
+  mm_stream_formats = integer;
+const
+  MM_STREAM_8BIT_MONO   : mm_stream_formats = $0;
+  MM_STREAM_8BIT_STEREO : mm_stream_formats = $1;
+  MM_STREAM_16BIT_MONO  : mm_stream_formats = $2;
+  MM_STREAM_16BIT_STEREO: mm_stream_formats = $3;
+
+
+type
+  mm_callback     = function  (msg, param: mm_word): mm_word;
+  mm_stream_func  = function (length: mm_word; dest: mm_addr; format: mm_stream_formats): mm_word;
+
+
+type
+  mm_reverbflags = integer;
+const
+  MMRF_MEMORY     : mm_reverbflags = $01;
+  MMRF_DELAY      : mm_reverbflags = $02;
+  MMRF_RATE       : mm_reverbflags = $04;
+  MMRF_FEEDBACK   : mm_reverbflags = $08;
+  MMRF_PANNING    : mm_reverbflags = $10;
+  MMRF_LEFT       : mm_reverbflags = $20;
+  MMRF_RIGHT      : mm_reverbflags = $40;
+  MMRF_BOTH       : mm_reverbflags = $60;
+  
+  MMRF_INVERSEPAN : mm_reverbflags = $80;
+  MMRF_NODRYLEFT  : mm_reverbflags = $100;
+  MMRF_NODRYRIGHT : mm_reverbflags = $200;
+  MMRF_8BITLEFT   : mm_reverbflags = $400;
+  MMRF_16BITLEFT  : mm_reverbflags = $800;
+  MMRF_8BITRIGHT  : mm_reverbflags = $1000;
+  MMRF_16BITRIGHT : mm_reverbflags = $2000;
+  MMRF_DRYLEFT    : mm_reverbflags = $4000;
+  MMRF_DRYRIGHT   : mm_reverbflags = $8000;
+  
+type
+  mm_reverbch = integer;
+const
+  MMRC_LEFT   : mm_reverbch = 1;
+  MMRC_RIGHT  : mm_reverbch = 2;
+  MMRC_BOTH   : mm_reverbch = 3;
+
+type
+  mmreverbcfg = record
+    flags    : mm_word;
+    memory   : mm_addr;
+    delay    : mm_hword;
+    rate     : mm_hword;
+    feedback : mm_hword;
+    panning  : mm_byte;
+  end;
+  mm_reverb_cfg  = mmreverbcfg;
+  pmm_reverb_cfg = ^mm_reverb_cfg;
+
+type
+  mm_pmode = integer;
+const
+  MM_PLAY_LOOP: mm_pmode = 0;
+  MM_PLAY_ONCE: mm_pmode = 1;
+
+type
+  mm_mixmode = integer;
+const
+  MM_MIX_8KHZ : mm_mixmode = 0;
+  MM_MIX_10KHZ: mm_mixmode = 1;
+  MM_MIX_13KHZ: mm_mixmode = 2;
+  MM_MIX_16KHZ: mm_mixmode = 3;
+  MM_MIX_18KHZ: mm_mixmode = 4;
+  MM_MIX_21KHZ: mm_mixmode = 5;
+  MM_MIX_27KHZ: mm_mixmode = 6;
+  MM_MIX_31KHZ: mm_mixmode = 7;
+
+type
+  mm_stream_timer = integer;
+const
+  MM_TIMER0: mm_stream_timer = 0;
+  MM_TIMER1: mm_stream_timer = 1;
+  MM_TIMER2: mm_stream_timer = 2;
+  MM_TIMER3: mm_stream_timer = 3;
+
+type
+  t_mmdssample = record
+    loop_start  : mm_word;
+    case integer of
+      0: (loop_length : mm_word);
+      1: (length      : mm_word;
+          format      : mm_byte;
+          repeat_mode : mm_byte;
+          base_rate   : mm_hword;
+          data        : mm_addr;
+      );
+  end;
+  mm_ds_sample  = t_mmdssample;
+  pmm_ds_sample = ^t_mmdssample;
+
+  t_mmsoundeffect = record
+    case integer of
+      0: (id     : mm_word);
+      1: (sample : pmm_ds_sample;
+          rate    : mm_hword;
+          handle  : mm_sfxhand;
+          volume  : mm_byte;
+          panning : mm_byte;
+    );
+  end;
+  mm_sound_effect = t_mmsoundeffect;
+  pmm_sound_effect = ^t_mmsoundeffect;
+
+  t_mmgbasystem = record
+    mixing_mode       : mm_mixmode;
+    mod_channel_count : mm_word;
+    mix_channel_count : mm_word;
+    module_channels   : mm_addr;
+    active_channels   : mm_addr;
+    mixing_channels   : mm_addr;
+    mixing_memory     : mm_addr;
+    wave_memory       : mm_addr;
+    soundbank         : mm_addr;
+  end;
+  mm_gba_system  = t_mmgbasystem;
+  pmm_gba_system = ^t_mmgbasystem;
+
+  t_mmdssystem = record
+    mod_count    : mm_word;
+    samp_count   : mm_word;
+    mem_bank     : pmm_word;
+    fifo_channel : mm_word;
+  end;
+  mm_ds_system  = t_mmdssystem;
+  pmm_ds_system = ^t_mmdssystem;
+
+  t_mmstream = record
+    sampling_rate : mm_word;
+    buffer_length : mm_word;
+    callback      : mm_stream_func;
+    format        : mm_word;
+    timer         : mm_word;
+    manual        : mm_bool;
+  end;	
+  mm_stream  = t_mmstream;
+  pmm_stream = ^t_mmstream;
+
+
+  t_mmlayer = record
+    tick          : mm_byte;
+    row           : mm_byte;
+    position      : mm_byte;
+    nrows         : mm_byte;
+    global_volume : mm_byte;
+    speed         : mm_byte;
+    active        : mm_byte;
+    bpm           : mm_byte;
+  end;
+  mm_modlayer  = t_mmlayer;
+  pmm_modlayer = ^t_mmlayer;
+
+
+
+  tmm_voice = record
+    source     : mm_addr;
+    length     : mm_word;
+    loop_start : mm_hword;
+    timer      : mm_hword;
+    flags      : mm_byte;
+    format     : mm_byte;
+    rept       : mm_byte;
+    volume     : mm_byte;
+    divider    : mm_byte;
+    panning    : mm_byte;
+    index      : mm_byte;
+    reserved   : array [0..0] of mm_byte;
+  end;
+  mm_voice  = tmm_voice;
+  pmm_voice = ^tmm_voice;
+
+const
+  MMVF_FREQ     = 2;
+  MMVF_VOLUME   = 4;
+  MMVF_PANNING  = 8;
+  MMVF_SOURCE   = 16;
+  MMVF_STOP     = 32;
+
+{$endif NDS_INTERFACE}
+

+ 56 - 0
packages/libgbafpc/src/maxmod/maxmod.pp

@@ -0,0 +1,56 @@
+(****************************************************************************
+ *                                                          __              *
+ *                ____ ___  ____ __  ______ ___  ____  ____/ /              *
+ *               / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __  /               *
+ *              / / / / / / /_/ />  </ / / / / / /_/ / /_/ /                *
+ *             /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/                 *
+ *                                                                          *
+ *                             GBA Definitions                              *
+ *                                                                          *
+ *         Copyright (c) 2008, Mukunda Johnson ([email protected])         *
+ *                                                                          *
+ * Permission to use, copy, modify, and/or distribute this software for any *
+ * purpose with or without fee is hereby granted, provided that the above   *
+ * copyright notice and this permission notice appear in all copies.        *
+ *                                                                          *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF         *
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR  *
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   *
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    *
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.           *
+ ****************************************************************************)
+unit maxmod;
+
+{$mode objfpc} 
+
+{$J+}
+{$INLINE ON}
+{$MACRO ON}
+{$PACKRECORDS C}
+
+interface
+
+uses
+  ctypes, gba; 
+
+{$linklib gba}
+{$linklib mm}
+
+{$linklib c}
+{$linklib gcc}
+{$linklib sysbase}
+
+{$define NDS_INTERFACE}
+  {$include inc/mm_types.inc}
+  {$include inc/maxmod.inc}
+{$undef NDS_INTERFACE}
+
+implementation
+
+{$define NDS_IMPLEMENTATION}
+  {$include inc/maxmod.inc}
+{$undef NDS_IMPLEMENTATION}
+
+end.

+ 126 - 126
packages/libndsfpc/Makefile

@@ -292,193 +292,193 @@ override PACKAGE_NAME=libndsfpc
 override PACKAGE_VERSION=2.6.1
 override PACKAGE_VERSION=2.6.1
 BINUTILSPREFIX=arm-eabi-
 BINUTILSPREFIX=arm-eabi-
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+override TARGET_UNITS+=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_EXAMPLEDIRS+=examples
 override TARGET_EXAMPLEDIRS+=examples
@@ -671,193 +671,193 @@ override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
 ifeq ($(FULL_TARGET),powerpc-wii)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
-override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod
+override COMPILER_INCLUDEDIR+=src src/dswifi src/fat src/maxmod src/gl2d
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_SOURCEDIR+=src tests
 override COMPILER_SOURCEDIR+=src tests

+ 2 - 2
packages/libndsfpc/Makefile.fpc

@@ -7,12 +7,12 @@ name=libndsfpc
 version=2.6.1
 version=2.6.1
 
 
 [target]
 [target]
-units=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7
+units=nds9 nds7 dswifi9 dswifi7 fat filesystem maxmod9  maxmod7 gl2d
 exampledirs=examples
 exampledirs=examples
 
 
 [compiler]
 [compiler]
 options=
 options=
-includedir=src src/dswifi src/fat src/maxmod
+includedir=src src/dswifi src/fat src/maxmod src/gl2d
 sourcedir=src tests
 sourcedir=src tests
 
 
 [prerules]
 [prerules]

+ 171 - 63
packages/libndsfpc/examples/Makefile

@@ -287,193 +287,193 @@ FPCFPMAKE=$(FPC)
 endif
 endif
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+override TARGET_DIRS+=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 endif
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
@@ -1647,6 +1647,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1659,6 +1660,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1671,6 +1673,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1683,6 +1686,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1695,6 +1699,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1707,6 +1712,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1719,6 +1725,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1731,6 +1738,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1743,6 +1751,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1755,6 +1764,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1767,6 +1777,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1779,6 +1790,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1791,6 +1803,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1803,6 +1816,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1815,6 +1829,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1827,6 +1842,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1839,6 +1855,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1851,6 +1868,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1863,6 +1881,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1875,6 +1894,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1887,6 +1907,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1899,6 +1920,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1911,6 +1933,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1923,6 +1946,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1935,6 +1959,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1947,6 +1972,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1959,6 +1985,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1971,6 +1998,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1983,6 +2011,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -1995,6 +2024,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2007,6 +2037,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2019,6 +2050,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2031,6 +2063,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2043,6 +2076,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2055,6 +2089,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2067,6 +2102,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2079,6 +2115,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2091,6 +2128,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2103,6 +2141,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2115,6 +2154,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2127,6 +2167,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2139,6 +2180,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2151,6 +2193,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2163,6 +2206,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2175,6 +2219,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2187,6 +2232,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2199,6 +2245,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2211,6 +2258,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2223,6 +2271,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2235,6 +2284,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2247,6 +2297,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2259,6 +2310,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2271,6 +2323,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2283,6 +2336,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2295,6 +2349,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2307,6 +2362,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2319,6 +2375,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2331,6 +2388,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2343,6 +2401,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2355,6 +2414,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2367,6 +2427,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2379,6 +2440,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2391,6 +2453,7 @@ TARGET_DIRS_DEBUGGING=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DS_MOTION=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_DSWIFI=1
 TARGET_DIRS_FILESYSTEM=1
 TARGET_DIRS_FILESYSTEM=1
+TARGET_DIRS_GL2D=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_GRAPHICS=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_HELLO_WORLD=1
 TARGET_DIRS_INPUT=1
 TARGET_DIRS_INPUT=1
@@ -2666,6 +2729,51 @@ filesystem:
 	$(MAKE) -C filesystem all
 	$(MAKE) -C filesystem all
 .PHONY: filesystem_all filesystem_debug filesystem_smart filesystem_release filesystem_units filesystem_examples filesystem_shared filesystem_install filesystem_sourceinstall filesystem_exampleinstall filesystem_distinstall filesystem_zipinstall filesystem_zipsourceinstall filesystem_zipexampleinstall filesystem_zipdistinstall filesystem_clean filesystem_distclean filesystem_cleanall filesystem_info filesystem_makefiles filesystem
 .PHONY: filesystem_all filesystem_debug filesystem_smart filesystem_release filesystem_units filesystem_examples filesystem_shared filesystem_install filesystem_sourceinstall filesystem_exampleinstall filesystem_distinstall filesystem_zipinstall filesystem_zipsourceinstall filesystem_zipexampleinstall filesystem_zipdistinstall filesystem_clean filesystem_distclean filesystem_cleanall filesystem_info filesystem_makefiles filesystem
 endif
 endif
+ifdef TARGET_DIRS_GL2D
+gl2d_all:
+	$(MAKE) -C gl2d all
+gl2d_debug:
+	$(MAKE) -C gl2d debug
+gl2d_smart:
+	$(MAKE) -C gl2d smart
+gl2d_release:
+	$(MAKE) -C gl2d release
+gl2d_units:
+	$(MAKE) -C gl2d units
+gl2d_examples:
+	$(MAKE) -C gl2d examples
+gl2d_shared:
+	$(MAKE) -C gl2d shared
+gl2d_install:
+	$(MAKE) -C gl2d install
+gl2d_sourceinstall:
+	$(MAKE) -C gl2d sourceinstall
+gl2d_exampleinstall:
+	$(MAKE) -C gl2d exampleinstall
+gl2d_distinstall:
+	$(MAKE) -C gl2d distinstall
+gl2d_zipinstall:
+	$(MAKE) -C gl2d zipinstall
+gl2d_zipsourceinstall:
+	$(MAKE) -C gl2d zipsourceinstall
+gl2d_zipexampleinstall:
+	$(MAKE) -C gl2d zipexampleinstall
+gl2d_zipdistinstall:
+	$(MAKE) -C gl2d zipdistinstall
+gl2d_clean:
+	$(MAKE) -C gl2d clean
+gl2d_distclean:
+	$(MAKE) -C gl2d distclean
+gl2d_cleanall:
+	$(MAKE) -C gl2d cleanall
+gl2d_info:
+	$(MAKE) -C gl2d info
+gl2d_makefiles:
+	$(MAKE) -C gl2d makefiles
+gl2d:
+	$(MAKE) -C gl2d all
+.PHONY: gl2d_all gl2d_debug gl2d_smart gl2d_release gl2d_units gl2d_examples gl2d_shared gl2d_install gl2d_sourceinstall gl2d_exampleinstall gl2d_distinstall gl2d_zipinstall gl2d_zipsourceinstall gl2d_zipexampleinstall gl2d_zipdistinstall gl2d_clean gl2d_distclean gl2d_cleanall gl2d_info gl2d_makefiles gl2d
+endif
 ifdef TARGET_DIRS_GRAPHICS
 ifdef TARGET_DIRS_GRAPHICS
 graphics_all:
 graphics_all:
 	$(MAKE) -C graphics all
 	$(MAKE) -C graphics all

+ 1 - 1
packages/libndsfpc/examples/Makefile.fpc

@@ -3,7 +3,7 @@
 #
 #
 
 
 [target]
 [target]
-dirs=audio card debugging ds_motion dswifi filesystem graphics hello_world input time
+dirs=audio card debugging ds_motion dswifi filesystem gl2d graphics hello_world input time
 
 
 [require]
 [require]
 packages=libndsfpc
 packages=libndsfpc

+ 331 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/2Dplus3D.pp

@@ -0,0 +1,331 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+program TwoDplusThreeD;
+
+{$mode objfpc}
+{$H+}
+
+{$L build/flyer.o}
+{$L build/shuttle.o}
+{$L build/enemies.o}
+{$L build/organ16.o}
+
+uses
+  ctypes, nds9, gl2d, cearn_atan, vbuffer, uvcoord_enemies;
+ 
+const
+  flyerBitmapLen = 2048;
+  flyerPalLen = 512;
+  shuttleBitmapLen = 2048;
+  shuttlePalLen = 32;
+  enemiesBitmapLen = 65536;
+  enemiesPalLen = 512;
+  organ16BitmapLen = 32768;
+
+var
+  flyerBitmap: array [0..0] of cuint; cvar; external;
+  flyerPal: array [0..0] of cushort; cvar; external;
+  shuttleBitmap: array [0..0] of cuint; cvar; external;
+  shuttlePal: array [0..0] of cushort; cvar; external;
+  enemiesBitmap: array [0..0] of cuint; cvar; external;
+  enemiesPal: array [0..0] of cushort; cvar; external;
+  organ16Bitmap: array [0..0] of cuint; cvar; external;
+
+const
+  // Mode7-like 3D effect parameters
+  GRID_RINGS: cint = 2;
+  GRID_BANDS: cint = 2;
+  GRID_WIDTH: cint = 15;
+  GRID_HEIGHT: cint = 12;
+
+  // PI for our binary radian measure
+  BRAD_PI = 1 shl 14;
+
+var
+// Our sprites
+  Enemies: array [0..ENEMIES_NUM_IMAGES-1] of glImage;  // spriteset
+  Shuttle: array [0..0] of glImage;         // single image 
+  Flyer: array [0..0] of glImage;           // single image
+
+  vb: PVertexBuffer;
+
+  EnemiesTextureID: cint; 
+  ShuttleTextureID: cint; 
+  FlyerTextureID: cint;
+
+  TextureSize: cint;
+  ox, oy: cint32;
+  Frame, PhoenixFrame, BeeFrame, Rotation: cint;      // rotation value of the rotating sprites
+  x, y: cint;
+  sx, sy, angle: cint32;
+
+
+// function to draw our mode7 fx
+// draws 2 planes
+// for a fake mode7 effect
+procedure draw_grid();
+const
+  text_off_u: cint32 = 0;
+  text_off_v: cint32 = 0;
+  frame: cint = 0;
+begin
+  inc(frame);
+  
+  glPushMatrix();
+    
+    glLoadIdentity();
+    
+    glTranslate3f32( 0, 0, floattof32(3.0) );
+    glScalef32(floattof32(1),floattof32(1.5),floattof32(1.5));
+  
+    // floor
+    glPushMatrix();
+
+      glTranslate3f32( 0, -1 shl 12, -2 shl 12 );   
+      glRotateXi( inttof32(244) );
+      
+      vb^.render( text_off_u, text_off_v, true );
+      
+    glPopMatrix( 1 );
+    
+    // ceiling
+    glPushMatrix();
+
+      glTranslate3f32( 0, 1 shl 12, -2 shl 12 );
+      glRotateXi( inttof32(180) );
+      
+      vb^.render( text_off_u ,text_off_v, true );
+    
+    glPopMatrix( 1 );
+  
+  glPopMatrix( 1 );
+    
+
+  // "move" the floor and ceiling
+  text_off_u := (sinLerp(frame*30)*2) and 4095;
+  text_off_v := (sinLerp(-frame*50)*3) and 4095;
+
+end;
+
+
+
+begin
+  
+  // Initialize fake mode7 planes
+  vb := init_grid (GRID_RINGS, GRID_BANDS, GRID_WIDTH, GRID_HEIGHT, 8, 8);
+  
+  //set mode 5, enable BG0 and set it to 3D
+  videoSetMode(MODE_5_3D);
+  
+  consoleDemoInit();
+
+  // initialize gl2d
+  glScreen2D();
+  
+  //set up enough texture memory for our textures
+  vramSetBankA( VRAM_A_TEXTURE );
+  
+  // Very Important!!! Or you get black sprites
+  vramSetBankE(VRAM_E_TEX_PALETTE);  // Allocate VRAM bank for all the palettes
+  
+  // Load our texture for our mode7 effect
+  vb^.load_texture( @organ16Bitmap );
+  
+  // Load our Enemies texture
+  // We used glLoadSpriteSet since the texture was made
+  // with my texture packer.
+  EnemiesTextureID := glLoadSpriteSet( 
+             Enemies,       // pointer to glImage array
+             ENEMIES_NUM_IMAGES,  // Texture packer auto-generated #define
+             @enemies_texcoords,    // Texture packer auto-generated array
+             GL_RGB256,       // texture type for glTexImage2D() in videoGL.h 
+             TEXTURE_SIZE_256,    // sizeX for glTexImage2D() in videoGL.h
+             TEXTURE_SIZE_256,    // sizeY for glTexImage2D() in videoGL.h
+             GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+             256,         // Length of the palette to use (256 colors)
+             @enemiesPal,   // Load our 256 color enemies palette
+             @enemiesBitmap   // image data generated by GRIT
+             );
+  
+  
+  
+  // Shuttle
+  // Since the shuttle is just a single 64x64 image,
+  // We use glLoadTileSet() giving the right dimensions.
+  ShuttleTextureID := glLoadTileSet(
+            Shuttle,      // pointer to glImage array
+             64,        // sprite width
+             64,        // sprite height
+             64,        // bitmap image width
+             64,        // bitmap image height
+             GL_RGB16,    // texture type for glTexImage2D() in videoGL.h
+             TEXTURE_SIZE_64, // sizeX for glTexImage2D() in videoGL.h
+             TEXTURE_SIZE_64, // sizeY for glTexImage2D() in videoGL.h
+             GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT,
+             16,          // Length of the palette to use (16 colors)
+             @shuttlePal, // Load our 16 color Shuttle palette
+             @shuttleBitmap  // image data generated by GRIT
+           );
+
+  
+  // Flyer
+  FlyerTextureID := glLoadTileSet(
+            Flyer,
+             64,
+             64,
+             64,
+             64,
+             GL_RGB16,
+             TEXTURE_SIZE_64,
+             TEXTURE_SIZE_64,
+             GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT,
+             16,          // Length of the palette to use (16 colors)
+             @flyerPal,     // Load our 16 color Flyer palette
+             @flyerBitmap
+           );
+
+  
+  
+
+  // Print some console stuff
+  
+  iprintf(#$1b'[1;1HEasy GL2D + 3D');
+  iprintf(#$1b'[2;1HRelminator');
+  iprintf(#$1b'[4;1HHttp://Rel.Phatcode.Net');
+  
+  iprintf(#$1b'[6;1HA demo showing a very easy');
+  iprintf(#$1b'[7;1Hway to combine 3D and 2D');
+  
+  iprintf(#$1b'[ 9;1HSprites by:');
+  iprintf(#$1b'[10;1H  Adigun A. Polack and Patater');
+  iprintf(#$1b'[11;1HFixed Point atan2Lerp By Cearn');
+  
+  iprintf(#$1b'[13;1HEnemiesTextureID = %i', EnemiesTextureID);
+  iprintf(#$1b'[14;1HFlyerTextureID = %i', FlyerTextureID);
+  iprintf(#$1b'[15;1HShuttleTextureID = %i', ShuttleTextureID);
+  
+  
+  iprintf(#$1b'[17;1HEnemies use a 256 color pal');
+  iprintf(#$1b'[18;1HShuttle uses a 16 color pal');
+  iprintf(#$1b'[19;1HFlyer uses a 16 color pal');
+  iprintf(#$1b'[20;1H3D plane is a 16 bit image');
+  
+  TextureSize := enemiesBitmapLen + flyerBitmapLen + organ16BitmapLen + shuttleBitmapLen;
+            
+  iprintf(#$1b'[22;1HTotal Texture size= %i kb', TextureSize div 1024);
+  
+  // some variables for our demo
+  ox := 0; oy := 0;     // needed for shuttle angle calculation
+  Frame := 0;       // just the standard frame counter
+  PhoenixFrame := 0;    // animation frame for our firebird
+  BeeFrame := 0;      // animation frame for the bee
+  Rotation := 0;      // rotation value of the rotating sprites
+  
+  while true do 
+  begin
+    inc(frame);
+    
+    rotation := frame * 240;    // speed up our rotation
+    
+    // animate some of our animated sprites
+    // every 8th frame
+    if ( (Frame and 7) = 0 ) then
+    begin
+      BeeFrame := (BeeFrame + 1) and 1;
+      inc(PhoenixFrame);
+      if (PhoenixFrame > 2) then 
+        PhoenixFrame := 0;
+    end;
+    
+    
+    // calculate positions for our rotating sprites
+    x := 128 + SarLongint((cosLerp(Frame) + sinLerp(BRAD_PI + Rotation) * 70), 12);
+    y := 96 + SarLongint((cosLerp(Frame) + cosLerp(-Rotation) * 50), 12);
+      
+    
+    // Calculate moving shuttle position
+    // Get new ship position in f32 format for accuracy since
+    // shifting here by >> 12 looses accuracy
+    sx := (cosLerp(Frame * 150) + sinLerp(Frame * 70)) * (SCREEN_WIDTH div 4) ;
+    sy := (sinLerp(-(Frame * 80)) + sinLerp(Frame * 190)) * (SCREEN_HEIGHT div 4) ;   
+    
+    // get angle(binary radian) to draw the rotated shuttle
+    angle := atan2Lerp(ox - sx, oy - sy);    
+    
+    // save positions for use on the nexgt frame to get the new angle
+    ox := sx;
+    oy := sy;
+    
+     
+    // Get new shuttle position
+    // Shifting by >> 12 so that we can screen coordinates to draw
+    sx := SCREEN_WIDTH div 2 + SarLongint(sx, 12);
+    sy := SCREEN_HEIGHT div 2 + SarLongint(sy, 12);   
+    
+    
+    
+    
+    // Drawing the fake mode7 FX in 3D mode
+    
+    draw_grid();  
+      
+    // End drawing in 3D mode
+    
+    // Start 2D mode
+    glBegin2D();
+      // Draw our enemies
+      // draw some rotated and/or animated sprites
+      glSpriteRotate(    x,     y,      Rotation,          GL_FLIP_NONE, @Enemies[30+BeeFrame]);
+      glSpriteRotate(255-x, 191-y,  Rotation * 4,             GL_FLIP_H, @Enemies[84]);
+      glSpriteRotate(255-x,     y,     -Rotation,             GL_FLIP_V, @Enemies[32]);
+      glSpriteRotate(    x, 191-y, -Rotation * 3, GL_FLIP_H  or  GL_FLIP_V, @Enemies[81]);
+      
+      // Some phoenix enemies on the right
+      // Note the flipmodes 
+      // Also shows how we can draw in "color mode" and shadow mode
+      glSprite(200, 30,  GL_FLIP_NONE,           @Enemies[87 + PhoenixFrame]);
+      glColor( RGB15(31,0,0) );
+      glSprite(200, 60,  GL_FLIP_H,              @Enemies[87 + PhoenixFrame]);
+      
+      // Make the last two sprites translucent
+      glPolyFmt(POLY_ALPHA(20)  or  POLY_CULL_NONE  or  POLY_ID(1));
+      glColor( RGB15(0,31,20) );
+      glSprite(200, 90,  GL_FLIP_V,              @Enemies[87 + PhoenixFrame]);
+      glColor( RGB15(0,0,0) );
+      glSprite(200, 130, GL_FLIP_V  or  GL_FLIP_H , @Enemies[87 + PhoenixFrame]);
+      
+      //Restore color and translucency to normal 
+      glColor( RGB15(31,31,31) );
+      glPolyFmt(POLY_ALPHA(31)  or  POLY_CULL_NONE );
+  
+  
+     
+      // Offset the angle by -PI/2 since Patater's
+      // Original sprite faces upwards
+      glSpriteRotate( sx, sy, angle - (BRAD_PI div 2), GL_FLIP_NONE, @Shuttle);
+      
+      // Make the flyer translucent just for kicks
+      glPolyFmt(POLY_ALPHA(20)  or  POLY_CULL_NONE  or  POLY_ID(2));
+      glSpriteRotateScaleXY(SCREEN_WIDTH div 2, SCREEN_HEIGHT div 2, Frame * 140, sinLerp(Frame * 120) * 3, sinLerp(Frame * 210) * 2,  GL_FLIP_NONE, @Flyer);
+      
+      // Restore to normal rendering just to be safe
+      glPolyFmt(POLY_ALPHA(31)  or  POLY_CULL_NONE );
+      
+    glEnd2D();
+    glFlush( 0 );
+
+    swiWaitForVBlank();
+  
+    
+  end;
+
+end.
+

+ 1577 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile

@@ -0,0 +1,1577 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=nds
+override CPU_TARGET_DEFAULT=arm
+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
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp) $(wildcard $(dir)/*.png)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_PROGRAMS+=2Dplus3D
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-gl -Xm -O2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+override CLEANEXEDBGFILES+=$(EXEDBGFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+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))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+ifndef MMUTIL
+MMUTIL:=$(strip $(wildcard $(addsuffix /mmutil$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MMUTIL),)
+MMUTIL= __missing_command_MMUTIL
+else
+MMUTIL:=$(firstword $(MMUTIL))
+endif
+endif
+export MMUTIL
+ifndef GRIT
+GRIT:=$(strip $(wildcard $(addsuffix /grit$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GRIT),)
+GRIT= __missing_command_GRIT
+else
+GRIT:=$(firstword $(GRIT))
+endif
+endif
+export GRIT
+ifndef RMDIR
+RMDIR:=$(strip $(wildcard $(addsuffix /rmdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMDIR),)
+RMDIR= __missing_command_RMDIR
+else
+RMDIR:=$(firstword $(RMDIR))
+endif
+endif
+export RMDIR
+ifndef NDSTOOL
+NDSTOOL:=$(strip $(wildcard $(addsuffix /ndstool$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(NDSTOOL),)
+NDSTOOL= __missing_command_NDSTOOL
+else
+NDSTOOL:=$(firstword $(NDSTOOL))
+endif
+endif
+export NDSTOOL
+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:
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+dir_delete:
+	@$(DELTREE) $(CURDIR)/$(BUILD) 
+	@$(DELTREE) $(CURDIR)/$(INC) 
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+	@$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+	@$(MKDIR) $(INC)
+endif
+soundbank.bin.o : $(AUDIO_FILES)
+	@$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+	$(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+	$(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+$(GFX_FILES): $(wildcard %.bmp) $(wildcard %.png) 
+	@echo 'Converting $(@) file to asm...'
+	$(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+	@echo 'Assembling $(@).s file...'
+	$(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+	@echo 'Done!'
+$(BIN_FILES): $(wildcard %.*)
+	@echo 'Converting $(@) file to asm...'
+	@$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+	@echo 'Creating $(@).inc include file...'
+	@echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo 'Assembling $(@).s file...'
+	@$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+	@echo 'Done!'
+data.gbfs.o:
+	@cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+	$(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+	$(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 111 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/Makefile.fpc

@@ -0,0 +1,111 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+loaders= 
+programs=2Dplus3D
+
+[require]
+packages=libndsfpc
+tools=bin2s mmutil grit rmdir ndstool
+nortl=y
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=nds
+fpcdir=../../../../..
+
+[compiler]
+options=-gl -Xm -O2 
+#-d__THUMB__
+
+[clean]
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+       $(BUILD)/* \
+       $(INC)/*
+units=*
+
+[prerules]
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp) $(wildcard $(dir)/*.png)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+
+[rules]
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+
+#
+# Delete temp directories
+#
+dir_delete:
+        @$(DELTREE) $(CURDIR)/$(BUILD) 
+        @$(DELTREE) $(CURDIR)/$(INC) 
+        
+#
+# Create temp directories
+#
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+        @$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+        @$(MKDIR) $(INC)
+endif
+
+#
+# Audio files processing rule
+#
+soundbank.bin.o : $(AUDIO_FILES)
+        @$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+        $(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+        $(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+
+#
+# Png files processing rule
+#
+$(GFX_FILES): $(wildcard %.bmp) $(wildcard %.png) 
+        @echo 'Converting $(@) file to asm...'
+        $(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+        @echo 'Assembling $(@).s file...'
+        $(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+        @echo 'Done!'
+
+#
+# Binary files processing rule
+# 
+$(BIN_FILES): $(wildcard %.*)
+        @echo 'Converting $(@) file to asm...'
+        @$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+        @echo 'Creating $(@).inc include file...'
+        @echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo 'Assembling $(@).s file...'
+        @$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+        @echo 'Done!'
+
+#
+# GBFS files processing rule
+#
+data.gbfs.o:
+        @cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+        $(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+        $(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+
+#
+# Binary files processing rule
+# 
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 177 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/cearn_atan.pas

@@ -0,0 +1,177 @@
+(*
+  coranac.com's awesome atan2 implementation
+	Very fast and very small.
+*)
+
+unit cearn_atan;
+
+{$mode objfpc}
+{$H+}
+
+interface
+
+uses
+  ctypes, nds9;
+  
+const 
+  __qran_seed: cint = 42;
+
+function atan2Lookup(x, y: cint): cuint32;
+function atan2Lerp(x, y: cint): cuint32;
+function sqran(seed: cint): cint;
+function qran(): cint; inline;
+function qran_range(min, max: cint): cint; inline;	
+
+const
+  BRAD_PI_SHIFT = 14;   
+  BRAD_PI = 1 shl BRAD_PI_SHIFT;
+  BRAD_HPI = BRAD_PI div 2; 
+  BRAD_2PI = BRAD_PI * 2;
+  ATAN_ONE = $1000; 
+  ATAN_FP = 12;
+
+  // Some constants for dealing with atanLUT.
+  ATANLUT_STRIDE = ATAN_ONE div $80; 
+  ATANLUT_STRIDE_SHIFT = 5;
+
+  // Arctangents LUT. Interval: [0, 1] (one=128); PI=0x20000
+  atanLUT: array [0..130-1] of cushort = (
+    $0000, $0146, $028C, $03D2, $0517, $065D, $07A2, $08E7,
+    $0A2C, $0B71, $0CB5, $0DF9, $0F3C, $107F, $11C1, $1303,
+    $1444, $1585, $16C5, $1804, $1943, $1A80, $1BBD, $1CFA,
+    $1E35, $1F6F, $20A9, $21E1, $2319, $2450, $2585, $26BA,
+    $27ED, $291F, $2A50, $2B80, $2CAF, $2DDC, $2F08, $3033,
+    $315D, $3285, $33AC, $34D2, $35F6, $3719, $383A, $395A,
+    $3A78, $3B95, $3CB1, $3DCB, $3EE4, $3FFB, $4110, $4224,
+    $4336, $4447, $4556, $4664, $4770, $487A, $4983, $4A8B,
+    // 64
+    $4B90, $4C94, $4D96, $4E97, $4F96, $5093, $518F, $5289,
+    $5382, $5478, $556E, $5661, $5753, $5843, $5932, $5A1E,
+    $5B0A, $5BF3, $5CDB, $5DC1, $5EA6, $5F89, $606A, $614A,
+    $6228, $6305, $63E0, $64B9, $6591, $6667, $673B, $680E,
+    $68E0, $69B0, $6A7E, $6B4B, $6C16, $6CDF, $6DA8, $6E6E,
+    $6F33, $6FF7, $70B9, $717A, $7239, $72F6, $73B3, $746D,
+    $7527, $75DF, $7695, $774A, $77FE, $78B0, $7961, $7A10,
+    $7ABF, $7B6B, $7C17, $7CC1, $7D6A, $7E11, $7EB7, $7F5C,
+    // 128
+    $8000, $80A2);
+
+implementation
+
+// Quick (and very dirty) pseudo-random number generator 
+// return random in range [0,8000h>
+function qran(): cint; inline;
+begin	
+  __qran_seed := 1664525 * __qran_seed + 1013904223;
+  result := (__qran_seed shr 16) and $7FFF;
+end;
+
+function qran_range(min, max: cint): cint; inline;	
+begin    
+  result := (qran() * (max - min) shr 15) + min;
+end;
+
+// Get the octant a coordinate pair is in.
+procedure OCTANTIFY(var _x, _y, _o: cint); inline;
+var
+  _t: cint;
+begin
+  repeat                             
+    _o := 0;                           
+    if (_y < 0)  then
+    begin
+      _x := -_x;   
+      _y := -_y; 
+      _o := _o + 4; 
+    end;     
+    if (_x <= 0) then
+    begin
+      _t := _x;
+      _x := _y;   
+      _y := -_t; 
+      _o := _o + 2; 
+    end;     
+    if (_x <= _y) then
+    begin
+      _t := _y - _x; 
+      _x := _x + _y; 
+      _y := _t; 
+      _o := _o + 1; 
+    end;     
+  until true;
+end;
+
+function QDIV(num, den: cint; const bits: cint): cint; inline;
+begin
+  while (REG_DIVCNT^ and DIV_BUSY) <> 0 do;
+  REG_DIVCNT^ := DIV_64_32;
+
+  REG_DIV_NUMER^ := cint64(num) shl bits;
+  REG_DIV_DENOM_L^ := den;
+
+  while (REG_DIVCNT^ and DIV_BUSY) <> 0 do;
+
+  result := REG_DIV_RESULT_L^;
+end;
+
+function atan2Lerp(x, y: cint): cuint32;
+var
+  phi: cint;
+  t, fa, fb, h: cuint32;
+begin
+  if (y =0) then 
+  begin
+    if x >= 0 then
+      result := 0
+    else
+      result := BRAD_PI;
+    exit;
+  end;
+  
+  OCTANTIFY(x, y, phi);
+  phi := phi * BRAD_PI div 4;
+  
+  t := QDIV(y, x, ATAN_FP);
+  h := t mod ATANLUT_STRIDE;
+  
+  fa := atanLUT[t div ATANLUT_STRIDE];
+  fb := atanLUT[t div ATANLUT_STRIDE + 1];
+  
+  result := phi + (fa + SarLongint((fb - fa) * h, ATANLUT_STRIDE_SHIFT)) div 8;
+end;
+
+function atan2Lookup(x, y: cint): cuint32;
+var
+  phi: cint;
+  t: cuint32;
+begin
+  if (y = 0) then
+  begin
+    if x >= 0 then 
+      result := 0 
+    else 
+      result := BRAD_PI;
+    exit;
+  end;
+  
+  OCTANTIFY(x, y, phi);
+  phi := phi * BRAD_PI div 4;
+  t := QDIV(y, x, ATAN_FP);
+  
+  result := phi + atanLUT[t div ATANLUT_STRIDE] div 8;
+end;
+
+function sqran(seed: cint): cint;
+var
+  old: cint;
+begin	
+  old := __qran_seed;
+  __qran_seed := seed; 
+  result := old;	
+end;
+
+end.
+
+
+
+

BIN
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.bmp


+ 8 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/enemies.grit

@@ -0,0 +1,8 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 8 (256 colors)
+-gB8

+ 11 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 4 (16 colors)
+-gB4
+
+#include pal
+-p

BIN
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/flyer.png


BIN
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.bmp


+ 8 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/organ16.grit

@@ -0,0 +1,8 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 16
+-gB16

+ 11 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 4 (16 colors)
+-gB4
+
+#include pal
+-p

BIN
packages/libndsfpc/examples/gl2d/2Dplus3D/gfx/shuttle.png


+ 118 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/uvcoord_enemies.pas

@@ -0,0 +1,118 @@
+unit uvcoord_enemies;
+
+interface
+
+uses
+  ctypes;
+  
+const
+  ENEMIES_BITMAP_WIDTH = 256;
+  ENEMIES_BITMAP_HEIGHT = 256;
+  ENEMIES_NUM_IMAGES = 100;
+
+  enemies_texcoords: array [0..(ENEMIES_NUM_IMAGES * 4) - 1] of cuint = (
+ 144, 136, 20, 20,				// 0
+ 164, 136, 20, 20,				// 1
+ 184, 136, 20, 20,				// 2
+ 204, 136, 20, 20,				// 3
+ 124, 216, 20, 20,				// 4
+ 124, 236, 20, 20,				// 5
+ 64, 40, 60, 20,				// 6
+ 64, 64, 60, 20,				// 7
+ 124, 64, 60, 20,				// 8
+ 184, 64, 60, 20,				// 9
+ 228, 84, 20, 20,				// 10
+ 104, 116, 20, 20,				// 11
+ 104, 136, 20, 20,				// 12
+ 124, 156, 20, 20,				// 13
+ 124, 176, 20, 20,				// 14
+ 124, 196, 20, 20,				// 15
+ 64, 84, 40, 30,				// 16
+ 64, 114, 40, 30,				// 17
+ 64, 144, 40, 30,				// 18
+ 64, 174, 40, 30,				// 19
+ 64, 204, 40, 30,				// 20
+ 0, 224, 40, 30,				// 21
+ 124, 40, 20, 20,				// 22
+ 228, 0, 20, 20,				// 23
+ 228, 20, 20, 20,				// 24
+ 228, 40, 20, 20,				// 25
+ 40, 224, 20, 20,				// 26
+ 168, 84, 20, 20,				// 27
+ 188, 84, 20, 20,				// 28
+ 208, 84, 20, 20,				// 29
+ 154, 0, 44, 56,				// 30
+ 198, 0, 30, 56,				// 31
+ 64, 0, 90, 40,				// 32
+ 104, 156, 20, 20,				// 33
+ 104, 176, 20, 20,				// 34
+ 104, 196, 20, 20,				// 35
+ 104, 216, 20, 20,				// 36
+ 104, 236, 20, 20,				// 37
+ 124, 116, 20, 20,				// 38
+ 144, 116, 20, 20,				// 39
+ 164, 116, 20, 20,				// 40
+ 184, 116, 20, 20,				// 41
+ 204, 116, 20, 20,				// 42
+ 224, 116, 20, 20,				// 43
+ 124, 136, 20, 20,				// 44
+ 208, 172, 16, 16,				// 45
+ 224, 172, 16, 16,				// 46
+ 240, 172, 16, 16,				// 47
+ 176, 188, 16, 16,				// 48
+ 176, 204, 16, 16,				// 49
+ 176, 220, 16, 16,				// 50
+ 176, 236, 16, 16,				// 51
+ 192, 188, 16, 16,				// 52
+ 208, 188, 16, 16,				// 53
+ 48, 128, 16, 16,				// 54
+ 48, 144, 16, 16,				// 55
+ 48, 160, 16, 16,				// 56
+ 48, 176, 16, 16,				// 57
+ 48, 192, 16, 16,				// 58
+ 48, 208, 16, 16,				// 59
+ 224, 136, 16, 16,				// 60
+ 240, 136, 16, 16,				// 61
+ 144, 156, 16, 16,				// 62
+ 144, 172, 16, 16,				// 63
+ 144, 188, 16, 16,				// 64
+ 144, 204, 16, 16,				// 65
+ 144, 220, 16, 16,				// 66
+ 144, 236, 16, 16,				// 67
+ 160, 156, 16, 16,				// 68
+ 176, 156, 16, 16,				// 69
+ 192, 156, 16, 16,				// 70
+ 208, 156, 16, 16,				// 71
+ 224, 156, 16, 16,				// 72
+ 240, 156, 16, 16,				// 73
+ 160, 172, 16, 16,				// 74
+ 160, 188, 16, 16,				// 75
+ 160, 204, 16, 16,				// 76
+ 160, 220, 16, 16,				// 77
+ 160, 236, 16, 16,				// 78
+ 176, 172, 16, 16,				// 79
+ 192, 172, 16, 16,				// 80
+ 0, 0, 64, 64,				// 81
+ 0, 64, 64, 32,				// 82
+ 0, 96, 64, 32,				// 83
+ 104, 84, 32, 32,				// 84
+ 136, 84, 32, 24,				// 85
+ 64, 234, 32, 22,				// 86
+ 0, 128, 48, 32,				// 87
+ 0, 160, 48, 32,				// 88
+ 0, 192, 48, 32,				// 89
+ 224, 188, 16, 16,				// 90
+ 240, 188, 16, 16,				// 91
+ 192, 204, 16, 16,				// 92
+ 192, 220, 16, 16,				// 93
+ 192, 236, 16, 16,				// 94
+ 208, 204, 16, 16,				// 95
+ 224, 204, 16, 16,				// 96
+ 240, 204, 16, 16,				// 97
+ 208, 220, 16, 16,				// 98
+ 208, 236, 16, 16				// 99
+);
+
+implementation
+
+end.

+ 495 - 0
packages/libndsfpc/examples/gl2d/2Dplus3D/vbuffer.pas

@@ -0,0 +1,495 @@
+(*
+	Space Impakto DS
+	relminator
+	Http://Rel.Phatcode.Net
+	
+  TVertexbuffer class
+*)
+
+unit VBuffer;
+
+{$mode objfpc}
+{$H+}
+
+interface
+
+uses
+  ctypes, nds9, math;
+
+
+const
+  PI = 3.141593;
+  TWOPI: cfloat = PI * 2;
+
+type
+  TVector3f32 = packed record
+    x: cint32;
+    y: cint32;
+    z: cint32;
+  end;
+  PVector3f32 = ^TVector3f32;
+  
+
+  TRGBf32 = packed record
+    r: cint32;
+    g: cint32;
+    b: cint32;
+  end;
+  PRGBf32 = ^TRGBf32;
+
+  TTexcoordf32 = packed record
+    u: cint32;
+    v: cint32;
+  end;
+  PTexcoordf32 =^TTexcoordf32;
+
+  TPolygon = packed record
+    v1: cuint32;
+    v2: cuint32;
+    v3: cuint32;
+  end;
+  PPolygon = ^TPolygon;
+
+// vertex buffer object. LOL
+  TVertexbuffer = class
+  public
+    i_max_poly: cint;
+    i_max_vertex: cint;
+    i_primitive_type: cint;
+    i_texture_ID: cint;
+    ips_vertex: array of TVector3f32;
+    ips_texture: array of TTexcoordf32;
+    ips_color: array of TRGBf32;
+    ps_poly: array of TPolygon;            
+    constructor Create;
+    destructor Destroy;
+    procedure render(text_off_u,  text_off_v: cint32; colorize: boolean);
+    //procedure render_lines(r, g, b: cuint8);
+    function load_texture(texture_gfx: pcuint8): cint;
+  end;
+  PVertexBuffer = ^TVertexBuffer;
+
+
+function init_grid( rings, bands: cint; 
+                    width, height: cfloat; 
+                    uscale, vscale: cint): PVertexBuffer; 
+function init_super_shape(rings, bands: cint; 
+                          radius: cfloat; 
+                          uscale, vscale: cint;
+                          a, b, m, n1, n2, n3: cfloat): PVertexBuffer;
+function init_ascaris(rings, bands: cint; 
+                      radius, center_offset: cfloat; 
+                      uscale, vscale: cint): PVertexBuffer;
+                
+
+implementation
+
+constructor TVertexBuffer.Create();
+begin
+  SetLength(ips_vertex, 0);
+  SetLength(ips_texture, 0);
+  SetLength(ips_color, 0);
+  SetLength(ps_poly, 0);
+  
+  i_max_poly := 0;
+  i_primitive_type := 0;
+  i_texture_ID := 0;
+end;
+
+destructor TVertexBuffer.Destroy();
+begin
+
+	if Length(ips_vertex) > 0 then 
+    SetLength(ips_vertex, 0);
+    
+  if Length(ps_poly) > 0 then
+    SetLength(ps_poly, 0);
+
+  i_max_poly := 0;
+  i_primitive_type := 0;
+  i_texture_ID := 0;
+  
+	if Length(ips_texture) > 0 then 
+    SetLength(ips_texture, 0);
+	
+	if Length(ips_color) > 0 then 
+    SetLength(ips_color, 0);
+
+end;
+
+procedure TVertexbuffer.render(text_off_u, text_off_v: cint32; colorize: boolean);
+var
+  i: integer;
+  i1,i2,i3: integer;
+begin
+  glEnable(GL_TEXTURE_2D);
+  glBindTexture(0, i_texture_ID);
+  if (colorize) then
+  begin
+    glBegin (GL_TRIANGLES);
+      //glNormal(NORMAL_PACK(0,inttov10(-1),0));
+      for i := 0 to i_max_poly - 1 do
+      begin
+        i1 := ps_poly[i].v1;
+        i2 := ps_poly[i].v2;
+        i3 := ps_poly[i].v3;
+        
+        glColor3b(ips_color[i1].r, ips_color[i1].g, ips_color[i1].b);
+        glTexCoord2f32(ips_texture[i1].u + text_off_u, ips_texture[i1].v + text_off_v);
+        glVertex3v16(ips_vertex[i1].x, ips_vertex[i1].y, ips_vertex[i1].z);
+        
+        glColor3b(ips_color[i2].r, ips_color[i2].g, ips_color[i2].b);
+        glTexCoord2f32(ips_texture[i2].u + text_off_u, ips_texture[i2].v + text_off_v);
+        glVertex3v16(ips_vertex[i2].x, ips_vertex[i2].y, ips_vertex[i2].z);
+
+        glColor3b(ips_color[i3].r, ips_color[i3].g, ips_color[i3].b);
+        glTexCoord2f32(ips_texture[i3].u + text_off_u, ips_texture[i3].v + text_off_v);
+        glVertex3v16(ips_vertex[i3].x, ips_vertex[i3].y, ips_vertex[i3].z);
+        
+      end;
+    glEnd(); 
+  end else
+  begin
+    glBegin (GL_TRIANGLES);
+      //glNormal(NORMAL_PACK(0,inttov10(-1),0));
+      for i := 0 to i_max_poly - 1 do
+      begin
+        i1 := ps_poly[i].v1;
+        i2 := ps_poly[i].v2;
+        i3 := ps_poly[i].v3;
+        
+        glTexCoord2f32(ips_texture[i1].u +text_off_u,ips_texture[i1].v +text_off_v);
+        glVertex3v16 (ips_vertex[i1].x,ips_vertex[i1].y,ips_vertex[i1].z);
+        
+        glTexCoord2f32 (ips_texture[i2].u + text_off_u,ips_texture[i2].v +text_off_v);
+        glVertex3v16 (ips_vertex[i2].x,ips_vertex[i2].y,ips_vertex[i2].z);
+
+        glTexCoord2f32 (ips_texture[i3].u + text_off_u,ips_texture[i3].v +text_off_v);
+        glVertex3v16 (ips_vertex[i3].x,ips_vertex[i3].y,ips_vertex[i3].z);
+        
+      end;
+    glEnd(); 
+  end;
+end;
+
+
+function Tvertexbuffer.load_texture(texture_gfx: pcuint8): cint;
+begin
+  if (texture_gfx^) = 0 then 
+    result := 1
+  else
+  begin
+    glGenTextures(1, @i_texture_ID);
+    glBindTexture(0, i_texture_ID);
+    glTexImage2D( 0, 0, GL_RGB, TEXTURE_SIZE_128 , TEXTURE_SIZE_128, 0, GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_TEXCOORD, texture_gfx);
+    result := 0;
+  end;
+end;
+
+// special functions
+function init_grid(rings, bands: cint; width, height: cfloat; uscale, vscale: cint): PVertexBuffer; 
+var
+  vb: PVertexBuffer;
+  max_point: cint;
+  ivertex: array of TVector3f32;
+  itexture: array of TTexcoordf32;
+  icolor: array of TRGBf32;
+  poly: array of TPolygon;
+  s, u, slice, maxvert: cint;
+  i: cint;
+  ii, jj: integer;
+  half_width, half_height, a1, a2: cfloat;
+  k: cint;
+  x, y, z: cfloat;
+  _u, _v: cfloat;
+begin
+  new(vb);
+  vb^ := TVertexBuffer.Create();
+  
+  max_point := (rings) * (bands);      //+1 for last band duplicate
+
+  SetLength(ivertex, max_point); 
+  SetLength(itexture, max_point);  //
+  SetLength(icolor, max_point); 
+  SetLength(poly, max_point * 2);  //
+    
+  vb^.ips_vertex := ivertex;
+  vb^.ips_texture :=  itexture;
+  vb^.ips_color := icolor;
+  vb^.ps_poly := poly;
+    
+  vb^.i_max_vertex := max_point;
+  vb^.i_max_poly := max_point * 2;
+  vb^.i_primitive_type := GL_TRIANGLES;
+    
+  maxvert := max_point;
+  i := 0;
+  for s := 0 to rings - 1 do
+  begin
+    slice := s * bands;
+    for u := 0 to bands - 1 do   //duplicate texture ( not bands - 1)
+    begin
+      poly[i].v1 := (u + bands + 1 + (slice)) mod maxvert;
+      poly[i].v2 := (u + bands + (slice)) mod maxvert;
+      poly[i].v3 := (u + (slice)) mod maxvert;
+      poly[i+1].v1 := (u + (slice)) mod maxvert;
+      poly[i+1].v2 := (u + 1 + (slice)) mod maxvert;
+      poly[i+1].v3 := (u + bands + 1 + (slice)) mod maxvert;
+      inc(i, 2);
+    end;
+  end;
+        
+
+  half_width := width / 2; 
+  half_height := height / 2;
+  
+  
+  a1 := 2 * width / rings;
+  a2 := 2 * height / bands;
+  k := 0;
+  
+      
+  for ii := 0 to rings - 1 do
+  begin
+    for jj := 0 to bands - 1 do
+    begin
+      x := -half_width + (ii * a1);
+      y := 0;
+      z := -half_height + (jj * a2);;
+            
+      ivertex[k].x := floattov16(x);
+      ivertex[k].y := floattov16(y);
+      ivertex[k].z := floattov16(z);
+      
+      icolor[k].r := (1 - (jj * 4 div bands)) * 255;
+      icolor[k].g := (1 - (jj * 4 div bands)) * 255;
+      icolor[k].b := (1 - (jj * 4 div bands)) * 255;
+
+      _u := (ii / rings ) * uscale;
+      _v := (jj / bands ) * vscale;
+      
+      
+      itexture[k].u := floattof32(_u);
+      itexture[k].v := floattof32(_v);
+      
+      inc(k);
+      
+    end;
+  end;
+  
+  result := vb;
+
+end;
+
+function init_super_shape (rings, bands: cint; radius: cfloat; uscale, vscale: cint;
+                  a, b, m, n1, n2, n3: cfloat): PVertexBuffer;
+var
+  vb: PVertexBuffer;  
+  max_point: cint;
+  ivertex: array of TVector3f32; 
+  itexture: array of TTexcoordf32;
+  icolor: array of Trgbf32; 
+  poly: array of Tpolygon;
+  s, u, slice, maxvert: cint;
+  i: cint;  
+  
+  phi, theta: cfloat;
+  r1, r2, a1, a2: cfloat;
+  
+  Tpi_d: cfloat;
+  Ppi_d: cfloat;
+  k: cint;
+  
+  ii, jj: integer;
+  x, y, z: cfloat;
+  _u, _v: cint;
+  
+begin
+  new(vb);
+  vb^ := TVertexBuffer.Create();
+
+  max_point := rings * (bands + 1);      //+1 for last band duplicate
+  SetLength(ivertex, max_point); 
+  SetLength(itexture, max_point); 
+  SetLength(icolor, max_point);  
+  SetLength(poly, max_point * 2); 
+    
+  vb^.ips_vertex := ivertex;
+  vb^.ips_texture :=  itexture;
+  vb^.ips_color :=  icolor;
+  vb^.ps_poly := poly;
+    
+  vb^.i_max_vertex := max_point;
+  vb^.i_max_poly := max_point * 2;
+  vb^.i_primitive_type := GL_TRIANGLES;
+
+  //lathing
+  maxvert := max_point;
+  i := 0;
+  for s := 0 to rings - 1 do
+  begin
+     slice := s * bands;
+     for u := 0 to bands - 1 do
+     begin
+       poly[i].v1:=(u+bands+1+(slice)) mod maxvert;
+       poly[i].v2:=(u+bands+(slice)) mod maxvert;
+       poly[i].v3:=(u+(slice)) mod maxvert;
+       poly[i+1].v1:=(u+(slice)) mod maxvert;
+       poly[i+1].v2:=(u+1+(slice)) mod maxvert;
+       poly[i+1].v3:=(u+bands+1+(slice)) mod maxvert;
+       inc(i, 2);
+     end;
+  end;
+        
+  
+  
+  Tpi_d := TWOPI / bands;
+  Ppi_d := PI / rings;
+  
+  phi := -PI / 2;
+  
+  k := 0;
+  
+  for ii := 0 to rings - 1 do
+  begin
+    
+    a1 := power(abs(cos(m * phi / 4) / a), n2);
+    a2 := power(abs(sin(m * phi / 4) / b), n3);
+    r2 := power(a1 + a2, -1 / n1) ;
+    r2 := r2 * radius;
+        
+    phi := phi + Ppi_d;
+        
+    theta := -PI;
+    
+    for jj := 0 to bands do
+    begin
+
+      a1 := power(abs(cos(m * theta / 4) / a), n2);
+      a2 := power(abs(sin(m * theta / 4) / b), n3);
+      r1 := power(a1 + a2, -1 / n1) ;
+      r1 := r1 * radius;
+      
+      
+      x := r1 * cos(theta) * r2 * cos(phi);
+      y := r1 * sin(theta) * r2 * cos(phi);
+      z := r2 * sin(phi);
+      
+      theta := theta + Tpi_d; 
+
+      ivertex[k].x := floattov16 (x);
+      ivertex[k].y := floattov16 (y);
+      ivertex[k].z := floattov16 (z);
+
+      icolor[k].r := (1 - (ii * 4 div rings)) * 255;
+      icolor[k].g := (1 - (ii * 4 div rings)) * 255;
+      icolor[k].b := (1 - (ii * 4 div rings)) * 255;
+
+      _u := (ii div rings ) * uscale;
+      _v := (jj div bands ) * vscale;
+      
+      
+      itexture[k].u := floattof32(_u);
+      itexture[k].v := floattof32(_v);
+      
+      inc(k);
+      
+    end;
+  end;
+  
+  result := vb;
+end;
+
+// initialize out tunnel and
+// store float values to f32 classes
+function init_ascaris(rings, bands: cint; radius, center_offset: cfloat; uscale, vscale: cint): PVertexBuffer;
+var
+  vb: PVertexBuffer;
+  max_point: cint;
+  ivertex: array of TVector3f32;
+  itexture: array of Ttexcoordf32;
+  icolor: array of Trgbf32;
+  poly: array of TPolygon;
+  s, u, slice, maxvert: cint;
+  i: cint;
+  ii, jj: integer;
+  half_width, half_height, a1, a2: cfloat;
+  k: cint;
+  x, y, z: cfloat;
+  _u, _v: cfloat;  
+  xc, yc, zc: cfloat;
+  
+begin
+  new(vb);
+  vb^ := TVertexBuffer.Create();
+
+  max_point := (rings) * (bands + 1);      //+1 for last band duplicate
+  setlength(ivertex, max_point); 
+  setlength(itexture, max_point);
+  setlength(icolor, max_point); 
+  setlength(poly, max_point * 2);
+  
+  vb^.ips_vertex := ivertex;
+  vb^.ips_texture :=  itexture;
+  vb^.ips_color :=  icolor;
+  vb^.ps_poly := poly;
+  
+  vb^.i_max_vertex := max_point;
+  vb^.i_max_poly := max_point * 2;
+  vb^.i_primitive_type := GL_TRIANGLES;
+    
+  
+  //lathing
+  maxvert := max_point;
+  i := 0;
+  for s := 0 to (rings - 1) do
+  begin
+    slice := s * bands;
+    for u := 0 to bands do   //duplicate texture ( not bands - 1)
+    begin
+      poly[i].v1:=(u+bands+1+(slice)) mod maxvert;
+      poly[i].v2:=(u+bands+(slice)) mod maxvert;
+      poly[i].v3:=(u+(slice)) mod maxvert;
+      poly[i+1].v1:=(u+(slice)) mod maxvert;
+      poly[i+1].v2:=(u+1+(slice)) mod maxvert;
+      poly[i+1].v3:=(u+bands+1+(slice)) mod maxvert;
+      inc(i, 2);
+    end;
+  end;
+
+
+  k := 0;
+  for ii := 0 to rings - 1 do
+  begin
+    zc := ii - (ii/20);
+    xc := cos(TWOPI * zc / rings)* center_offset;
+    yc := sin(TWOPI * zc / rings)* center_offset;
+    for jj := 0 to bands do
+    begin
+
+      x := xc + cos(jj * TWOPI / bands ) * radius;
+      y := yc + sin(jj * TWOPI / bands ) * radius;
+      z := 0-(ii*2);
+            
+      ivertex[k].x := floattov16 (x);
+      ivertex[k].y := floattov16 (y);
+      ivertex[k].z := floattov16 (z);
+           
+      icolor[k].r := (1 - (ii*4 div rings)) * 255;
+      icolor[k].g := (1 - (ii*4 div rings)) * 255;
+      icolor[k].b := (1 - (ii*4 div rings)) * 255;
+
+      _u := (ii / rings ) * uscale;
+      _v := (jj / bands ) * vscale;
+      
+      itexture[k].u := floattof32(_u);
+      itexture[k].v := floattof32(_v);
+      
+      inc(k);
+    end;
+  end;
+  
+  result := vb;
+end;
+
+end.

+ 1591 - 0
packages/libndsfpc/examples/gl2d/Makefile

@@ -0,0 +1,1591 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_DIRS+=2Dplus3D dual_screen fonts primitives scrolling sprites
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifeq ($(FULL_TARGET),arm-nds)
+TARGET_DIRS_2DPLUS3D=1
+TARGET_DIRS_DUAL_SCREEN=1
+TARGET_DIRS_FONTS=1
+TARGET_DIRS_PRIMITIVES=1
+TARGET_DIRS_SCROLLING=1
+TARGET_DIRS_SPRITES=1
+endif
+ifdef TARGET_DIRS_2DPLUS3D
+2Dplus3D_all:
+	$(MAKE) -C 2Dplus3D all
+2Dplus3D_debug:
+	$(MAKE) -C 2Dplus3D debug
+2Dplus3D_smart:
+	$(MAKE) -C 2Dplus3D smart
+2Dplus3D_release:
+	$(MAKE) -C 2Dplus3D release
+2Dplus3D_units:
+	$(MAKE) -C 2Dplus3D units
+2Dplus3D_examples:
+	$(MAKE) -C 2Dplus3D examples
+2Dplus3D_shared:
+	$(MAKE) -C 2Dplus3D shared
+2Dplus3D_install:
+	$(MAKE) -C 2Dplus3D install
+2Dplus3D_sourceinstall:
+	$(MAKE) -C 2Dplus3D sourceinstall
+2Dplus3D_exampleinstall:
+	$(MAKE) -C 2Dplus3D exampleinstall
+2Dplus3D_distinstall:
+	$(MAKE) -C 2Dplus3D distinstall
+2Dplus3D_zipinstall:
+	$(MAKE) -C 2Dplus3D zipinstall
+2Dplus3D_zipsourceinstall:
+	$(MAKE) -C 2Dplus3D zipsourceinstall
+2Dplus3D_zipexampleinstall:
+	$(MAKE) -C 2Dplus3D zipexampleinstall
+2Dplus3D_zipdistinstall:
+	$(MAKE) -C 2Dplus3D zipdistinstall
+2Dplus3D_clean:
+	$(MAKE) -C 2Dplus3D clean
+2Dplus3D_distclean:
+	$(MAKE) -C 2Dplus3D distclean
+2Dplus3D_cleanall:
+	$(MAKE) -C 2Dplus3D cleanall
+2Dplus3D_info:
+	$(MAKE) -C 2Dplus3D info
+2Dplus3D_makefiles:
+	$(MAKE) -C 2Dplus3D makefiles
+2Dplus3D:
+	$(MAKE) -C 2Dplus3D all
+.PHONY: 2Dplus3D_all 2Dplus3D_debug 2Dplus3D_smart 2Dplus3D_release 2Dplus3D_units 2Dplus3D_examples 2Dplus3D_shared 2Dplus3D_install 2Dplus3D_sourceinstall 2Dplus3D_exampleinstall 2Dplus3D_distinstall 2Dplus3D_zipinstall 2Dplus3D_zipsourceinstall 2Dplus3D_zipexampleinstall 2Dplus3D_zipdistinstall 2Dplus3D_clean 2Dplus3D_distclean 2Dplus3D_cleanall 2Dplus3D_info 2Dplus3D_makefiles 2Dplus3D
+endif
+ifdef TARGET_DIRS_DUAL_SCREEN
+dual_screen_all:
+	$(MAKE) -C dual_screen all
+dual_screen_debug:
+	$(MAKE) -C dual_screen debug
+dual_screen_smart:
+	$(MAKE) -C dual_screen smart
+dual_screen_release:
+	$(MAKE) -C dual_screen release
+dual_screen_units:
+	$(MAKE) -C dual_screen units
+dual_screen_examples:
+	$(MAKE) -C dual_screen examples
+dual_screen_shared:
+	$(MAKE) -C dual_screen shared
+dual_screen_install:
+	$(MAKE) -C dual_screen install
+dual_screen_sourceinstall:
+	$(MAKE) -C dual_screen sourceinstall
+dual_screen_exampleinstall:
+	$(MAKE) -C dual_screen exampleinstall
+dual_screen_distinstall:
+	$(MAKE) -C dual_screen distinstall
+dual_screen_zipinstall:
+	$(MAKE) -C dual_screen zipinstall
+dual_screen_zipsourceinstall:
+	$(MAKE) -C dual_screen zipsourceinstall
+dual_screen_zipexampleinstall:
+	$(MAKE) -C dual_screen zipexampleinstall
+dual_screen_zipdistinstall:
+	$(MAKE) -C dual_screen zipdistinstall
+dual_screen_clean:
+	$(MAKE) -C dual_screen clean
+dual_screen_distclean:
+	$(MAKE) -C dual_screen distclean
+dual_screen_cleanall:
+	$(MAKE) -C dual_screen cleanall
+dual_screen_info:
+	$(MAKE) -C dual_screen info
+dual_screen_makefiles:
+	$(MAKE) -C dual_screen makefiles
+dual_screen:
+	$(MAKE) -C dual_screen all
+.PHONY: dual_screen_all dual_screen_debug dual_screen_smart dual_screen_release dual_screen_units dual_screen_examples dual_screen_shared dual_screen_install dual_screen_sourceinstall dual_screen_exampleinstall dual_screen_distinstall dual_screen_zipinstall dual_screen_zipsourceinstall dual_screen_zipexampleinstall dual_screen_zipdistinstall dual_screen_clean dual_screen_distclean dual_screen_cleanall dual_screen_info dual_screen_makefiles dual_screen
+endif
+ifdef TARGET_DIRS_FONTS
+fonts_all:
+	$(MAKE) -C fonts all
+fonts_debug:
+	$(MAKE) -C fonts debug
+fonts_smart:
+	$(MAKE) -C fonts smart
+fonts_release:
+	$(MAKE) -C fonts release
+fonts_units:
+	$(MAKE) -C fonts units
+fonts_examples:
+	$(MAKE) -C fonts examples
+fonts_shared:
+	$(MAKE) -C fonts shared
+fonts_install:
+	$(MAKE) -C fonts install
+fonts_sourceinstall:
+	$(MAKE) -C fonts sourceinstall
+fonts_exampleinstall:
+	$(MAKE) -C fonts exampleinstall
+fonts_distinstall:
+	$(MAKE) -C fonts distinstall
+fonts_zipinstall:
+	$(MAKE) -C fonts zipinstall
+fonts_zipsourceinstall:
+	$(MAKE) -C fonts zipsourceinstall
+fonts_zipexampleinstall:
+	$(MAKE) -C fonts zipexampleinstall
+fonts_zipdistinstall:
+	$(MAKE) -C fonts zipdistinstall
+fonts_clean:
+	$(MAKE) -C fonts clean
+fonts_distclean:
+	$(MAKE) -C fonts distclean
+fonts_cleanall:
+	$(MAKE) -C fonts cleanall
+fonts_info:
+	$(MAKE) -C fonts info
+fonts_makefiles:
+	$(MAKE) -C fonts makefiles
+fonts:
+	$(MAKE) -C fonts all
+.PHONY: fonts_all fonts_debug fonts_smart fonts_release fonts_units fonts_examples fonts_shared fonts_install fonts_sourceinstall fonts_exampleinstall fonts_distinstall fonts_zipinstall fonts_zipsourceinstall fonts_zipexampleinstall fonts_zipdistinstall fonts_clean fonts_distclean fonts_cleanall fonts_info fonts_makefiles fonts
+endif
+ifdef TARGET_DIRS_PRIMITIVES
+primitives_all:
+	$(MAKE) -C primitives all
+primitives_debug:
+	$(MAKE) -C primitives debug
+primitives_smart:
+	$(MAKE) -C primitives smart
+primitives_release:
+	$(MAKE) -C primitives release
+primitives_units:
+	$(MAKE) -C primitives units
+primitives_examples:
+	$(MAKE) -C primitives examples
+primitives_shared:
+	$(MAKE) -C primitives shared
+primitives_install:
+	$(MAKE) -C primitives install
+primitives_sourceinstall:
+	$(MAKE) -C primitives sourceinstall
+primitives_exampleinstall:
+	$(MAKE) -C primitives exampleinstall
+primitives_distinstall:
+	$(MAKE) -C primitives distinstall
+primitives_zipinstall:
+	$(MAKE) -C primitives zipinstall
+primitives_zipsourceinstall:
+	$(MAKE) -C primitives zipsourceinstall
+primitives_zipexampleinstall:
+	$(MAKE) -C primitives zipexampleinstall
+primitives_zipdistinstall:
+	$(MAKE) -C primitives zipdistinstall
+primitives_clean:
+	$(MAKE) -C primitives clean
+primitives_distclean:
+	$(MAKE) -C primitives distclean
+primitives_cleanall:
+	$(MAKE) -C primitives cleanall
+primitives_info:
+	$(MAKE) -C primitives info
+primitives_makefiles:
+	$(MAKE) -C primitives makefiles
+primitives:
+	$(MAKE) -C primitives all
+.PHONY: primitives_all primitives_debug primitives_smart primitives_release primitives_units primitives_examples primitives_shared primitives_install primitives_sourceinstall primitives_exampleinstall primitives_distinstall primitives_zipinstall primitives_zipsourceinstall primitives_zipexampleinstall primitives_zipdistinstall primitives_clean primitives_distclean primitives_cleanall primitives_info primitives_makefiles primitives
+endif
+ifdef TARGET_DIRS_SCROLLING
+scrolling_all:
+	$(MAKE) -C scrolling all
+scrolling_debug:
+	$(MAKE) -C scrolling debug
+scrolling_smart:
+	$(MAKE) -C scrolling smart
+scrolling_release:
+	$(MAKE) -C scrolling release
+scrolling_units:
+	$(MAKE) -C scrolling units
+scrolling_examples:
+	$(MAKE) -C scrolling examples
+scrolling_shared:
+	$(MAKE) -C scrolling shared
+scrolling_install:
+	$(MAKE) -C scrolling install
+scrolling_sourceinstall:
+	$(MAKE) -C scrolling sourceinstall
+scrolling_exampleinstall:
+	$(MAKE) -C scrolling exampleinstall
+scrolling_distinstall:
+	$(MAKE) -C scrolling distinstall
+scrolling_zipinstall:
+	$(MAKE) -C scrolling zipinstall
+scrolling_zipsourceinstall:
+	$(MAKE) -C scrolling zipsourceinstall
+scrolling_zipexampleinstall:
+	$(MAKE) -C scrolling zipexampleinstall
+scrolling_zipdistinstall:
+	$(MAKE) -C scrolling zipdistinstall
+scrolling_clean:
+	$(MAKE) -C scrolling clean
+scrolling_distclean:
+	$(MAKE) -C scrolling distclean
+scrolling_cleanall:
+	$(MAKE) -C scrolling cleanall
+scrolling_info:
+	$(MAKE) -C scrolling info
+scrolling_makefiles:
+	$(MAKE) -C scrolling makefiles
+scrolling:
+	$(MAKE) -C scrolling all
+.PHONY: scrolling_all scrolling_debug scrolling_smart scrolling_release scrolling_units scrolling_examples scrolling_shared scrolling_install scrolling_sourceinstall scrolling_exampleinstall scrolling_distinstall scrolling_zipinstall scrolling_zipsourceinstall scrolling_zipexampleinstall scrolling_zipdistinstall scrolling_clean scrolling_distclean scrolling_cleanall scrolling_info scrolling_makefiles scrolling
+endif
+ifdef TARGET_DIRS_SPRITES
+sprites_all:
+	$(MAKE) -C sprites all
+sprites_debug:
+	$(MAKE) -C sprites debug
+sprites_smart:
+	$(MAKE) -C sprites smart
+sprites_release:
+	$(MAKE) -C sprites release
+sprites_units:
+	$(MAKE) -C sprites units
+sprites_examples:
+	$(MAKE) -C sprites examples
+sprites_shared:
+	$(MAKE) -C sprites shared
+sprites_install:
+	$(MAKE) -C sprites install
+sprites_sourceinstall:
+	$(MAKE) -C sprites sourceinstall
+sprites_exampleinstall:
+	$(MAKE) -C sprites exampleinstall
+sprites_distinstall:
+	$(MAKE) -C sprites distinstall
+sprites_zipinstall:
+	$(MAKE) -C sprites zipinstall
+sprites_zipsourceinstall:
+	$(MAKE) -C sprites zipsourceinstall
+sprites_zipexampleinstall:
+	$(MAKE) -C sprites zipexampleinstall
+sprites_zipdistinstall:
+	$(MAKE) -C sprites zipdistinstall
+sprites_clean:
+	$(MAKE) -C sprites clean
+sprites_distclean:
+	$(MAKE) -C sprites distclean
+sprites_cleanall:
+	$(MAKE) -C sprites cleanall
+sprites_info:
+	$(MAKE) -C sprites info
+sprites_makefiles:
+	$(MAKE) -C sprites makefiles
+sprites:
+	$(MAKE) -C sprites all
+.PHONY: sprites_all sprites_debug sprites_smart sprites_release sprites_units sprites_examples sprites_shared sprites_install sprites_sourceinstall sprites_exampleinstall sprites_distinstall sprites_zipinstall sprites_zipsourceinstall sprites_zipexampleinstall sprites_zipdistinstall sprites_clean sprites_distclean sprites_cleanall sprites_info sprites_makefiles sprites
+endif
+all: $(addsuffix _all,$(TARGET_DIRS))
+debug: $(addsuffix _debug,$(TARGET_DIRS))
+smart: $(addsuffix _smart,$(TARGET_DIRS))
+release: $(addsuffix _release,$(TARGET_DIRS))
+units: $(addsuffix _units,$(TARGET_DIRS))
+examples: $(addsuffix _examples,$(TARGET_DIRS))
+shared: $(addsuffix _shared,$(TARGET_DIRS))
+install: $(addsuffix _install,$(TARGET_DIRS))
+sourceinstall: $(addsuffix _sourceinstall,$(TARGET_DIRS))
+exampleinstall: $(addsuffix _exampleinstall,$(TARGET_DIRS))
+distinstall: $(addsuffix _distinstall,$(TARGET_DIRS))
+zipinstall: $(addsuffix _zipinstall,$(TARGET_DIRS))
+zipsourceinstall: $(addsuffix _zipsourceinstall,$(TARGET_DIRS))
+zipexampleinstall: $(addsuffix _zipexampleinstall,$(TARGET_DIRS))
+zipdistinstall: $(addsuffix _zipdistinstall,$(TARGET_DIRS))
+clean: $(addsuffix _clean,$(TARGET_DIRS))
+distclean: $(addsuffix _distclean,$(TARGET_DIRS))
+cleanall: $(addsuffix _cleanall,$(TARGET_DIRS))
+info: fpc_info
+makefiles: fpc_makefiles $(addsuffix _makefiles,$(TARGET_DIRS))
+.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:

+ 18 - 0
packages/libndsfpc/examples/gl2d/Makefile.fpc

@@ -0,0 +1,18 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+dirs=2Dplus3D dual_screen fonts primitives scrolling sprites
+
+[require]
+packages=libndsfpc
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../../..
+
+[rules]
+.NOTPARALLEL:

+ 1577 - 0
packages/libndsfpc/examples/gl2d/dual_screen/Makefile

@@ -0,0 +1,1577 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=nds
+override CPU_TARGET_DEFAULT=arm
+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
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_PROGRAMS+=dual_screen
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-gl -Xm -O2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+override CLEANEXEDBGFILES+=$(EXEDBGFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+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))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+ifndef MMUTIL
+MMUTIL:=$(strip $(wildcard $(addsuffix /mmutil$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MMUTIL),)
+MMUTIL= __missing_command_MMUTIL
+else
+MMUTIL:=$(firstword $(MMUTIL))
+endif
+endif
+export MMUTIL
+ifndef GRIT
+GRIT:=$(strip $(wildcard $(addsuffix /grit$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GRIT),)
+GRIT= __missing_command_GRIT
+else
+GRIT:=$(firstword $(GRIT))
+endif
+endif
+export GRIT
+ifndef RMDIR
+RMDIR:=$(strip $(wildcard $(addsuffix /rmdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMDIR),)
+RMDIR= __missing_command_RMDIR
+else
+RMDIR:=$(firstword $(RMDIR))
+endif
+endif
+export RMDIR
+ifndef NDSTOOL
+NDSTOOL:=$(strip $(wildcard $(addsuffix /ndstool$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(NDSTOOL),)
+NDSTOOL= __missing_command_NDSTOOL
+else
+NDSTOOL:=$(firstword $(NDSTOOL))
+endif
+endif
+export NDSTOOL
+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:
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+dir_delete:
+	@$(DELTREE) $(CURDIR)/$(BUILD) 
+	@$(DELTREE) $(CURDIR)/$(INC) 
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+	@$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+	@$(MKDIR) $(INC)
+endif
+soundbank.bin.o : $(AUDIO_FILES)
+	@$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+	$(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+	$(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+$(GFX_FILES): $(wildcard %.bmp) 
+	@echo 'Converting $(@) file to asm...'
+	$(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+	@echo 'Assembling $(@).s file...'
+	$(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+	@echo 'Done!'
+$(BIN_FILES): $(wildcard %.*)
+	@echo 'Converting $(@) file to asm...'
+	@$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+	@echo 'Creating $(@).inc include file...'
+	@echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo 'Assembling $(@).s file...'
+	@$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+	@echo 'Done!'
+data.gbfs.o:
+	@cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+	$(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+	$(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 111 - 0
packages/libndsfpc/examples/gl2d/dual_screen/Makefile.fpc

@@ -0,0 +1,111 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+loaders= 
+programs=dual_screen
+
+[require]
+packages=libndsfpc
+tools=bin2s mmutil grit rmdir ndstool
+nortl=y
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=nds
+fpcdir=../../../../..
+
+[compiler]
+options=-gl -Xm -O2 
+#-d__THUMB__
+
+[clean]
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+       $(BUILD)/* \
+       $(INC)/*
+units=*
+
+[prerules]
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+
+[rules]
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+
+#
+# Delete temp directories
+#
+dir_delete:
+        @$(DELTREE) $(CURDIR)/$(BUILD) 
+        @$(DELTREE) $(CURDIR)/$(INC) 
+        
+#
+# Create temp directories
+#
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+        @$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+        @$(MKDIR) $(INC)
+endif
+
+#
+# Audio files processing rule
+#
+soundbank.bin.o : $(AUDIO_FILES)
+        @$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+        $(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+        $(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+
+#
+# Png files processing rule
+#
+$(GFX_FILES): $(wildcard %.bmp) 
+        @echo 'Converting $(@) file to asm...'
+        $(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+        @echo 'Assembling $(@).s file...'
+        $(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+        @echo 'Done!'
+
+#
+# Binary files processing rule
+# 
+$(BIN_FILES): $(wildcard %.*)
+        @echo 'Converting $(@) file to asm...'
+        @$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+        @echo 'Creating $(@).inc include file...'
+        @echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo 'Assembling $(@).s file...'
+        @$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+        @echo 'Done!'
+
+#
+# GBFS files processing rule
+#
+data.gbfs.o:
+        @cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+        $(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+        $(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+
+#
+# Binary files processing rule
+# 
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 339 - 0
packages/libndsfpc/examples/gl2d/dual_screen/dual_screen.pp

@@ -0,0 +1,339 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+program dual_screen;
+
+{$mode objfpc}{$H+}
+
+uses
+  nds9, ctypes, gl2d;
+
+const
+  HALF_WIDTH  = (SCREEN_WIDTH  div 2);
+  HALF_HEIGHT = (SCREEN_HEIGHT div 2);
+  BRAD_PI     = (1 shl 14);
+
+
+// Simple box, triangle, and putpixel demo
+procedure simple(frame: cint);
+var
+  red, green, blue: cint;
+  i: integer;
+  x, y: integer;
+begin
+	// set up GL2D for 2d mode
+	glBegin2D();
+
+		// Do some funky color cycling
+		red   := abs(sinLerp(frame * 220) * 31) shr 12;
+		green := abs(sinLerp(frame * 140) * 31) shr 12;
+		blue  := abs(sinLerp(frame *  40) * 31) shr 12;
+		
+		// fill the whole screen with a gradient box
+		glBoxFilledGradient( 0, 0, 255, 191,
+							 RGB15( red,  green,  blue ),
+							 RGB15(  blue, 31 - red,  green ),
+							 RGB15( green,  blue, 31 - red ),
+							 RGB15(  31 - green, red, blue )
+						   );
+		
+		// draw a black box
+		glBoxFilled( 200, 10,
+					       250, 180,
+					       RGB15(0,0,0)
+				       );
+		
+		// draw a border around the black box
+		glBox( 200, 10,
+			     250, 180,
+			     RGB15(0,31,0)
+		     );
+	
+		// draw a triangle
+		glTriangleFilled( 20, 100,
+						          200, 30,
+						          60, 40,
+						          RGB15(31,0,31)
+						        );
+	
+		// draw a gradient triangle
+		glTriangleFilledGradient( 20, 100,
+								  200, 30,
+								  60, 40,
+								  RGB15(blue,red,green),
+								  RGB15(green,blue, red),
+								  RGB15(red,green,blue)
+								);
+
+		// translucent mode
+		// Poly ID 1
+		glPolyFmt(POLY_ALPHA(16) or POLY_CULL_NONE or POLY_ID(1));
+		glBoxFilledGradient( 10, 50, 230, 150,
+							 RGB15( green,  0,  0 ),
+							 RGB15(  0, red,  0 ),
+							 RGB15( 31,  0, blue ),
+							 RGB15(  0, red, 31 )
+						   );
+
+		// translucent mode
+		// Poly ID 2
+		glPolyFmt(POLY_ALPHA(16) or POLY_CULL_NONE or POLY_ID(2));
+		glTriangleFilledGradient( 70, 10,
+								  20, 130,
+								  230, 180,
+								  RGB15(red,green,blue),
+								  RGB15(blue,red,green),
+								  RGB15(green,blue, red)
+								);
+		i := 0;
+		// restore to normal(solid) rendering
+		glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE or POLY_ID(3));
+		// draw a circle using putpixel
+{
+    for i := 0 to 128 do
+    begin
+			x := sar(cosLerp(i * 256) * 80, 12);
+			y := sar(sinLerp(i * 256) * 70, 12);
+			glPutPixel( HALF_WIDTH  + x, 
+                  HALF_HEIGHT + y, 
+                  RGB15(red, green, blue) 
+                );
+    end;
+    }
+
+		while i < BRAD_PI * 2 do
+		begin
+			x := SarLongint(cosLerp(i) * 80, 12);
+			y := SarLongint(sinLerp(i) * 70, 12);
+			glPutPixel( HALF_WIDTH + x, HALF_HEIGHT + y, RGB15(red, green, blue) );
+			inc(i, 256);
+		end;
+
+	glEnd2D();
+end;
+
+
+// oldskool lines demo
+procedure lines(frame: cint);
+var
+  red, green, blue: cint;
+  i: cint;
+  px, py, px2, py2: cint;
+begin
+	// Do some funky color cycling
+	red   := abs(sinLerp(frame * 220) * 31) shr 12 ;
+	green := abs(sinLerp(frame * 140) * 31) shr 12 ;
+	blue  := abs(sinLerp(frame *  40) * 31) shr 12 ;
+	
+	// set up GL2D for 2d mode
+	glBegin2D();
+		// draw a bunch (4096/32) of colored lines
+		// using some funky trig equations
+
+		i := frame;
+		while i < ((1 shl 12) + frame) do
+		begin
+			px  := SarLongint(sinLerp(frame * 130) * 130, 12) * cosLerp( (i * 100));
+			py  := SarLongint(sinLerp(frame * 280) *  70, 12) * sinLerp( (i * 200));
+			px2 := SarLongint(sinLerp(frame * 330) * 100, 12) * cosLerp(((i * 300 + BRAD_PI)));
+		 	py2 := SarLongint(sinLerp(frame * 140) *  80, 12) * sinLerp(((i * 400 + BRAD_PI)));
+			glLine( HALF_WIDTH + SarLongint(px, 12), HALF_HEIGHT + SarLongint(py, 12),
+					    HALF_WIDTH + SarLongint(px2, 12), HALF_HEIGHT + SarLongint(py2, 12),
+					    RGB15(red, green, blue)
+				    );
+			glLine( HALF_WIDTH + SarLongint(py2, 12), HALF_HEIGHT + SarLongint(px, 12),
+					    HALF_WIDTH + SarLongint(py, 12), HALF_HEIGHT + SarLongint(px2, 12),
+					    RGB15(green, blue, red)
+				    );
+			inc(i, 32);
+		end;
+
+
+	glEnd2D();
+end;
+
+
+// Some radially displaced pixels
+procedure pixels(frame: cint);
+var
+  radius, red, green, blue: cint;
+  i, angle: cint;
+  x, y, a2,x2,y2: cint;
+begin
+	// Elastic radius
+	radius := 40 + (abs(sinLerp(frame * 20) * 80) shr 12);
+	
+	// Do some funky color cycling
+	red := abs(sinLerp(frame * 220) * 31) shr 12 ;
+	green := abs(sinLerp(frame * 140) * 31) shr 12 ;
+	blue := abs(sinLerp(frame * 40) * 31) shr 12 ;
+
+	// speed opf animation
+	i := (frame * 140) and 32767;
+	
+	// duh!
+	angle := 0;
+	
+	// set up GL2D for 2d mode
+	glBegin2D();
+		// Draw a full revolution of some radially dispalced pixels
+		for angle := 0 to 512 do
+		begin
+			a2 := (angle * 64) + i;
+			x := cosLerp(angle * 64 * 2) * radius;
+			y := sinLerp(x div 32 + a2) * radius;
+			x := cosLerp((y div 64) + (angle * 64)) * (radius + 20);
+			y := sinLerp(x div 64 + a2) * radius;
+			x2 := -y;
+			y2 := x;
+			
+			glPutPixel( HALF_WIDTH  + SarLongint(x, 12), 
+						      HALF_HEIGHT + SarLongint(y, 12), 
+						      RGB15(red, green, blue)
+					      );
+			glPutPixel( HALF_WIDTH  + SarLongint(x2, 12), 
+						      HALF_HEIGHT + SarLongint(y2, 12), 
+						      RGB15(green, blue, red)
+					      );
+		end;
+	glEnd2D();
+end;
+
+//-------------------------------------------------------
+// set up a 2D layer construced of bitmap sprites
+// this holds the image when rendering to the top screen
+//-------------------------------------------------------
+procedure initSubSprites();
+var
+  x, y, id: cint;
+begin
+	oamInit(oamSub, SpriteMapping_Bmp_2D_256, false);
+ 
+	//set up a 4x3 grid of 64x64 sprites to cover the screen
+	for y := 0 to 2 do
+	  for x := 0 to 3 do
+    begin
+		  oamSub.oamMemory[id].attribute[0] := ATTR0_BMP or ATTR0_SQUARE or (64 * y);
+		  oamSub.oamMemory[id].attribute[1] := ATTR1_SIZE_64 or (64 * x);
+		  oamSub.oamMemory[id].attribute[2] := ATTR2_ALPHA(1) or (8 * 32 * y) or (8 * x);
+		  inc(id);
+    end;
+ 
+	swiWaitForVBlank();
+ 
+	oamUpdate(oamSub);
+end;
+
+var
+  frame, demonum, key: cint;
+
+begin	
+	
+	// Set it to my favorite mode
+	videoSetMode(MODE_5_3D);
+	videoSetModeSub(MODE_5_2D);
+ 
+	// init oam to capture 3D scene
+	initSubSprites();
+ 
+	// sub background holds the top image when 3D directed to bottom
+	bgInitSub(3, BgType_Bmp16, BgSize_B16_256x256, 0, 0);
+ 
+	
+	// Initialize GL in 3d mode
+	glScreen2D();
+	
+	
+
+	
+	// our ever present frame counter	
+	frame := 0;
+	
+	demonum := 0;	// what demo are we currently viewing
+	
+	
+	while true do
+	begin
+	
+	
+		// increment frame counter 
+		inc(frame);
+		
+		// get input
+		scanKeys();
+		key := keysDown();
+		
+		
+		// process input
+		if ((key and KEY_DOWN) or (key and KEY_RIGHT) ) <> 0 then
+			demonum := (demonum + 1) mod 3;
+		
+		if ((key and KEY_UP) or (key and KEY_LEFT)) <> 0 then
+		begin
+			dec(demonum);
+			if (demonum < 0) then demonum := 2;
+		end;
+	
+		// wait for capture unit to be ready
+		while (REG_DISPCAPCNT^ and DCAP_ENABLE) <> 0 do;
+
+	
+		// Alternate rendering every other frame
+		// Limits your FPS to 30
+		if ((frame and 1) = 0) then
+		begin
+			lcdMainOnBottom();
+			vramSetBankC(VRAM_C_LCD);
+			vramSetBankD(VRAM_D_SUB_SPRITE);
+			REG_DISPCAPCNT^ := DCAP_BANK(2) or DCAP_ENABLE or DCAP_SIZE(3);
+		end else
+		begin
+			lcdMainOnTop();
+			vramSetBankD(VRAM_D_LCD);
+			vramSetBankC(VRAM_C_SUB_BG);
+			REG_DISPCAPCNT^ := DCAP_BANK(3) or DCAP_ENABLE or DCAP_SIZE(3);
+		end;
+ 
+		// figure out what demo should be viewed
+		case demonum of
+			0: begin			// Alternately draw every other frame
+				if ((frame and 1) = 0) then
+					pixels( frame )
+				else
+					lines( frame );
+			end;
+			1: begin
+				if ((frame and 1) = 0) then
+					lines( frame )
+				else
+					pixels( frame );
+			end;
+			2: begin
+				if ((frame and 1) = 0) then
+					simple( frame )
+				else
+					lines( frame );
+			end;
+		  else begin
+				if ((frame and 1) = 0) then
+					pixels( frame )
+				else
+					lines( frame );
+		  end;
+		end;
+		
+		glFlush(0);
+		swiWaitForVBlank();
+		
+		
+	end;
+
+end.
+

+ 1577 - 0
packages/libndsfpc/examples/gl2d/fonts/Makefile

@@ -0,0 +1,1577 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=nds
+override CPU_TARGET_DEFAULT=arm
+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
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_PROGRAMS+=fonts
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-gl -Xm -O2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+override CLEANEXEDBGFILES+=$(EXEDBGFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+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))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+ifndef MMUTIL
+MMUTIL:=$(strip $(wildcard $(addsuffix /mmutil$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MMUTIL),)
+MMUTIL= __missing_command_MMUTIL
+else
+MMUTIL:=$(firstword $(MMUTIL))
+endif
+endif
+export MMUTIL
+ifndef GRIT
+GRIT:=$(strip $(wildcard $(addsuffix /grit$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GRIT),)
+GRIT= __missing_command_GRIT
+else
+GRIT:=$(firstword $(GRIT))
+endif
+endif
+export GRIT
+ifndef RMDIR
+RMDIR:=$(strip $(wildcard $(addsuffix /rmdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMDIR),)
+RMDIR= __missing_command_RMDIR
+else
+RMDIR:=$(firstword $(RMDIR))
+endif
+endif
+export RMDIR
+ifndef NDSTOOL
+NDSTOOL:=$(strip $(wildcard $(addsuffix /ndstool$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(NDSTOOL),)
+NDSTOOL= __missing_command_NDSTOOL
+else
+NDSTOOL:=$(firstword $(NDSTOOL))
+endif
+endif
+export NDSTOOL
+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:
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+dir_delete:
+	@$(DELTREE) $(CURDIR)/$(BUILD) 
+	@$(DELTREE) $(CURDIR)/$(INC) 
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+	@$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+	@$(MKDIR) $(INC)
+endif
+soundbank.bin.o : $(AUDIO_FILES)
+	@$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+	$(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+	$(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+$(GFX_FILES): $(wildcard %.bmp) 
+	@echo 'Converting $(@) file to asm...'
+	$(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+	@echo 'Assembling $(@).s file...'
+	$(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+	@echo 'Done!'
+$(BIN_FILES): $(wildcard %.*)
+	@echo 'Converting $(@) file to asm...'
+	@$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+	@echo 'Creating $(@).inc include file...'
+	@echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo 'Assembling $(@).s file...'
+	@$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+	@echo 'Done!'
+data.gbfs.o:
+	@cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+	$(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+	$(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 111 - 0
packages/libndsfpc/examples/gl2d/fonts/Makefile.fpc

@@ -0,0 +1,111 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+loaders= 
+programs=fonts
+
+[require]
+packages=libndsfpc
+tools=bin2s mmutil grit rmdir ndstool
+nortl=y
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=nds
+fpcdir=../../../../..
+
+[compiler]
+options=-gl -Xm -O2 
+#-d__THUMB__
+
+[clean]
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+       $(BUILD)/* \
+       $(INC)/*
+units=*
+
+[prerules]
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+
+[rules]
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+
+#
+# Delete temp directories
+#
+dir_delete:
+        @$(DELTREE) $(CURDIR)/$(BUILD) 
+        @$(DELTREE) $(CURDIR)/$(INC) 
+        
+#
+# Create temp directories
+#
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+        @$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+        @$(MKDIR) $(INC)
+endif
+
+#
+# Audio files processing rule
+#
+soundbank.bin.o : $(AUDIO_FILES)
+        @$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+        $(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+        $(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+
+#
+# Png files processing rule
+#
+$(GFX_FILES): $(wildcard %.bmp) 
+        @echo 'Converting $(@) file to asm...'
+        $(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+        @echo 'Assembling $(@).s file...'
+        $(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+        @echo 'Done!'
+
+#
+# Binary files processing rule
+# 
+$(BIN_FILES): $(wildcard %.*)
+        @echo 'Converting $(@) file to asm...'
+        @$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+        @echo 'Creating $(@).inc include file...'
+        @echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo 'Assembling $(@).s file...'
+        @$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+        @echo 'Done!'
+
+#
+# GBFS files processing rule
+#
+data.gbfs.o:
+        @cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+        $(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+        $(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+
+#
+# Binary files processing rule
+# 
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 277 - 0
packages/libndsfpc/examples/gl2d/fonts/fonts.pp

@@ -0,0 +1,277 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+program fonts;
+
+{$L build/font_si.o}
+{$L build/font_16x16.o}
+
+{$mode objfpc}
+{$H+}
+
+uses
+  ctypes, nds9, gl2d, uvcoord_font_si, uvcoord_font_16x16;
+
+const
+  font_16x16BitmapLen = 32768;
+  font_siBitmapLen = 8192;
+  font_siPalLen = 512;
+
+var 
+  font_siBitmap: array [0..0] of cuint; cvar; external;
+  font_16x16Bitmap: array [0..0] of cuint; cvar; external;
+  font_siPal: array [0..0] of cushort; cvar; external;
+
+
+type
+  // Our font class
+  Tglfont = class 
+  private
+    font_sprite: pglimage;
+    str: array [1..256] of cchar;
+    str2: array [1..256] of cchar;
+  public
+    function Load(_font_sprite: pglImage; const numframes: cuint; texcoords: pcuint;
+                  _type: GL_TEXTURE_TYPE_ENUM; sizeX, sizeY, param, pallette_width: cint;
+                  const palette: pcuint16; const texture: pcuint8): cint;
+    procedure Print(x, y: integer; const text: pchar); overload;
+    procedure Print(x, y: integer; value: cint); overload;
+    procedure PrintCentered(x, y: integer; const text: pchar); overload;
+    procedure PrintCentered(x, y: integer; value: cint); overload;
+  end;
+
+
+function TglFont.Load(_font_sprite: pglImage; const numframes: cuint; texcoords: pcuint;
+                  _type: GL_TEXTURE_TYPE_ENUM; sizeX, sizeY, param, pallette_width: cint;
+                  const palette: pcuint16; const texture: pcuint8): cint;
+var
+  textureID: cint;
+begin
+  font_sprite := _font_sprite;
+  textureID := glLoadSpriteSet(font_sprite,
+                                numframes, 
+                                texcoords,
+                                _type,
+                                sizeX,
+                                sizeY,
+                                param,
+                                pallette_width,
+                                palette,
+                                texture );
+  result := textureID;
+end;
+
+procedure TglFont.Print(x, y: integer; const text: pchar);
+var
+  font_char: cuchar;
+  i: integer;
+begin
+  for i := 0 to length(Text) do
+  begin
+    font_char := Ord(text[i]) - 32;
+    glSprite( x, y, GL_FLIP_NONE, @font_sprite[font_char] );
+    x := x + font_sprite[font_char].width; 
+  end;
+end;
+
+procedure TglFont.Print(x, y: integer; value: cint);
+begin
+  sprintf(@str, '%i', value);
+  Print(x, y, @str);
+end;
+
+procedure TglFont.PrintCentered(x, y: integer; const text: pchar); 
+var
+  font_char: cuchar;
+  total_width: integer;
+  o_text: pchar;
+  i: integer;
+begin
+  total_width := 0;
+  o_text := text;
+  
+  for i := 0 to length(Text) do
+  begin
+    font_char := Ord(text[i]) - 32;
+    total_width := total_width + font_sprite[font_char].width; 
+  end;
+  
+  x := (SCREEN_WIDTH - total_width) div 2; 
+  
+//  text := o_text;
+  for i := 0 to length(o_Text) do
+  begin
+    font_char := Ord(o_text[i]) - 32;
+    glSprite( x, y, GL_FLIP_NONE, @font_sprite[font_char] );
+    x := x + font_sprite[font_char].width; 
+  end;
+  
+end;
+
+procedure TglFont.PrintCentered(x, y: integer; value: cint);
+begin
+  sprintf(@str, '%i', value);
+  PrintCentered(x, y, @str);
+end;
+
+var
+  // This imageset would use our texture packer generated coords so it's kinda
+  // safe and easy to use 
+  // FONT_SI_NUM_IMAGES is a value #defined from "uvcoord_font_si.h"
+  FontImages: array [1..FONT_SI_NUM_IMAGES] of glImage;
+  FontBigImages: array [1..FONT_16X16_NUM_IMAGES] of glimage;
+
+  // Our fonts
+  Font, FontBig: Tglfont;
+  textureSize: cint;
+  frame: integer;
+  x: integer;
+  opacity: integer;
+  
+  
+begin
+  defaultExceptionHandler();
+  
+  Font := TglFont.Create;
+  FontBig := TglFont.Create;
+  
+  videoSetMode(MODE_5_3D);
+  consoleDemoInit();
+  // Initialize GL in 3d mode
+  glScreen2D();
+  
+  // Set  Bank A to texture (128 kb)
+  vramSetBankA( VRAM_A_TEXTURE );
+  vramSetBankE(VRAM_E_TEX_PALETTE);  // Allocate VRAM bank for all the palettes
+  
+  // Load our font texture
+  // We used glLoadSpriteSet since the texture was made
+  // with my texture packer.
+  // no need to save the return value since
+  // we don't need  it at all
+  Font.Load(@FontImages,        // pointer to glImage array
+         FONT_SI_NUM_IMAGES,    // Texture packer auto-generated #define
+         @font_si_texcoords,    // Texture packer auto-generated array
+         GL_RGB256,       // texture type for glTexImage2D() in videoGL.h 
+         TEXTURE_SIZE_64,     // sizeX for glTexImage2D() in videoGL.h
+         TEXTURE_SIZE_128,    // sizeY for glTexImage2D() in videoGL.h
+         GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+         256,           // Length of the palette (256 colors)
+         @font_siPal,   // Palette Data
+         @font_siBitmap   // image data generated by GRIT 
+       );
+
+  // Do the same with our bigger texture
+  FontBig.Load(@FontBigImages,
+         FONT_16X16_NUM_IMAGES, 
+         @font_16x16_texcoords,
+         GL_RGB256,
+         TEXTURE_SIZE_64,
+         TEXTURE_SIZE_512,
+         GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT,
+         256,
+         @font_siPal,
+         @font_16x16Bitmap   
+       );
+
+
+  
+  
+  iprintf(#$1b'[1;1HEasy GL2D Font Example');
+  iprintf(#$1b'[3;1HFonts by Adigun A. Polack');
+  
+  iprintf(#$1b'[6;1HRelminator');
+  iprintf(#$1b'[7;1HHttp://Rel.Phatcode.Net');
+  
+  // calculate the amount of 
+  // memory uploaded to VRAM in KB
+  TextureSize := font_siBitmapLen + font_16x16BitmapLen;
+            
+            
+  iprintf(#$1b'[10;1HTotal Texture size= %i kb', TextureSize div 1024);
+  
+  // our ever present frame counter 
+  frame := 0;
+  
+  
+  while true do
+  begin
+    // increment frame counter and rotation offsets
+  
+    inc(frame);
+  
+    // set up GL2D for 2d mode
+    glBegin2D();
+      
+      // fill the whole screen with a gradient box
+      glBoxFilledGradient( 0, 0, 255, 191,
+                 RGB15( 31,  0,  0 ),
+                 RGB15(  0, 31,  0 ),
+                 RGB15( 31,  0, 31 ),
+                 RGB15(  0, 31, 31 )
+                               );
+      
+      // Center print the title
+      glColor( RGB15(0,0,0) );
+      FontBig.PrintCentered( 0, 0, 'EASY GL2D' );
+      glColor( RGB15((frame*6) and 31,(-frame*4) and 31, (frame*2) and 31) );
+      FontBig.PrintCentered( 0, 20,  'FONT EXAMPLE');
+
+      // Fixed-point sinusoidal movement
+      x := ( sinLerp( frame * 400 ) * 30 ) shr 12;
+     
+      // Make the fonts sway left and right
+      // Also change coloring of fonts
+      glColor( RGB15(31,0,0) );
+      FontBig.Print( 25 + x, 50, 'hfDEVKITPROfh' );
+      glColor( RGB15(31,0,31) );
+      glColor( RGB15(x, 31 - x, x * 2) );
+      FontBig.Print( 50 - x, 70, 'dcLIBNDScd' );
+      
+      
+      
+      // change fontsets and  print some spam
+      glColor( RGB15(0,31,31) );
+      Font.PrintCentered( 0, 100, 'FONTS BY ADIGUN A. POLACK' );
+      Font.PrintCentered( 0, 120, 'CODE BY RELMINATOR' );
+      
+      
+      // Restore normal coloring
+      glColor( RGB15(31,31,31) );
+      
+      // Change opacity relative to frame
+      opacity := abs( sinLerp( frame * 245 ) * 30 ) shr 12;
+      
+      // translucent mode 
+      // Add 1 to opacity since at 0 we will get into wireframe mode
+      glPolyFmt(POLY_ALPHA(1 + opacity) or POLY_CULL_NONE or POLY_ID(1));
+      FontBig.Print( 35 + x, 140, 'ANYA THERESE' );
+      
+      
+      
+      glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE or POLY_ID(2));
+      
+      // Print the number of frames
+      Font.Print( 10, 170, 'FRAMES = ');
+      Font.Print( 10 + 72, 170, frame );
+            
+    glEnd2D();
+    
+    glFlush(0);
+
+    swiWaitForVBlank();
+    
+  
+  end;
+  Font.free;
+  FontBig.free;
+
+end.
+

BIN
packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.bmp


+ 11 - 0
packages/libndsfpc/examples/gl2d/fonts/gfx/font_16x16.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# exclude palette
+-p!
+
+# Set the bit depth to 8 (256 colors)
+-gB8

BIN
packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.bmp


+ 9 - 0
packages/libndsfpc/examples/gl2d/fonts/gfx/font_si.grit

@@ -0,0 +1,9 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+
+# Set the bit depth to 8 (256 colors)
+-gB8

+ 117 - 0
packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_16x16.pas

@@ -0,0 +1,117 @@
+unit uvcoord_font_16x16;
+
+interface
+
+uses 
+  ctypes;
+  
+
+const
+  FONT_16X16_BITMAP_WIDTH  = 64;
+  FONT_16X16_BITMAP_HEIGHT = 512;
+  FONT_16X16_NUM_IMAGES    = 96;
+
+var
+  font_16x16_texcoords: array [1..FONT_16X16_NUM_IMAGES*4] of cuint = (
+ 0, 0, 16, 16,				// 0
+ 16, 0, 16, 16,				// 1
+ 32, 0, 16, 16,				// 2
+ 48, 0, 16, 16,				// 3
+ 0, 16, 16, 16,				// 4
+ 16, 16, 16, 16,				// 5
+ 32, 16, 16, 16,				// 6
+ 48, 16, 16, 16,				// 7
+ 0, 32, 16, 16,				// 8
+ 16, 32, 16, 16,				// 9
+ 32, 32, 16, 16,				// 10
+ 48, 32, 16, 16,				// 11
+ 0, 48, 16, 16,				// 12
+ 16, 48, 16, 16,				// 13
+ 32, 48, 16, 16,				// 14
+ 48, 48, 16, 16,				// 15
+ 0, 64, 16, 16,				// 16
+ 16, 64, 16, 16,				// 17
+ 32, 64, 16, 16,				// 18
+ 48, 64, 16, 16,				// 19
+ 0, 80, 16, 16,				// 20
+ 16, 80, 16, 16,				// 21
+ 32, 80, 16, 16,				// 22
+ 48, 80, 16, 16,				// 23
+ 0, 96, 16, 16,				// 24
+ 16, 96, 16, 16,				// 25
+ 32, 96, 16, 16,				// 26
+ 48, 96, 16, 16,				// 27
+ 0, 112, 16, 16,				// 28
+ 16, 112, 16, 16,				// 29
+ 32, 112, 16, 16,				// 30
+ 48, 112, 16, 16,				// 31
+ 0, 128, 16, 16,				// 32
+ 16, 128, 16, 16,				// 33
+ 32, 128, 16, 16,				// 34
+ 48, 128, 16, 16,				// 35
+ 0, 144, 16, 16,				// 36
+ 16, 144, 16, 16,				// 37
+ 32, 144, 16, 16,				// 38
+ 48, 144, 16, 16,				// 39
+ 0, 160, 16, 16,				// 40
+ 16, 160, 16, 16,				// 41
+ 32, 160, 16, 16,				// 42
+ 48, 160, 16, 16,				// 43
+ 0, 176, 16, 16,				// 44
+ 16, 176, 16, 16,				// 45
+ 32, 176, 16, 16,				// 46
+ 48, 176, 16, 16,				// 47
+ 0, 192, 16, 16,				// 48
+ 16, 192, 16, 16,				// 49
+ 32, 192, 16, 16,				// 50
+ 48, 192, 16, 16,				// 51
+ 0, 208, 16, 16,				// 52
+ 16, 208, 16, 16,				// 53
+ 32, 208, 16, 16,				// 54
+ 48, 208, 16, 16,				// 55
+ 0, 224, 16, 16,				// 56
+ 16, 224, 16, 16,				// 57
+ 32, 224, 16, 16,				// 58
+ 48, 224, 16, 16,				// 59
+ 0, 240, 16, 16,				// 60
+ 16, 240, 16, 16,				// 61
+ 32, 240, 16, 16,				// 62
+ 48, 240, 16, 16,				// 63
+ 0, 256, 16, 16,				// 64
+ 16, 256, 16, 16,				// 65
+ 32, 256, 16, 16,				// 66
+ 48, 256, 16, 16,				// 67
+ 0, 272, 16, 16,				// 68
+ 16, 272, 16, 16,				// 69
+ 32, 272, 16, 16,				// 70
+ 48, 272, 16, 16,				// 71
+ 0, 288, 16, 16,				// 72
+ 16, 288, 16, 16,				// 73
+ 32, 288, 16, 16,				// 74
+ 48, 288, 16, 16,				// 75
+ 0, 304, 16, 16,				// 76
+ 16, 304, 16, 16,				// 77
+ 32, 304, 16, 16,				// 78
+ 48, 304, 16, 16,				// 79
+ 0, 320, 16, 16,				// 80
+ 16, 320, 16, 16,				// 81
+ 32, 320, 16, 16,				// 82
+ 48, 320, 16, 16,				// 83
+ 0, 336, 16, 16,				// 84
+ 16, 336, 16, 16,				// 85
+ 32, 336, 16, 16,				// 86
+ 48, 336, 16, 16,				// 87
+ 0, 352, 16, 16,				// 88
+ 16, 352, 16, 16,				// 89
+ 32, 352, 16, 16,				// 90
+ 48, 352, 16, 16,				// 91
+ 0, 368, 16, 16,				// 92
+ 16, 368, 16, 16,				// 93
+ 32, 368, 16, 16,				// 94
+ 48, 368, 16, 16				// 95
+);
+
+
+implementation
+
+end.

+ 117 - 0
packages/libndsfpc/examples/gl2d/fonts/uvcoord_font_si.pas

@@ -0,0 +1,117 @@
+unit uvcoord_font_si;
+
+interface
+
+uses 
+  ctypes;
+  
+
+const
+  FONT_SI_BITMAP_WIDTH   = 64;
+  FONT_SI_BITMAP_HEIGHT  = 128;
+  FONT_SI_NUM_IMAGES     = 96;
+
+
+var
+  font_si_texcoords: array [1..96*4] of cuint = (
+ 0, 0, 8, 9,				// 0
+ 8, 0, 8, 9,				// 1
+ 16, 0, 8, 9,				// 2
+ 24, 0, 8, 9,				// 3
+ 32, 0, 8, 9,				// 4
+ 40, 0, 8, 9,				// 5
+ 48, 0, 8, 9,				// 6
+ 56, 0, 8, 9,				// 7
+ 0, 9, 8, 9,				// 8
+ 8, 9, 8, 9,				// 9
+ 16, 9, 8, 9,				// 10
+ 24, 9, 8, 9,				// 11
+ 24, 117, 4, 9,				// 12
+ 32, 9, 8, 9,				// 13
+ 40, 9, 8, 9,				// 14
+ 48, 9, 8, 9,				// 15
+ 56, 9, 8, 9,				// 16
+ 0, 18, 8, 9,				// 17
+ 8, 18, 8, 9,				// 18
+ 16, 18, 8, 9,				// 19
+ 24, 18, 8, 9,				// 20
+ 32, 18, 8, 9,				// 21
+ 40, 18, 8, 9,				// 22
+ 48, 18, 8, 9,				// 23
+ 56, 18, 8, 9,				// 24
+ 0, 27, 8, 9,				// 25
+ 8, 27, 8, 9,				// 26
+ 16, 27, 8, 9,				// 27
+ 24, 27, 8, 9,				// 28
+ 32, 27, 8, 9,				// 29
+ 40, 27, 8, 9,				// 30
+ 48, 27, 8, 9,				// 31
+ 56, 27, 8, 9,				// 32
+ 0, 36, 8, 9,				// 33
+ 8, 36, 8, 9,				// 34
+ 16, 36, 8, 9,				// 35
+ 24, 36, 8, 9,				// 36
+ 32, 36, 8, 9,				// 37
+ 40, 36, 8, 9,				// 38
+ 48, 36, 8, 9,				// 39
+ 56, 36, 8, 9,				// 40
+ 0, 45, 8, 9,				// 41
+ 8, 45, 8, 9,				// 42
+ 16, 45, 8, 9,				// 43
+ 24, 45, 8, 9,				// 44
+ 32, 45, 8, 9,				// 45
+ 40, 45, 8, 9,				// 46
+ 48, 45, 8, 9,				// 47
+ 56, 45, 8, 9,				// 48
+ 0, 54, 8, 9,				// 49
+ 8, 54, 8, 9,				// 50
+ 16, 54, 8, 9,				// 51
+ 24, 54, 8, 9,				// 52
+ 32, 54, 8, 9,				// 53
+ 40, 54, 8, 9,				// 54
+ 48, 54, 8, 9,				// 55
+ 56, 54, 8, 9,				// 56
+ 0, 63, 8, 9,				// 57
+ 8, 63, 8, 9,				// 58
+ 16, 63, 8, 9,				// 59
+ 24, 63, 8, 9,				// 60
+ 32, 63, 8, 9,				// 61
+ 40, 63, 8, 9,				// 62
+ 48, 63, 8, 9,				// 63
+ 56, 63, 8, 9,				// 64
+ 0, 72, 8, 9,				// 65
+ 0, 81, 8, 9,				// 66
+ 0, 90, 8, 9,				// 67
+ 0, 99, 8, 9,				// 68
+ 0, 108, 8, 9,				// 69
+ 0, 117, 8, 9,				// 70
+ 8, 72, 8, 9,				// 71
+ 8, 81, 8, 9,				// 72
+ 8, 90, 8, 9,				// 73
+ 8, 99, 8, 9,				// 74
+ 8, 108, 8, 9,				// 75
+ 8, 117, 8, 9,				// 76
+ 16, 72, 8, 9,				// 77
+ 24, 72, 8, 9,				// 78
+ 32, 72, 8, 9,				// 79
+ 40, 72, 8, 9,				// 80
+ 48, 72, 8, 9,				// 81
+ 56, 72, 8, 9,				// 82
+ 16, 81, 8, 9,				// 83
+ 16, 90, 8, 9,				// 84
+ 16, 99, 8, 9,				// 85
+ 16, 108, 8, 9,				// 86
+ 16, 117, 8, 9,				// 87
+ 24, 81, 8, 9,				// 88
+ 32, 81, 8, 9,				// 89
+ 40, 81, 8, 9,				// 90
+ 48, 81, 8, 9,				// 91
+ 56, 81, 8, 9,				// 92
+ 24, 90, 8, 9,				// 93
+ 24, 99, 8, 9,				// 94
+ 24, 108, 8, 9				// 95
+);
+
+implementation
+
+end.

+ 1577 - 0
packages/libndsfpc/examples/gl2d/primitives/Makefile

@@ -0,0 +1,1577 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=nds
+override CPU_TARGET_DEFAULT=arm
+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
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_PROGRAMS+=primitives
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-gl -Xm -O2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+override CLEANEXEDBGFILES+=$(EXEDBGFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+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))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+ifndef MMUTIL
+MMUTIL:=$(strip $(wildcard $(addsuffix /mmutil$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MMUTIL),)
+MMUTIL= __missing_command_MMUTIL
+else
+MMUTIL:=$(firstword $(MMUTIL))
+endif
+endif
+export MMUTIL
+ifndef GRIT
+GRIT:=$(strip $(wildcard $(addsuffix /grit$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GRIT),)
+GRIT= __missing_command_GRIT
+else
+GRIT:=$(firstword $(GRIT))
+endif
+endif
+export GRIT
+ifndef RMDIR
+RMDIR:=$(strip $(wildcard $(addsuffix /rmdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMDIR),)
+RMDIR= __missing_command_RMDIR
+else
+RMDIR:=$(firstword $(RMDIR))
+endif
+endif
+export RMDIR
+ifndef NDSTOOL
+NDSTOOL:=$(strip $(wildcard $(addsuffix /ndstool$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(NDSTOOL),)
+NDSTOOL= __missing_command_NDSTOOL
+else
+NDSTOOL:=$(firstword $(NDSTOOL))
+endif
+endif
+export NDSTOOL
+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:
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+dir_delete:
+	@$(DELTREE) $(CURDIR)/$(BUILD) 
+	@$(DELTREE) $(CURDIR)/$(INC) 
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+	@$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+	@$(MKDIR) $(INC)
+endif
+soundbank.bin.o : $(AUDIO_FILES)
+	@$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+	$(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+	$(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+$(GFX_FILES): $(wildcard %.png) 
+	@echo 'Converting $(@) file to asm...'
+	$(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+	@echo 'Assembling $(@).s file...'
+	$(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+	@echo 'Done!'
+$(BIN_FILES): $(wildcard %.*)
+	@echo 'Converting $(@) file to asm...'
+	@$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+	@echo 'Creating $(@).inc include file...'
+	@echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo 'Assembling $(@).s file...'
+	@$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+	@echo 'Done!'
+data.gbfs.o:
+	@cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+	$(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+	$(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 111 - 0
packages/libndsfpc/examples/gl2d/primitives/Makefile.fpc

@@ -0,0 +1,111 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+loaders= 
+programs=primitives
+
+[require]
+packages=libndsfpc
+tools=bin2s mmutil grit rmdir ndstool
+nortl=y
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=nds
+fpcdir=../../../../..
+
+[compiler]
+options=-gl -Xm -O2 
+#-d__THUMB__
+
+[clean]
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+       $(BUILD)/* \
+       $(INC)/*
+units=*
+
+[prerules]
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+
+[rules]
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+
+#
+# Delete temp directories
+#
+dir_delete:
+        @$(DELTREE) $(CURDIR)/$(BUILD) 
+        @$(DELTREE) $(CURDIR)/$(INC) 
+        
+#
+# Create temp directories
+#
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+        @$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+        @$(MKDIR) $(INC)
+endif
+
+#
+# Audio files processing rule
+#
+soundbank.bin.o : $(AUDIO_FILES)
+        @$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+        $(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+        $(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+
+#
+# Png files processing rule
+#
+$(GFX_FILES): $(wildcard %.png) 
+        @echo 'Converting $(@) file to asm...'
+        $(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+        @echo 'Assembling $(@).s file...'
+        $(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+        @echo 'Done!'
+
+#
+# Binary files processing rule
+# 
+$(BIN_FILES): $(wildcard %.*)
+        @echo 'Converting $(@) file to asm...'
+        @$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+        @echo 'Creating $(@).inc include file...'
+        @echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo 'Assembling $(@).s file...'
+        @$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+        @echo 'Done!'
+
+#
+# GBFS files processing rule
+#
+data.gbfs.o:
+        @cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+        $(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+        $(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+
+#
+# Binary files processing rule
+# 
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 270 - 0
packages/libndsfpc/examples/gl2d/primitives/primitives.pp

@@ -0,0 +1,270 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+program primitives;
+
+{$mode objfpc}
+
+uses
+  nds9, ctypes, gl2d;
+
+const
+  HALF_WIDTH  = (SCREEN_WIDTH  div 2);
+  HALF_HEIGHT = (SCREEN_HEIGHT div 2);
+  BRAD_PI     = (1 shl 14);
+
+
+// Simple box, triangle, and putpixel demo
+procedure simple(frame: cint);
+var
+  red, green, blue: cint;
+  i: integer;
+  x, y: integer;
+begin
+	// set up GL2D for 2d mode
+	glBegin2D();
+
+		// Do some funky color cycling
+		red   := abs(sinLerp(frame * 220) * 31) shr 12;
+		green := abs(sinLerp(frame * 140) * 31) shr 12;
+		blue  := abs(sinLerp(frame *  40) * 31) shr 12;
+		
+		// fill the whole screen with a gradient box
+		glBoxFilledGradient( 0, 0, 255, 191,
+							 RGB15( red,  green,  blue ),
+							 RGB15(  blue, 31 - red,  green ),
+							 RGB15( green,  blue, 31 - red ),
+							 RGB15(  31 - green, red, blue )
+						   );
+		
+		// draw a black box
+		glBoxFilled( 200, 10,
+					       250, 180,
+					       RGB15(0,0,0)
+				       );
+		
+		// draw a border around the black box
+		glBox( 200, 10,
+			     250, 180,
+			     RGB15(0,31,0)
+		     );
+	
+		// draw a triangle
+		glTriangleFilled( 20, 100,
+						          200, 30,
+						          60, 40,
+						          RGB15(31,0,31)
+						        );
+	
+		// draw a gradient triangle
+		glTriangleFilledGradient( 20, 100,
+								  200, 30,
+								  60, 40,
+								  RGB15(blue,red,green),
+								  RGB15(green,blue, red),
+								  RGB15(red,green,blue)
+								);
+
+		// translucent mode
+		// Poly ID 1
+		glPolyFmt(POLY_ALPHA(16) or POLY_CULL_NONE or POLY_ID(1));
+		glBoxFilledGradient( 10, 50, 230, 150,
+							 RGB15( green,  0,  0 ),
+							 RGB15(  0, red,  0 ),
+							 RGB15( 31,  0, blue ),
+							 RGB15(  0, red, 31 )
+						   );
+
+		// translucent mode
+		// Poly ID 2
+		glPolyFmt(POLY_ALPHA(16) or POLY_CULL_NONE or POLY_ID(2));
+		glTriangleFilledGradient( 70, 10,
+								  20, 130,
+								  230, 180,
+								  RGB15(red,green,blue),
+								  RGB15(blue,red,green),
+								  RGB15(green,blue, red)
+								);
+		i := 0;
+		// restore to normal(solid) rendering
+		glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE or POLY_ID(3));
+		// draw a circle using putpixel
+{
+    for i := 0 to 128 do
+    begin
+			x := sar(cosLerp(i * 256) * 80, 12);
+			y := sar(sinLerp(i * 256) * 70, 12);
+			glPutPixel( HALF_WIDTH  + x, 
+                  HALF_HEIGHT + y, 
+                  RGB15(red, green, blue) 
+                );
+    end;
+    }
+
+		while i < BRAD_PI * 2 do
+		begin
+			x := SarLongint(cosLerp(i) * 80, 12);
+			y := SarLongint(sinLerp(i) * 70, 12);
+			glPutPixel( HALF_WIDTH + x, HALF_HEIGHT + y, RGB15(red, green, blue) );
+			inc(i, 256);
+		end;
+
+	glEnd2D();
+end;
+
+
+// oldskool lines demo
+procedure lines(frame: cint);
+var
+  red, green, blue: cint;
+  i: cint;
+  px, py, px2, py2: cint;
+begin
+	// Do some funky color cycling
+	red   := abs(sinLerp(frame * 220) * 31) shr 12 ;
+	green := abs(sinLerp(frame * 140) * 31) shr 12 ;
+	blue  := abs(sinLerp(frame *  40) * 31) shr 12 ;
+	
+	// set up GL2D for 2d mode
+	glBegin2D();
+		// draw a bunch (4096/32) of colored lines
+		// using some funky trig equations
+
+		i := frame;
+		while i < ((1 shl 12) + frame) do
+		begin
+			px  := SarLongint(sinLerp(frame * 130) * 130, 12) * cosLerp( (i * 100));
+			py  := SarLongint(sinLerp(frame * 280) *  70, 12) * sinLerp( (i * 200));
+			px2 := SarLongint(sinLerp(frame * 330) * 100, 12) * cosLerp(((i * 300 + BRAD_PI)));
+		 	py2 := SarLongint(sinLerp(frame * 140) *  80, 12) * sinLerp(((i * 400 + BRAD_PI)));
+			glLine( HALF_WIDTH + SarLongint(px, 12), HALF_HEIGHT + SarLongint(py, 12),
+					    HALF_WIDTH + SarLongint(px2, 12), HALF_HEIGHT + SarLongint(py2, 12),
+					    RGB15(red, green, blue)
+				    );
+			glLine( HALF_WIDTH + SarLongint(py2, 12), HALF_HEIGHT + SarLongint(px, 12),
+					    HALF_WIDTH + SarLongint(py, 12), HALF_HEIGHT + SarLongint(px2, 12),
+					    RGB15(green, blue, red)
+				    );
+			inc(i, 32);
+		end;
+
+
+	glEnd2D();
+end;
+
+
+// Some radially displaced pixels
+procedure pixels(frame: cint);
+var
+  radius, red, green, blue: cint;
+  i, angle: cint;
+  x, y, a2,x2,y2: cint;
+begin
+	// Elastic radius
+	radius := 40 + (abs(sinLerp(frame * 20) * 80) shr 12);
+	
+	// Do some funky color cycling
+	red := abs(sinLerp(frame * 220) * 31) shr 12 ;
+	green := abs(sinLerp(frame * 140) * 31) shr 12 ;
+	blue := abs(sinLerp(frame * 40) * 31) shr 12 ;
+
+	// speed opf animation
+	i := (frame * 140) and 32767;
+	
+	// duh!
+	angle := 0;
+	
+	// set up GL2D for 2d mode
+	glBegin2D();
+		// Draw a full revolution of some radially dispalced pixels
+		for angle := 0 to 512 do
+		begin
+			a2 := (angle * 64) + i;
+			x := cosLerp(angle * 64 * 2) * radius;
+			y := sinLerp(x div 32 + a2) * radius;
+			x := cosLerp((y div 64) + (angle * 64)) * (radius + 20);
+			y := sinLerp(x div 64 + a2) * radius;
+			x2 := -y;
+			y2 := x;
+			
+			glPutPixel( HALF_WIDTH  + SarLongint(x, 12), 
+						      HALF_HEIGHT + SarLongint(y, 12), 
+						      RGB15(red, green, blue)
+					      );
+			glPutPixel( HALF_WIDTH  + SarLongint(x2, 12), 
+						      HALF_HEIGHT + SarLongint(y2, 12), 
+						      RGB15(green, blue, red)
+					      );
+		end;
+	glEnd2D();
+end;
+
+
+// Demo titles
+var
+  demo_titles: array [0..2] of pchar = ('Lovely Wobbly  ',
+                                        'OldSkool       ',
+	                                      'This Suxxors!  ');
+
+var
+  frame: integer = 0;
+  demonum: integer = 0;
+  key: integer;
+  
+begin
+  defaultExceptionHandler();
+	
+  // Set it to my favorite mode
+	videoSetMode( MODE_5_3D );
+	consoleDemoInit();
+	
+	// Initialize GL in 3d mode
+	glScreen2D();
+	iprintf(#$1b'[1;1HEasy GL2D Primitives Example');
+	iprintf(#$1b'[3;1HRelminator');
+	iprintf(#$1b'[4;1Hhttp://rel.betterwebber.com');
+	iprintf(#$1b'[6;1HPress Arrow keys to Change FX');
+	
+	while true do
+	begin	
+		// increment frame counter 
+		inc(frame);
+		
+		// get input
+		scanKeys();
+		key := keysDown();
+		
+		
+		// process input
+		if ((key and KEY_DOWN) <> 0) or ((key and KEY_RIGHT) <> 0) then
+			demonum := (demonum + 1) mod 3;
+		
+		if ((key and KEY_UP) <> 0) or ((key and KEY_LEFT) <> 0) then
+		begin
+			dec(demonum);
+			if demonum < 0 then 
+        demonum := 2;
+		end;
+
+		// figure out what demo should be viewed
+		case demonum of
+			0: pixels(frame);
+			1: lines(frame); 
+      2: simple(frame);
+		else
+			pixels(frame);
+		end;
+    glFlush(0);
+		swiWaitForVBlank();
+		iprintf(#$1b'[10;1HDemo# %i/3', demonum+1);
+		iprintf(#$1b'[11;1HTitle: %s', demo_titles[demonum] );
+	end;
+
+end.

+ 1577 - 0
packages/libndsfpc/examples/gl2d/scrolling/Makefile

@@ -0,0 +1,1577 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=nds
+override CPU_TARGET_DEFAULT=arm
+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
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_PROGRAMS+=scrolling
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-gl -Xm -O2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+override CLEANEXEDBGFILES+=$(EXEDBGFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+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))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+ifndef MMUTIL
+MMUTIL:=$(strip $(wildcard $(addsuffix /mmutil$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MMUTIL),)
+MMUTIL= __missing_command_MMUTIL
+else
+MMUTIL:=$(firstword $(MMUTIL))
+endif
+endif
+export MMUTIL
+ifndef GRIT
+GRIT:=$(strip $(wildcard $(addsuffix /grit$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GRIT),)
+GRIT= __missing_command_GRIT
+else
+GRIT:=$(firstword $(GRIT))
+endif
+endif
+export GRIT
+ifndef RMDIR
+RMDIR:=$(strip $(wildcard $(addsuffix /rmdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMDIR),)
+RMDIR= __missing_command_RMDIR
+else
+RMDIR:=$(firstword $(RMDIR))
+endif
+endif
+export RMDIR
+ifndef NDSTOOL
+NDSTOOL:=$(strip $(wildcard $(addsuffix /ndstool$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(NDSTOOL),)
+NDSTOOL= __missing_command_NDSTOOL
+else
+NDSTOOL:=$(firstword $(NDSTOOL))
+endif
+endif
+export NDSTOOL
+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:
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+dir_delete:
+	@$(DELTREE) $(CURDIR)/$(BUILD) 
+	@$(DELTREE) $(CURDIR)/$(INC) 
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+	@$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+	@$(MKDIR) $(INC)
+endif
+soundbank.bin.o : $(AUDIO_FILES)
+	@$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+	$(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+	$(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+$(GFX_FILES): $(wildcard %.bmp) 
+	@echo 'Converting $(@) file to asm...'
+	$(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+	@echo 'Assembling $(@).s file...'
+	$(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+	@echo 'Done!'
+$(BIN_FILES): $(wildcard %.*)
+	@echo 'Converting $(@) file to asm...'
+	@$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+	@echo 'Creating $(@).inc include file...'
+	@echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo 'Assembling $(@).s file...'
+	@$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+	@echo 'Done!'
+data.gbfs.o:
+	@cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+	$(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+	$(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 111 - 0
packages/libndsfpc/examples/gl2d/scrolling/Makefile.fpc

@@ -0,0 +1,111 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+loaders= 
+programs=scrolling
+
+[require]
+packages=libndsfpc
+tools=bin2s mmutil grit rmdir ndstool
+nortl=y
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=nds
+fpcdir=../../../../..
+
+[compiler]
+options=-gl -Xm -O2 
+#-d__THUMB__
+
+[clean]
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+       $(BUILD)/* \
+       $(INC)/*
+units=*
+
+[prerules]
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+
+[rules]
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+
+#
+# Delete temp directories
+#
+dir_delete:
+        @$(DELTREE) $(CURDIR)/$(BUILD) 
+        @$(DELTREE) $(CURDIR)/$(INC) 
+        
+#
+# Create temp directories
+#
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+        @$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+        @$(MKDIR) $(INC)
+endif
+
+#
+# Audio files processing rule
+#
+soundbank.bin.o : $(AUDIO_FILES)
+        @$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+        $(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+        $(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+
+#
+# Png files processing rule
+#
+$(GFX_FILES): $(wildcard %.bmp) 
+        @echo 'Converting $(@) file to asm...'
+        $(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+        @echo 'Assembling $(@).s file...'
+        $(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+        @echo 'Done!'
+
+#
+# Binary files processing rule
+# 
+$(BIN_FILES): $(wildcard %.*)
+        @echo 'Converting $(@) file to asm...'
+        @$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+        @echo 'Creating $(@).inc include file...'
+        @echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo 'Assembling $(@).s file...'
+        @$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+        @echo 'Done!'
+
+#
+# GBFS files processing rule
+#
+data.gbfs.o:
+        @cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+        $(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+        $(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+
+#
+# Binary files processing rule
+# 
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

BIN
packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.bmp


+ 8 - 0
packages/libndsfpc/examples/gl2d/scrolling/gfx/crono.grit

@@ -0,0 +1,8 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 8 (256 colors)
+-gB8

BIN
packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.bmp


+ 9 - 0
packages/libndsfpc/examples/gl2d/scrolling/gfx/tiles.grit

@@ -0,0 +1,9 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+
+# Set the bit depth to 8 (256 colors)
+-gB8

+ 400 - 0
packages/libndsfpc/examples/gl2d/scrolling/scrolling.pp

@@ -0,0 +1,400 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+
+program scrolling;
+
+{$mode objfpc}
+{$H+}
+
+{$L build/crono.o}
+{$L build/tiles.o}
+
+uses
+  ctypes, nds9, gl2d, uvcoord_crono;
+
+
+const
+  cronoBitmapLen = 32768;
+  cronoPalLen = 512;
+  tilesBitmapLen = 65536;
+  tilesPalLen = 512;
+
+var
+  cronoBitmap: array [0..0] of cuint; cvar; external;
+  cronoPal: array [0..0] of cushort; cvar; external;
+  tilesBitmap: array [0..0] of cuint; cvar; external;
+  tilesPal: array [0..0] of cushort; cvar; external;
+
+const
+  MAP_WIDTH = 32;
+  MAP_HEIGHT = 32;
+
+
+(*
+	I'm using the struct of player from the
+	Animate simple man/woman exmple in the 
+	"nds/examples" folder
+	You might want to read up on that too to
+	see the differnce in handling sprites via OAM
+	and Easy GL2D.
+*)
+
+const
+  P_RIGHT = 0;
+  P_UP = 1;
+  P_DOWN = 2;
+  P_LEFT = 3;
+
+type
+  TPlayer = record
+    x, y: integer;
+    gfx_frame: integer;
+    state: integer;
+    anim_frame: integer;
+    is_walking: boolean;       // an animation flag whether crono is walking or not
+  end;
+  PPlayer = ^TPlayer;
+  
+  // Our level struct
+  TLevel = record
+    width: integer;			// dimensions of the map
+    height: integer;
+    
+    camera_x: integer;		// top-left cooordinates of our virtual camera
+    camera_y: integer;		// Works almost the same the 2d BG scroller
+    
+    tile_x: integer;			// current tile the top-left coordinate of our
+    tile_y: integer;			// camera occupies
+    
+    pixel_x: integer;		// scrolling tile offsets
+    pixel_y: integer;
+  end;
+  PLevel = ^TLevel;
+
+  TMapArray = array [0..MAP_WIDTH-1, 0..MAP_HEIGHT-1] of cushort;
+
+
+
+// Animates crono
+procedure AnimatePlayer(p: PPlayer);
+const 
+  FRAMES_PER_ANIMATION = 6;		// 6 crono animations 
+	frame: integer = 0;      // a static frame counter
+begin	
+	// Only animate if crono is walking
+	if (p^.is_walking) then
+	begin
+		inc(frame);
+		
+		// Animate only every 8th frame
+		// I used an if() block instead of % since % is slow
+		// on the DS (not that it would matter in this demo)
+		if ((frame and 7) = 0) then
+		begin 
+			inc(p^.anim_frame);
+			if (p^.anim_frame >= (FRAMES_PER_ANIMATION)) then
+				p^.anim_frame := 0;
+		end;
+	end;
+	
+	// P_RIGHT, P_UP and P_DOWN is calculated normally.
+	// P_LEFT is P_RIGHT flipped.
+	case (p^.state) of
+	  P_RIGHT: p^.gfx_frame := p^.anim_frame + p^.state * FRAMES_PER_ANIMATION;
+	  P_UP: p^.gfx_frame := p^.anim_frame + p^.state * FRAMES_PER_ANIMATION;
+		P_DOWN: p^.gfx_frame := p^.anim_frame + p^.state * FRAMES_PER_ANIMATION;
+		P_LEFT: p^.gfx_frame := p^.anim_frame + P_RIGHT * FRAMES_PER_ANIMATION;
+	 else
+     p^.gfx_frame := p^.anim_frame + p^.state * FRAMES_PER_ANIMATION;
+	end;
+		
+end;
+
+
+// Draws a full screen map
+procedure DrawMap(lvl: PLevel; map: TMapArray; tiles: pglImage);
+const
+	// tiles are 16x16 pixels
+  TILE_SIZE = 16;
+	// calculate number of tiles per row and column
+	SCREEN_TILE_X = SCREEN_WIDTH div TILE_SIZE;
+	SCREEN_TILE_Y = SCREEN_HEIGHT div TILE_SIZE;
+var	
+	x, y: integer;				// counters
+	tile_x, tile_y: integer;		// current tile to draw
+	screen_x, screen_y: integer;	// actual screen position (in pixel)
+	i: integer;					// tile index to draw
+begin	
+	// we need to draw an extra tile at the bottom and right 
+	// since we are scrolling
+	for y := 0 to SCREEN_TILE_Y do
+	begin
+		for x := 0 to SCREEN_TILE_X do 
+		begin
+			tile_x := lvl^.tile_x + x;		// get relative tile positions
+			tile_y := lvl^.tile_y + y;
+			i := map[tile_x, tile_y];		// get map index
+			screen_x := (x * TILE_SIZE) - lvl^.pixel_x;      //Calculate where to put a
+      screen_y := (y * TILE_SIZE) - lvl^.pixel_y;      //particular tile
+                
+			glSprite(screen_x, screen_y, GL_FLIP_NONE , @tiles[i]);
+		end;
+	end;
+end;
+
+
+// Update's the camera's position relative to the player
+procedure CameraUpdate(lvl: PLevel; p: PPlayer);
+const
+	// set constants for middle of screen
+	SCREEN_MID_WIDTH = SCREEN_WIDTH div 2;
+	SCREEN_MID_HEIGHT = SCREEN_HEIGHT div 2;
+  TILE_SIZE = 16;
+begin 
+	// update the camera
+	lvl^.camera_x := p^.x - SCREEN_MID_WIDTH;
+	lvl^.camera_y := p^.y - SCREEN_MID_HEIGHT;
+	
+	// limit camera X values
+	if ( lvl^.camera_x < 0 ) then lvl^.camera_x := 0;
+	if ( lvl^.camera_x > ((lvl^.width-2) * TILE_SIZE ) - SCREEN_WIDTH ) then
+		lvl^.camera_x := ((lvl^.width-2) * TILE_SIZE ) - SCREEN_WIDTH;
+	
+	// limit camera Y values
+	if ( lvl^.camera_y < 0 ) then lvl^.camera_y := 0;
+	if ( lvl^.camera_y > ((lvl^.height-2) * TILE_SIZE ) - SCREEN_HEIGHT ) then
+		lvl^.camera_y := ((lvl^.height-2) * TILE_SIZE ) - SCREEN_HEIGHT;
+	
+	// calculate level starting tiles
+	lvl^.tile_x := lvl^.camera_x div TILE_SIZE; 
+	lvl^.tile_y := lvl^.camera_y div TILE_SIZE; 
+	
+	// calculate tile pixel offsets
+	// Only works with power of 2 tilesize
+	// use "%" for non-power of 2 sizes
+	lvl^.pixel_x := lvl^.camera_x and (TILE_SIZE - 1);
+	lvl^.pixel_y := lvl^.camera_y and (TILE_SIZE - 1);
+	
+end;
+
+
+// Just a simple map
+// A real engine should use a map editor
+procedure InitMap(var map: TMapArray);
+var
+	x, y: integer;
+begin
+	for y := 0 to MAP_HEIGHT - 1 do
+		for x := 0 to MAP_WIDTH - 1 do 
+			map[x, y] := ((y and 15)*16 + (x and 15)) and 255;
+end;
+
+var
+// This imageset would use our texture packer generated coords so it's kinda
+// safe and easy to use 
+// CRONO_NUM_IMAGES is a value from "uvcoord_crono.h"
+  crono_images: array [0..CRONO_NUM_IMAGES-1] of glImage;
+
+// This tileset won't make use of our texture packer generated coords
+// messy, manual and prone to errors
+// BMP is 256x256 and tiles are 16x16 so.. (256/16) * (256 /16) = 16 * 16
+  tiles_images: array [0..((256 div 16) * (256 div 16)) - 1] of glImage;  
+
+// Our level map
+// I used shorts since we would be able to reference 65535
+// uinique tiles with shorts.
+// You should use malloc() or new[] to dimension
+// your maps for a real game though.
+  level_map: TMapArray;
+
+	// Our crono guy
+  crono: TPlayer;
+	// the level
+	lvl: TLevel;
+  
+  crono_textureID: cint;
+  tiles_textureID: cint;
+  
+  TextureSize: integer;
+	frame: integer = 0;	// ever present frame counter
+	key: integer;		// for key input
+  
+  i: integer;
+  
+begin
+	// crono starting positions
+	crono.x := 16 * 5;		// 5th tile 
+	crono.y := 16 * 5;
+	crono.state := P_RIGHT;	// facing right
+	crono.anim_frame := 0;	// starting frame
+	lvl.width := MAP_WIDTH;		// init map dimesions
+	lvl.height := MAP_HEIGHT;
+	
+	InitMap(level_map);			// load a randomized map (too lazy to make a proper one)
+	
+	videoSetMode(MODE_5_3D);	// favorite mode
+	
+	
+	consoleDemoInit();
+	
+	
+	// Initialize GL in 3d mode
+	glScreen2D();
+	
+	
+	// set  Bank A to texture (128 kb)
+	vramSetBankA( VRAM_A_TEXTURE );
+	
+	vramSetBankE(VRAM_E_TEX_PALETTE);  // Allocate VRAM bank for all the palettes
+	
+	// Our texture handle for crono
+	// I used glLoadSpriteSet since the texture was made
+	// with my texture packer.
+	crono_textureID :=  glLoadSpriteSet(crono_images,			// pointer to glImage array
+						 CRONO_NUM_IMAGES, 		// Texture packer auto-generated #define
+						 @crono_texcoords,		// Texture packer auto-generated array
+						 GL_RGB256,				// texture type for glTexImage2D() in videoGL.h 
+						 TEXTURE_SIZE_256,		// sizeX for glTexImage2D() in videoGL.h
+						 TEXTURE_SIZE_128,		// sizeY for glTexImage2D() in videoGL.h
+						 GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+						 256,					// Length of the palette to use (256 colors)
+						 @cronoPal,		// Load our 256 color crono palette
+						 @cronoBitmap		// image data generated by GRIT
+					   );
+
+	// Our texture handle for our tiles
+	// I used glLoadTileSet since the texture 
+	// is just a bunch of 16x16 tiles in a 256x256
+	// tileset so we don't need a texture packer for this.
+	tiles_textureID :=  glLoadTileSet(tiles_images,		// pointer to glImage array
+					   16,					// sprite width
+					   16,					// sprite height
+					   256,					// bitmap width
+					   256,					// bitmap height
+					   GL_RGB256,			// texture type for glTexImage2D() in videoGL.h 
+					   TEXTURE_SIZE_256,	// sizeX for glTexImage2D() in videoGL.h
+					   TEXTURE_SIZE_256,	// sizeY for glTexImage2D() in videoGL.h
+					   GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+					   256,					// Length of the palette to use (256 colors)
+					   @tilesPal,		// Load our 256 color tiles palette
+					   @tilesBitmap		// image data generated by GRIT
+					 );
+	
+	
+	
+
+	iprintf(#$1b'[1;1HSCROLLING TEST');
+	iprintf(#$1b'[3;1HArrow Keys to move');
+	
+	iprintf(#$1b'[6;1HRelminator');
+	iprintf(#$1b'[7;1HHttp://Rel.Phatcode.Net');
+	
+	iprintf(#$1b'[9;1HCrono = %i', crono_textureID);
+	iprintf(#$1b'[10;1HTiles = %i', tiles_textureID);
+
+	iprintf(#$1b'[13;1HTiles by unknown');
+	iprintf(#$1b'[14;1HCrono by Square Enix');
+	
+		// calculate the amount of 
+	// memory uploaded to VRAM in KB
+	TextureSize := cronoBitmapLen + tilesBitmapLen;
+					  
+					  
+	iprintf(#$1b'[17;1HTotal Texture size= %i kb', TextureSize div 1024);
+
+
+	while true do
+	begin
+		// increment frame counter
+		inc(frame);
+	
+		crono.is_walking := false;  // crono is lazily standing to the right
+		scanKeys();
+		key := keysHeld();
+		
+		// process input and move crono
+		if (key and KEY_RIGHT) <> 0 then
+		begin
+			inc(crono.x);
+			crono.state := P_RIGHT;
+			crono.is_walking := true;
+		end;
+		
+		if (key and KEY_LEFT)<>0 then
+		begin
+			dec(crono.x);
+			crono.state := P_LEFT;
+			crono.is_walking := true;
+		end;
+		
+		if (key and KEY_UP) <> 0 then
+		begin
+			dec(crono.y);
+			crono.state := P_UP;
+			crono.is_walking := true;
+		end;
+		
+		if (key and KEY_DOWN) <> 0 then
+		begin
+			inc(crono.y);
+			crono.state := P_DOWN;
+			crono.is_walking := true;
+		end;
+		
+		// Update player animations 	
+		AnimatePlayer(@crono);
+		
+		
+		// Update level camera relative to crono's position
+		CameraUpdate(@lvl, @crono);
+		
+		glBegin2D();
+		
+			// Draw our map layer
+			DrawMap( @lvl, level_map, @tiles_images );
+			
+			// Process crono
+			// Left and right share the same frames
+			// I just flipped the sprite depending on where crono faces.
+			if (crono.state < P_LEFT) then
+				glSpriteRotate(crono.x - lvl.camera_x, crono.y - lvl.camera_y, 0,GL_FLIP_NONE , @crono_images[crono.gfx_frame])
+			else
+				glSpriteRotate(crono.x - lvl.camera_x, crono.y - lvl.camera_y, 0,GL_FLIP_H , @crono_images[crono.gfx_frame]);
+			
+			
+			// Draw a translucent gradient box to emulate dialogboxes
+			// giving it a unique Polygon ID
+			glPolyFmt(POLY_ALPHA(16) or POLY_CULL_NONE or POLY_ID(1));
+			glBoxFilledGradient( 0, 150, 255, 191,
+								 RGB15( 31,  0,  0 ),
+								 RGB15(  0, 31,  0 ),
+								 RGB15( 31,  0, 31 ),
+								 RGB15(  0, 31, 31 )
+                               );
+							   
+			//back to opaque mode
+			// and draw the border of the "dialog box"
+			glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE );
+			for i := 0 to 4 do
+			  glBox(i, 150 + i, 255 - i , 191 - i,
+					     RGB15( 31-i*5,  i*5,  31 - i * 3 )
+					   );
+			
+		glEnd2D();
+		
+		glFlush(0);
+
+		swiWaitForVBlank();
+		
+	
+	end;
+
+end.

+ 49 - 0
packages/libndsfpc/examples/gl2d/scrolling/uvcoord_crono.pas

@@ -0,0 +1,49 @@
+unit uvcoord_crono;
+
+interface
+
+uses
+  ctypes;
+  
+
+const
+  CRONO_BITMAP_WIDTH  = 256;
+  CRONO_BITMAP_HEIGHT = 128;
+  CRONO_NUM_IMAGES    = 28;
+
+var
+  crono_texcoords: array[1..(28*4)] of cuint = (
+ 152, 40, 24, 40,				// 0
+ 152, 80, 24, 40,				// 1
+ 0, 80, 24, 40,				// 2
+ 32, 0, 24, 40,				// 3
+ 32, 40, 24, 40,				// 4
+ 32, 80, 24, 40,				// 5
+ 56, 0, 24, 40,				// 6
+ 56, 40, 24, 40,				// 7
+ 56, 80, 24, 40,				// 8
+ 80, 0, 24, 40,				// 9
+ 80, 40, 24, 40,				// 10
+ 80, 80, 24, 40,				// 11
+ 104, 0, 24, 40,				// 12
+ 104, 40, 24, 40,				// 13
+ 104, 80, 24, 40,				// 14
+ 128, 0, 24, 40,				// 15
+ 128, 40, 24, 40,				// 16
+ 128, 80, 24, 40,				// 17
+ 152, 0, 24, 40,				// 18
+ 176, 0, 24, 40,				// 19
+ 200, 0, 24, 40,				// 20
+ 224, 0, 24, 40,				// 21
+ 0, 0, 32, 40,				// 22
+ 0, 40, 32, 40,				// 23
+ 176, 40, 24, 40,				// 24
+ 176, 80, 24, 40,				// 25
+ 200, 40, 24, 40,				// 26
+ 224, 40, 24, 40				// 27
+);
+
+
+implementation
+
+end.

+ 1577 - 0
packages/libndsfpc/examples/gl2d/sprites/Makefile

@@ -0,0 +1,1577 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/12/18]
+#
+default: all
+MAKEFILETARGETS=arm-nds
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=nds
+override CPU_TARGET_DEFAULT=arm
+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
+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
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+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)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp) $(wildcard $(dir)/*.png)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_PROGRAMS+=sprites
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override CLEAN_FILES+=*.elf *.o *.s *.nds *.nef *.h *.bin *.map $(BUILD)/* $(INC)/*
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-gl -Xm -O2
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+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
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+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
+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:=
+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=libndsfpc
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBNDSFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBNDSFPC
+PACKAGEDIR_LIBNDSFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBNDSFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBNDSFPC=$(PACKAGEDIR_LIBNDSFPC)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBNDSFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBNDSFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBNDSFPC=
+UNITDIR_LIBNDSFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libndsfpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBNDSFPC),)
+UNITDIR_LIBNDSFPC:=$(firstword $(UNITDIR_LIBNDSFPC))
+else
+UNITDIR_LIBNDSFPC=
+endif
+endif
+ifdef UNITDIR_LIBNDSFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBNDSFPC)
+endif
+ifdef UNITDIR_FPMAKE_LIBNDSFPC
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBNDSFPC)
+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)),)
+ifneq ($(findstring $(OS_TARGET),freebsd openbsd netbsd linux solaris),)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override EXEDBGFILES:=$(addsuffix $(EXEDBGEXT),$(TARGET_PROGRAMS))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+override CLEANEXEDBGFILES+=$(EXEDBGFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+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))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+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 CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+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
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+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)  FPC fpmake... $(FPCFPMAKE)
+	@$(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
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+ifndef MMUTIL
+MMUTIL:=$(strip $(wildcard $(addsuffix /mmutil$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MMUTIL),)
+MMUTIL= __missing_command_MMUTIL
+else
+MMUTIL:=$(firstword $(MMUTIL))
+endif
+endif
+export MMUTIL
+ifndef GRIT
+GRIT:=$(strip $(wildcard $(addsuffix /grit$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GRIT),)
+GRIT= __missing_command_GRIT
+else
+GRIT:=$(firstword $(GRIT))
+endif
+endif
+export GRIT
+ifndef RMDIR
+RMDIR:=$(strip $(wildcard $(addsuffix /rmdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMDIR),)
+RMDIR= __missing_command_RMDIR
+else
+RMDIR:=$(firstword $(RMDIR))
+endif
+endif
+export RMDIR
+ifndef NDSTOOL
+NDSTOOL:=$(strip $(wildcard $(addsuffix /ndstool$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(NDSTOOL),)
+NDSTOOL= __missing_command_NDSTOOL
+else
+NDSTOOL:=$(firstword $(NDSTOOL))
+endif
+endif
+export NDSTOOL
+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:
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+dir_delete:
+	@$(DELTREE) $(CURDIR)/$(BUILD) 
+	@$(DELTREE) $(CURDIR)/$(INC) 
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+	@$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+	@$(MKDIR) $(INC)
+endif
+soundbank.bin.o : $(AUDIO_FILES)
+	@$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+	$(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+	$(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+$(GFX_FILES): $(wildcard %.bmp) $(wildcard %.png) 
+	@echo 'Converting $(@) file to asm...'
+	$(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+	@echo 'Assembling $(@).s file...'
+	$(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+	@echo 'Done!'
+$(BIN_FILES): $(wildcard %.*)
+	@echo 'Converting $(@) file to asm...'
+	@$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+	@echo 'Creating $(@).inc include file...'
+	@echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+	@echo 'Assembling $(@).s file...'
+	@$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+	@echo 'Done!'
+data.gbfs.o:
+	@cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+	$(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+	$(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 111 - 0
packages/libndsfpc/examples/gl2d/sprites/Makefile.fpc

@@ -0,0 +1,111 @@
+#
+#   Makefile.fpc for Free Pascal libndsfpc 2.x.y Examples
+#
+
+[target]
+loaders= 
+programs=sprites
+
+[require]
+packages=libndsfpc
+tools=bin2s mmutil grit rmdir ndstool
+nortl=y
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=nds
+fpcdir=../../../../..
+
+[compiler]
+options=-gl -Xm -O2 
+#-d__THUMB__
+
+[clean]
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+       $(BUILD)/* \
+       $(INC)/*
+units=*
+
+[prerules]
+BUILD = build
+INC = inc
+AUDIO_FILES = $(foreach dir, $(notdir $(wildcard audio/*.*)), $(CURDIR)/audio/$(dir))
+GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.bmp) $(wildcard $(dir)/*.png)))
+BIN_FILES = $(foreach dir,data,$(notdir $(wildcard $(dir)/*)))
+NITRO_FILES = $(foreach dir,nitrofiles,$(notdir $(wildcard $(dir)/*)))
+
+[rules]
+.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
+all: dir_make $(BIN_FILES) $(GFX_FILES) fpc_all
+
+#
+# Delete temp directories
+#
+dir_delete:
+        @$(DELTREE) $(CURDIR)/$(BUILD) 
+        @$(DELTREE) $(CURDIR)/$(INC) 
+        
+#
+# Create temp directories
+#
+dir_make:
+ifneq ($(BUILD), $(CURDIR))
+        @$(MKDIR) $(BUILD)
+endif
+ifneq ($(INC), $(CURDIR))
+        @$(MKDIR) $(INC)
+endif
+
+#
+# Audio files processing rule
+#
+soundbank.bin.o : $(AUDIO_FILES)
+        @$(MMUTIL) $^ -d -o$(BUILD)/soundbank.bin -h$(BUILD)/soundbank.h
+        $(BIN2S) $(BUILD)/soundbank.bin > $(BUILD)/soundbank.bin.s
+        $(AS) -o $(BUILD)/soundbank.bin.o $(BUILD)/soundbank.bin.s
+
+#
+# Png files processing rule
+#
+$(GFX_FILES): $(wildcard %.bmp) $(wildcard %.png) 
+        @echo 'Converting $(@) file to asm...'
+        $(GRIT) gfx/$(@) -fts -ff gfx/$(basename $(@)).grit -o$(BUILD)/$(@)
+        @echo 'Assembling $(@).s file...'
+        $(AS) -o $(BUILD)/$(basename $(@)).o $(BUILD)/$(basename $(@)).s
+        @echo 'Done!'
+
+#
+# Binary files processing rule
+# 
+$(BIN_FILES): $(wildcard %.*)
+        @echo 'Converting $(@) file to asm...'
+        @$(BIN2S) data/$(@) > $(BUILD)/$(@).s
+        @echo 'Creating $(@).inc include file...'
+        @echo "var" > `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end: array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`": array [0..0] of cuint8; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo " " `(echo $(@F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size": cuint32; cvar; external;" >> `(echo "inc/"$(@F) | tr . .)`.inc
+        @echo 'Assembling $(@).s file...'
+        @$(AS) -o $(BUILD)/$(@).o $(BUILD)/$(@).s
+        @echo 'Done!'
+
+#
+# GBFS files processing rule
+#
+data.gbfs.o:
+        @cd GBFS && gbfs ../$(BUILD)/data.gbfs $(GBFS_FILES)
+        $(BIN2S) $(BUILD)/data.gbfs > $(BUILD)/data.gbfs.s
+        $(AS) -o $(BUILD)/data.gbfs.o $(BUILD)/data.gbfs.s
+
+#
+# Binary files processing rule
+# 
+nitro: 
+	@ndstool -c $(TARGET_PROGRAMS).nds -9 $(TARGET_PROGRAMS).nef.bin -d $(CURDIR)/filesystem
+
+patch:
+	@dlditool r4tf.dldi $(TARGET_PROGRAMS).nds

+ 176 - 0
packages/libndsfpc/examples/gl2d/sprites/cearn_atan.pas

@@ -0,0 +1,176 @@
+(*
+  coranac.com's awesome atan2 implementation
+	Very fast and very small.
+*)
+unit cearn_atan;
+
+{$mode objfpc}
+{$H+}
+
+interface
+
+uses
+  ctypes, nds9;
+  
+const 
+  __qran_seed: cint = 42;
+
+function atan2Lookup(x, y: cint): cuint32;
+function atan2Lerp(x, y: cint): cuint32;
+function sqran(seed: cint): cint;
+function qran(): cint; inline;
+function qran_range(min, max: cint): cint; inline;	
+
+const
+  BRAD_PI_SHIFT = 14;   
+  BRAD_PI = 1 shl BRAD_PI_SHIFT;
+  BRAD_HPI = BRAD_PI div 2; 
+  BRAD_2PI = BRAD_PI * 2;
+  ATAN_ONE = $1000; 
+  ATAN_FP = 12;
+
+  // Some constants for dealing with atanLUT.
+  ATANLUT_STRIDE = ATAN_ONE div $80; 
+  ATANLUT_STRIDE_SHIFT = 5;
+
+  // Arctangents LUT. Interval: [0, 1] (one=128); PI=0x20000
+  atanLUT: array [0..130-1] of cushort = (
+    $0000, $0146, $028C, $03D2, $0517, $065D, $07A2, $08E7,
+    $0A2C, $0B71, $0CB5, $0DF9, $0F3C, $107F, $11C1, $1303,
+    $1444, $1585, $16C5, $1804, $1943, $1A80, $1BBD, $1CFA,
+    $1E35, $1F6F, $20A9, $21E1, $2319, $2450, $2585, $26BA,
+    $27ED, $291F, $2A50, $2B80, $2CAF, $2DDC, $2F08, $3033,
+    $315D, $3285, $33AC, $34D2, $35F6, $3719, $383A, $395A,
+    $3A78, $3B95, $3CB1, $3DCB, $3EE4, $3FFB, $4110, $4224,
+    $4336, $4447, $4556, $4664, $4770, $487A, $4983, $4A8B,
+    // 64
+    $4B90, $4C94, $4D96, $4E97, $4F96, $5093, $518F, $5289,
+    $5382, $5478, $556E, $5661, $5753, $5843, $5932, $5A1E,
+    $5B0A, $5BF3, $5CDB, $5DC1, $5EA6, $5F89, $606A, $614A,
+    $6228, $6305, $63E0, $64B9, $6591, $6667, $673B, $680E,
+    $68E0, $69B0, $6A7E, $6B4B, $6C16, $6CDF, $6DA8, $6E6E,
+    $6F33, $6FF7, $70B9, $717A, $7239, $72F6, $73B3, $746D,
+    $7527, $75DF, $7695, $774A, $77FE, $78B0, $7961, $7A10,
+    $7ABF, $7B6B, $7C17, $7CC1, $7D6A, $7E11, $7EB7, $7F5C,
+    // 128
+    $8000, $80A2);
+
+implementation
+
+// Quick (and very dirty) pseudo-random number generator 
+// return random in range [0,8000h>
+function qran(): cint; inline;
+begin	
+  __qran_seed := 1664525 * __qran_seed + 1013904223;
+  result := (__qran_seed shr 16) and $7FFF;
+end;
+
+function qran_range(min, max: cint): cint; inline;	
+begin    
+  result := (qran() * (max - min) shr 15) + min;
+end;
+
+// Get the octant a coordinate pair is in.
+procedure OCTANTIFY(var _x, _y, _o: cint); inline;
+var
+  _t: cint;
+begin
+  repeat                             
+    _o := 0;                           
+    if (_y < 0)  then
+    begin
+      _x := -_x;   
+      _y := -_y; 
+      _o := _o + 4; 
+    end;     
+    if (_x <= 0) then
+    begin
+      _t := _x;
+      _x := _y;   
+      _y := -_t; 
+      _o := _o + 2; 
+    end;     
+    if (_x <= _y) then
+    begin
+      _t := _y - _x; 
+      _x := _x + _y; 
+      _y := _t; 
+      _o := _o + 1; 
+    end;     
+  until true;
+end;
+
+function QDIV(num, den: cint; const bits: cint): cint; inline;
+begin
+  while (REG_DIVCNT^ and DIV_BUSY) <> 0 do;
+  REG_DIVCNT^ := DIV_64_32;
+
+  REG_DIV_NUMER^ := cint64(num) shl bits;
+  REG_DIV_DENOM_L^ := den;
+
+  while (REG_DIVCNT^ and DIV_BUSY) <> 0 do;
+
+  result := REG_DIV_RESULT_L^;
+end;
+
+function atan2Lerp(x, y: cint): cuint32;
+var
+  phi: cint;
+  t, fa, fb, h: cuint32;
+begin
+  if (y =0) then 
+  begin
+    if x >= 0 then
+      result := 0
+    else
+      result := BRAD_PI;
+    exit;
+  end;
+  
+  OCTANTIFY(x, y, phi);
+  phi := phi * BRAD_PI div 4;
+  
+  t := QDIV(y, x, ATAN_FP);
+  h := t mod ATANLUT_STRIDE;
+  
+  fa := atanLUT[t div ATANLUT_STRIDE];
+  fb := atanLUT[t div ATANLUT_STRIDE + 1];
+  
+  result := phi + (fa + SarLongint((fb - fa) * h, ATANLUT_STRIDE_SHIFT)) div 8;
+end;
+
+function atan2Lookup(x, y: cint): cuint32;
+var
+  phi: cint;
+  t: cuint32;
+begin
+  if (y = 0) then
+  begin
+    if x >= 0 then 
+      result := 0 
+    else 
+      result := BRAD_PI;
+    exit;
+  end;
+  
+  OCTANTIFY(x, y, phi);
+  phi := phi * BRAD_PI div 4;
+  t := QDIV(y, x, ATAN_FP);
+  
+  result := phi + atanLUT[t div ATANLUT_STRIDE] div 8;
+end;
+
+function sqran(seed: cint): cint;
+var
+  old: cint;
+begin	
+  old := __qran_seed;
+  __qran_seed := seed; 
+  result := old;	
+end;
+
+end.
+
+
+
+

+ 10 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/anya.grit

@@ -0,0 +1,10 @@
+# Set the warning/log level to 3
+-W3
+
+
+#bitmap mode
+-gb
+
+
+# Set the bit depth to 16bit
+-gB16

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/anya.png


BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.bmp


+ 11 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/blob_sprite.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 4 (16 colors)
+-gB4
+
+#include pal
+-p

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.bmp


+ 8 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/enemies.grit

@@ -0,0 +1,8 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 8 (256 colors)
+-gB8

+ 11 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 4 (16 colors)
+-gB4
+
+#include pal
+-p

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/flyer.png


BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/font.bmp


+ 20 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/font.grit

@@ -0,0 +1,20 @@
+#-------------------------------------------------------
+# graphics in tile format
+#-------------------------------------------------------
+-gt
+
+#-------------------------------------------------------
+# no tile reduction
+#-------------------------------------------------------
+-mR!
+
+#-------------------------------------------------------
+# no map output
+#-------------------------------------------------------
+-m!
+
+#-------------------------------------------------------
+# graphics bit depth is 8 (256 color)
+#-------------------------------------------------------
+-gB4
+

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.bmp


+ 20 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/fontbubble.grit

@@ -0,0 +1,20 @@
+#-------------------------------------------------------
+# graphics in tile format
+#-------------------------------------------------------
+-gt
+
+#-------------------------------------------------------
+# no tile reduction
+#-------------------------------------------------------
+-mR!
+
+#-------------------------------------------------------
+# no map output
+#-------------------------------------------------------
+-m!
+
+#-------------------------------------------------------
+# graphics bit depth is 8 (256 color)
+#-------------------------------------------------------
+-gB4
+

+ 11 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 4 (16 colors)
+-gB4
+
+#include pal
+-p

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/shuttle.png


BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.bmp


+ 11 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/test_sprite.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+# Set the bit depth to 8 (256 colors)
+-gB8
+
+#include pal
+#-p

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.bmp


+ 9 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/tiles.grit

@@ -0,0 +1,9 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+
+# Set the bit depth to 8 (256 colors)
+-gB8

BIN
packages/libndsfpc/examples/gl2d/sprites/gfx/zero.bmp


+ 11 - 0
packages/libndsfpc/examples/gl2d/sprites/gfx/zero.grit

@@ -0,0 +1,11 @@
+# Set the warning/log level to 3
+-W3
+
+#bitmap mode
+-gb
+
+#exclude palette (no need since enemies.bmp and zero.bmp share the same palette)
+-p!
+
+# Set the bit depth to 8 (256 colors)
+-gB8

+ 460 - 0
packages/libndsfpc/examples/gl2d/sprites/sprites.pp

@@ -0,0 +1,460 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+program sprites;
+
+{$L build/enemies.o}
+{$L build/zero.o}
+{$L build/tiles.o}
+{$L build/shuttle.o}
+{$L build/anya.o}
+{$L build/font.o}
+{$L build/fontbubble.o}
+
+{$mode objfpc}
+{$H+}
+
+
+
+uses 
+ ctypes, nds9, gl2d, 
+ cearn_atan, 
+ uvcoord_enemies, uvcoord_zero;
+
+// GRIT auto-generated  files
+const
+  enemiesBitmapLen = 65536;
+  enemiesPalLen = 512;
+  zeroBitmapLen = 32768;
+  tilesBitmapLen = 65536;
+  tilesPalLen = 512;
+  shuttleBitmapLen = 2048;
+  shuttlePalLen = 32;
+  anyaBitmapLen = 32768;
+  fontTilesLen = 3072;
+  fontPalLen = 512;
+  fontbubbleTilesLen = 2048;
+  fontbubblePalLen = 512;
+
+var
+  enemiesBitmap: array [0..0] of cuint; cvar; external;
+  enemiesPal: array [0..0] of cushort; cvar; external;
+  zeroBitmap: array [0..0] of cuint; cvar; external;
+  tilesBitmap: array [0..0] of cuint; cvar; external;
+
+  tilesPal: array [0..0] of cushort; cvar; external;
+  shuttleBitmap: array [0..0] of cuint; cvar; external;
+
+  shuttlePal: array [0..0] of cushort; cvar; external;
+  anyaBitmap: array [0..0] of cuint; cvar; external;
+  fontTiles: array [0..0] of cuint; cvar; external;
+  fontPal: array [0..0] of cushort; cvar; external;
+  fontbubbleTiles: array [0..0] of cuint; cvar; external;
+  fontbubblePal: array [0..0] of cushort; cvar; external;
+
+// Declare our BG drawing routine
+procedure DrawBG(images:  pglImage);
+var
+  x, y, i: integer;
+begin 
+  for y := 0 to (256 div 16) - 1 do
+    for x := 0 to (256 div 16) - 1 do
+    begin
+      i := y * 16 + x;
+      glSprite(x * 16, y * 16, GL_FLIP_NONE, @images[i and 255]);
+    end;
+end;
+
+
+
+var
+  BRAD_PI: cint = 1 shl 14;
+
+  // This imagesets would use our texture packer generated coords so it's kinda
+  // safe and easy to use 
+  // ENEMIES_NUM_IMAGES is a value from "uvcoord_crono.h"
+  // ZERO_NUM_IMAGES is a value from "uvcoord_zero.h"
+  Enemies: array [0..ENEMIES_NUM_IMAGES  -1] of glImage;  // spriteset
+  Zero: array [0..ZERO_NUM_IMAGES - 1] of glImage;        // spriteset
+
+  // This tileset won't make use of our texture packer generated coords.
+  // Messy, manual and prone to errors.
+  // BMP is 256x256 and tiles are 16x16 so.. (256/16) * (256 /16) = 16 * 16
+  Tiles: array [0..(256 div 16) * (256 div 16) - 1] of glImage;  
+
+  // These sprites are single texture only so no need to
+  // do anything special
+  Shuttle: array [0..0] of glImage;
+  Anya: array [0..0] of glImage;
+  
+  topScreen, bottomScreen: TPrintConsole;
+  font, fontbubble: consoleFont;
+  
+  hitPal: array of cushort;
+  
+  i: cint;
+  
+  PaletteID: cint;           // the all-white pal
+  OriginalPaletteID: cint;   // Original palette
+  EnemiesTextureID: cint; 
+  ZeroTextureID: cint;
+  TilesTextureID: cint;
+  ShuttleTextureID: cint;
+  AnyaTextureID: cint;
+
+  TextureSize: cint;
+  
+  Frame: cint;          // just the standard frame counter
+  PhoenixFrame: cint;   // animation frame for our firebird
+  BeeFrame: cint;       // animation frame for the bee
+  ZeroFrame: cint;      // animation frame for zero
+  Rotation: cint;       // rotation value of the rotating sprites
+  
+  x, y: integer;
+  color: cint;
+
+begin
+  // set mode 5, enable BG0 and set it to 3D
+  videoSetMode(MODE_5_3D);
+  videoSetModeSub(MODE_0_2D);
+  
+  // initialize gl2d
+  glScreen2D();
+  
+  // Set up enough texture memory for our textures
+  // Bank A is just 128kb and we are using 194 kb of
+  // sprites
+  vramSetBankA(VRAM_A_TEXTURE);
+  vramSetBankB(VRAM_B_TEXTURE);
+
+  vramSetBankF(VRAM_F_TEX_PALETTE);  // Allocate VRAM bank for all the palettes
+  
+  vramSetBankE(VRAM_E_MAIN_BG);  // Main bg text/8bit bg. Bank E size == 64kb, exactly enough for 8bit * 256 * 192 + text layer
+  
+  // Load our custom font for the top screen
+  consoleInit(@topScreen, 1, BgType_Text4bpp, BgSize_T_256x256, 31, 0, true, false);
+  //put bg 0 at a lower priority than the text background
+  bgSetPriority(0, 1);
+
+  // Bottom screeen
+  vramSetBankI(VRAM_I_SUB_BG_0x06208000);
+  consoleInit(@bottomScreen, 0, BgType_Text4bpp, BgSize_T_256x256, 20, 0, false, false);
+  
+  font.gfx := pcuint16(@fontTiles);
+  font.pal := pcuint16(@fontPal);
+  font.numChars := 95;
+  font.numColors :=  fontPalLen div 2;
+  font.bpp := 4;
+  font.asciiOffset := 32;
+  font.convertSingleColor := false;
+  
+  
+  // Top Screen 
+  fontbubble.gfx := pcuint16(@fontbubbleTiles);
+  fontbubble.pal := pcuint16(@fontbubblePal);
+  fontbubble.numChars := 64;
+  fontbubble.numColors :=  fontbubblePalLen div 2;
+  fontbubble.bpp := 4;
+  fontbubble.asciiOffset := 32;
+  fontbubble.convertSingleColor := false;
+  
+  consoleSetFont(@bottomScreen, @font);
+  consoleSetFont(@topScreen, @fontbubble);
+  
+  
+  setlength(hitPal, 256);
+  for i := 0 to 255 do
+    hitPal[i] := ($FF shl 8) or $FF;
+  
+  
+  // Generate the texture and load the all-white palette
+  glGenTextures(1, @PaletteID);
+  glBindTexture(0, PaletteID);
+  glColorTableEXT(0, 0, 256, 0, 0, @hitPal[0]);
+  
+  // Generate another palette for our original image palette
+  glGenTextures(1, @OriginalPaletteID);
+  glBindTexture(0, OriginalPaletteID);
+  glColorTableEXT(0, 0, 256, 0, 0, enemiesPal);
+  
+  // free some memory
+  setLength(hitPal, 0);
+
+  // Load our Enemies texture
+  // We used glLoadSpriteSet since the texture was made
+  // with my texture packer.
+  EnemiesTextureID := glLoadSpriteSet(
+              Enemies,             // pointer to glImage array
+              ENEMIES_NUM_IMAGES,   // Texture packer auto-generated #define
+              @enemies_texcoords,   // Texture packer auto-generated array
+              GL_RGB256,            // texture type for glTexImage2D() in videoGL.h 
+              TEXTURE_SIZE_256,     // sizeX for glTexImage2D() in videoGL.h
+              TEXTURE_SIZE_256,     // sizeY for glTexImage2D() in videoGL.h
+              GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or 
+                GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+              256,                  // Length of the palette to use (256 colors)
+              @enemiesPal,          // Load our 256 color enemies palette
+              @enemiesBitmap        // image data generated by GRIT
+            );
+  
+  // Load our Zero texture
+  // We used glLoadSpriteSet since the texture was made
+  // with my texture packer.
+  // No need for another palette since enemies and zero
+  // share the same palette.
+  ZeroTextureID := glLoadSpriteSet(
+              Zero,              // pointer to glImage array
+              ZERO_NUM_IMAGES,    // Texture packer auto-generated #define
+              @zero_texcoords,    // Texture packer auto-generated array
+              GL_RGB256,          // texture type for glTexImage2D() in videoGL.h 
+              TEXTURE_SIZE_128,   // sizeX for glTexImage2D() in videoGL.h
+              TEXTURE_SIZE_256,   // sizeY for glTexImage2D() in videoGL.h
+              GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or 
+                GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+              256,                // Length of the palette to use (256 colors)
+              @enemiesPal,        // Zero and Enemies share the same palette
+              @zeroBitmap         // image data generated by GRIT
+            );
+  
+  
+  // Our texture handle for our tiles
+  // I used glLoadTileSet since the texture 
+  // is just a bunch of 16x16 tiles in a 256x256
+  // tileset so we don't need a texture packer for this.
+  TilesTextureID := glLoadTileSet(
+              Tiles,           // pointer to glImage array
+              16,               // sprite width
+              16,               // sprite height
+              256,              // bitmap width
+              256,              // bitmap height
+              GL_RGB256,        // texture type for glTexImage2D() in videoGL.h 
+              TEXTURE_SIZE_256, // sizeX for glTexImage2D() in videoGL.h
+              TEXTURE_SIZE_256, // sizeY for glTexImage2D() in videoGL.h
+              GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or 
+                GL_TEXTURE_COLOR0_TRANSPARENT, // param for glTexImage2D() in videoGL.h
+              256,              // Length of the palette to use (256 colors)
+              @tilesPal,        // Load our 256 color tiles palette
+              @tilesBitmap      // image data generated by GRIT
+            );
+  
+  
+  
+  // Shuttle
+  // Since the shuttle is just a single 64x64 image,
+  // We use glLoadTileSet() giving the right dimensions.
+  ShuttleTextureID := glLoadTileSet(
+              Shuttle,         // pointer to glImage array
+              64,               // sprite width
+              64,               // sprite height
+              64,               // bitmap image width
+              64,               // bitmap image height
+              GL_RGB16,         // texture type for glTexImage2D() in videoGL.h
+              TEXTURE_SIZE_64,  // sizeX for glTexImage2D() in videoGL.h
+              TEXTURE_SIZE_64,  // sizeY for glTexImage2D() in videoGL.h
+              GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF or 
+                GL_TEXTURE_COLOR0_TRANSPARENT,
+              16,               // Length of the palette to use (16 colors)
+              @shuttlePal,      // Load our 256 color tiles palette
+              @shuttleBitmap    // image data generated by GRIT
+            );
+
+  
+
+  // Anya
+  // This is a 16 bit image
+  AnyaTextureID := glLoadTileSet(
+              Anya,
+              128,
+              128,
+              128,
+              128,
+              GL_RGB,
+              TEXTURE_SIZE_128,
+              TEXTURE_SIZE_128,
+              GL_TEXTURE_WRAP_S or GL_TEXTURE_WRAP_T or TEXGEN_OFF,
+              0,   // Just use 0 if palette is not in use
+              nil,   // Just use nil if palette is not in use
+              @anyaBitmap
+            );
+
+  // Print some console stuff
+
+  // Top
+  consoleSelect(@topScreen);
+  iprintf(#10#10#10#10#9'WOOT!'#10);
+  iprintf(#9'TOPSCREEN 3D+TEXT'#10);
+    
+  
+  // Bottom
+  consoleSelect(@bottomScreen);
+  iprintf(#$1b'[1;1HEasy GL2D Sprites Demo');
+  iprintf(#$1b'[2;1HRelminator');
+  iprintf(#$1b'[4;1HHttp://Rel.Phatcode.Net');
+  
+  iprintf(#$1b'[6;1HA demo showing some sprite');
+  iprintf(#$1b'[7;1Hcapabilities of Easy GL2D');
+  
+  iprintf(#$1b'[ 9;1HSprites by:');
+  iprintf(#$1b'[10;1HAdigun A. Polack, Patater,');
+  iprintf(#$1b'[11;1HCapcom and Anya Therese Lope');
+  
+  iprintf(#$1b'[13;1HTextureIDs = %i, %i, %i, %i, %i', 
+        EnemiesTextureID,
+        ZeroTextureID,
+        TilesTextureID,
+        ShuttleTextureID,
+        AnyaTextureID );
+  
+  
+  // calculate the amount of 
+  // memory uploaded to VRAM in KB
+  TextureSize := enemiesBitmapLen + zeroBitmapLen + tilesBitmapLen + shuttleBitmapLen + anyaBitmapLen;
+            
+            
+  iprintf(#$1b'[15;1HTotal Texture size= %i kb', TextureSize div 1024);
+  
+  
+  iprintf(#$1b'[17;1HEnemies use a 256 color pal');
+  iprintf(#$1b'[18;1HZero uses a 256 color pal');
+  iprintf(#$1b'[19;1HTiles use a 256 color pal');
+  iprintf(#$1b'[20;1HShuttle uses a 16 color pal');
+  iprintf(#$1b'[21;1HAnya is a 16 bit image');
+  
+  
+  // some variables for our demo
+  Frame := 0;       // just the standard frame counter
+  PhoenixFrame := 0;    // animation frame for our firebird
+  BeeFrame := 0;      // animation frame for the bee
+  ZeroFrame := 0;     // animation frame for zero
+  Rotation := 0;      // rotation value of the rotating sprites
+  
+  
+  while true do 
+  begin
+    inc(Frame);
+    
+    Rotation := Frame * 240;    // speed up our rotation
+    
+    // animate some of our animated sprites
+    // every 8th frame
+    if (Frame and 7) = 0 then
+    begin
+      BeeFrame := (BeeFrame + 1) and 1;
+      inc(PhoenixFrame);
+      if (PhoenixFrame > 2) then 
+        PhoenixFrame := 0;
+      
+    end;
+
+    // Faster zero animation
+    if (Frame and 3) = 0 then
+    begin
+      inc(ZeroFrame);
+      if (ZeroFrame > 9) then 
+        ZeroFrame := 0;
+    end;
+    
+    
+    // calculate positions for our rotating sprites
+    x := 128 + SarLongInt((cosLerp(Frame) + sinLerp(BRAD_PI + Rotation) * 100), 12);
+    y := 96 + SarLongInt((cosLerp(Frame) + cosLerp(-Rotation) * 80), 12);
+      
+    
+    
+    // Start 2D mode
+    glBegin2D();
+
+      // Set our palette to our tiles (256 colors)
+      // and draw our background
+      DrawBG(@Tiles);
+      
+      // Make the Anya's rotoscaled sprite translucent just for kicks
+      // Use glSpriteRotateScaleXY() for some effect
+      // Give it a polygon ID so that transluceny would work
+      glPolyFmt(POLY_ALPHA(20) or POLY_CULL_NONE or POLY_ID(1));
+      glSpriteRotateScaleXY(SCREEN_WIDTH div 2, SCREEN_HEIGHT div 2, 
+          Frame * 140, sinLerp(Frame * 120) * 3, sinLerp(Frame * 210) * 2, 
+          GL_FLIP_NONE, 
+          @Anya);
+      
+      
+      // Draw our enemies
+      // draw some rotated and/or animated sprites
+      // Give  the other sprites different polygon IDs
+      // so that translucency works
+      glPolyFmt(POLY_ALPHA(20) or POLY_CULL_NONE or POLY_ID(2));
+      glSpriteRotate(      x,       y,      Rotation,           GL_FLIP_NONE, @Enemies[30 + BeeFrame]);
+      glSpriteRotate(255 - x, 191 - y,  Rotation * 4,              GL_FLIP_H, @Enemies[84]);
+      glSpriteRotate(255 - x,       y,     -Rotation,              GL_FLIP_V, @Enemies[32]);
+      glSpriteRotate(      x, 191 - y, -Rotation * 3, GL_FLIP_H or GL_FLIP_V, @Enemies[81]);
+      
+      
+      // Some phoenix enemies on the right
+      // Note the flipmodes 
+      // Also shows how we can draw in "color mode" and shadow mode
+      glPolyFmt(POLY_ALPHA(20) or POLY_CULL_NONE or POLY_ID(3));
+      glSprite(200,  0, GL_FLIP_NONE, @Enemies[87 + PhoenixFrame]);
+      glColor(RGB15(31, 0, 0));
+      glSprite(200, 30,    GL_FLIP_H, @Enemies[87 + PhoenixFrame]);
+      
+      // Make the last two sprites translucent
+      glPolyFmt(POLY_ALPHA(20) or POLY_CULL_NONE or POLY_ID(4));
+      glColor(RGB15(0, 31, 20) );
+      glSprite(200, 60, GL_FLIP_V,              @Enemies[87 + PhoenixFrame]);
+      glColor(RGB15(0, 0, 0));
+      glSprite(200, 90, GL_FLIP_V or GL_FLIP_H, @Enemies[87 + PhoenixFrame]);
+      
+      //Restore color and translucency to normal 
+      glColor(RGB15(31, 31, 31));
+      glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE or POLY_ID(5));
+      
+      
+      // "Clean Stretch" the sprite
+      // Useful for lasers and some effects
+      glSpriteStretchHorizontal(0, 135, 64 + (abs(sinLerp(Frame * 100) * 200) shr 12), @Shuttle);
+      
+      
+      // USING DIFFERENT PALETTES
+      // Set the active texture to Zero
+      // and use our special all white palette
+      glSetActiveTexture(ZeroTextureID);
+      glAssignColorTable(0, PaletteID);
+      
+      // Zero Sprite is drawn all white
+      glSprite(0, 42 * 0, GL_FLIP_NONE, @Zero[ZeroFrame]);
+
+      // Draw a horizontally  flipped "disco" zero
+      // Disco fx is done with glColor
+      color := (Frame * 4) and 31;
+      glColor(RGB15(color, 31 - color, 16 + color * 2));
+      glSprite(0, 42 * 1, GL_FLIP_H, @Zero[ZeroFrame]);
+      
+      // Restore our palette
+      glAssignColorTable(0, OriginalPaletteID);
+      
+      // restore pal to enemies
+      glColor(RGB15(31 - color, 16 + color * 2, color));
+      glSprite(0, 42 * 2, GL_FLIP_V, @Zero[ZeroFrame]);
+
+      
+      // Normalize color
+      glColor(RGB15(31, 31, 31));
+      glSprite(0, 42 * 3, GL_FLIP_V or GL_FLIP_H, @Zero[ZeroFrame]);
+
+    glEnd2D();
+
+    glFlush(0);
+
+    swiWaitForVBlank();
+  
+    
+  end;
+
+end.

+ 117 - 0
packages/libndsfpc/examples/gl2d/sprites/uvcoord_enemies.pas

@@ -0,0 +1,117 @@
+unit uvcoord_enemies;
+
+interface
+
+uses
+  ctypes;
+
+const
+  ENEMIES_BITMAP_WIDTH = 256;
+  ENEMIES_BITMAP_HEIGHT = 256;
+  ENEMIES_NUM_IMAGES = 100;
+  enemies_texcoords: array [1..ENEMIES_NUM_IMAGES * 4] of cuint = (
+    144, 136, 20, 20,				// 0
+    164, 136, 20, 20,				// 1
+    184, 136, 20, 20,				// 2
+    204, 136, 20, 20,				// 3
+    124, 216, 20, 20,				// 4
+    124, 236, 20, 20,				// 5
+    64, 40, 60, 20,				// 6
+    64, 64, 60, 20,				// 7
+    124, 64, 60, 20,				// 8
+    184, 64, 60, 20,				// 9
+    228, 84, 20, 20,				// 10
+    104, 116, 20, 20,				// 11
+    104, 136, 20, 20,				// 12
+    124, 156, 20, 20,				// 13
+    124, 176, 20, 20,				// 14
+    124, 196, 20, 20,				// 15
+    64, 84, 40, 30,				// 16
+    64, 114, 40, 30,				// 17
+    64, 144, 40, 30,				// 18
+    64, 174, 40, 30,				// 19
+    64, 204, 40, 30,				// 20
+    0, 224, 40, 30,				// 21
+    124, 40, 20, 20,				// 22
+    228, 0, 20, 20,				// 23
+    228, 20, 20, 20,				// 24
+    228, 40, 20, 20,				// 25
+    40, 224, 20, 20,				// 26
+    168, 84, 20, 20,				// 27
+    188, 84, 20, 20,				// 28
+    208, 84, 20, 20,				// 29
+    154, 0, 44, 56,				// 30
+    198, 0, 30, 56,				// 31
+    64, 0, 90, 40,				// 32
+    104, 156, 20, 20,				// 33
+    104, 176, 20, 20,				// 34
+    104, 196, 20, 20,				// 35
+    104, 216, 20, 20,				// 36
+    104, 236, 20, 20,				// 37
+    124, 116, 20, 20,				// 38
+    144, 116, 20, 20,				// 39
+    164, 116, 20, 20,				// 40
+    184, 116, 20, 20,				// 41
+    204, 116, 20, 20,				// 42
+    224, 116, 20, 20,				// 43
+    124, 136, 20, 20,				// 44
+    208, 172, 16, 16,				// 45
+    224, 172, 16, 16,				// 46
+    240, 172, 16, 16,				// 47
+    176, 188, 16, 16,				// 48
+    176, 204, 16, 16,				// 49
+    176, 220, 16, 16,				// 50
+    176, 236, 16, 16,				// 51
+    192, 188, 16, 16,				// 52
+    208, 188, 16, 16,				// 53
+    48, 128, 16, 16,				// 54
+    48, 144, 16, 16,				// 55
+    48, 160, 16, 16,				// 56
+    48, 176, 16, 16,				// 57
+    48, 192, 16, 16,				// 58
+    48, 208, 16, 16,				// 59
+    224, 136, 16, 16,				// 60
+    240, 136, 16, 16,				// 61
+    144, 156, 16, 16,				// 62
+    144, 172, 16, 16,				// 63
+    144, 188, 16, 16,				// 64
+    144, 204, 16, 16,				// 65
+    144, 220, 16, 16,				// 66
+    144, 236, 16, 16,				// 67
+    160, 156, 16, 16,				// 68
+    176, 156, 16, 16,				// 69
+    192, 156, 16, 16,				// 70
+    208, 156, 16, 16,				// 71
+    224, 156, 16, 16,				// 72
+    240, 156, 16, 16,				// 73
+    160, 172, 16, 16,				// 74
+    160, 188, 16, 16,				// 75
+    160, 204, 16, 16,				// 76
+    160, 220, 16, 16,				// 77
+    160, 236, 16, 16,				// 78
+    176, 172, 16, 16,				// 79
+    192, 172, 16, 16,				// 80
+    0, 0, 64, 64,				// 81
+    0, 64, 64, 32,				// 82
+    0, 96, 64, 32,				// 83
+    104, 84, 32, 32,				// 84
+    136, 84, 32, 24,				// 85
+    64, 234, 32, 22,				// 86
+    0, 128, 48, 32,				// 87
+    0, 160, 48, 32,				// 88
+    0, 192, 48, 32,				// 89
+    224, 188, 16, 16,				// 90
+    240, 188, 16, 16,				// 91
+    192, 204, 16, 16,				// 92
+    192, 220, 16, 16,				// 93
+    192, 236, 16, 16,				// 94
+    208, 204, 16, 16,				// 95
+    224, 204, 16, 16,				// 96
+    240, 204, 16, 16,				// 97
+    208, 220, 16, 16,				// 98
+    208, 236, 16, 16				// 99
+  );
+
+implementation
+
+end.

+ 31 - 0
packages/libndsfpc/examples/gl2d/sprites/uvcoord_zero.pas

@@ -0,0 +1,31 @@
+unit uvcoord_zero;
+
+interface
+
+uses
+  ctypes;
+
+
+const
+  ZERO_BITMAP_WIDTH = 128;
+  ZERO_BITMAP_HEIGHT = 256;
+  ZERO_NUM_IMAGES = 10;
+
+
+var
+  zero_texcoords: array [1..ZERO_NUM_IMAGES * 4] of cuint = (
+    0, 0, 52, 46,				// 0
+    52, 0, 52, 46,				// 1
+    0, 46, 52, 46,				// 2
+    52, 46, 52, 46,				// 3
+    0, 92, 52, 46,				// 4
+    52, 92, 52, 46,				// 5
+    0, 138, 52, 46,				// 6
+    0, 184, 52, 46,				// 7
+    52, 138, 52, 46,				// 8
+    52, 184, 52, 46				// 9
+  );
+
+implementation
+
+end.

+ 952 - 0
packages/libndsfpc/src/gl2d/gl2d.pp

@@ -0,0 +1,952 @@
+(*
+  Easy GL2D
+  Relminator 2011 
+  Richard Eric M. Lope BSN RN
+  Http://Rel.Phatcode.Net
+  A very small, simple, yet very fast DS 2D rendering lib using the DS' 3D core.
+  --
+  Translated in Object Pascal by Francesco Lombardi - 2012
+  http://itaprogaming.free.fr
+*)
+
+
+unit gl2d;
+
+{$mode objfpc}
+{$H+}
+
+interface
+
+uses
+  ctypes, nds9;
+
+type
+  GL_FLIP_MODE = cint;
+
+const
+  GL_FLIP_NONE = 1 shl 0;
+  GL_FLIP_V = 1 shl 1;
+  GL_FLIP_H = 1 shl 2;
+
+
+type
+  glImage = record
+    Width: cint;
+    Height: cint;
+    u_off: cint;
+    v_off: cint;
+    textureID: cint;
+  end;
+  TGLImage = glImage;
+  PGLImage = ^glImage;
+
+
+procedure glScreen2D();
+procedure glBegin2D();
+procedure glEnd2D();
+function glGetActiveTexture(): cint; inline;
+procedure glSetActiveTexture(TextureID: cint); inline;
+procedure glPutPixel(x, y, color: cint);
+procedure glLine(x1, y1, x2, y2, color: cint);
+procedure glBox(x1, y1, x2, y2, color: cint);
+procedure glBoxFilled(x1, y1, x2, y2, color: cint);
+procedure glBoxFilledGradient(x1, y1, x2, y2, color1, color2, color3, color4: cint);
+procedure glTriangle(x1, y1, x2, y2, x3, y3, color: cint);
+procedure glTriangleFilled(x1, y1, x2, y2, x3, y3, color: cint);
+procedure glTriangleFilledGradient(x1, y1, x2, y2, x3, y3, color1, color2, color3: cint);      
+procedure glSprite(x, y, flipmode: cint; const spr: PglImage);
+procedure glSpriteScale(x, y: cint; scale: cint32; flipmode: cint; const spr: PglImage);
+procedure glSpriteScaleXY(x, y: cint; scaleX, scaleY: cint32; flipmode: cint; const spr: PglImage);
+procedure glSpriteRotate(x, y: cint; angle: cint32; flipmode: cint; const spr: PglImage);
+procedure glSpriteRotateScale(x, y: cint; angle, scale: cint32; flipmode: cint; const spr: PglImage);
+procedure glSpriteRotateScaleXY(x, y: cint; angle, scaleX, scaleY: cint32; flipmode: cint; const spr: PglImage);
+procedure glSpriteStretchHorizontal(x, y, length_x: cint; const spr: PglImage);
+procedure glSpriteOnQuad(x1, y1, x2, y2, x3, y3, x4, y4, uoff, voff, flipmode: cint;
+  const spr: PGLImage);
+function glLoadSpriteSet(sprite: PGLImage; const numframes: cuint;
+  const texcoords: pcuint; type_: GL_TEXTURE_TYPE_ENUM; sizeX, sizeY, param: cint;
+  palette_width: cint; const palette: pcuint16;
+  const texture: pcuint8): cint;
+function glLoadTileSet(sprite: PGLImage; tile_wid, tile_hei, bmp_wid, bmp_hei: cint;
+  type_: GL_TEXTURE_TYPE_ENUM; sizeX, sizeY, param: cint; 
+  palette_width: cint; const palette: pcuint16;
+  const texture: pcuint8): cint;
+
+
+implementation
+
+procedure gxVertex3i(x, y, z: v16); inline;
+begin
+	GFX_VERTEX16^ := cuint32((y shl 16) or (x and $FFFF));
+	GFX_VERTEX16^ := z;
+end;
+
+procedure gxVertex2i(x, y: v16); inline;
+begin
+  GFX_VERTEX_XY^ := cuint32((y shl 16) or (x and $FFFF));
+end;
+
+procedure gxTexcoord2i(u, v: t16); inline;
+begin
+  GFX_TEX_COORD^ := (v shl 20) or ((u shl 4) and $FFFF);
+end;
+
+procedure gxScalef32(x, y, z: s32); inline;
+begin
+  MATRIX_SCALE^ := x;
+  MATRIX_SCALE^ := y;
+  MATRIX_SCALE^ := z;
+end;
+
+procedure gxTranslate3f32(x, y, z: cint32); inline;
+begin
+  MATRIX_TRANSLATE^ := x;
+  MATRIX_TRANSLATE^ := y;
+  MATRIX_TRANSLATE^ := z;
+end;
+
+
+const
+  g_depth: v16 = 0;
+var
+  gCurrentTexture: cint = 0;
+
+procedure SetOrtho();
+begin
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  glOrthof32(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1 shl 12, 1 shl 12);
+end;
+
+procedure glScreen2D();
+begin
+
+  // initialize gl
+  glInit();
+
+  //enable textures
+  glEnable(GL_TEXTURE_2D);
+
+  // enable antialiasing
+  glEnable(GL_ANTIALIAS);
+
+  // setup the rear plane
+  glClearColor(0, 0, 0, 31); // BG must be opaque for AA to work
+  glClearPolyID(63); // BG must have a unique polygon ID for AA to work
+
+  glClearDepth(GL_MAX_DEPTH);
+
+  //this should work the same as the normal gl call
+  glViewport(0, 0, 255, 191);
+
+
+  //any floating point gl call is being converted to fixed prior to being implemented
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  gluPerspective(70, 256.0 / 192.0, 1, 200);
+
+  gluLookAt(0.0, 0.0, 1.0,    //camera possition
+    0.0, 0.0, 0.0,    //look at
+    0.0, 1.0, 0.0);    //up
+
+  glMaterialf(GL_AMBIENT, RGB15(31, 31, 31));
+  glMaterialf(GL_DIFFUSE, RGB15(31, 31, 31));
+  glMaterialf(GL_SPECULAR, BIT(15) or RGB15(31, 31, 31));
+  glMaterialf(GL_EMISSION, RGB15(31, 31, 31));
+
+  //ds uses a table for shinyness..this generates a half-ass one
+  glMaterialShinyness();
+
+  //not a real gl function and will likely change
+  glPolyFmt(POLY_ALPHA(31) or POLY_CULL_BACK);
+
+end;
+
+
+
+procedure glBegin2D();
+begin
+
+  // save 3d perpective projection matrix
+  glMatrixMode(GL_PROJECTION);
+  glPushMatrix();
+
+  // save 3d modelview matrix for safety
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+
+
+  //what?!! No glDisable(GL_DEPTH_TEST)?!!!!!!
+  glEnable(GL_BLEND);
+  glEnable(GL_TEXTURE_2D);
+  glDisable(GL_ANTIALIAS);    // disable AA
+  glDisable(GL_OUTLINE);      // disable edge-marking
+
+  glColor($7FFF);         // max color
+
+  glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE);  // no culling
+
+  SetOrtho();
+
+  glMatrixMode(GL_TEXTURE);
+  // reset texture matrix just in case we did some funky stuff with it
+  glLoadIdentity();
+
+  glMatrixMode(GL_MODELVIEW);    // reset modelview matrix. No need to scale up by << 12
+  glLoadIdentity();
+
+  gCurrentTexture := 0; // set current texture to 0
+  g_depth := 0;   // set depth to 0. We need this var since we cannot disable depth testing
+
+end;
+
+
+procedure glEnd2D();
+begin
+
+  // restore 3d matrices and set current matrix to modelview
+  glMatrixMode(GL_PROJECTION);
+  glPopMatrix(1);
+  glMatrixMode(GL_MODELVIEW);
+  glPopMatrix(1);
+end;
+
+function glGetActiveTexture(): cint; inline;
+begin
+	result := gCurrentTexture;
+end;
+
+procedure glSetActiveTexture(TextureID: cint); inline;
+begin
+	glBindTexture(0, TextureID);
+	gCurrentTexture := TextureID;
+end;
+
+
+procedure glPutPixel(x, y, color: cint);
+begin
+  glBindTexture(0, 0);
+  glColor(color);
+  glBegin(GL_TRIANGLES);
+    gxVertex3i(x, y, g_depth);
+    gxVertex2i(x, y);
+    gxVertex2i(x, y);
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+end;
+
+
+procedure glLine(x1, y1, x2, y2, color: cint);
+begin
+  inc(x2);
+  inc(y2);
+  glBindTexture(0, 0);
+  glColor(color);
+  glBegin(GL_TRIANGLES);
+    gxVertex3i(x1, y1, g_depth);
+    gxVertex2i(x2, y2);
+    gxVertex2i(x2, y2);
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+end;
+
+procedure glBox(x1, y1, x2, y2, color: cint);
+begin
+  inc(x2);
+  inc(y2);
+  glBindTexture(0, 0);
+  glColor(color);
+  glBegin(GL_TRIANGLES);
+
+  gxVertex3i(x1, y1, g_depth);
+  gxVertex2i(x2, y1);
+  gxVertex2i(x2, y1);
+
+  gxVertex2i(x2, y1);
+  gxVertex2i(x2, y2);
+  gxVertex2i(x2, y2);
+  Inc(x2);
+  gxVertex2i(x2, y2);  // bug fix for lower-right corner disappearing pixel
+  gxVertex2i(x1, y2);
+  gxVertex2i(x1, y2);
+
+  gxVertex2i(x1, y2);
+  gxVertex2i(x1, y1);
+  gxVertex2i(x1, y1);
+
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+
+end;
+
+procedure glBoxFilled(x1, y1, x2, y2, color: cint);
+begin
+  inc(x2);
+  inc(y2);
+  glBindTexture(0, 0);
+  glColor(color);
+  glBegin(GL_QUADS);
+  gxVertex3i(x1, y1, g_depth);
+  // use 3i for first vertex so that we increment HW depth
+  gxVertex2i(x1, y2);        // no need for 3 vertices as 2i would share last depth call
+  gxVertex2i(x2, y2);
+  gxVertex2i(x2, y1);
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+
+end;
+
+
+procedure glBoxFilledGradient(x1, y1, x2, y2, color1, color2,
+  color3, color4: cint);
+begin
+  inc(x2);
+  inc(y2);
+  glBindTexture(0, 0);
+  glBegin(GL_QUADS);
+  glColor(color1);
+  gxVertex3i(x1, y1, g_depth);    // use 3i for first vertex so that we increment HW depth
+  glColor(color2);
+  gxVertex2i(x1, y2);        // no need for 3 vertices as 2i would share last depth call
+  glColor(color3);
+  gxVertex2i(x2, y2);
+  glColor(color4);
+  gxVertex2i(x2, y1);
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+
+end;
+
+
+procedure glTriangle(x1, y1, x2, y2, x3, y3, color: cint);
+begin
+
+  glBindTexture(0, 0);
+  glColor(color);
+  glBegin(GL_TRIANGLES);
+
+  gxVertex3i(x1, y1, g_depth);
+  gxVertex2i(x2, y2);
+  gxVertex2i(x2, y2);
+
+  gxVertex2i(x2, y2);
+  gxVertex2i(x3, y3);
+  gxVertex2i(x3, y3);
+
+  gxVertex2i(x3, y3);
+  gxVertex2i(x1, y1);
+  gxVertex2i(x1, y1);
+
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+
+end;
+
+procedure glTriangleFilled(x1, y1, x2, y2, x3, y3, color: cint);
+begin
+
+  glBindTexture(0, 0);
+  glColor(color);
+  glBegin(GL_TRIANGLES);
+  gxVertex3i(x1, y1, g_depth);
+  // use 3i for first vertex so that we increment HW depth
+  gxVertex2i(x2, y2);        // no need for 3 vertices as 2i would share last depth call
+  gxVertex2i(x3, y3);
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+
+end;
+
+procedure glTriangleFilledGradient(
+  x1, y1, x2, y2, x3, y3, color1, color2, color3: cint);
+begin
+
+  glBindTexture(0, 0);
+  glBegin(GL_TRIANGLES);
+  glColor(color1);
+  gxVertex3i(x1, y1, g_depth);    // use 3i for first vertex so that we increment HW depth
+  glColor(color2);
+  gxVertex2i(x2, y2);        // no need for 3 vertices as 2i would share last depth call
+  glColor(color3);
+  gxVertex2i(x3, y3);
+  glEnd();
+  glColor($7FFF);
+  Inc(g_depth);
+  gCurrentTexture := 0;
+
+end;
+
+procedure glSprite(x, y, flipmode: cint; const spr: PGLImage);
+var
+  x1, y1, x2, y2: cint;
+  u1, u2, v1, v2: cint;
+begin
+  x1 := x;
+  y1 := y;
+  x2 := x + spr^.Width;
+  y2 := y + spr^.Height;
+  
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+    
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width;
+  
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+  
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height;
+
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glBegin(GL_QUADS);
+
+    gxTexcoord2i(u1, v1); gxVertex3i(x1, y1, g_depth);
+    gxTexcoord2i(u1, v2); gxVertex2i(x1, y2);
+    gxTexcoord2i(u2, v2); gxVertex2i(x2, y2);
+    gxTexcoord2i(u2, v1); gxVertex2i(x2, y1);
+
+  glEnd();
+
+  Inc(g_depth);
+
+end;
+
+procedure glSpriteScale(x, y: cint; scale: cint32; flipmode: cint;
+  const spr: pglImage);
+var
+  x1, y1, x2, y2: cint;
+  u1, u2, v1, v2: cint;
+begin
+  x1 := 0;
+  y1 := 0;
+  x2 := spr^.Width;
+  y2 := spr^.Height;
+                        
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+    
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width - 1;
+  
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+  
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height - 1;
+
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glPushMatrix();
+
+  gxTranslate3f32(x, y, 0);
+  gxScalef32(scale, scale, 1 shl 12);
+
+  glBegin(GL_QUADS);
+
+    gxTexcoord2i(u1, v1); gxVertex3i(x1, y1, g_depth);
+    gxTexcoord2i(u1, v2); gxVertex2i(x1, y2);
+    gxTexcoord2i(u2, v2); gxVertex2i(x2, y2);
+    gxTexcoord2i(u2, v1); gxVertex2i(x2, y1);
+
+  glEnd();
+
+  glPopMatrix(1);
+  Inc(g_depth);
+
+end;
+
+
+
+procedure glSpriteScaleXY(x, y: cint; scaleX, scaleY: cint32;
+  flipmode: cint; const spr: pglImage);
+var
+  x1, y1, x2, y2: cint;
+  u1, u2, v1, v2: cint;
+begin
+  x1 := 0;
+  y1 := 0;
+  x2 := spr^.Width;
+  y2 := spr^.Height;
+
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+    
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width - 1;
+  
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+  
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height - 1;
+
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glPushMatrix();
+
+  gxTranslate3f32(x, y, 0);
+  gxScalef32(scaleX, scaleY, 1 shl 12);
+
+  glBegin(GL_QUADS);
+
+    gxTexcoord2i(u1, v1); gxVertex3i(x1, y1, g_depth);
+    gxTexcoord2i(u1, v2); gxVertex2i(x1, y2);
+    gxTexcoord2i(u2, v2); gxVertex2i(x2, y2);
+    gxTexcoord2i(u2, v1); gxVertex2i(x2, y1);
+
+  glEnd();
+
+  glPopMatrix(1);
+  Inc(g_depth);
+
+end;
+
+procedure glSpriteRotate(x, y: cint; angle: cint32; flipmode: cint;
+  const spr: pglImage);
+var
+  s_half_x, s_half_y: cint;
+  x1, y1, x2, y2: cint;
+  u1, u2, v1, v2: cint;
+begin
+	s_half_x := ((spr^.width) + (spr^.width and 1)) div 2;
+	s_half_y := ((spr^.height) + (spr^.height and 1)) div 2;
+
+  x1 := -s_half_x;
+  y1 := -s_half_y;
+
+  x2 := s_half_x;
+  y2 := s_half_y;
+
+
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width - 1;
+
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height - 1;
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glPushMatrix();
+
+  gxTranslate3f32(x, y, 0);
+  glRotateZi(angle);
+
+
+  glBegin(GL_QUADS);
+
+    gxTexcoord2i(u1, v1); gxVertex3i(x1, y1, g_depth);
+    gxTexcoord2i(u1, v2); gxVertex2i(x1, y2);
+    gxTexcoord2i(u2, v2); gxVertex2i(x2, y2);
+    gxTexcoord2i(u2, v1); gxVertex2i(x2, y1);
+
+  glEnd();
+
+  glPopMatrix(1);
+
+  Inc(g_depth);
+
+end;
+
+
+procedure glSpriteRotateScale(x, y: cint; angle, scale: cint32;
+  flipmode: cint; const spr: pglImage);
+var
+  s_half_x, s_half_y: cint;
+  x1, y1, x2, y2: cint;
+  u1, u2, v1, v2: cint;
+begin
+	s_half_x := ((spr^.width) + (spr^.width and 1)) div 2;
+	s_half_y := ((spr^.height) + (spr^.height and 1)) div 2;
+
+  x1 := -s_half_x;
+  y1 := -s_half_y;
+
+  x2 := s_half_x;
+  y2 := s_half_y;
+
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width - 1;
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height - 1;
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glPushMatrix();
+
+  gxTranslate3f32(x, y, 0);
+  gxScalef32(scale, scale, 1 shl 12);
+  glRotateZi(angle);
+
+
+  glBegin(GL_QUADS);
+
+  gxTexcoord2i(u1, v1);
+  gxVertex3i(x1, y1, g_depth);
+  gxTexcoord2i(u1, v2);
+  gxVertex2i(x1, y2);
+  gxTexcoord2i(u2, v2);
+  gxVertex2i(x2, y2);
+  gxTexcoord2i(u2, v1);
+  gxVertex2i(x2, y1);
+
+  glEnd();
+
+  glPopMatrix(1);
+
+  Inc(g_depth);
+
+end;
+
+
+
+procedure glSpriteRotateScaleXY(x, y: cint; angle, scaleX, scaleY: cint32;
+  flipmode: cint; const spr: pglImage);
+var
+  s_half_x, s_half_y: cint;
+  x1, y1, x2, y2: cint;
+  u1, u2, v1, v2: cint;
+begin
+	s_half_x := ((spr^.width) + (spr^.width and 1)) div 2;
+	s_half_y := ((spr^.height) + (spr^.height and 1)) div 2;
+
+  x1 := -s_half_x;
+  y1 := -s_half_y;
+
+  x2 := s_half_x;
+  y2 := s_half_y;
+
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width - 1;
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height - 1;
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glPushMatrix();
+
+  gxTranslate3f32(x, y, 0);
+  gxScalef32(scaleX, scaleY, 1 shl 12);
+  glRotateZi(angle);
+
+
+  glBegin(GL_QUADS);
+
+  gxTexcoord2i(u1, v1);
+  gxVertex3i(x1, y1, g_depth);
+  gxTexcoord2i(u1, v2);
+  gxVertex2i(x1, y2);
+  gxTexcoord2i(u2, v2);
+  gxVertex2i(x2, y2);
+  gxTexcoord2i(u2, v1);
+  gxVertex2i(x2, y1);
+
+  glEnd();
+
+  glPopMatrix(1);
+
+  Inc(g_depth);
+
+end;
+
+
+procedure glSpriteStretchHorizontal(x, y, length_x: cint; const spr: pglImage);
+var
+  x1, y1, x2, y2: cint;
+  su: cint;
+  u1, u2, v1, v2: cint;
+  x2l, x1l: cint;
+begin
+  x1 := x;
+  y1 := y;
+  x2 := x + length_x;
+  y2 := y + spr^.Height;
+  su := (spr^.Width div 2) - 1;
+
+
+  u1 := spr^.u_off;
+  u2 := spr^.u_off + spr^.Width;
+  v1 := spr^.v_off;
+  v2 := spr^.v_off + spr^.Height;
+
+
+  if (spr^.textureID <> gCurrentTexture) then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  // left
+  x2l := x + su;
+  glBegin(GL_QUADS);
+
+  gxTexcoord2i(u1, v1);
+  gxVertex3i(x1, y1, g_depth);
+
+  gxTexcoord2i(u1, v2);
+  gxVertex2i(x1, y2);
+
+  gxTexcoord2i(u1 + su, v2);
+  gxVertex2i(x2l, y2);
+
+  gxTexcoord2i(u1 + su, v1);
+  gxVertex2i(x2l, y1);
+
+  glEnd();
+
+  // center
+  x1l := x + su;
+  x2l := x2 - su - 1;
+  glBegin(GL_QUADS);
+
+  gxTexcoord2i(u1 + su, v1);
+  gxVertex2i(x1l, y1);
+
+  gxTexcoord2i(u1 + su, v2);
+  gxVertex2i(x1l, y2);
+
+  gxTexcoord2i(u1 + su, v2);
+  gxVertex2i(x2l, y2);
+
+  gxTexcoord2i(u1 + su, v1);
+  gxVertex2i(x2l, y1);
+
+  glEnd();
+
+  // right
+  x1l := x2 - su - 1;
+  glBegin(GL_QUADS);
+
+  gxTexcoord2i(u1 + su, v1);
+  gxVertex2i(x1l, y1);
+
+  gxTexcoord2i(u1 + su, v2);
+  gxVertex2i(x1l, y2);
+
+  gxTexcoord2i(u2, v2);
+  gxVertex2i(x2, y2);
+
+  gxTexcoord2i(u2, v1);
+  gxVertex2i(x2, y1);
+
+  glEnd();
+
+  Inc(g_depth);
+
+end;
+
+
+procedure glSpriteOnQuad(x1, y1, x2, y2, x3, y3, x4, y4, uoff, voff, flipmode: cint;
+  const spr: PGLImage);
+var
+  u1, u2, v1, v2: cint;
+begin
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u1 := spr^.u_off + spr^.Width - 1
+  else
+    u1 := spr^.u_off;
+  if (flipmode and GL_FLIP_H) <> 0 then
+    u2 := spr^.u_off
+  else
+    u2 := spr^.u_off + spr^.Width;
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v1 := spr^.v_off + spr^.Height - 1
+  else
+    v1 := spr^.v_off;
+  if (flipmode and GL_FLIP_V) <> 0 then
+    v2 := spr^.v_off
+  else
+    v2 := spr^.v_off + spr^.Height;
+
+
+  if spr^.textureID <> gCurrentTexture then
+  begin
+    glBindTexture(GL_TEXTURE_2D, spr^.textureID);
+    gCurrentTexture := spr^.textureID;
+  end;
+
+  glBegin(GL_QUADS);
+
+  gxTexcoord2i(u1 + uoff, v1 + voff);
+  gxVertex3i(x1, y1, g_depth);
+  gxTexcoord2i(u1 + uoff, v2 + voff);
+  gxVertex2i(x2, y2);
+  gxTexcoord2i(u2 + uoff, v2 + voff);
+  gxVertex2i(x3, y3);
+  gxTexcoord2i(u2 + uoff, v1 + voff);
+  gxVertex2i(x4, y4);
+
+  glEnd();
+
+  Inc(g_depth);
+
+end;
+
+
+function glLoadSpriteSet(sprite: PGLImage; const numframes: cuint;
+  const texcoords: pcuint; type_: GL_TEXTURE_TYPE_ENUM; sizeX, sizeY, param: cint;
+  palette_width: cint; const palette: pcuint16;
+  const texture: pcuint8): cint;
+var
+  textureID: cint;
+  i, j: cint;
+begin
+  glGenTextures(1, @textureID);
+  glBindTexture(0, textureID);
+  glTexImage2D(0, 0, type_, sizeX, sizeY, 0, param, texture);
+	glColorTableEXT(0, 0, palette_width, 0, 0, palette);
+
+
+  // init sprites texture coords and texture ID
+  for i := 0 to numframes - 1 do
+  begin
+    j := i * 4; // texcoords array is u_off, wid, hei
+    sprite[i].textureID := textureID;
+    sprite[i].u_off := texcoords[j];      // set x-coord
+    sprite[i].v_off := texcoords[j + 1];  // y-coord
+    sprite[i].Width := texcoords[j + 2];  // don't decrease because NDS 3d core does not draw last vertical texel
+    sprite[i].Height := texcoords[j + 3]; // ditto
+  end;
+
+  glLoadSpriteSet := textureID;
+end;
+
+
+function glLoadTileSet(sprite: PGLImage; tile_wid, tile_hei, bmp_wid, bmp_hei: cint;
+  type_: GL_TEXTURE_TYPE_ENUM; sizeX, sizeY, param: cint; 
+  palette_width: cint; const palette: pcuint16;
+  const texture: pcuint8): cint;
+var
+  textureID: cint;
+  i: cint;
+  x, y: cint;
+begin
+  glGenTextures(1, @textureID);
+  glBindTexture(0, textureID);
+  glTexImage2D(0, 0, type_, sizeX, sizeY, 0, param, texture);
+	glColorTableEXT(0, 0, palette_width, 0, 0, palette);
+
+  i := 0;
+
+  for y := 0 to (bmp_hei div tile_hei) - 1 do
+  begin
+    for x := 0 to (bmp_wid div tile_wid) - 1 do
+    begin
+      sprite[i].Width := tile_wid;
+      sprite[i].Height := tile_hei;
+      sprite[i].u_off := x * tile_wid;
+      sprite[i].v_off := y * tile_hei;
+      sprite[i].textureID := textureID;
+      Inc(i);
+    end;
+  end;
+
+  glLoadTileSet := textureID;
+end;
+
+end.
+

+ 1 - 1
packages/libndsfpc/src/nds/arm9/videoGL.inc

@@ -892,7 +892,7 @@ begin
   end;
   end;
 
 
   for i := 0 to 31 do
   for i := 0 to 31 do
-    GFX_SHININESS[i] := shiny32[i];
+    GFX_SHININESS^ := shiny32[i];
 end;
 end;
 
 
 procedure glCallList(list: pcuint32); inline;
 procedure glCallList(list: pcuint32); inline;

+ 66 - 63
rtl/gba/Makefile

@@ -302,193 +302,193 @@ endif
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas
 GRAPHDIR=$(INC)/graph
 GRAPHDIR=$(INC)/graph
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas iso7185 strings sysutils strutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil lineinfo fgl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_LOADERS+=prt0 cprt0
 override TARGET_LOADERS+=prt0 cprt0
@@ -2235,6 +2235,9 @@ types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) $(OBJPASDIR)/types.pp
 	$(COMPILER) $(OBJPASDIR)/types.pp
 rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp
 rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp
 	$(COMPILER) $(OBJPASDIR)/rtlconsts.pp
 	$(COMPILER) $(OBJPASDIR)/rtlconsts.pp
+strutils$(PPUEXT) : $(OBJPASDIR)/strutils.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
+		    sysutils$(PPUEXT)
+	$(COMPILER) $(OBJPASDIR)/strutils.pp
 sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) $(OBJPASDIR)/sysconst.pp
 	$(COMPILER) $(OBJPASDIR)/sysconst.pp
 fgl$(PPUEXT): $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT)
 fgl$(PPUEXT): $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT) sysutils$(PPUEXT)

+ 6 - 1
rtl/gba/Makefile.fpc

@@ -9,7 +9,7 @@ main=rtl
 loaders=prt0 cprt0
 loaders=prt0 cprt0
 units=$(SYSTEMUNIT) objpas macpas iso7185 strings \
 units=$(SYSTEMUNIT) objpas macpas iso7185 strings \
 #      dos \
 #      dos \
-      sysutils \
+      sysutils strutils \
       classes math typinfo varutils fmtbcd ctypes \
       classes math typinfo varutils fmtbcd ctypes \
       charset ucomplex getopts matrix \
       charset ucomplex getopts matrix \
       variants types rtlconsts sysconst dateutil lineinfo fgl \
       variants types rtlconsts sysconst dateutil lineinfo fgl \
@@ -151,6 +151,10 @@ types$(PPUEXT) : $(OBJPASDIR/types.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp
 rtlconsts$(PPUEXT) : $(OBJPASDIR)/rtlconsts.pp
         $(COMPILER) $(OBJPASDIR)/rtlconsts.pp
         $(COMPILER) $(OBJPASDIR)/rtlconsts.pp
 
 
+strutils$(PPUEXT) : $(OBJPASDIR)/strutils.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT) \
+                    sysutils$(PPUEXT)
+        $(COMPILER) $(OBJPASDIR)/strutils.pp
+
 sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 sysconst$(PPUEXT) : $(OBJPASDIR)/sysconst.pp objpas$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
         $(COMPILER) $(OBJPASDIR)/sysconst.pp
         $(COMPILER) $(OBJPASDIR)/sysconst.pp
 
 
@@ -160,6 +164,7 @@ fgl$(PPUEXT): $(OBJPASDIR)/fgl.pp objpas$(PPUEXT) types$(PPUEXT) system$(PPUEXT)
 dateutil$(PPUEXT) : $(OBJPASDIR)/dateutil.pp
 dateutil$(PPUEXT) : $(OBJPASDIR)/dateutil.pp
         $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutil.pp
         $(COMPILER) -I$(OBJPASDIR) $(OBJPASDIR)/dateutil.pp
 
 
+
 #
 #
 # Mac Pascal Model
 # Mac Pascal Model
 #
 #

+ 29 - 2
rtl/gba/sysutils.pp

@@ -5,7 +5,7 @@
 
 
     Sysutils unit for Gameboy Advance.
     Sysutils unit for Gameboy Advance.
     This unit is based on the MorphOS one and is adapted for Gameboy Advance
     This unit is based on the MorphOS one and is adapted for Gameboy Advance
-    simply by stripping out all stuff inside funcs and procs. 
+    simply by stripping out all stuff inside funcs and procs.
     Copyright (c) 2006 by Francesco Lombardi
     Copyright (c) 2006 by Francesco Lombardi
 
 
     Based on Amiga version by Carl Eric Codere, and other
     Based on Amiga version by Carl Eric Codere, and other
@@ -29,13 +29,16 @@ interface
 { force ansistrings }
 { force ansistrings }
 {$H+}
 {$H+}
 
 
+{$DEFINE HAS_SLEEP}
+{$DEFINE HAS_OSERROR}
+
 { Include platform independent interface part }
 { Include platform independent interface part }
 {$i sysutilh.inc}
 {$i sysutilh.inc}
 
 
 
 
 implementation
 implementation
 
 
-uses 
+uses
   dos, sysconst;
   dos, sysconst;
 
 
 { Include platform independent implementation part }
 { Include platform independent implementation part }
@@ -234,6 +237,30 @@ begin
 end;
 end;
 
 
 
 
+Procedure Sleep(Milliseconds : Cardinal);
+var
+  i,j : Cardinal;
+  calib : Cardinal;
+begin
+{$warning no idea if this calibration value is correct (FK) }
+{ I estimated it roughly on the CPU clock of 16 MHz and 1+3 clock cycles for the loop }
+  calib:=4000000;
+  for i:=1 to Milliseconds do
+    asm
+      ldr r0,calib
+    .L1:
+      sub r0,r0,#1
+      bne .L1
+    end;
+end;
+
+Function GetLastOSError : Integer;
+
+begin
+  Result:=-1;
+end;
+
+
 {****************************************************************************
 {****************************************************************************
                               Locale Functions
                               Locale Functions
 ****************************************************************************}
 ****************************************************************************}