DUR_MIN [ VLIB_DURATION_MINUTES:z {} ] VLIB_DURATION_MINUTES [ ( [ one a ] minute ) {return(1)} ( [ VSUB_DIGIT_TWO_THRU_NINE:n {return($n)} ten {return(10)} VSUB_TEEN:t {return($t)} VSUB_DECADE:t {return($t)} ( VSUB_DECADE:t VSUB_DIGIT_ONE_THRU_NINE:u ) {return(add($t $u))} ] minutes ) ( ?a half ?an hour ) {return(30)} ( [ one an ] hour ) {return(60)} ( ?an hour and a half ) {return(90)} ( VSUB_DIGIT_TWO_THRU_NINE:h hours ) {return(mul(60 $h))} ( VSUB_DIGIT_ONE_THRU_NINE:h and a half hours ) {return(add(mul(60 $h) 30))} ( VSUB_DIGIT_TWO_THRU_NINE:h hours ) {return(mul(60 $h))} ( [ one an ] hour ?and VSUB_DURATION_MINUTES:m minutes ) {return(add(60 $m))} ( VSUB_DIGIT_TWO_THRU_NINE:h hours ?and VSUB_DURATION_MINUTES:m minutes ) {return(add(mul($h 60) $m))} ; A tenth of an hour is six minutes (for time reporting) ( point VSUB_DIGIT_ONE_THRU_NINE:t ?hours ) {return(mul($t 6))} ( one tenth ?( of an hour ) ) {return(6)} ( VSUB_DIGIT_TWO_THRU_NINE:t tenths ?( of an hour ) ) {return(mul($t 6))} ( VSUB_DIGIT:h point VSUB_DIGIT:t ?hours ) {return(add(mul($h 60) mul($t 6)))} ( VSUB_DIGIT_ONE_THRU_NINE:h ?and VSUB_DIGIT_ONE_THRU_NINE:t [ tenth tenths ] ?[ ( of an hour ) hours ] ) {return(add(mul($h 60) mul($t 6)))} ] VSUB_DURATION_MINUTES [ VSUB_DIGIT_ONE_THRU_NINE:m {return($m)} ten {return(10)} VSUB_TEEN:t {return($t)} VSUB_DURATION_TWENTY_THRU_FIFTY:t {return($t)} ( VSUB_DURATION_TWENTY_THRU_FIFTY:t VSUB_DIGIT_ONE_THRU_NINE:m ) {return(add($t $m))} ] VSUB_DURATION_TWENTY_THRU_FIFTY [ twenty {return(20)} thirty {return(30)} forty {return(40)} fifty {return(50)} ] VSUB_DIGIT_TWO_THRU_NINE[ two {return(2)} three {return(3)} four {return(4)} five {return(5)} six {return(6)} seven {return(7)} eight {return(8)} nine {return(9)} ] VSUB_DIGIT[ [ zero oh ] {return(0)} VSUB_DIGIT_ONE_THRU_NINE:n {return($n)} ] VSUB_DIGIT_TWO_THRU_NINE_STRING [ two {return("2")} three {return("3")} four {return("4")} five {return("5")} six {return("6")} seven {return("7")} eight {return("8")} nine {return("9")} ] VSUB_DIGIT_ONE_THRU_NINE [ one {return(1)} VSUB_DIGIT_TWO_THRU_NINE:n {return($n)} ] VSUB_DIGIT_ONE_THRU_NINE_STRING [ one {return("1")} VSUB_DIGIT_TWO_THRU_NINE_STRING:n {return($n)} ] VSUB_DIGIT_STRING [ [ zero oh ] {return("0")} VSUB_DIGIT_ONE_THRU_NINE_STRING:n {return($n)} ] VSUB_TEEN_STRING [ eleven {return("11")} twelve {return("12")} thirteen {return("13")} fourteen {return("14")} fifteen {return("15")} sixteen {return("16")} seventeen {return("17")} eighteen {return("18")} nineteen {return("19")} ] VSUB_DECADE_STRING [ twenty {return("2")} thirty {return("3")} forty {return("4")} fifty {return("5")} sixty {return("6")} seventy {return("7")} eighty {return("8")} ninety {return("9")} ] VSUB_TEEN [ eleven {return(11)} twelve {return(12)} thirteen {return(13)} fourteen {return(14)} fifteen {return(15)} sixteen {return(16)} seventeen {return(17)} eighteen {return(18)} nineteen {return(19)} ] VSUB_DECADE [ twenty {return(20)} thirty {return(30)} forty {return(40)} fifty {return(50)} sixty {return(60)} seventy {return(70)} eighty {return(80)} ninety {return(90)} ]