I'd use a bunch of look up tables if you just want to do simple conversions
(pcode)
<br />
struct conversionsEasy {<br />
char leftName[32], rightName[32];<br />
float leftToRightRatio;<br />
}<br />
<br />
conversionsEasy easy[]={<br />
{"Kilometre", "metre",true, 1000},<br />
{"Foot", "metre", true,0.3048},<br />
...<br />
};<br />
More complicated conversions would require some deferral
<br />
<br />
struct conversionsHard {<br />
char leftName[32], rightName[32];<br />
double (*convert)(double, bool leftToRight, double mult);<br />
double mult;<br />
}<br />
<br />
double temp_CtoK(double in, bool LtoR, double mult)<br />
{<br />
return LtoR?in+273:in-273;<br />
}<br />
<br />
double temp_CtoF(double in, bool LtoR, double mult)<br />
{<br />
return LtoR?(in*2)+30:(in-30)/2;<br />
}<br />
<br />
<br />
double metric(double in, bool LtoR, double mult)<br />
{<br />
return LtoR?in*mult:in/mult;<br />
}<br />
<br />
conversionsHard hard[]={<br />
{"Celsius", "Kelvin", &temp_CtoK, 0},<br />
{"Celsius", "Fahrenheit", &temp_CtoF, 0),<br />
<br />
{"Kilometre", "metre",&metric, 1000},<br />
{"Foot", "metre", &metric,0.3048},<br />
<br />
...<br />
};<br />
<br />
<br />
then your biggest problem is populating the right and left combos