private with FLTK.Images.RGB.PNG, Ada.Command_Line, Ada.Directories; package Things is type Thing is tagged private; Nothing : constant Thing; Man : constant Thing; Treasure : constant Thing; procedure Draw (This : in Thing; X, Y : in Integer); function "=" (A, B : in Thing) return Boolean; private type Thing is tagged record Self_Image : access FLTK.Images.RGB.PNG.PNG_Image; end record; Origin : String := Ada.Directories.Containing_Directory (Ada.Directories.Full_Name (Ada.Command_Line.Command_Name)); Image_Dir : String := Origin & "/../share/sokoban/img"; Man_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Create (Image_Dir & "/man.png"); Treasure_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Create (Image_Dir & "/treasure.png"); Nothing : constant Thing := (Self_Image => null); Man : constant Thing := (Self_Image => Man_Image'Access); Treasure : constant Thing := (Self_Image => Treasure_Image'Access); end Things;