439 lines
24 KiB
Rexx
439 lines
24 KiB
Rexx
/* REXX convert temperatures from/to 58 temperature scakes */
|
|
Parse Source src
|
|
Parse Var src . how .
|
|
|
|
If how='FUNCTION' Then
|
|
If arg(2)='' Then
|
|
tlist=arg(1) 'TO' 'K'
|
|
Else
|
|
tlist=arg(1) 'TO' arg(2)
|
|
Else Do
|
|
Parse Arg tList /* get the list of pairs */
|
|
If arg(1)='?' Then Call help
|
|
tList= space(tList) /* elide any and all superfluous blanks.*/
|
|
End
|
|
Do While tList>'' /* process the list */
|
|
Parse Var tList pair ',' tList /* pairs are separated by commas */
|
|
Parse Var pair from_to '(' desc /* get spec and description (If any) */
|
|
Parse upper Var from_to fromt ' TO' toscal . /* get temperature and target scale */
|
|
If toscal=='' Then Do /* no target scale: show all targets */
|
|
If how='FUNCTION' Then Do
|
|
all=0
|
|
toscal='K'
|
|
End
|
|
Else Do
|
|
all=1
|
|
toscale='all'
|
|
End
|
|
End
|
|
Else Do
|
|
all=0
|
|
toscale=scalename(toscal)
|
|
End
|
|
|
|
Parse Var fromt fromtemp fromscal
|
|
If fromscal='' Then
|
|
fromscale='K' /*assume kelvin as per task requirement*/
|
|
Else
|
|
fromscale=scalename(fromscal)
|
|
|
|
If fromt='' Then Call serr 'No source temperature specified'
|
|
If \datatype(fromtemp,'N') Then Call serr 'Source temperature ('fromtemp') not numeric'
|
|
If left(fromscale,1)='*' Then Call serr 'Invalid source scale' fromscale
|
|
If left(toscale,1)='*' Then Call serr 'Invalid target scale' toscale
|
|
|
|
F=convert2Fahrenheit(fromtemp fromscale) /*convert a temperature --? Fahrenheit.*/
|
|
|
|
If F<-459.67 Then Call serr 'Source temperature below absolute zero'
|
|
|
|
If how<>'FUNCTION' Then Do /* write a header line */
|
|
If desc<>'' Then desc='('desc
|
|
Say pair /*show original value & scale (for sep)*/
|
|
If toscale<>'' Then
|
|
Say fromtemp fromscale 'TO' toscale
|
|
Else
|
|
Say fromtemp fromscale 'TO' all
|
|
End
|
|
|
|
Call convert2specific
|
|
|
|
End /* while tlist>'' */
|
|
Exit /* stick a fork in it, we're all done. */
|
|
|
|
scaleName:
|
|
Parse Arg sn /* abbreviations --> temp. short name. */
|
|
snU=translate(sn) /* uppercase version of temperature unit*/
|
|
snU=translate(snU,'-eE',"_éÉ") /* translate some accented characters. */
|
|
|
|
If left(snU,7)=='DEGREES' Then /* is this a redundant "degrees" ? */
|
|
snU=substr(snU,8)
|
|
If left(snU,6)=='DEGREE' Then /* " " " " "degree" ? */
|
|
snU=substr(snU,7)
|
|
snU=strip(snU) /* elide all leading & trailing blanks */
|
|
_= length(snU) /* obtain the length of the snU value */
|
|
|
|
If right(snU,1)=='S' & _>1 Then
|
|
snU=left(snU,_-1) /* remove any trailing plural(s) */
|
|
|
|
Select /* get scalename from abbrevuation */
|
|
When abbrev('ALL' , snU, 3) Then sn= "ALL"
|
|
When abbrev('ABSOLUTE' , snU, 1) Then sn= "ABSOLUTE"
|
|
When abbrev('AMONTON' , snU) Then sn= "AMONTON"
|
|
When abbrev('BARNDORF' , snU,2) |,
|
|
abbrev('BARNSDORF' , snU,2) Then sn= "BARNSDORF"
|
|
When abbrev('BEAUMIUR' , snU,3) |,
|
|
abbrev('BEAUMUIR' , snU,3) Then sn= "BEAUMUIR"
|
|
When abbrev('BENERT' , snU,3) |,
|
|
abbrev('BENART' , snU,3) Then sn= "BENART"
|
|
When abbrev('BRISSEN' , snU,3) |,
|
|
abbrev('BRISSON' , snU,3) Then sn= "BRISSEN"
|
|
When abbrev('BURGEN' , snU,3) |,
|
|
abbrev('BURGAN' , snU,3) |,
|
|
abbrev('BERGAN' , snU,3) |,
|
|
abbrev('BERGEN' , snU,3) Then sn= "BERGEN"
|
|
When abbrev('CENTIGRADE' , snU) |,
|
|
abbrev('CENTRIGRADE' , snU) |, /* 50% misspelled.*/
|
|
abbrev('CETIGRADE' , snU) |, /* 50% misspelled.*/
|
|
abbrev('CENTINGRADE' , snU) |,
|
|
abbrev('CENTESIMAL' , snU) |,
|
|
abbrev('CELCIU' , snU) |, /* 82% misspelled.*/
|
|
abbrev('CELCIOU' , snU) |, /* 4% misspelled.*/
|
|
abbrev('CELCUI' , snU) |, /* 4% misspelled.*/
|
|
abbrev('CELSUI' , snU) |, /* 2% misspelled.*/
|
|
abbrev('CELCEU' , snU) |, /* 2% misspelled.*/
|
|
abbrev('CELCU' , snU) |, /* 2% misspelled.*/
|
|
abbrev('CELISU' , snU) |, /* 1% misspelled.*/
|
|
abbrev('CELSU' , snU) |, /* 1% misspelled.*/
|
|
abbrev('HECTOGRADE' , snU) |,
|
|
abbrev('CELSIU' , snU) Then sn= "CELSIUS"
|
|
When abbrev('CIMANTO' , snU,2) |,
|
|
abbrev('CIMENTO' , snU,2) Then sn= "CIMENTO"
|
|
When abbrev('CRUQUIOU' , snU,2) |,
|
|
abbrev('CRUQUIO' , snU,2) |,
|
|
abbrev('CRUQUIU' , snU,2) Then sn= "CRUQUIU"
|
|
When abbrev('DALANCE' , snU,4) |,
|
|
abbrev('DALENCE' , snU,4) Then sn= "DALENCE"
|
|
When abbrev('DANELLE' , snU,3) |,
|
|
abbrev('DANEAL' , snU,3) |,
|
|
abbrev('DANIAL' , snU,3) |,
|
|
abbrev('DANIELE' , snU,3) |,
|
|
abbrev('DANNEL' , snU,3) |,
|
|
abbrev('DANYAL' , snU,3) |,
|
|
abbrev('DANYEL' , snU,3) |,
|
|
abbrev('DANIELL' , snU,3) Then sn= "DANIELL"
|
|
When abbrev('DALTON' , snU,3) Then sn= "DALTON"
|
|
When abbrev('DELAHIRE' , snU,7) |,
|
|
abbrev('LAHIRE' , snU,4) |,
|
|
abbrev('HIRE' , snU,2) |,
|
|
abbrev('DE-LA-HIRE' , snU,7) Then sn= "DE LA HIRE"
|
|
When abbrev('DELAVILLE' , snU,7) |,
|
|
abbrev('LAVILLE' , snU,3) |,
|
|
abbrev('VILLE' , snU,1) |,
|
|
abbrev('VILLA' , snU,1) |,
|
|
abbrev('DE-LA-VILLE' , snU,7) Then sn= "DE LA VILLE"
|
|
When abbrev('DELISLE' , snU,3) Then sn= "DELISLE"
|
|
When abbrev('DELISLE-OLD' , snU,8) |,
|
|
abbrev('OLDDELISLE' , snU,6) |,
|
|
abbrev('DELISLEOLD' , snU,8) Then sn= "DELISLE OLD"
|
|
When abbrev('DELUC' , snU,4) |,
|
|
abbrev('LUC' , snU,2) |,
|
|
abbrev('DE-LUC' , snU,5) Then sn= "DE LUC"
|
|
When abbrev('DELYON' , snU,4) |,
|
|
abbrev('LYON' , snU,2) |,
|
|
abbrev('DE-LYON' , snU,5) Then sn= "DE LYON"
|
|
When abbrev('DEREVILLA' , snU,3) |,
|
|
abbrev('DEREVILA' , snU,3) |,
|
|
abbrev('REVILLA' , snU,3) |,
|
|
abbrev('DE-REVILLA' , snU,4) |,
|
|
abbrev('DE-REVILLA' , snU,5) Then sn= "DE REVILLAS"
|
|
When abbrev('DEVILLENEUVE' , snU,3) |,
|
|
abbrev('DE-VILLENEUVE' , snU,4) Then sn= "DE VILLENEUVE"
|
|
When abbrev('DURHAM' , snU,3) |,
|
|
abbrev('DERHAM' , snU,4) Then sn= "DERHAM"
|
|
When abbrev('OLDDURHAM' , snU,5) |,
|
|
abbrev('OLDDERHAM' , snU,6) |,
|
|
abbrev('DERHAM-OLD' , snU,4) |,
|
|
abbrev('DERHAMOLD' , snU,4) Then sn= "DERHAM OLD"
|
|
When abbrev('DE-SUEDE' , snU,4) |,
|
|
abbrev('DESUEDE' , snU,4) Then sn= "DE SUEDE"
|
|
When abbrev('DU-CREST' , snU,2) |,
|
|
abbrev('DUCREST' , snU,2) Then sn= "DU CREST"
|
|
When abbrev('EDENBURGH' , snU,2) |,
|
|
abbrev('EDINBURGH' , snU,2) Then sn= "EDINBURGH"
|
|
When abbrev('EVOLT' , snU,2) |,
|
|
abbrev('ELECTRONVOLT' , snU,2) Then sn= "ELECTRON VOLTS"
|
|
When abbrev('FARENHEIT' , snU) |, /* 39% misspelled.*/
|
|
abbrev('FARENHEIGHT' , snU) |, /* 15% misspelled.*/
|
|
abbrev('FARENHITE' , snU) |, /* 6% misspelled.*/
|
|
abbrev('FARENHIET' , snU) |, /* 3% misspelled.*/
|
|
abbrev('FARHENHEIT' , snU) |, /* 3% misspelled.*/
|
|
abbrev('FARINHEIGHT' , snU) |, /* 2% misspelled.*/
|
|
abbrev('FARENHIGHT' , snU) |, /* 2% misspelled.*/
|
|
abbrev('FAHRENHIET' , snU) |, /* 2% misspelled.*/
|
|
abbrev('FERENHEIGHT' , snU) |, /* 2% misspelled.*/
|
|
abbrev('FEHRENHEIT' , snU) |, /* 2% misspelled.*/
|
|
abbrev('FERENHEIT' , snU) |, /* 2% misspelled.*/
|
|
abbrev('FERINHEIGHT' , snU) |, /* 1% misspelled.*/
|
|
abbrev('FARIENHEIT' , snU) |, /* 1% misspelled.*/
|
|
abbrev('FARINHEIT' , snU) |, /* 1% misspelled.*/
|
|
abbrev('FARANHITE' , snU) |, /* 1% misspelled.*/
|
|
abbrev('FAHRENHEIT' , snU) Then sn= "FAHRENHEIT"
|
|
When abbrev('OLDFAHRENHEIT' , snU,4) |,
|
|
abbrev('FAHRENHEIT-OLD' , snU,13) |,
|
|
abbrev('FAHRENHEITOLD' , snU,13) Then sn= "FARHENHEIT OLD"
|
|
When abbrev('FLORENTINE-LARGE' , snU,12) |,
|
|
abbrev('LARGE-FLORENTINE' , snU,7) |,
|
|
abbrev('LARGEFLORENTINE' , snU,6) |,
|
|
abbrev('FLORENTINELARGE' , snU,12) Then sn= "FLORENTINE LARGE"
|
|
When abbrev('FLORENTINE-MAGNUM' , snU,2) |,
|
|
abbrev('MAGNUM-FLORENTINE' , snU,3) |,
|
|
abbrev('MAGNUMFLORENTINE' , snU,3) |,
|
|
abbrev('FLORENTINEMAGNUM' , snU,2) Then sn= "FLORENTINE MAGNUM"
|
|
When abbrev('FLORENTINE-SMALL' , snU,13) |,
|
|
abbrev('SMALL-FLORENTINE' , snU,7) |,
|
|
abbrev('SMALLFLORENTINE' , snU,6) |,
|
|
abbrev('FLORENTINESMALL' , snU,13) Then sn= "FLORENTINE SMALL"
|
|
When abbrev('FOULER' , snU,2) |,
|
|
abbrev('FOWLOR' , snU,2) |,
|
|
abbrev('FOWLER' , snU,2) Then sn= "FOWLER"
|
|
When abbrev('FRICK' , snU,2) Then sn= "FRICK"
|
|
When abbrev('GAS-MARK' , snU,2) |,
|
|
abbrev('GASMARK' , snU,2) Then sn= "GAS MARK"
|
|
When abbrev('GOUBERT' , snU,2) Then sn= "GOUBERT"
|
|
When abbrev('HAIL' , snU,3) |,
|
|
abbrev('HALE' , snU,3) Then sn= "HALES"
|
|
When abbrev('HANOW' , snU,3) Then sn= "HANOW"
|
|
When abbrev('HUCKSBEE' , snU,3) |,
|
|
abbrev('HAWKSBEE' , snU,3) |,
|
|
abbrev('HAUKSBEE' , snU,3) Then sn= "HAUKSBEE"
|
|
When abbrev('JACOBSHOLBORN' , snU,2) |,
|
|
abbrev('JACOBS-HOLBORN' , snU,2) Then sn= "JACOBS-HOLBORN"
|
|
When abbrev('KALVIN' , snU) |, /* 27% misspelled.*/
|
|
abbrev('KERLIN' , snU) |, /* 18% misspelled.*/
|
|
abbrev('KEVEN' , snU) |, /* 9% misspelled.*/
|
|
abbrev('KELVIN' , snU) Then sn= "KELVIN"
|
|
When abbrev('LAYDEN' , snU) |,
|
|
abbrev('LEIDEN' , snU) Then sn= "LEIDEN"
|
|
When abbrev('NEUTON' , snU) |, /*100% misspelled.*/
|
|
abbrev('NEWTON' , snU) Then sn= "NEWTON"
|
|
When abbrev('ORTEL' , snU) |,
|
|
abbrev('OERTEL' , snU) Then sn= "OERTEL"
|
|
When abbrev('PLACK' , snU) |, /*100% misspelled.*/
|
|
abbrev('PLANC' , snU) |, /* misspelled.*/
|
|
abbrev('PLANK' , snU) |, /* misspelled.*/
|
|
abbrev('PLANCK' , snU) Then sn= "PLANCK"
|
|
When abbrev('RANKINE' , snU, 1) Then sn= "RANKINE"
|
|
When abbrev('REAUMUR' , snU, 2) Then sn= "REAUMUR"
|
|
When abbrev('RICKTER' , snU, 3) |,
|
|
abbrev('RICHTER' , snU, 3) Then sn= "RICHTER"
|
|
When abbrev('RINALDINI' , snU, 3) Then sn= "RINALDINI"
|
|
When abbrev('ROEMER' , snU, 3) |,
|
|
abbrev('ROMER' , snU, 3) Then sn= "ROMER"
|
|
When abbrev('ROSANTHAL' , snU, 3) |,
|
|
abbrev('ROSENTHAL' , snU, 3) Then sn= "ROSENTHAL"
|
|
When abbrev('RSOL' , snU, 2) |,
|
|
abbrev('RSL' , snU, 2) |,
|
|
abbrev('ROYALSOCIETYOFLONDON' , snU, 3) |,
|
|
abbrev('ROYAL-SOCIETY-OF-LONDON' , snU, 3) Then sn= "ROYAL SOCIETY"
|
|
When abbrev('SAGREDO' , snU, 3) Then sn= "SAGREDO"
|
|
When abbrev('ST.-PATRICE' , snU, 3) |,
|
|
abbrev('ST.PATRICE' , snU, 3) |,
|
|
abbrev('SAINTPATRICE' , snU, 3) |,
|
|
abbrev('SAINT-PATRICE' , snU, 3) Then sn= "SAINT-PATRICE"
|
|
When abbrev('STUFFE' , snU, 3) |,
|
|
abbrev('STUFE' , snU, 3) Then sn= "STUFE"
|
|
When abbrev('SULTZER' , snU, 2) |,
|
|
abbrev('SULZER' , snU, 2) Then sn= "SULZER"
|
|
When abbrev('WEDGEWOOD' , snU) |,
|
|
abbrev('WEDGWOOD' , snU) Then sn= "WEDGWOOD"
|
|
Otherwise
|
|
sn='***' sn '***'
|
|
End /*Select*/
|
|
Return sn
|
|
|
|
convert2Fahrenheit: /*convert N --? ºF temperatures. */
|
|
/* [?] fifty-eight temperature scales.*/
|
|
Parse Arg n sn
|
|
Select
|
|
When sn=='ABSOLUTE' Then F= n * 9/5 - 459.67
|
|
When sn=='AMONTON' Then F= n * 8.37209 - 399.163
|
|
When sn=='BARNSDORF' Then F= n * 6.85714 + 6.85714
|
|
When sn=='BEAUMUIR' Then F= n * 2.22951 + 32
|
|
When sn=='BENART' Then F= n * 1.43391 + 31.2831
|
|
When sn=='BERGEN' Then F=(n + 23.8667) * 15/14
|
|
When sn=='BRISSEN' Then F= n * 32/15 + 32
|
|
When sn=='CELSIUS' Then F= n * 9/5 + 32 /* C -> Celsius.*/
|
|
When sn=='CIMENTO' Then F= n * 2.70677 - 4.54135
|
|
When sn=='CRUQUIUS' Then F= n * 0.409266 - 405.992
|
|
When sn=='DALENCE' Then F= n * 2.7 + 59
|
|
When sn=='DALTON' Then F=rxCalcexp(rxCalclog(373.15/273.15)*n/100)*9*273.15/5-459.67
|
|
--When sn=='DALTON' Then F=273.15*rxCalcexp(273.15/273.15,n/100)*1.8-459.67
|
|
When sn=='DANIELL' Then F= n * 7.27194 + 55.9994
|
|
When sn=='DE LA HIRE' Then F=(n - 3) / 0.549057
|
|
When sn=='DE LA VILLE' Then F=(n + 6.48011) / 0.985568
|
|
When sn=='DELISLE' Then F=212 - n * 6/5
|
|
When sn=='DELISLE OLD' Then F=212 - n * 1.58590197
|
|
When sn=='DE LUC' Then F=(n + 14) * 16/7
|
|
When sn=='DE LYON' Then F=(n + 17.5) * 64/35
|
|
When sn=='DE REVILLAS' Then F=212 - n * 97/80
|
|
When sn=='DERHAM' Then F= n / 0.38444386 - 188.578
|
|
When sn=='DERHAM OLD' Then F= n * 3 + 4.5
|
|
When sn=='DE SUEDE' Then F=(n + 17.6666) * 150/83
|
|
When sn=='DE VILLENEUVE' Then F=(n + 23.7037) / 0.740741
|
|
When sn=='DU CREST' Then F=(n + 37.9202) / 0.650656
|
|
When sn=='EDINBURGH' Then F= n * 4.6546 - 6.40048
|
|
When sn=='ELECTRON VOLTS' Then F= n * 20888.1 - 459.67
|
|
When sn=='FAHRENHEIT' Then F= n
|
|
When sn=='FAHRENHEIT OLD' Then F= n * 20/11 - 89.2727
|
|
When sn=='FLORENTINE LARGE' Then F=(n + 7.42857) / 0.857143
|
|
When sn=='FLORENTINE MAGNUM' Then F=(n + 73.9736 ) / 1.50659
|
|
When sn=='FLORENTINE SMALL' Then F=(n - 1.38571) / 0.378571
|
|
When sn=='FOWLER' Then F= n * 0.640321 + 53.7709
|
|
When sn=='FRICK' Then F= n * 200/251 + 58.5339
|
|
When sn=='GASMARK' Then F= n * 25 + 250
|
|
When sn=='GOUBERT' Then F= n * 2 + 32
|
|
When sn=='HALES' Then F= n * 1.2 + 32
|
|
When sn=='HANOW' Then F= n * 1.06668 - 10.6672
|
|
When sn=='HAUKSBEE' Then F= n * 18/25 + 88.16
|
|
When sn=='JACOBS-HOLBORN' Then F= n * 18/71 - 53.4366
|
|
When sn=='K' Then F= n * 9/5 - 459.67
|
|
When sn=='KELVIN' Then F= n * 9/5 - 459.67
|
|
When sn=='LEIDEN' Then F= n * 1.8 - 423.4
|
|
When sn=='NEWTON' Then F= n * 60/11 + 32
|
|
When sn=='OERTEL' Then F= n + n - 32
|
|
When sn=='PLANCK' Then F= n * 1.416833e32* 9/5 - 459.67
|
|
When sn=='RANKINE' Then F= n - 459.67 /* R -> Rankine.*/
|
|
When sn=='REAUMUR' Then F= n * 9/4 + 32
|
|
When sn=='RICHTER' Then F= n * 160/73 - 7.45205
|
|
When sn=='RINALDINI' Then F= n * 15 + 32
|
|
When sn=='ROMER' Then F=(n - 7.5) * 27/4+ 32
|
|
When sn=='ROSENTHAL' Then F= n * 45/86 - 453.581
|
|
When sn=='ROYAL SOCIETY' Then F=(n -122.82) * -50/69
|
|
When sn=='SAGREDO' Then F= n * 0.3798 - 5.98
|
|
When sn=='SAINT-PATRICE' Then F= n * 2.62123 + 115.879
|
|
When sn=='STUFE' Then F= n * 45 + 257
|
|
When sn=='SULZER' Then F= n * 1.14595 + 33.2334
|
|
When sn=='THERMOSTAT' Then F= n * 54 + 32
|
|
When sn=='WEDGWOOD' Then F= n * 44.7429295 + 516.2
|
|
Otherwise Call serr 'invalid temperature scale: '
|
|
End /*Select*/
|
|
Return F
|
|
|
|
convert2specific: /*convert ºF --? xxx temperatures.*/
|
|
|
|
K=(F+459.67)*5/9 /*compute temperature in kelvin scale. */
|
|
a=(1e||(-digits()%2)-digits()%20) /*minimum number for Dalton temperature*/
|
|
eV=(F+459.67)/20888.1 /*compute the number of electron volts.*/
|
|
|
|
If ?('ABSOLUTE') Then Call line fn(k) "Absolute"
|
|
If ?('AMONTON') Then Call line fn((F+399.163) / 8.37209 ) "Amonton"
|
|
If ?('BARNSDORF') Then Call line fn( ( F - 6.85715) / 6.85715 ) "Barnsdorf"
|
|
If ?('BEAUMUIR') Then Call line fn( ( F - 32 ) / 2.22951 ) "Beaumuir"
|
|
If ?('BENART') Then Call line fn( ( F - 31.2831 ) / 1.43391 ) "Benart"
|
|
If ?('BERGEN') Then Call line fn( ( F * 14/15 ) - 23.8667 ) "Bergen"
|
|
If ?('BRISSON') Then Call line fn( ( F - 32 ) * 15/32 ) "Brisson"
|
|
If ?('CELSIUS') Then Call line fn( ( F - 32 ) * 5/9 ) "Celsius"
|
|
If ?('CIMENTO') Then Call line fn( ( F + 4.54135) / 2.70677 ) "Cimento"
|
|
If ?('CRUQUIUS') Then Call line fn( ( F + 405.992 ) / 0.409266 ) "Cruquius"
|
|
If ?('DALENCE') Then Call line fn( ( F - 59 ) / 2.7 ) "Dalence"
|
|
If ?('DALTON') Then Do
|
|
If K>a Then Call line fn(100*rxCalclog(k/273.15)/rxCalclog(373.15/273.15) ) "Dalton"
|
|
Else Call line right("-infinity ", 60) "Dalton"
|
|
End
|
|
If ?('DANIELL') Then Call line fn( ( F - 55.9994 ) / 7.27194 ) "Daniell"
|
|
If ?('DE LA HIRE') Then Call line fn( F * 0.549057 + 3 ) "De la Hire"
|
|
If ?('DE LA VILLE') Then Call line fn( F * 0.985568 - 6.48011 ) "De la Ville"
|
|
If ?('DELISLE') Then Call line fn( ( 212 - F ) * 5/6 ) "Delisle"
|
|
If ?('DELISLE OLD') Then Call line fn( ( 212 - F ) / 1.58590197 ) "Delisle OLD"
|
|
If ?('DE LUC') Then Call line fn( F * 7/16 - 14 ) "De Luc"
|
|
If ?('DE LYON') Then Call line fn( F * 35/64 - 17.5 ) "De Lyon"
|
|
If ?('DE REVILLAS') Then Call line fn( ( 212 - F ) * 80/97 ) "De Revillas"
|
|
If ?('DERHAM') Then Call line fn( F * 0.38444386 + 72.4978 ) "Derham"
|
|
If ?('DERHAM OLD') Then Call line fn( ( F - 4.5 ) / 3 ) "Derham OLD"
|
|
If ?('DE VILLENEUVE') Then Call line fn( F * 0.740741 - 23.7037 ) "De Villeneuve"
|
|
If ?('DE SUEDE') Then Call line fn( F * 83/150 - 17.6666 ) "De Suede"
|
|
If ?('DU CREST') Then Call line fn( F * 0.650656 - 37.9202 ) "Du Crest"
|
|
If ?('EDINBURGH') Then Call line fn( ( F + 6.40048) / 4.6546 ) "Edinburgh"
|
|
If ?('ELECTRON VOLTS') Then Call line fn( eV ) "electron volt"s(eV)
|
|
If ?('FAHRENHEIT') Then Call line fn( F ) "Fahrenheit"
|
|
If ?('FAHRENHEIT OLD') Then Call line fn( F * 20/11 - 89.2727 ) "Fahrenheit OLD"
|
|
If ?('FLORENTINE LARGE') Then Call line fn( F * 0.857143 - 7.42857 ) "Florentine large"
|
|
If ?('FLORENTINE MAGNUM') Then Call line fn( F * 1.50659 - 73.9736 ) "Florentine Magnum"
|
|
If ?('FLORENTINE SMALL') Then Call line fn( F * 0.378571 + 1.38571 ) "Florentine small"
|
|
If ?('FOWLER') Then Call line fn( ( F - 53.7709 ) / 0.640321 ) "Fowler"
|
|
If ?('FRICK') Then Call line fn( ( F - 58.5338 ) * 251/200 ) "Frick"
|
|
If ?('GAS MARK') Then Call line fn( ( F - 250 ) * 0.04 ) "gas mark"
|
|
If ?('GOUBERT') Then Call line fn( ( F + 32 ) * 0.5 ) "Goubert"
|
|
If ?('HALES') Then Call line fn( ( F - 32 ) / 1.2 ) "Hales"
|
|
If ?('HANOW') Then Call line fn( ( F + 10.6672 ) / 1.06668 ) "Hanow"
|
|
If ?('HAUKSBEE') Then Call line fn( ( F - 88.16 ) * 25/18 ) "Hauksbee"
|
|
If ?('JACOBS-HOLBORN') Then Call line fn( ( F + 53.4366 ) * 71/18 ) "Jacobs-Holborn"
|
|
If ?('KELVIN') Then Call line fn( k ) 'KELVIN'
|
|
If ?('LEIDEN') Then Call line fn( F / 1.8 + 235.222 ) "Leiden"
|
|
If ?('NEWTON') Then Call line fn( ( F - 32 ) * 11/60 ) "Newton"
|
|
If ?('OERTEL') Then Call line fn( ( F + 32 ) * 0.5 ) "Oertel"
|
|
If ?('PLANCK') Then Call line fn( ( F + 459.67 ) * 5/9 / 1.416833e32 ) "Planck"
|
|
If ?('RANKINE') Then Call line fn( F + 459.67 ) "Rankine"
|
|
If ?('REAUMUR') Then Call line fn( ( F - 32 ) * 4/9 ) "Reaumur"
|
|
If ?('RICHTER') Then Call line fn( ( F + 7.45205) * 73/160 ) "Richter"
|
|
If ?('RINALDINI') Then Call line fn( ( F - 32 ) / 15 ) "Rinaldini"
|
|
If ?('ROMER') Then Call line fn( ( F - 32 ) * 4/27 + 7.5 ) "Romer"
|
|
If ?('ROSENTHAL') Then Call line fn( ( F + 453.581 ) * 86/45 ) "Rosenthal"
|
|
If ?('ROYAL SOCIETY') Then Call line fn( F * -69/50 + 122.82 ) "Royal Society of London"
|
|
If ?('SAGREDO') Then Call line fn( ( F + 5.98 ) / 0.3798 ) "Segredo"
|
|
If ?('SAINT-PATRICE') Then Call line fn( ( F - 115.879 ) / 2.62123 ) "Saint-Patrice"
|
|
If ?('STUFE') Then Call line fn( ( F - 257 ) / 45 ) "Stufe"
|
|
If ?('SULZER') Then Call line fn( ( F - 33.2334 ) / 1.14595 ) "Sulzer"
|
|
If ?('THERMOSTAT') Then Call line fn( ( F - 32 ) / 54 ) "Thermostat"
|
|
If ?('WEDGWOOD') Then Call line fn( ( F - 516.2 ) / 44.7429295 ) "Wedgwood"
|
|
Return
|
|
|
|
line:
|
|
If how='FUNCTION' & all=0 Then
|
|
Exit space(arg(1))
|
|
Else
|
|
Say arg(1)
|
|
Return
|
|
|
|
?:
|
|
Return (arg(1)=toscale | all)
|
|
|
|
fn: Procedure Expose how result
|
|
showDig=8 /* only show 8 decimal digs. */
|
|
number=commas(format(arg(1),,showDig)/1) /* format# 8 digits past . and add commas */
|
|
p=pos('.',number) /* find position of the decimal point. */
|
|
/* [?] align integers with FP numbers. */
|
|
If p==0 Then /* no decimal point .*/
|
|
number=number||left('',5+showDig+1)
|
|
Else /* ddd.ddd */
|
|
number=number||left('',5+showDig-length(number)+p)
|
|
Return right(number,max(25,length(number)))/* return the re-formatted argument (#).*/
|
|
|
|
commas: Procedure
|
|
Parse Arg u
|
|
a=pos('.',u'.')
|
|
e=1
|
|
If left(u,1)='-' Then e=2
|
|
Do j=a-4 To e by -3
|
|
u=insert(',',u,j)
|
|
End
|
|
Return u
|
|
|
|
s:
|
|
If arg(1)==1 Then Return arg(3)
|
|
Return word(arg(2)'s',1) /*pluralizer.*/
|
|
|
|
serr:
|
|
If how='FUNCTION' Then
|
|
Exit arg(1)
|
|
Else
|
|
Say arg(1)
|
|
Exit 13
|
|
|
|
help:
|
|
Say 'use as command:'
|
|
Say 'rexx tcw fromtemp [fromscale] [TO toscale | all],...'
|
|
Say 'or as function'
|
|
Say 'tcw(fromtemp [fromscale] [TO toscale])'
|
|
Exit
|
|
::Requires rxmath library
|