Language TACL
(This one has spirit it sings it!)
| Date: | 07/16/05 |
| Author: | Rick Bielawski |
| URL: | http://www.emacswiki.org/cgi-bin/wiki/Rick_Bielaws |
| Comments: | 0 |
| Info: | http://h30163.www3.hp.com/NTL/library/G06_RVUs/G06_26/Publications/T/ |
| Score: |
?tacl routine
== The classic beer song in TACL as implemented by Rick Bielawski
== Tandem Advanced Command Language is proprietary to
== Tandem Guardian/NSK systems aka HP NonStop servers.
{ You used to be able do this at the Tandem office on Beer Bash night }
#frame
#push :bottles
[#if [#argument/value :bottles/number/minimum 1,maximum 999/ end] = 2
|then| #set :bottles 99 { default to 99 bottles }
]
[#def :to_text routine |body|
#frame
#push :num :tens :hundreds :part0 :part1 :part2 :result
[#if [#argument/value :num/number/minimum 0,maximum 999/
otherwise] = 1
|then|
#set :hundreds [#compute :num / 100]
#set :num [#compute :num - (:hundreds * 100)]
#set :tens [#compute :num / 10]
#set :num [#compute :num - (:tens * 10)]
#set :part0 [#case [:hundreds]
|0|
|Otherwise|[:to_text [:hundreds]] hundred
]
#set :part1 [#case [:tens]
|0|
|1|[#set num [#compute :num + 10]]
|2|twenty
|3|thirty
|4|forty
|5|fifty
|8|eighty
|Otherwise|[:to_text [:tens]]ty
]
#set :part2 [#case [:num]
|0| |8|eight
|1|one |9|nine
|2|two |10|ten
|3|three |11|eleven
|4|four |12|twelve
|5|five |13|thirteen
|6|six |15|fifteen
|7|seven |18|eighteen
|otherwise|[:to_text [#compute :num - 10]]teen
]
#set :result [:part0] [:part1] == double #set prevents double
#set :result [:result] [:part2] == space when part1 is empty
|else|
#set :result [[#rest]]
]
#set :part1 [#shiftstring/up/[#charget :result 1 for 1]]
#chardel :result 1
#result [:part1][#shiftstring/down/[:result]]
#unframe
]
[#loop
|while|:bottles > 1
|do|
#output [:to_text :bottles] bottles of beer on the wall.
#output [:to_text :bottles] bottles of beer.
#output Take one down. Pass it around.
#set :bottles [#compute :bottles - 1]
[#if :bottles = 1
|then|#output [:to_text :bottles] more bottle of beer on the wall.
|else|#output [:to_text :bottles] bottles of beer on the wall.
]
#output
]
[#if :bottles = 1
|then|
#output [:to_text :bottles] bottle of beer on the wall.
#output [:to_text :bottles] bottle of beer.
#output Take it down. Pass it around.
#set :bottles [#compute :bottles - 1]
]
#output No more bottles of beer on the wall.
#unframe
Download Source | Write Comment
Download Source | Write Comment
Add Comment
Please provide a value for the fields Name,
Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.
Please don't post large portions of code here! Use the form to submit new examples or updates instead!
Comments