stella/src/windows/OSystemWINDOWS.cxx

97 lines
2.8 KiB
C++

//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include <fstream>
#include "bspf.hxx"
#include "FSNode.hxx"
#include "HomeFinder.hxx"
#include "OSystemWINDOWS.hxx"
/**
Each derived class is responsible for calling the following methods
in its constructor:
setBaseDir()
setConfigFile()
See OSystem.hxx for a further explanation
*/
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OSystemWINDOWS::OSystemWINDOWS()
: OSystem()
{
string basedir = "";
// Check if the base directory should be overridden
// Shouldn't normally be necessary, but is useful for those people that
// don't want to clutter their 'My Documents' folder
bool overrideBasedir = false;
FilesystemNode basedirfile("basedir.txt");
if(basedirfile.exists())
{
ifstream in(basedirfile.getPath());
if(in && in.is_open())
{
getline(in, basedir);
// trim leading and trailing spaces
size_t spos = basedir.find_first_not_of(" \t");
size_t epos = basedir.find_last_not_of(" \t");
if(spos != string::npos && epos != string::npos)
basedir = basedir.substr(spos, epos-spos+1);
if(basedir != "") overrideBasedir = true;
}
}
// If basedir hasn't been specified, use the 'home' directory
if(!overrideBasedir)
{
HomeFinder homefinder;
FilesystemNode appdata(homefinder.getAppDataPath());
if(appdata.isDirectory())
{
basedir = appdata.getShortPath();
if(basedir.length() > 1 && basedir[basedir.length()-1] != '\\')
basedir += '\\';
basedir += "Stella";
}
else
basedir = ".\\"; // otherwise, default to current directory
}
setBaseDir(basedir);
setConfigFile(basedir + "stella.ini");
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string OSystemWINDOWS::defaultSaveDir() const
{
HomeFinder homefinder;
FilesystemNode desktop(homefinder.getDesktopPath() + "\\Stella");
return desktop.isDirectory() ? desktop.getShortPath() : "~\\";
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string OSystemWINDOWS::defaultLoadDir() const
{
return defaultSaveDir();
}