-
Notifications
You must be signed in to change notification settings - Fork 0
/
convert.tcl
58 lines (44 loc) · 1.02 KB
/
convert.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/sh
#\
exec tclsh "$0" "$@"
# ----------------------------
# Convert values
# ----------------------------
# dth - decimal to hexadecimal
# htd - hexadecimal to decimal
# dtb - decimal to binary
# btd - binary to decimal
# bye - quit
proc checkArguments {input} {
if {[llength $input] >= 2} {
return 1
} else {
puts "Not enough arguments!"
return 0
}
}
array set fns {dth %X htd %d dtb %llb}
while 1 {
# Get user input
puts -nonewline "> " ; flush stdout ; gets stdin input
set fn [string tolower [lindex $input 0]]
# Check if function exists
if {[info exists fns($fn)]} {
if {[checkArguments $input]} {
# Convert value
puts [format $fns($fn)\
[expr {"htd" == $fn ? "0x" : ""}][lindex $input 1]]
}
# Binary to decimal
} elseif {"btd" == $fn} {
if {[checkArguments $input]} {
puts [expr 0b[lindex $input 1]]
}
# End program
} elseif {"bye" == $fn} {
puts Bye! ; break
# Function doesn't exist
} else {
puts "Unknown function!"
}
}