FreePascal RTL has excellent functions for doing just that. See GetAppConfigDir, GetAppConfigFile and related things inside FPC docs: http://www.freepascal.org/docs-html/...configdir.html.

This is cross-platform, can be configured by callbacks, and by default uses the most appropriate way for each platform. Under Unix this follows http://freedesktop.org/Standards/basedir-spec, which means $XDG_CONFIG_HOME or $HOME/.config/, under Windows it uses proper WinAPI function (SHGetFolderPath if I remember right). In short, this is what you should use.

If you want to have a subdir there like ".../cbco/guns reloaded/save", then just take GetAppConfigDir and create a subdirectory there using a function like ForceDirectories.

Ah, and a constant similar to proposed dir_slashes is already available in PathDelim (that's under Delphi too), so you never should define something like this yourself.

And one last remark: the problem with user not having the permissions to write inside game's bin directory is the same under Windows. After all, Windows since a long time tries to be a multi-user system and has file/dir permissions working. Many poor Windows programs ignore this issue (making it impossible to install them system-wide and use from non-admin account), but that's another story.