# util-number.tcl -- # # This file implements package ::Utility::number, which ... # # Copyright (c) 1997 Jeffrey Hobbs # # See the file "license.terms" for information on usage and # redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. # #package require NAME VERSION package provide ::Utility::number 1.0 namespace eval ::Utility::number {; namespace export -clear * # get_square_size -- # gets the minimum square size for an input # Arguments: # num number # Returns: # returns smallest square size that would fit number # ;proc get_square_size num { set i 1 while {[expr {$i*$i}] < $num} { incr i } return $i } # roman2dec -- # converts a roman numeral to decimal # Arguments: # x number in roman numeral format # Returns: # decimal number # ;proc roman2dec {x} { set result "" foreach elem { { 1000 m } { 900 cm } { 500 d } { 400 id } { 100 c } { 90 ic } { 50 l } { 10 x } { 9 ix } { 5 v } { 4 iv } { 1 i } } { set digit [lindex $elem 0] set roman [lindex $elem 1] while {$x >= $digit} { append result $roman incr x -$digit } } return $result } # bin2hex -- # converts binary to hex number # Arguments: # bin number in binary format # Returns: # hexadecimal number # ;proc bin2hex bin { ## No sanity checking is done array set t { 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 a 1011 b 1100 c 1101 d 1110 e 1111 f } set diff [expr {4-[string length $bin]%4}] if {$diff != 4} { set bin [format %0${diff}d$bin 0] } regsub -all .... $bin {$t(&)} hex return [subst $hex] } # hex2bin -- # converts hex number to bin # Arguments: # hex number in hex format # Returns: # binary number (in chars, not binary format) # ;proc hex2bin hex { array set t { 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 a 1010 b 1011 c 1100 d 1101 e 1110 f 1111 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111 } regsub {^0[xX]} $hex {} hex regsub -all . $hex {$t(&)} bin return [subst $bin] } }