update readme
[baseconv.git] / tohex
1 #!/bin/sh
2
3 conv() {
4 while [ $# -gt 0 ]; do
5 if printf "%s" "$1" | grep -qE '^[0-9]+$'; then
6 if [ "$m" -eq 0 ]; then
7 printf "Decimal %s → Hex: " "$1"
8 fi
9 printf "%s%X\n" "$p" "$1"
10
11 elif printf "%s" "$1" | grep -qE '^0b[0-1]+$'; then
12 if [ "$m" -eq 0 ]; then
13 printf "Binary %s → Hex: " "$1"
14 fi
15 printf "%s%X\n" "$p" "$1"
16
17 else
18 printf "Error: '%s' is not a valid binary or decimal number\n" "$1" >&2
19 stat=1
20
21 fi
22 shift
23 done
24 return "$stat"
25 }
26
27
28 main() {
29 USAGE="usage: ${0} [-lmnp] ..."
30 if ! [ "$1" = "x" ] && ! [ -t 0 ]; then
31 cat | tr '\n' ' ' | xargs tohex "x" "$@"
32 return "$?"
33
34 elif [ "$1" = "x" ]; then
35 shift
36
37 fi
38
39 if [ $# -eq 0 ]; then
40 printf "Error: No arguments provided\n%s\n" "$USAGE" >&2
41 return 2
42
43 fi
44
45 stat=0
46 l=0; m=0; n=0; p=""
47 while getopts "lmnp" flag; do
48 case "$flag" in
49 l) l=1; ;;
50 m) m=1; ;;
51 n) n=1; ;;
52 p) p="0x" ;;
53 *) printf "%s\n" "$USAGE" >&2 ; return 2 ;;
54 esac
55 done
56
57 shift $(( OPTIND - 1 ))
58
59 t=$(conv "$@")
60 stat=$?
61
62 if [ "$n" -eq 1 ] && [ "$m" -eq 1 ]; then
63 t=$(printf "%s" "$t" | tr '\n' ' ')
64
65 elif [ "$n" -eq 1 ] && [ "$m" -eq 0 ]; then
66 t=$(printf "%s" "$t" | tr '\n' ';')
67
68 else
69 t=$(printf "%s" "$t")
70
71 fi
72
73 if [ "$l" -eq 1 ]; then
74 t=$(printf "%s" "$t" | tr '[:upper:]' '[:lower:]')
75 fi
76 printf "%s\n" "$t"
77 return "$stat"
78 }
79
80 main "$@"