Just another update

This commit is contained in:
Ingy döt Net 2015-02-20 00:35:01 -05:00
parent a25938f123
commit 00a190b0a6
6591 changed files with 94363 additions and 23227 deletions

View file

@ -1,10 +1,13 @@
/*REXX program converts temperature for: C, D, F, N, Ra, Re, Ro, and K.*/
/*REXX program converts temperatures for a number of temperature scales.*/
numeric digits 120 /*be able to support huge numbers*/
parse arg tList /*get specified temperature lists*/
do until tList='' /*process a list of temperatures.*/
parse var tList x ',' tList /*temps are separated by commas. */
x=translate(x,'((',"[{") /*support other grouping symbols.*/
x=space(x); parse var x z '(' /*handle any comments (if any). */
parse upper var z z ' TO ' ! . /*separate the TO option from #*/
if !=='' then !='ALL'; all=!=='ALL' /*allow specification of "TO" opt*/
if z=='' then call serr 'no arguments were specified.'
_=verify(z, '+-.0123456789') /*a list of valid number thingys.*/
n=z
@ -13,87 +16,102 @@ parse arg tList /*get specified temperature lists*/
n=left(z, _-1) /*pick off the number (hopefully)*/
u=strip(substr(z, _)) /*pick off the temperature unit. */
end
else u='k' /*assume Kelvin as per task req.*/
else u='k' /*assume kelvin as per task req.*/
uU=translate(u,'eE',"éÉ"); upper uU /*uppercase version of temp unit.*/
if left(uU,7)=='DEGREES' then uU=substr(uU,8) /*redundant "degrees"? */
if left(uU,6)=='DEGREE' then uU=substr(uU,7) /* " "degree" ? */
uU=strip(uU)
if \datatype(n,'N') then call serr 'illegal number:' n
/*accept alternate spellings. */
select /*convert ──► ºF temperatures. */
when abbrev('CENTIGRADE' , uU) |,
abbrev('CENTRIGRADE', uU) |, /* 50% misspelled.*/
abbrev('CETIGRADE' , uU) |, /* 50% misspelled.*/
abbrev('CENTINGRADE', uU) |,
abbrev('CENTESIMAL' , uU) |,
abbrev('CELCIUS' , uU) |, /* 82% misspelled.*/
abbrev('CELCIOUS' , uU) |, /* 4% misspelled.*/
abbrev('CELCUIS' , uU) |, /* 4% misspelled.*/
abbrev('CELSUIS' , uU) |, /* 2% misspelled.*/
abbrev('CELCEUS' , uU) |, /* 2% misspelled.*/
abbrev('CELCUS' , uU) |, /* 2% misspelled.*/
abbrev('CELISUS' , uU) |, /* 1% misspelled.*/
abbrev('CELSUS' , uU) |, /* 1% misspelled.*/
abbrev('CELSIUS' , uU) then F=n * 9/5 + 32
if \all then do /*there is a TO ααα scale.*/
call name ! /*process the TO abbreviation*/
!=sn /*assign the full name to ! */
end /* ! now contains scale full name*/
call name u /*allow alternate scale spellings*/
when abbrev('DELISLE' , uU) then F=212 -(n * 6/5)
when abbrev('FARENHEIT' , uU) |, /* 39% misspelled.*/
abbrev('FARENHEIGHT', uU) |, /* 15% misspelled.*/
abbrev('FARENHITE' , uU) |, /* 6% misspelled.*/
abbrev('FARENHIET' , uU) |, /* 3% misspelled.*/
abbrev('FARHENHEIT' , uU) |, /* 3% misspelled.*/
abbrev('FARINHEIGHT', uU) |, /* 2% misspelled.*/
abbrev('FARENHIGHT' , uU) |, /* 2% misspelled.*/
abbrev('FAHRENHIET' , uU) |, /* 2% misspelled.*/
abbrev('FERENHEIGHT', uU) |, /* 2% misspelled.*/
abbrev('FEHRENHEIT' , uU) |, /* 2% misspelled.*/
abbrev('FERENHEIT' , uU) |, /* 2% misspelled.*/
abbrev('FERINHEIGHT', uU) |, /* 1% misspelled.*/
abbrev('FARIENHEIT' , uU) |, /* 1% misspelled.*/
abbrev('FARINHEIT' , uU) |, /* 1% misspelled.*/
abbrev('FARANHITE' , uU) |, /* 1% misspelled.*/
abbrev('FAHRENHEIT' , uU) then F=n
when abbrev('KELVINS' , uU) |, /* 46% misspelled.*/
abbrev('KALVIN' , uU) |, /* 27% misspelled.*/
abbrev('KERLIN' , uU) |, /* 18% misspelled.*/
abbrev('KEVEN' , uU) |, /* 9% misspelled.*/
abbrev('KELVIN' , uU) then F=n * 9/5 - 459.67
when abbrev('NEUTON' , uU) |, /*100% misspelled.*/
abbrev('NEWTON' , uU) then F=n * 60/11 + 32
/*a single R is taken as Rankine.*/
when abbrev('RANKINE' , uU) then F=n - 459.67
when abbrev('REAUMUR' , uU, 2) then F=n * 9/4 + 32
when abbrev('ROEMER' , uU, 2) |,
abbrev('ROMER' , uU, 2) then F=(n-7.5) * 27/4 + 32
otherwise call serr 'illegal temperature scale:' u
select /*convert ──► °F temperatures. */
when sn=='CELSIUS' then F=n * 9/5 + 32
when sn=='DELISLE' then F=212 -(n * 6/5)
when sn=='DELISLE' then F=212 -(n * 6/5)
when sn=='FAHRENHEIT' then F=n
when sn=='KELVIN' then F=n * 9/5 - 459.67
when sn=='NEWTON' then F=n * 60/11 + 32
when sn=='RANKINE' then F=n - 459.67 /*a single R is taken as Rankine.*/
when sn=='REAUMUR' then F=n * 9/4 + 32
when sn=='ROMER' then F=(n-7.5) * 27/4 + 32
otherwise call serr 'illegal temperature scale: ' u
end /*select*/
say right(' ' x,55,"") /*show original value&scale, sep.*/
say Tform( ( F - 32 ) * 5/9 ) 'Celsius'
say Tform( ( 212 - F ) * 5/6 ) 'Delisle'
say Tform( F ) 'Fahrenheit'
say Tform( ( F + 459.67 ) * 5/9 ) 'Kelvin'
say Tform( ( F - 32 ) * 11/60 ) 'Newton'
say Tform( F + 459.67 ) 'Rankine'
say Tform( ( F - 32 ) * 4/9 ) 'Reaumur'
say Tform( ( F - 32 ) * 7/24 + 7.5 ) 'Romer'
end /*until tlist='' */
K = (F + 459.67) * 5/9 /*compute temperature to kelvins.*/
say right(' ' x, 79, "") /*show original value &scale,sep.*/
if all | !=='CELSIUS' then say $( ( F - 32 ) * 5/9 ) 'Celsius'
if all | !=='DELISLE' then say $( ( 212 - F ) * 5/6 ) 'Delisle'
if all | !=='FAHRENHEIT' then say $( F ) 'Fahrenheit'
if all | !=='KELVIN' then say $( K ) 'kelvin's(K)
if all | !=='NEWTON' then say $( ( F - 32 ) * 11/60 ) 'Newton'
if all | !=='RANKINE' then say $( F + 349.67 ) 'Rankine'
if all | !=='REAUMUR' then say $( ( F - 32 ) * 4/9 ) 'Reaumur'
if all | !=='ROMER' then say $( ( F - 32 ) * 7/24 + 7.5 ) 'Romer'
end /*until*/
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────TFORM subroutine────────────────────*/
Tform: procedure; showDig=8 /*only show 8 significant digits.*/
_=format(arg(1),,showDig)/1 /*format arg 8 digs past the . */
p=pos('.',_) /*find position of decimal point.*/
/*──────────────────────────────────$ subroutine────────────────────────*/
$: procedure; showDig=8 /*only show 8 significant digits.*/
_=format(arg(1), , showDig)/1 /*format # 8 digs past dec point.*/
p=pos(.,_) /*find position of decimal point.*/
/* [↓] align integers with FP #s.*/
if p==0 then _=_ || left('',showDig+1) /*no decimal point.*/
else _=_ || left('',showDig-length(_)+p) /*has " " */
return right(_,20) /*return the re-formatted arg. */
/*──────────────────────────────────SERR subroutine─────────────────────*/
serr: say; say '***error!***'; say; say arg(1); say; exit 13
if p==0 then _=_ || left('',5+showDig+1) /*no decimal point.*/
else _=_ || left('',5+showDig-length(_)+p) /*has " " */
return right(_,50) /*return the re-formatted arg. */
/*──────────────────────────────────name subroutine─────────────────────*/
name: parse arg y /*abbreviations ──► shortname. */
yU=translate(y,'eE',"éÉ"); upper yU /*uppercase version of temp unit.*/
if left(yU,7)=='DEGREES' then yU=substr(yU,8) /*redundant "degrees"? */
if left(yU,6)=='DEGREE' then yU=substr(yU,7) /* " "degree" ? */
yU=strip(yU) /*elide blanks at ends.*/
_=length(yU) /*obtain the yU length.*/
if right(yU,1)=='S' & _>1 then yU=left(yU,_-1) /*elide trailing plural*/
select /*abbreviations ──► shortname. */
when abbrev('CENTIGRADE' , yU) |,
abbrev('CENTRIGRADE', yU) |, /* 50% misspelled.*/
abbrev('CETIGRADE' , yU) |, /* 50% misspelled.*/
abbrev('CENTINGRADE', yU) |,
abbrev('CENTESIMAL' , yU) |,
abbrev('CELCIU' , yU) |, /* 82% misspelled.*/
abbrev('CELCIOU' , yU) |, /* 4% misspelled.*/
abbrev('CELCUI' , yU) |, /* 4% misspelled.*/
abbrev('CELSUI' , yU) |, /* 2% misspelled.*/
abbrev('CELCEU' , yU) |, /* 2% misspelled.*/
abbrev('CELCU' , yU) |, /* 2% misspelled.*/
abbrev('CELISU' , yU) |, /* 1% misspelled.*/
abbrev('CELSU' , yU) |, /* 1% misspelled.*/
abbrev('CELSIU' , yU) then sn='CELSIUS'
when abbrev('DELISLE' , yU,2) then sn='DELISLE'
when abbrev('FARENHEIT' , yU) |, /* 39% misspelled.*/
abbrev('FARENHEIGHT', yU) |, /* 15% misspelled.*/
abbrev('FARENHITE' , yU) |, /* 6% misspelled.*/
abbrev('FARENHIET' , yU) |, /* 3% misspelled.*/
abbrev('FARHENHEIT' , yU) |, /* 3% misspelled.*/
abbrev('FARINHEIGHT', yU) |, /* 2% misspelled.*/
abbrev('FARENHIGHT' , yU) |, /* 2% misspelled.*/
abbrev('FAHRENHIET' , yU) |, /* 2% misspelled.*/
abbrev('FERENHEIGHT', yU) |, /* 2% misspelled.*/
abbrev('FEHRENHEIT' , yU) |, /* 2% misspelled.*/
abbrev('FERENHEIT' , yU) |, /* 2% misspelled.*/
abbrev('FERINHEIGHT', yU) |, /* 1% misspelled.*/
abbrev('FARIENHEIT' , yU) |, /* 1% misspelled.*/
abbrev('FARINHEIT' , yU) |, /* 1% misspelled.*/
abbrev('FARANHITE' , yU) |, /* 1% misspelled.*/
abbrev('FAHRENHEIT' , yU) then sn='FAHRENHEIT'
when abbrev('KALVIN' , yU) |, /* 27% misspelled.*/
abbrev('KERLIN' , yU) |, /* 18% misspelled.*/
abbrev('KEVEN' , yU) |, /* 9% misspelled.*/
abbrev('KELVIN' , yU) then sn='KELVIN'
when abbrev('NEUTON' , yU) |, /*100% misspelled.*/
abbrev('NEWTON' , yU) then sn='NEWTON'
when abbrev('RANKINE' , yU, 1) then sn='RANKINE'
when abbrev('REAUMUR' , yU, 2) then sn='REAUMUR'
when abbrev('ROEMER' , yU, 2) |,
abbrev('ROMER' , yU, 2) then sn='ROMER'
otherwise call serr 'illegal temperature scale:' y
end /*select*/
return
/*──────────────────────────────────one─liner subroutines───────────────*/
s: if arg(1)==1 then return arg(3); return word(arg(2) 's',1)
serr: say; say '***error!***'; say; say arg(1); say; exit 13