mirror of https://github.com/stella-emu/stella.git
Remove leftover.
This commit is contained in:
parent
5c70a3d3ec
commit
5758baaac6
|
@ -1,397 +0,0 @@
|
|||
//============================================================================
|
||||
//
|
||||
// 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-2020 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 <sstream>
|
||||
|
||||
#include "bspf.hxx"
|
||||
#include "Props.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Properties::Properties()
|
||||
{
|
||||
setDefaults();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Properties::Properties(const Properties& properties)
|
||||
{
|
||||
copy(properties);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::set(PropType key, const string& value)
|
||||
{
|
||||
size_t pos = static_cast<size_t>(key);
|
||||
if(pos < myProperties.size())
|
||||
{
|
||||
myProperties[pos] = value;
|
||||
if(BSPF::equalsIgnoreCase(myProperties[pos], "AUTO-DETECT"))
|
||||
myProperties[pos] = "AUTO";
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case PropType::Cart_Sound:
|
||||
case PropType::Cart_Type:
|
||||
case PropType::Console_LeftDiff:
|
||||
case PropType::Console_RightDiff:
|
||||
case PropType::Console_TVType:
|
||||
case PropType::Console_SwapPorts:
|
||||
case PropType::Controller_Left:
|
||||
case PropType::Controller_Left1:
|
||||
case PropType::Controller_Left2:
|
||||
case PropType::Controller_Right:
|
||||
case PropType::Controller_Right1:
|
||||
case PropType::Controller_Right2:
|
||||
case PropType::Controller_SwapPaddles:
|
||||
case PropType::Controller_MouseAxis:
|
||||
case PropType::Display_Format:
|
||||
case PropType::Display_Phosphor:
|
||||
{
|
||||
BSPF::toUpperCase(myProperties[pos]);
|
||||
break;
|
||||
}
|
||||
|
||||
case PropType::Display_PPBlend:
|
||||
{
|
||||
int blend = BSPF::stringToInt(myProperties[pos]);
|
||||
if(blend < 0 || blend > 100)
|
||||
myProperties[pos] = ourDefaultProperties[pos];
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
istream& operator>>(istream& is, Properties& p)
|
||||
{
|
||||
p.setDefaults();
|
||||
|
||||
// Loop reading properties
|
||||
string key, value;
|
||||
for(;;)
|
||||
{
|
||||
// Get the key associated with this property
|
||||
key = p.readQuotedString(is);
|
||||
|
||||
// Make sure the stream is still okay
|
||||
if(!is)
|
||||
return is;
|
||||
|
||||
// A null key signifies the end of the property list
|
||||
if(key == "")
|
||||
break;
|
||||
|
||||
// Get the value associated with this property
|
||||
value = p.readQuotedString(is);
|
||||
|
||||
// Make sure the stream is still okay
|
||||
if(!is)
|
||||
return is;
|
||||
|
||||
// Set the property
|
||||
PropType type = Properties::getPropType(key);
|
||||
p.set(type, value);
|
||||
}
|
||||
|
||||
return is;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
ostream& operator<<(ostream& os, const Properties& p)
|
||||
{
|
||||
// Write out each of the key and value pairs
|
||||
bool changed = false;
|
||||
for(size_t i = 0; i < static_cast<size_t>(PropType::NumTypes); ++i)
|
||||
{
|
||||
// Try to save some space by only saving the items that differ from default
|
||||
if(p.myProperties[i] != Properties::ourDefaultProperties[i])
|
||||
{
|
||||
p.writeQuotedString(os, Properties::ourPropertyNames[i]);
|
||||
os.put(' ');
|
||||
p.writeQuotedString(os, p.myProperties[i]);
|
||||
os.put('\n');
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(changed)
|
||||
{
|
||||
// Put a trailing null string so we know when to stop reading
|
||||
p.writeQuotedString(os, "");
|
||||
os.put('\n');
|
||||
os.put('\n');
|
||||
}
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
string Properties::readQuotedString(istream& in)
|
||||
{
|
||||
// Read characters until we see a quote
|
||||
char c;
|
||||
while(in.get(c))
|
||||
if(c == '"')
|
||||
break;
|
||||
|
||||
// Read characters until we see the close quote
|
||||
string s;
|
||||
while(in.get(c))
|
||||
{
|
||||
if((c == '\\') && (in.peek() == '"'))
|
||||
in.get(c);
|
||||
else if((c == '\\') && (in.peek() == '\\'))
|
||||
in.get(c);
|
||||
else if(c == '"')
|
||||
break;
|
||||
else if(c == '\r')
|
||||
continue;
|
||||
|
||||
s += c;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::writeQuotedString(ostream& out, const string& s)
|
||||
{
|
||||
out.put('"');
|
||||
for(uInt32 i = 0; i < s.length(); ++i)
|
||||
{
|
||||
if(s[i] == '\\')
|
||||
{
|
||||
out.put('\\');
|
||||
out.put('\\');
|
||||
}
|
||||
else if(s[i] == '\"')
|
||||
{
|
||||
out.put('\\');
|
||||
out.put('"');
|
||||
}
|
||||
else
|
||||
out.put(s[i]);
|
||||
}
|
||||
out.put('"');
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool Properties::operator==(const Properties& properties) const
|
||||
{
|
||||
for(size_t i = 0; i < myProperties.size(); ++i)
|
||||
if(myProperties[i] != properties.myProperties[i])
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool Properties::operator!=(const Properties& properties) const
|
||||
{
|
||||
return !(*this == properties);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Properties& Properties::operator=(const Properties& properties)
|
||||
{
|
||||
// Do the assignment only if this isn't a self assignment
|
||||
if(this != &properties)
|
||||
{
|
||||
// Now, make myself a copy of the given object
|
||||
copy(properties);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::setDefault(PropType key, const string& value)
|
||||
{
|
||||
ourDefaultProperties[static_cast<size_t>(key)] = value;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::copy(const Properties& properties)
|
||||
{
|
||||
// Now, copy each property from properties
|
||||
for(size_t i = 0; i < myProperties.size(); ++i)
|
||||
myProperties[i] = properties.myProperties[i];
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::print() const
|
||||
{
|
||||
cout << get(PropType::Cart_MD5) << "|"
|
||||
<< get(PropType::Cart_Name) << "|"
|
||||
<< get(PropType::Cart_Manufacturer) << "|"
|
||||
<< get(PropType::Cart_ModelNo) << "|"
|
||||
<< get(PropType::Cart_Note) << "|"
|
||||
<< get(PropType::Cart_Rarity) << "|"
|
||||
<< get(PropType::Cart_Sound) << "|"
|
||||
<< get(PropType::Cart_StartBank) << "|"
|
||||
<< get(PropType::Cart_Type) << "|"
|
||||
<< get(PropType::Console_LeftDiff) << "|"
|
||||
<< get(PropType::Console_RightDiff) << "|"
|
||||
<< get(PropType::Console_TVType) << "|"
|
||||
<< get(PropType::Console_SwapPorts) << "|"
|
||||
<< get(PropType::Controller_Left) << "|"
|
||||
<< get(PropType::Controller_Left1) << "|"
|
||||
<< get(PropType::Controller_Left2) << "|"
|
||||
<< get(PropType::Controller_Right) << "|"
|
||||
<< get(PropType::Controller_Right1) << "|"
|
||||
<< get(PropType::Controller_Right2) << "|"
|
||||
<< get(PropType::Controller_SwapPaddles) << "|"
|
||||
<< get(PropType::Controller_PaddlesXCenter) << "|"
|
||||
<< get(PropType::Controller_PaddlesYCenter) << "|"
|
||||
<< get(PropType::Controller_MouseAxis) << "|"
|
||||
<< get(PropType::Display_Format) << "|"
|
||||
<< get(PropType::Display_VCenter) << "|"
|
||||
<< get(PropType::Display_Phosphor) << "|"
|
||||
<< get(PropType::Display_PPBlend) << "|"
|
||||
<< get(PropType::Cart_Highscore)
|
||||
<< endl;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::reset(PropType key)
|
||||
{
|
||||
size_t pos = static_cast<size_t>(key);
|
||||
|
||||
myProperties[pos] = ourDefaultProperties[pos];
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::setDefaults()
|
||||
{
|
||||
for(size_t i = 0; i < myProperties.size(); ++i)
|
||||
myProperties[i] = ourDefaultProperties[i];
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
PropType Properties::getPropType(const string& name)
|
||||
{
|
||||
for(size_t i = 0; i < NUM_PROPS; ++i)
|
||||
if(ourPropertyNames[i] == name)
|
||||
return static_cast<PropType>(i);
|
||||
|
||||
// Otherwise, indicate that the item wasn't found
|
||||
return PropType::NumTypes;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Properties::printHeader()
|
||||
{
|
||||
cout << "Cart_MD5|"
|
||||
<< "Cart_Name|"
|
||||
<< "Cart_Manufacturer|"
|
||||
<< "Cart_ModelNo|"
|
||||
<< "Cart_Note|"
|
||||
<< "Cart_Rarity|"
|
||||
<< "Cart_Sound|"
|
||||
<< "Cart_StartBank|"
|
||||
<< "Cart_Type|"
|
||||
<< "Console_LeftDiff|"
|
||||
<< "Console_RightDiff|"
|
||||
<< "Console_TVType|"
|
||||
<< "Console_SwapPorts|"
|
||||
<< "Controller_Left|"
|
||||
<< "Controller_Left1|"
|
||||
<< "Controller_Left2|"
|
||||
<< "Controller_Right|"
|
||||
<< "Controller_Right1|"
|
||||
<< "Controller_Right2|"
|
||||
<< "Controller_SwapPaddles|"
|
||||
<< "Controller_PaddlesXCenter|"
|
||||
<< "Controller_PaddlesYCenter|"
|
||||
<< "Controller_MouseAxis|"
|
||||
<< "Display_Format|"
|
||||
<< "Display_VCenter|"
|
||||
<< "Display_Phosphor|"
|
||||
<< "Display_PPBlend|"
|
||||
<< "Cart_Highscore"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
std::array<string, Properties::NUM_PROPS> Properties::ourDefaultProperties =
|
||||
{
|
||||
"", // Cart.MD5
|
||||
"", // Cart.Manufacturer
|
||||
"", // Cart.ModelNo
|
||||
"", // Cart.Name
|
||||
"", // Cart.Note
|
||||
"", // Cart.Rarity
|
||||
"MONO", // Cart.Sound
|
||||
"AUTO", // Cart.StartBank
|
||||
"AUTO", // Cart.Type
|
||||
"B", // Console.LeftDiff
|
||||
"B", // Console.RightDiff
|
||||
"COLOR", // Console.TVType
|
||||
"NO", // Console.SwapPorts
|
||||
"AUTO", // Controller.Left
|
||||
"", // Controller.Left1
|
||||
"", // Controller.Left2
|
||||
"AUTO", // Controller.Right
|
||||
"", // Controller.Right1
|
||||
"", // Controller.Right2
|
||||
"NO", // Controller.SwapPaddles
|
||||
"0", // Controller.PaddlesXCenter
|
||||
"0", // Controller.PaddlesYCenter
|
||||
"AUTO", // Controller.MouseAxis
|
||||
"AUTO", // Display.Format
|
||||
"0", // Display.VCenter
|
||||
"NO", // Display.Phosphor
|
||||
"0", // Display.PPBlend
|
||||
"" // Cart.Highscore
|
||||
};
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
std::array<string, Properties::NUM_PROPS> Properties::ourPropertyNames =
|
||||
{
|
||||
"Cart.MD5",
|
||||
"Cart.Manufacturer",
|
||||
"Cart.ModelNo",
|
||||
"Cart.Name",
|
||||
"Cart.Note",
|
||||
"Cart.Rarity",
|
||||
"Cart.Sound",
|
||||
"Cart.StartBank",
|
||||
"Cart.Type",
|
||||
"Console.LeftDiff",
|
||||
"Console.RightDiff",
|
||||
"Console.TVType",
|
||||
"Console.SwapPorts",
|
||||
"Controller.Left",
|
||||
"Controller.Left1",
|
||||
"Controller.Left2",
|
||||
"Controller.Right",
|
||||
"Controller.Right1",
|
||||
"Controller.Right2",
|
||||
"Controller.SwapPaddles",
|
||||
"Controller.PaddlesXCenter",
|
||||
"Controller.PaddlesYCenter",
|
||||
"Controller.MouseAxis",
|
||||
"Display.Format",
|
||||
"Display.VCenter",
|
||||
"Display.Phosphor",
|
||||
"Display.PPBlend",
|
||||
"Cart.Highscore"
|
||||
};
|
Loading…
Reference in New Issue