\ cora.fs -- Cora Phyco package of conversion ratios and physical constants \ Version 1 \ 2005/9/9 David Meyer \ Cora Phyco provides a Forth environment to facilitate conversion of \ quantities among a large variety of measurement units and systems. \ Inspired by Frink by Allan Eliasen. \ This version creates a word for each measurement unit that both holds the \ unit's conversion factor and converts the quantity at TOS. Physical constants \ are represented as Forth constants. .( Loading Cora Phyco version 1 ...) \ Pending unit conversion flag VARIABLE <cvt> FALSE <cvt> ! \ Pending display engineering notation flag VARIABLE <eng> FALSE <eng> ! \ Store unit conversion factor r as float. On reference convert r1 quantity to \ r2 standard units or display r1 quantity converted to target units. : unit ( r "name" -- ) CREATE F, DOES> ( r1 -- r2| ) <cvt> @ IF F@ F/ <eng> @ IF FE. FALSE <eng> ! ELSE F. THEN FALSE <cvt> ! ELSE F@ F* THEN ; \ Set conversion flag : -> ( -- ) TRUE <cvt> ! ; \ Set conversion and engineering notation flags : ->e ( -- ) TRUE DUP <cvt> ! <eng> ! ; \ Physical constants (standard units) 2e0 pi F* FCONSTANT circle \ radians per full circle angle 299792458e0 FCONSTANT c \ speed of light in vacuum (m/s) \ Speed (standard unit: m/s (meters per second) 1e0 unit m/s \ meters per second (standard) 331.46e0 unit mach \ speed of sound in dry air at STP \ Acceleration (standard unit: m/s^2 (meters per second per second) 1e0 unit m/s^2 \ meters per second per second (standard) 980665e-5 unit gee \ standard gravitational acceleration \ Time (standard unit: s (second)) 1e0 unit s \ second (standard) 60e0 60e0 F* unit hr \ hour 24e0 hr unit day \ day \ Angular measure (standard unit: radian (dimensionless)) circle 360e0 F/ unit deg \ degree 1e0 deg 60e0 F/ unit amin \ arc minute 1e0 amin 60e0 F/ unit asec \ arc second \ Linear measure (standard unit: m (meter)) 1e0 unit m \ meter (standard) 1e3 unit km \ kilometer 1e-2 unit cm \ centimeter 1e-3 unit mm \ millimeter 3048e-4 unit ft \ foot 1e0 ft 12e0 F/ unit in \ inch 3e0 ft unit yd \ yard 5280e0 ft unit mi \ mile 1852e0 unit nmi \ nautical mile 149597870691e0 unit au \ astronomical unit 365.25e0 day c F* unit ly \ light year 1e0 au 1e0 asec F/ unit pc \ parsec \ Area (standard unit: m^2 (square meter)) 1e0 unit m^2 \ square meter (standard) 1e0 ft 2e0 F** unit ft^2 \ square feet 43560e0 ft^2 unit acre \ acre 1e2 unit are \ are 1e4 unit hectare \ hectare \ Volume (standard unit: m^3 (cubic meter)) 1e0 unit m^3 \ cubic meter (standard) 1e-6 unit cc \ cubic centimeter 1e0 in 3e0 F** unit in^3 \ cubic inch 231e0 in^3 unit gal \ gallon 1e0 gal 4e0 F/ unit qt \ quart 1e0 qt 2e0 F/ unit pt \ pint 1e0 pt 16e0 F/ unit floz \ fluid ounce 42e0 gal unit bbl \ petroleum barrel 8e0 floz unit cup \ cup 1e0 cup 16e0 F/ unit tbsp \ tablespoon 1e0 tbsp 3e0 F/ unit tsp \ teaspoon 1e3 cc unit l \ liter 1e0 cc unit ml \ milliliter \ Mass (standard unit: kg (kilogram)) 1e0 unit kg \ kilogram (standard) 1e-3 unit g \ gram 1e3 unit mt \ tonne, metric ton 45359237e-8 unit lb \ pound 2e3 lb unit t \ ton 1e0 lb 16e0 F/ unit oz \ ounce \ Temperature (standard system: Kelvin) 1e0 unit kel \ Kelvin (standard) 5e0 9e0 f/ FCONSTANT degfah \ Fahrenheit degree 255.372e0 FCONSTANT 0fah \ 0 degrees Fahrenheit 273.15e0 FCONSTANT 0cel \ 0 degrees Celsius : fah ( r1 -- r2| ) <cvt> @ IF 0fah F- degfah F/ F. FALSE <cvt> ! ELSE degfah F* 0fah F+ THEN ; : cel ( r1 -- r2| ) <cvt> @ IF 0cel F- F. FALSE <cvt> ! ELSE 0cel F+ THEN ; .( done) cr