ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

convert.c
Go to the documentation of this file.
00001 #include "calc.h"
00002 
00003 /*
00004     The conversion is made by converting the "from" unit
00005     into the I.S. unit and then the I.S. unit is converted
00006     into the "from" one.
00007 
00008     The base units for all categories are:
00009 
00010     ANGLE..........degrees
00011     AREA...........square meters
00012     CONSUMPTION....kilometers per liter
00013     CURRENCY.......Euro
00014     ENERGY.........joule
00015     LENGTHS........meters
00016     POWER..........Watt
00017     PRESSURE.......Pascal
00018     TEMPERATURE....kelvin
00019     TIME...........seconds
00020     VELOCITY.......meters per second
00021     VOLUME.........liter
00022     WEIGHT.........gram
00023 
00024     The '$' character is used as "what you read into the display".
00025 */
00026 typedef struct {
00027     DWORD unit;
00028     const char *formula_from;
00029     const char *formula_to;
00030 } conv_t;
00031 
00032 typedef struct {
00033     const DWORD   category;
00034     const conv_t *items;
00035 } conv_category_t;
00036 
00037 #define DECLARE_CONV_CAT(_category) \
00038     { IDS_CONV_##_category, conv_##_category },
00039 
00040 #define DECLARE_CONV_UNIT(_category, _unit, _from, _to ) \
00041     { IDS_##_category##_##_unit, _from, _to },
00042 
00043 #define DECLARE_CONV_END \
00044     { 0, NULL, NULL },
00045 
00046 /*
00047     1 gradian = 0.9 deg
00048     1 radian = 57.29577951308233 deg
00049 */
00050 static const conv_t conv_ANGLE[] = {
00051     DECLARE_CONV_UNIT(ANGLE, DEGREES,  "$", "$")
00052     DECLARE_CONV_UNIT(ANGLE, GRADIANS, "$*0.9", "$/0.9")
00053     DECLARE_CONV_UNIT(ANGLE, RADIANS,  "$/P*180", "$*P/180")
00054     DECLARE_CONV_END
00055 };
00056 
00057 /*
00058     1 acre ................ = 4840 square yd = 4046,8564224 mq
00059     1 acre brazil ......... =
00060     1 acre france ......... =
00061     1 acre scots .......... = 5000 mq
00062     1 acre us ............. = 4840*(36/39.37)^2 m = 6272640/1549.9969 m
00063     1 are ................. = 100 mq
00064     1 chou ................ = 108000*(10/33)^2 mq
00065     1 danbo ............... =
00066     1 ha .................. = 10000 mq
00067     1 jeongbo ............. =
00068     1 morgen hungary ...... =
00069     1 mu .................. = 2000/3 mq
00070     1 ping ................ =
00071     1 pyeong .............. =
00072     1 pyeongbangja ........ =
00073     1 rai ................. = 1600 mq
00074     1 se .................. = 1080*(10/33)^2 mq
00075     1 square cm ........... = 0.0001 mq
00076     1 square chr .......... =
00077     1 square fathom ....... = 1.8288^2 = 3.34450944 mq
00078     1 square fathom hungary = 1.8964838^2 = 3.59665080366244 mq
00079     1 square ft ........... = 0,09290304 mq
00080     1 square in ........... = 0,00064516 mq
00081     1 square km ........... = 1000000 mq
00082     1 square lar .......... =
00083     1 square mile ......... = 1609.344^2 = 2589988.110336 mq
00084     1 square mm ........... = 0,000001 mq
00085     1 square shaku ........ = (10/33)^2 mq
00086     1 square tsuen ........ =
00087     1 square va ........... =
00088     1 square yard ......... = 0,83612736 mq
00089     1 tan ................. = 10800*(10/33)^2 mq
00090     1 tsubo ............... = 36*(10/33)^2 mq
00091 */
00092 static const conv_t conv_AREA[] = {
00093     DECLARE_CONV_UNIT(AREA, ACRES,                  "$*4046,8564224",    "$/4046,8564224")
00094 //    DECLARE_CONV_UNIT(AREA, ACRES_BRAZIL,           "$", "$")
00095 //    DECLARE_CONV_UNIT(AREA, ACRES_FRANCE,           "$", "$")
00096     DECLARE_CONV_UNIT(AREA, ACRES_US,               "$*627264/154.99969", "$/627264*154.99969")
00097     DECLARE_CONV_UNIT(AREA, ACRES_SCOTS,            "$*5000",            "$/5000")
00098     DECLARE_CONV_UNIT(AREA, ARES,                   "$*100",             "$/100")
00099     DECLARE_CONV_UNIT(AREA, CHOU,                   "$*10800000/1089",   "$*1089/10800000")
00100 //    DECLARE_CONV_UNIT(AREA, DANBO,                  "$", "$")
00101     DECLARE_CONV_UNIT(AREA, HECTARES,               "$*10000",           "$/10000")
00102 //    DECLARE_CONV_UNIT(AREA, JEONGBO,                "$", "$")
00103 //    DECLARE_CONV_UNIT(AREA, MORGEN_HUNGARY,         "$", "$")
00104     DECLARE_CONV_UNIT(AREA, MU,                     "$*(2000/3)", "$/(2000/3)")
00105 //    DECLARE_CONV_UNIT(AREA, PING,                   "$", "$")
00106 //    DECLARE_CONV_UNIT(AREA, PYEONG,                 "$", "$")
00107 //    DECLARE_CONV_UNIT(AREA, PYEONGBANGJA,           "$", "$")
00108     DECLARE_CONV_UNIT(AREA, RAI,                    "$*1600", "$/1600")
00109     DECLARE_CONV_UNIT(AREA, SE,                     "$*108000/1089",     "$*1089/108000")
00110     DECLARE_CONV_UNIT(AREA, SQUARE_CENTIMETERS,     "$*0,0001",          "$/0,0001")
00111 //    DECLARE_CONV_UNIT(AREA, SQUARE_CHR,             "$", "$")
00112     DECLARE_CONV_UNIT(AREA, SQUARE_FATHOMS,         "$*3.34450944",      "$/3.34450944")
00113     DECLARE_CONV_UNIT(AREA, SQUARE_FATHOMS_HUNGARY, "$*3.59665080366244", "$/3.59665080366244")
00114     DECLARE_CONV_UNIT(AREA, SQUARE_FEET,            "$*0,09290304",      "$/0,09290304")
00115     DECLARE_CONV_UNIT(AREA, SQUARE_INCHES,          "$*0,00064516",      "$/0.00064516")
00116     DECLARE_CONV_UNIT(AREA, SQUARE_KILOMETERS,      "$*1000000",         "$/1000000")
00117 //    DECLARE_CONV_UNIT(AREA, SQUARE_LAR,             "$", "$")
00118     DECLARE_CONV_UNIT(AREA, SQUARE_METER,           "$",                 "$")
00119     DECLARE_CONV_UNIT(AREA, SQUARE_MILES,           "$*2589988.110336",  "$/2589988.110336")
00120     DECLARE_CONV_UNIT(AREA, SQUARE_MILLIMETERS,     "$*1000000",         "$/1000000")
00121     DECLARE_CONV_UNIT(AREA, SQUARE_SHAKU,           "$*100/1089",        "$/1089*100")
00122 //    DECLARE_CONV_UNIT(AREA, SQUARE_TSUEN,           "$", "$")
00123 //    DECLARE_CONV_UNIT(AREA, SQUARE_VA,              "$", "$")
00124     DECLARE_CONV_UNIT(AREA, SQUARE_YARD,            "$*0,83612736",      "$/0,83612736")
00125     DECLARE_CONV_UNIT(AREA, TAN,                    "$*1080000/1089",    "$*1089/1080000")
00126     DECLARE_CONV_UNIT(AREA, TSUBO,                  "$*1188/1089",       "$*1089/1188")
00127     DECLARE_CONV_END
00128 };
00129 
00130 /*
00131     1 l/100Km = 100 km/l -> y = 100/x
00132     1 miles/gal uk = 1.609344/4.54609 km/l
00133     1 miles/gal us = 1.609344/3.785411784 km/l
00134 */
00135 static const conv_t conv_CONSUMPTION[] = {
00136     DECLARE_CONV_UNIT(CONSUMPTION, KM_PER_L,        "$", "$")
00137     DECLARE_CONV_UNIT(CONSUMPTION, L_PER_100_KM,    "100/$", "100/$")
00138     DECLARE_CONV_UNIT(CONSUMPTION, MILES_GALLON_UK, "$*1.609344/4.54609", "$/1.609344*4.54609")
00139     DECLARE_CONV_UNIT(CONSUMPTION, MILES_GALLON_US, "$*1.609344/3.785411784", "$/1.609344*3.785411784")
00140     DECLARE_CONV_END
00141 };
00142 
00143 static const conv_t conv_CURRENCY[] = {
00144     DECLARE_CONV_UNIT(CURRENCY, AUSTRIAN_SCHILLING, "$/13,7603", "$*13,7603")
00145     DECLARE_CONV_UNIT(CURRENCY, BELGIAN_FRANC,      "$/40,3399", "$*40,3399")
00146     DECLARE_CONV_UNIT(CURRENCY, CYPRIOT_POUND,      "$/0,585274","$*0,585274")
00147     DECLARE_CONV_UNIT(CURRENCY, CZECH_KORUNA,       "$/27,9766", "$*27,9766")
00148     DECLARE_CONV_UNIT(CURRENCY, DEUTSCHE_MARK,      "$/1,9558",  "$*1,9558")
00149     DECLARE_CONV_UNIT(CURRENCY, DUTCH_GUILDER,      "$/2,20371", "$*2,20371")
00150     DECLARE_CONV_UNIT(CURRENCY, EURO,               "$",         "$")
00151     DECLARE_CONV_UNIT(CURRENCY, FINNISH_MARKKA,     "$/5,9457",  "$*5,9457")
00152     DECLARE_CONV_UNIT(CURRENCY, FRENCH_FRANC,       "$/6,5596",  "$*6,5596")
00153     DECLARE_CONV_UNIT(CURRENCY, GREEK_DRACHMA,      "$/340,75",  "$*340,75")
00154     DECLARE_CONV_UNIT(CURRENCY, IRISH_POUND,        "$/0,7876",  "$*0,7876")
00155     DECLARE_CONV_UNIT(CURRENCY, ITALIAN_LIRA,       "$/1936.27", "$*1936.27")
00156     DECLARE_CONV_UNIT(CURRENCY, LUXEMBOURG_FRANC,   "$/40,3399", "$*40,3399")
00157     DECLARE_CONV_UNIT(CURRENCY, MALTESE_LIRA,       "$/0.42930", "$*0.42930")
00158     DECLARE_CONV_UNIT(CURRENCY, PORTOGUESE_ESCUDO,  "$/200,482", "$*200,482")
00159     DECLARE_CONV_UNIT(CURRENCY, SLOVAK_KORUNA,      "$/30,126",  "$*30,126")
00160     DECLARE_CONV_UNIT(CURRENCY, SLOVENIAN_TOLAR,    "$/239,640", "$*239,640")
00161     DECLARE_CONV_UNIT(CURRENCY, SPANISH_PESETA,     "$/166,386", "$*166,386")
00162     DECLARE_CONV_END
00163 };
00164 
00165 /*
00166     1 cal15 .... = 4.1855 J
00167     1 BTU ...... = 1055.056 J
00168     1 ERG ...... = 0.0000001 J
00169     1 EV ....... = 0.000000000000000000160217653 J
00170     1 Foot-Pound = 1.3558179483314004 J
00171     1 IT calorie = 4.1868 J
00172     1 KCa ...... = 4186.8 J
00173     1 KJ ....... = 1000 J
00174     1 KWh ...... = 3600 J
00175     1 IUNS ..... = 4.182 J
00176     1 calth .... = 4.184 J
00177 */
00178 static const conv_t conv_ENERGY[] = {
00179     DECLARE_CONV_UNIT(ENERGY, 15_C_CALORIES,        "$*4.1855",   "$/4.1855")
00180     DECLARE_CONV_UNIT(ENERGY, BTUS,                 "$*1055.056", "$/1055.056")
00181     DECLARE_CONV_UNIT(ENERGY, ERGS,                 "$*.0000001", "$/.0000001")
00182     DECLARE_CONV_UNIT(ENERGY, EVS,                  "$*.000000000000000000160217653", "$/.000000000000000000160217653")
00183     DECLARE_CONV_UNIT(ENERGY, FOOT_POUNDS,          "$*1.3558179483314004",   "$/1.3558179483314004")
00184     DECLARE_CONV_UNIT(ENERGY, IT_CALORIES,          "$*4.1868",   "$/4.1868")
00185     DECLARE_CONV_UNIT(ENERGY, IT_KILOCALORIES,      "$*4186.8",   "$/4186.8")
00186     DECLARE_CONV_UNIT(ENERGY, JOULES,               "$",          "$")
00187     DECLARE_CONV_UNIT(ENERGY, KILOJOULES,           "$*1000",     "$/1000")
00188     DECLARE_CONV_UNIT(ENERGY, KILOWATT_HOURS,       "$*3600",     "$/3600")
00189     DECLARE_CONV_UNIT(ENERGY, NUTRITION_CALORIES,   "$*4.182",    "$/4.182")
00190     DECLARE_CONV_UNIT(ENERGY, TH_CALORIES,          "$*4.184",    "$/4.184")
00191     DECLARE_CONV_END
00192 };
00193 
00194 /*
00195     1 angstrom ....... = 0.0000000001 m
00196     1 astronomical unit= 149598000000 m
00197     1 barleycorn ..... = 1/3 inch = 0.9144/108 m
00198     1 cm ............. = 1/100 m
00199     1 chain uk ....... = 22 yards = 22*0.9144 m
00200     1 chi ............ = 1/3 m
00201     1 chou ........... = 3600/33 m
00202     1 chr ............ =
00203     1 cun ............ = 1/10 chi = 1/30 m
00204     1 fathom ......... = 2 yard = 2*0.9144 m
00205     1 fathom ungary .. = 1.8964838 m (fixed)
00206     1 feet ........... = 12 inch = 0.9144/3 m
00207     1 furlong ........ = 10 chains = 220*0.9144 m
00208     1 gan ............ =
00209     1 hand ........... = 4 inches = 0.9144/9 m
00210     1 hunh ........... =
00211     1 inch ........... = yard/36 = 0.9144/36 m
00212     1 ja ............. =
00213     1 jeong .......... =
00214     1 kabiet ......... =
00215     1 ken ............ = 60/33 m
00216     1 keub ........... =
00217     1 km ............. = 1000 m
00218     1 lar ............ =
00219     1 light year ..... = 9460730472580800 m
00220     1 link uk ........ = 0.01 chains = 0.22*0.9144 m
00221     1 micron ......... = 0.000001 m
00222     1 mile ........... = 1760 yards = 1609.344 m
00223     1 millimeter ..... = 1/1000 m
00224     1 nautical mile .. = 1852 m
00225     1 nieu ........... =
00226     1 parsec ......... = 30856800000000000 m
00227     1 pica ........... = yard/216 = 0.9144/216 m
00228     1 ri japan ....... =
00229     1 ri korea ....... =
00230     1 rod ............ = 5.0292 m
00231     1 sawk ........... =
00232     1 sen ............ =
00233     1 shaku .......... = 10/33 m
00234     1 span ........... = 9 inches = 0.9144/4 m
00235     1 sun ............ = 1/33 m
00236     1 tsuen .......... =
00237     1 va ............. =
00238     1 yard ........... = 0.9144 m
00239     1 yote ........... =
00240     1 zhang .......... =
00241 */
00242 static const conv_t conv_LENGTH[] = {
00243     DECLARE_CONV_UNIT(LENGTH, ANGSTROMS,            "$*0.0000000001",   "$/0.0000000001")
00244     DECLARE_CONV_UNIT(LENGTH, ASTRONOMICAL_UNITS,   "$*149598000000",   "$/149598000000")
00245     DECLARE_CONV_UNIT(LENGTH, BARLEYCORNS,          "$*0.9144/108",     "$/0.9144*108")
00246     DECLARE_CONV_UNIT(LENGTH, CENTIMETERS,          "$/100",            "$*100")
00247     DECLARE_CONV_UNIT(LENGTH, CHAINS_UK,            "$*20.1168",        "$/20.1168")
00248     DECLARE_CONV_UNIT(LENGTH, CHI,                  "$/3",              "$*3")
00249     DECLARE_CONV_UNIT(LENGTH, CHOU,                 "$*3600/33",        "$*33/3600")
00250 //    DECLARE_CONV_UNIT(LENGTH, CHR,                  "$", "$")
00251     DECLARE_CONV_UNIT(LENGTH, CUN,                  "$/30",             "$*30")
00252     DECLARE_CONV_UNIT(LENGTH, FATHOMS,              "$*1.8288",         "$/1.8288")
00253     DECLARE_CONV_UNIT(LENGTH, FATHOMS_HUNGARY,      "$*1.8964838",      "$/1.8964838")
00254     DECLARE_CONV_UNIT(LENGTH, FEET,                 "$*0.3048",         "$/0.3048")
00255     DECLARE_CONV_UNIT(LENGTH, FURLONGS,             "$*201.168",        "$/201.168")
00256 //    DECLARE_CONV_UNIT(LENGTH, GAN,                  "$", "$")
00257     DECLARE_CONV_UNIT(LENGTH, HANDS,                "$*0,1016",         "$/0,1016")
00258 //    DECLARE_CONV_UNIT(LENGTH, HUNH,                 "$", "$")
00259     DECLARE_CONV_UNIT(LENGTH, INCHES,               "$*0.0254",         "$/0.0254")
00260 //    DECLARE_CONV_UNIT(LENGTH, JA,                   "$", "$")
00261 //    DECLARE_CONV_UNIT(LENGTH, JEONG,                "$", "$")
00262 //    DECLARE_CONV_UNIT(LENGTH, KABIET,               "$", "$")
00263     DECLARE_CONV_UNIT(LENGTH, KEN,                  "$*60/33",          "$*33/60")
00264 //    DECLARE_CONV_UNIT(LENGTH, KEUB,                 "$", "$")
00265     DECLARE_CONV_UNIT(LENGTH, KILOMETERS,           "$*1000",           "$/1000")
00266 //    DECLARE_CONV_UNIT(LENGTH, LAR,                  "$", "$")
00267     DECLARE_CONV_UNIT(LENGTH, LIGHT_YEARS,          "$*9460730472580800", "$/9460730472580800")
00268     DECLARE_CONV_UNIT(LENGTH, LINKS_UK,             "$*0.201168",       "$/0.201168")
00269     DECLARE_CONV_UNIT(LENGTH, METERS,               "$",                "$")
00270     DECLARE_CONV_UNIT(LENGTH, MICRONS,              "$*0.000001",       "$/0.000001")
00271     DECLARE_CONV_UNIT(LENGTH, MILES,                "$*1609.344",       "$/1609.344")
00272     DECLARE_CONV_UNIT(LENGTH, MILLIMETERS,          "$/1000",           "$*1000")
00273     DECLARE_CONV_UNIT(LENGTH, NAUTICAL_MILES,       "$*1852",           "$/1852")
00274 //    DECLARE_CONV_UNIT(LENGTH, NIEU,                 "$", "$")
00275     DECLARE_CONV_UNIT(LENGTH, PARSECS,              "$*30856800000000000", "$/30856800000000000")
00276     DECLARE_CONV_UNIT(LENGTH, PICAS,                "$*0.9144/216",     "$/0.9144*216")
00277     DECLARE_CONV_UNIT(LENGTH, RODS,                 "$*5.0292",         "$/5.0292")
00278 //    DECLARE_CONV_UNIT(LENGTH, RI_JAPAN,             "$", "$")
00279 //    DECLARE_CONV_UNIT(LENGTH, RI_KOREA,             "$", "$")
00280 //    DECLARE_CONV_UNIT(LENGTH, SAWK,                 "$", "$")
00281 //    DECLARE_CONV_UNIT(LENGTH, SEN,                  "$", "$")
00282     DECLARE_CONV_UNIT(LENGTH, SHAKU,                "$*10/33",          "$*33/10")
00283     DECLARE_CONV_UNIT(LENGTH, SPAN,                 "$*0.9144/4",       "$*4/0.9144")
00284     DECLARE_CONV_UNIT(LENGTH, SUN,                  "$*1/33",            "$*33")
00285 //    DECLARE_CONV_UNIT(LENGTH, TSUEN,                "$", "$")
00286 //    DECLARE_CONV_UNIT(LENGTH, VA,                   "$", "$")
00287     DECLARE_CONV_UNIT(LENGTH, YARDS,                "$*0.9144",         "$/0.9144")
00288 //    DECLARE_CONV_UNIT(LENGTH, YOTE,                 "$", "$")
00289 //    DECLARE_CONV_UNIT(LENGTH, ZHANG,                "$", "$")
00290     DECLARE_CONV_END
00291 };
00292 
00293 /*
00294     1 BTU/min = 17.5842642 W
00295     1 Foot-pound/minute = 0.02259696580552333 W
00296     1 hp = 745.69987158227022 W
00297     1 KW = 1000 W
00298     1 MW = 1000000 W
00299 */
00300 static const conv_t conv_POWER[] = {
00301     DECLARE_CONV_UNIT(POWER, BTUS_PER_MINUTE, "$*17.5842642", "$/17.5842642")
00302     DECLARE_CONV_UNIT(POWER, FPS_PER_MINUTE,  "$*0.02259696580552333", "$/0.02259696580552333")
00303     DECLARE_CONV_UNIT(POWER, HORSEPOWER,      "$*745.69987158227022", "$/745.69987158227022")
00304     DECLARE_CONV_UNIT(POWER, KILOWATTS,       "$*1000", "$/1000")
00305     DECLARE_CONV_UNIT(POWER, MEGAWATTS,       "$*1000000", "$/1000000")
00306     DECLARE_CONV_UNIT(POWER, WATTS,           "$", "$")
00307     DECLARE_CONV_END
00308 };
00309 
00310 /*
00311     1 ATM   = 101325 Pa
00312     1 BAR   = 100000 Pa
00313     1 hPa   = 100 Pa
00314     1 kPa   = 1000 Pa
00315     1 mm HG = 133.322 Pa
00316     1 psi   = 6894.757 Pa
00317 */
00318 static const conv_t conv_PRESSURE[] = {
00319     DECLARE_CONV_UNIT(PRESSURE, ATMOSPHERES,   "$*101325",   "$/101325")
00320     DECLARE_CONV_UNIT(PRESSURE, BARS,          "$*100000",   "$/100000")
00321     DECLARE_CONV_UNIT(PRESSURE, HECTOPASCALS,  "$*100",      "$/100")
00322     DECLARE_CONV_UNIT(PRESSURE, KILOPASCALS,   "$*1000",     "$/1000")
00323     DECLARE_CONV_UNIT(PRESSURE, MM_OF_MERCURY, "$*133.322",  "$/133.322")
00324     DECLARE_CONV_UNIT(PRESSURE, PASCALS,       "$",          "$")
00325     DECLARE_CONV_UNIT(PRESSURE, PSI,           "$*6894.757", "$/6894.757")
00326     DECLARE_CONV_END
00327 };
00328 
00329 /*
00330     1 day ....... = 86400 s
00331     1 hour ...... = 3600 s
00332     1 microsecond = 0.000001 s
00333     1 millisecond = 0.001 s
00334     1 nanosecond. = 0.000000001 s
00335     1 minute .... = 60 s
00336     1 week ...... = 669600 s
00337 */
00338 static const conv_t conv_TIME[] = {
00339     DECLARE_CONV_UNIT(TIME, MINUTES,      "$*60",          "$/60")
00340     DECLARE_CONV_UNIT(TIME, DAYS,         "$*86400",       "$/86400")
00341     DECLARE_CONV_UNIT(TIME, HOURS,        "$*3600",        "$/3600")
00342     DECLARE_CONV_UNIT(TIME, MILLISECONDS, "$*0.001",       "$/0.001")
00343     DECLARE_CONV_UNIT(TIME, MICROSECONDS, "$*0.000001",    "$/0.000001")
00344     DECLARE_CONV_UNIT(TIME, NANOSECONDS,  "$*0.000000001", "$/0.000000001")
00345     DECLARE_CONV_UNIT(TIME, SECONDS,      "$",             "$")
00346     DECLARE_CONV_UNIT(TIME, WEEKS,        "$*604800",      "$/604800")
00347     DECLARE_CONV_UNIT(TIME, YEARS,        "$*31556952",    "$/31556952")
00348     DECLARE_CONV_END
00349 };
00350 
00351 /*
00352     C = K - 273.15
00353     F = K * 9/5 - 459.67
00354     R = K * 9/5
00355  */
00356 static const conv_t conv_TEMPERATURE[] = {
00357     DECLARE_CONV_UNIT(TEMPERATURE, CELSIUS,     "$+273.15",       "$-273.15")
00358     DECLARE_CONV_UNIT(TEMPERATURE, FAHRENHEIT,  "($+459.67)*5/9", "$*9/5-459.67")
00359     DECLARE_CONV_UNIT(TEMPERATURE, KELVIN,      "$",              "$")
00360     DECLARE_CONV_UNIT(TEMPERATURE, RANKINE,     "$*5/9",          "$*9/5")
00361     DECLARE_CONV_END
00362 };
00363 
00364 /*
00365     1 cm/s = 0.01 m/s
00366     1 f/h  = 0.0000846666667 m/s
00367     1 f/s  = 0.3048 m/s
00368     1 Km/h = 10/36 m/s -> 0.27778 m/s
00369     1 knot = 18.52/36 m/s -> 0.51444444 m/s
00370     1 mach = 340.3 m/s
00371     1 mph  = 0.44704 m/s
00372 */
00373 static const conv_t conv_VELOCITY[] = {
00374     DECLARE_CONV_UNIT(VELOCITY, CMS_SECOND,         "$*.01",      "$/.01")
00375     DECLARE_CONV_UNIT(VELOCITY, FEET_SECOND,        "$*.3048",    "$/.3048")
00376     DECLARE_CONV_UNIT(VELOCITY, FEET_HOUR,          "$*.0000846666667", "$/.0000846666667")
00377     DECLARE_CONV_UNIT(VELOCITY, KILOMETERS_HOUR,    "$*10/36",    "$*36/10")
00378     DECLARE_CONV_UNIT(VELOCITY, KNOTS,              "$*18.52/36", "$*36/18.52")
00379     DECLARE_CONV_UNIT(VELOCITY, MACH,               "$*340.3",    "$/340.3")
00380     DECLARE_CONV_UNIT(VELOCITY, METERS_SECOND,      "$",          "$")
00381     DECLARE_CONV_UNIT(VELOCITY, MILES_HOUR,         "$*.44704",   "$/.44704")
00382     DECLARE_CONV_END
00383 };
00384 
00385 /*
00386     1 barrel uk ...... = 163.65924 l
00387     1 barrel oil ..... = 158.987295 l
00388     1 bun ............ =
00389     1 bushel uk ...... = 36.36872 l
00390     1 bushel us ...... = 35.23907017 l
00391     1 cubic cm  ...... = 0.001 l
00392     1 cubic feet ..... = 28.316846 l
00393     1 cubic inch ..... = 0.016387064 l
00394     1 cubic meter .... = 1000 l
00395     1 cubic yard ..... = 764.554857 l
00396     1 doe ............ =
00397     1 fluid ounce uk   = 0.0284130625 l
00398     1 fluid ounce us   = 0.0295735295625 l
00399     1 gallon uk ...... = 4.54609 l
00400     1 gallon dry us .. = 4.40488377086 l
00401     1 gallon liquid us = 3.785411784 l
00402     1 gou ............ = 0.1809 l
00403     1 hop ............ =
00404     1 icce ........... =
00405     1 kwian .......... =
00406     1 mal ............ =
00407     1 milliliter ..... = 0.001 l
00408     1 pint uk ........ = 0.56826125 l
00409     1 pint dry us .... = 0.5506104713575 l
00410     1 pint liquid us   = 0.473176473 l
00411     1 quart uk ....... = 1.1365225 l
00412     1 quart dry us ... = 1.101220942715 l
00413     1 quart liquid us  = 0.946352946 l
00414     1 seki ........... =
00415     1 syou ........... =
00416     1 tananloung ..... =
00417     1 tang ........... =
00418     1 to ............. = 18040 l
00419 */
00420 static const conv_t conv_VOLUME[] = {
00421     DECLARE_CONV_UNIT(VOLUME, BARRELS_UK,           "$*163.65924",       "$/163.65924")
00422     DECLARE_CONV_UNIT(VOLUME, BARRELS_OIL,          "$*158.987295",      "$/158.987295")
00423 //    DECLARE_CONV_UNIT(VOLUME, BUN,                  "$", "$")
00424     DECLARE_CONV_UNIT(VOLUME, BUSHELS_UK,           "$*36.36872",        "$/36.36872")
00425     DECLARE_CONV_UNIT(VOLUME, BUSHELS_US,           "$*35.23907017",     "$/35.23907017")
00426     DECLARE_CONV_UNIT(VOLUME, CUBIC_CENTIMETERS,    "$*0.001",           "$/0.001")
00427     DECLARE_CONV_UNIT(VOLUME, CUBIC_FEET,           "$*28.316846",       "$/28.316846")
00428     DECLARE_CONV_UNIT(VOLUME, CUBIC_INCHES,         "$*0.016387064",     "$/0.016387064")
00429     DECLARE_CONV_UNIT(VOLUME, CUBIC_METERS,         "$*1000",            "$/1000")
00430     DECLARE_CONV_UNIT(VOLUME, CUBIC_YARDS,          "$*764.554857",      "$/764.554857")
00431 //    DECLARE_CONV_UNIT(VOLUME, DOE,                  "$", "$")
00432     DECLARE_CONV_UNIT(VOLUME, FLUID_OUNCES_UK,      "$*0.0284130625",    "$/0.0284130625")
00433     DECLARE_CONV_UNIT(VOLUME, FLUID_OUNCES_US,      "$*0.0295735295625", "$/0.0295735295625")
00434     DECLARE_CONV_UNIT(VOLUME, GALLONS_UK,           "$*4.54609",         "$/4.54609")
00435     DECLARE_CONV_UNIT(VOLUME, GALLONS_DRY_US,       "$*4.40488377086",   "$/4.40488377086")
00436     DECLARE_CONV_UNIT(VOLUME, GALLONS_LIQUID_US,    "$*3.785411784",     "$/3.785411784")
00437     DECLARE_CONV_UNIT(VOLUME, GOU,                  "$*0.1809",          "$/0.1809")
00438 //    DECLARE_CONV_UNIT(VOLUME, HOP,                  "$", "$")
00439 //    DECLARE_CONV_UNIT(VOLUME, ICCE,                 "$", "$")
00440 //    DECLARE_CONV_UNIT(VOLUME, KWIAN,                "$", "$")
00441     DECLARE_CONV_UNIT(VOLUME, LITERS,               "$",                 "$")
00442 //    DECLARE_CONV_UNIT(VOLUME, MAL,                  "$", "$")
00443     DECLARE_CONV_UNIT(VOLUME, MILLILITERS,          "$*0.001",           "$/0.001")
00444     DECLARE_CONV_UNIT(VOLUME, PINTS_UK,             "$*0.56826125",      "$/0.56826125")
00445     DECLARE_CONV_UNIT(VOLUME, PINTS_DRY_US,         "$*0.5506104713575", "$/0.5506104713575")
00446     DECLARE_CONV_UNIT(VOLUME, PINTS_LIQUID_US,      "$*0.473176473",     "$/0.473176473")
00447     DECLARE_CONV_UNIT(VOLUME, QUARTS_UK,            "$*1.1365225",       "$/1.1365225")
00448     DECLARE_CONV_UNIT(VOLUME, QUARTS_DRY_US,        "$*1.101220942715",  "$/1.101220942715")
00449     DECLARE_CONV_UNIT(VOLUME, QUARTS_LIQUID_US,     "$*0.946352946",     "$/0.946352946")
00450 //    DECLARE_CONV_UNIT(VOLUME, SEKI,                 "$", "$")
00451 //    DECLARE_CONV_UNIT(VOLUME, SYOU,                 "$", "$")
00452 //    DECLARE_CONV_UNIT(VOLUME, TANANLOUNG,           "$", "$")
00453 //    DECLARE_CONV_UNIT(VOLUME, TANG,                 "$", "$")
00454     DECLARE_CONV_UNIT(VOLUME, TO,                   "$*18040",           "$/18040")
00455     DECLARE_CONV_END
00456 };
00457 
00458 /*
00459     1 baht ............ = 12.244 g
00460     1 carat ........... = 0.2 g
00461     1 chung ........... =
00462     1 don ............. =
00463     1 geun ............ =
00464     1 gwan ............ =
00465     1 harb ............ =
00466     1 jin china ....... =
00467     1 jin taiwan ...... =
00468     1 Kan ............. = 3750 g
00469     1 Kilograms ....... = 1000 g
00470     1 Kin ............. = 600 g
00471     1 Liang China ..... =
00472     1 Liang Taiwan .... =
00473     1 monme ........... = 3.75 g
00474     1 ounce avoirdupois = 28.349523125 g
00475     1 ounce troy ...... = 31.1034768 g
00476     1 pound ........... = 453.59237 g
00477     1 quintal metric .. = 100000 g
00478     1 saloung ......... =
00479     1 stone ........... = 6350.29318 g
00480     1 tamlung ......... =
00481     1 ton ............. = 1000000 g
00482     1 ton uk .......... = 1016046.9088 g  // long ton
00483     1 ton us .......... = 907184.74 g     // short ton
00484 */
00485 static const conv_t conv_WEIGHT[] = {
00486     DECLARE_CONV_UNIT(WEIGHT, BAHT,                 "$*12.244",       "$/12.244")
00487     DECLARE_CONV_UNIT(WEIGHT, CARATS,               "$*0.2",          "$/0.2")
00488 //    DECLARE_CONV_UNIT(WEIGHT, CHUNG,                "$", "$")
00489 //    DECLARE_CONV_UNIT(WEIGHT, DON,                  "$", "$")
00490 //    DECLARE_CONV_UNIT(WEIGHT, GEUN,                 "$", "$")
00491     DECLARE_CONV_UNIT(WEIGHT, GRAMS,                "$",              "$")
00492 //    DECLARE_CONV_UNIT(WEIGHT, GWAN,                 "$", "$")
00493 //    DECLARE_CONV_UNIT(WEIGHT, HARB,                 "$", "$")
00494 //    DECLARE_CONV_UNIT(WEIGHT, JIN_CHINA,            "$", "$")
00495 //    DECLARE_CONV_UNIT(WEIGHT, JIN_TAIWAN,           "$", "$")
00496     DECLARE_CONV_UNIT(WEIGHT, KAN,                  "$*3750",         "$/3750")
00497     DECLARE_CONV_UNIT(WEIGHT, KILOGRAMS,            "$*1000",         "$/1000")
00498     DECLARE_CONV_UNIT(WEIGHT, KIN,                  "$*600",          "$/600")
00499 //    DECLARE_CONV_UNIT(WEIGHT, LIANG_CHINA,          "$", "$")
00500 //    DECLARE_CONV_UNIT(WEIGHT, LIANG_TAIWAN,         "$", "$")
00501     DECLARE_CONV_UNIT(WEIGHT, MONME,                "$*3.75",         "$/3.75")
00502     DECLARE_CONV_UNIT(WEIGHT, OUNCES_AVOIRDUPOIS,   "$*28.349523125", "$/28.349523125")
00503     DECLARE_CONV_UNIT(WEIGHT, OUNCES_TROY,          "$*31.1034768",   "$/31.1034768")
00504     DECLARE_CONV_UNIT(WEIGHT, POUNDS,               "$*453.59237",    "$/453.59237")
00505     DECLARE_CONV_UNIT(WEIGHT, QUINTAL_METRIC,       "$*100000",       "$/100000")
00506 //    DECLARE_CONV_UNIT(WEIGHT, SALOUNG,              "$", "$")
00507     DECLARE_CONV_UNIT(WEIGHT, STONES,               "$*6350.29318",    "$/6350.29318")
00508 //    DECLARE_CONV_UNIT(WEIGHT, TAMLUNG,              "$", "$")
00509     DECLARE_CONV_UNIT(WEIGHT, TONNES,               "$*1000000",       "$/1000000")
00510     DECLARE_CONV_UNIT(WEIGHT, TONS_UK,              "$*1016046.9088",  "$/1016046.9088")
00511     DECLARE_CONV_UNIT(WEIGHT, TONS_US,              "$*907184.74",     "$/907184.74")
00512     DECLARE_CONV_END
00513 };
00514 
00515 static const conv_category_t conv_table[] = {
00516     DECLARE_CONV_CAT(ANGLE)
00517     DECLARE_CONV_CAT(AREA)
00518     DECLARE_CONV_CAT(CONSUMPTION)
00519     DECLARE_CONV_CAT(CURRENCY)
00520     DECLARE_CONV_CAT(ENERGY)
00521     DECLARE_CONV_CAT(LENGTH)
00522     DECLARE_CONV_CAT(POWER)
00523     DECLARE_CONV_CAT(PRESSURE)
00524     DECLARE_CONV_CAT(TIME)
00525     DECLARE_CONV_CAT(TEMPERATURE)
00526     DECLARE_CONV_CAT(VELOCITY)
00527     DECLARE_CONV_CAT(VOLUME)
00528     DECLARE_CONV_CAT(WEIGHT)
00529 };
00530 
00531 void ConvExecute(HWND hWnd)
00532 {
00533     DWORD         c_cat = (DWORD)SendDlgItemMessage(hWnd, IDC_COMBO_CATEGORY, CB_GETCURSEL, 0, 0);
00534     const conv_t *items = NULL;
00535     DWORD         from  = SendDlgItemMessage(hWnd, IDC_COMBO_FROM, CB_GETCURSEL, 0, 0);
00536     DWORD         to    = SendDlgItemMessage(hWnd, IDC_COMBO_TO,   CB_GETCURSEL, 0, 0);
00537     TCHAR         txt_cb[128];
00538     TCHAR         txt[128];
00539     const conv_t *item;
00540 
00541     /* do nothing if the indexes point to the same unit */
00542     if (from == to)
00543         return;
00544 
00545     /* Search correct category, since it can be sorted too */
00546     SendDlgItemMessage(hWnd, IDC_COMBO_CATEGORY, CB_GETLBTEXT, c_cat, (LPARAM)txt_cb);
00547     for (c_cat=0; c_cat < SIZEOF(conv_table); c_cat++) {
00548         LoadString(calc.hInstance, conv_table[c_cat].category, txt, SIZEOF(txt));
00549         if (!_tcscmp(txt_cb, txt)) {
00550             items = conv_table[c_cat].items;
00551             break;
00552         }
00553     }
00554 
00555     /* The units can be sorted, so I must search the exact match */
00556     item = items;
00557     SendDlgItemMessage(hWnd, IDC_COMBO_FROM, CB_GETLBTEXT, from, (LPARAM)txt_cb);
00558     while (item->unit) {
00559         LoadString(calc.hInstance, item->unit, txt, SIZEOF(txt));
00560         if (!_tcscmp(txt_cb, txt)) {
00561             from = item-items;
00562             break;
00563         }
00564         item++;
00565     }
00566     SendDlgItemMessage(hWnd, IDC_COMBO_TO, CB_GETLBTEXT, to, (LPARAM)txt_cb);
00567     item = items;
00568     while (item->unit) {
00569         LoadString(calc.hInstance, item->unit, txt, SIZEOF(txt));
00570         if (!_tcscmp(txt_cb, txt)) {
00571             to = item-items;
00572             break;
00573         }
00574         item++;
00575     }
00576 
00577     calc.Convert[0].data = (char *)items[from].formula_from;
00578     calc.Convert[1].data = (char *)items[to].formula_to;
00579     calc.Convert[0].wm_msg = WM_HANDLE_FROM;
00580     calc.Convert[1].wm_msg = WM_HANDLE_TO;
00581     PostMessage(hWnd, WM_START_CONV, 0, MAKELPARAM(0, WM_HANDLE_FROM));
00582 }
00583 
00584 void ConvAdjust(HWND hWnd, int n_cat)
00585 {
00586     TCHAR         txt[128];
00587     TCHAR         txt_cat[128];
00588     HWND          hFromWnd = GetDlgItem(hWnd, IDC_COMBO_FROM);
00589     HWND          hToWnd   = GetDlgItem(hWnd, IDC_COMBO_TO);
00590     const conv_t *item;
00591     unsigned int  n;
00592 
00593     SendDlgItemMessage(hWnd, IDC_COMBO_CATEGORY, CB_GETLBTEXT, n_cat, (LPARAM)txt_cat);
00594     for (n=0; n<SIZEOF(conv_table); n++) {
00595         item = conv_table[n].items;
00596         LoadString(calc.hInstance, conv_table[n].category, txt, SIZEOF(txt));
00597         if (!_tcscmp(txt_cat, txt))
00598             break;
00599     }
00600 
00601     SendMessage(hFromWnd, CB_RESETCONTENT, 0, 0);
00602     SendMessage(hToWnd,   CB_RESETCONTENT, 0, 0);
00603     while (item->unit) {
00604         LoadString(calc.hInstance, item->unit, txt, SIZEOF(txt));
00605         SendMessage(hFromWnd, CB_ADDSTRING, 0, (LPARAM)txt);
00606         SendMessage(hToWnd,   CB_ADDSTRING, 0, (LPARAM)txt);
00607         item++;
00608     }
00609     SendMessage(hFromWnd, CB_SETCURSEL, 0, 0);
00610     SendMessage(hToWnd,   CB_SETCURSEL, 0, 0);
00611 }
00612 
00613 void ConvInit(HWND hWnd)
00614 {
00615     HWND         hCatWnd = GetDlgItem(hWnd, IDC_COMBO_CATEGORY);
00616     TCHAR        txt[128];
00617     unsigned int n;
00618 
00619     /* Fill category combo */
00620     for (n=0; n<SIZEOF(conv_table); n++) {
00621         LoadString(calc.hInstance, conv_table[n].category, txt, SIZEOF(txt));
00622         SendMessage(hCatWnd, CB_ADDSTRING, 0, (LPARAM)txt);
00623     }
00624     SendMessage(hCatWnd, CB_SETCURSEL, 0, 0);
00625     ConvAdjust(hWnd, 0);
00626 }
00627 

Generated on Fri May 25 2012 04:14:49 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.