aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/displays.ads5
-rw-r--r--src/misc.ads28
-rw-r--r--src/sokoban.adb12
-rw-r--r--src/squares.ads24
-rw-r--r--src/things.ads12
5 files changed, 48 insertions, 33 deletions
diff --git a/src/displays.ads b/src/displays.ads
index 22f3bed..b278b6f 100644
--- a/src/displays.ads
+++ b/src/displays.ads
@@ -7,6 +7,7 @@ with
private with
+ Ada.Directories,
FLTK.Widgets.Boxes,
FLTK.Images.RGB.PNG,
Misc;
@@ -108,8 +109,8 @@ private
end record;
- Logo : FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Misc.Origin & "/../share/sokoban/img/man.png");
+ Logo : FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "man.png"));
Text_Size : constant FLTK.Font_Size := 12;
diff --git a/src/misc.ads b/src/misc.ads
index fb99d95..ad64b46 100644
--- a/src/misc.ads
+++ b/src/misc.ads
@@ -1,22 +1,21 @@
-with
+private with
- Ada.Command_Line,
- Ada.Directories;
+ Ada.Directories,
+ Here_I_Am;
package Misc is
- Origin : constant String;
+ Origin, Image_Path, Level_Path : constant String;
function Max
(A, B : in Integer)
return Integer;
-
function Min
(A, B : in Integer)
return Integer;
@@ -25,9 +24,24 @@ package Misc is
private
- Origin : constant String := Ada.Directories.Containing_Directory
- (Ada.Directories.Full_Name (Ada.Command_Line.Command_Name));
+ package ADir renames Ada.Directories;
+
+
+ Origin : constant String := ADir.Containing_Directory (Here_I_Am.Executable);
+
+ Image_Path : constant String :=
+ ADir.Compose
+ (ADir.Compose
+ (ADir.Compose
+ (ADir.Compose (Origin, ".."), "share"), "sokoban"), "img");
+
+ Level_Path : constant String :=
+ ADir.Compose
+ (ADir.Compose
+ (ADir.Compose
+ (ADir.Compose (Origin, ".."), "share"), "sokoban"), "level");
end Misc;
+
diff --git a/src/sokoban.adb b/src/sokoban.adb
index ad17090..8b7ecdb 100644
--- a/src/sokoban.adb
+++ b/src/sokoban.adb
@@ -2,6 +2,7 @@
with
+ Ada.Directories,
FLTK.Widgets,
Displays,
Grids,
@@ -22,6 +23,11 @@ use
package body Sokoban is
+ package ADir renames Ada.Directories;
+
+
+
+
-- Forward declarations of helper functions.
procedure Add_New_Grid_Item
@@ -40,8 +46,6 @@ package body Sokoban is
type Game_State is (Loading, Play, Complete);
- Level_Dir : String := Misc.Origin & "/../share/sokoban/level";
-
Loading_Message : String := "Loading...";
Play_Message : String := "Move with the arrow keys. Press u for undo." & ASCII.LF &
@@ -84,8 +88,8 @@ package body Sokoban is
use Ada.Strings, Ada.Strings.Fixed, Ada.Strings.Maps;
Data_File : File_Type;
- Filename : String :=
- Level_Dir & "/level" & Trim (LevelID'Image (Number), Both) & ".data";
+ Filename : String := ADir.Compose
+ (Misc.Level_Path, "level" & Trim (LevelID'Image (Number), Both) & ".data");
Rows, Cols : Natural;
begin
diff --git a/src/squares.ads b/src/squares.ads
index 8ab911e..8a1f053 100644
--- a/src/squares.ads
+++ b/src/squares.ads
@@ -6,6 +6,7 @@ with
private with
+ Ada.Directories,
FLTK.Images.RGB.PNG,
Misc;
@@ -64,30 +65,27 @@ private
end record;
- Image_Dir : String := Misc.Origin & "/../share/sokoban/img";
-
-
- Wall_Image : aliased FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/wall.png");
- Space_Image : aliased FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/space.png");
- Empty_Image : aliased FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/empty.png");
- Goal_Image : aliased FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/goal.png");
+ Wall_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "wall.png"));
+ Space_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "space.png"));
+ Empty_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "empty.png"));
+ Goal_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "goal.png"));
Void : constant Square :=
(Walkable => False, Contents => Things.Nothing, Self_Image => null);
- Wall : constant Square :=
+ Wall : constant Square :=
(Walkable => False, Contents => Things.Nothing, Self_Image => Wall_Image'Access);
Space : constant Square :=
(Walkable => False, Contents => Things.Nothing, Self_Image => Space_Image'Access);
Empty : constant Square :=
(Walkable => True, Contents => Things.Nothing, Self_Image => Empty_Image'Access);
- Goal : constant Square :=
+ Goal : constant Square :=
(Walkable => True, Contents => Things.Nothing, Self_Image => Goal_Image'Access);
diff --git a/src/things.ads b/src/things.ads
index 7257029..97889ba 100644
--- a/src/things.ads
+++ b/src/things.ads
@@ -2,6 +2,7 @@
private with
+ Ada.Directories,
FLTK.Images.RGB.PNG,
Misc;
@@ -36,13 +37,10 @@ private
end record;
- Image_Dir : String := Misc.Origin & "/../share/sokoban/img";
-
-
- Man_Image : aliased FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/man.png");
- Treasure_Image : aliased FLTK.Images.RGB.PNG.PNG_Image :=
- FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/treasure.png");
+ Man_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "man.png"));
+ Treasure_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create
+ (Ada.Directories.Compose (Misc.Image_Path, "treasure.png"));
Nothing : constant Thing :=