copy the not NUL-safe variants to different filenames
authorThorsten Glaser <tg@mirbsd.org>
Thu, 9 Jun 2011 21:30:48 +0000 (23:30 +0200)
committerThorsten Glaser <tg@mirbsd.org>
Thu, 9 Jun 2011 21:30:48 +0000 (23:30 +0200)
mksh/hexnump [new file with mode: 0644]
mksh/hexunump [new file with mode: 0644]

diff --git a/mksh/hexnump b/mksh/hexnump
new file mode 100644 (file)
index 0000000..f3873b0
--- /dev/null
@@ -0,0 +1,51 @@
+# $MirOS: src/bin/mksh/check.t,v 1.464 2011/06/09 21:26:21 tg Exp $
+#-
+# Copyright © 2008, 2009, 2011
+#      Thorsten Glaser <tg@mirbsd.org>
+#
+# Provided that these terms and disclaimer and all copyright notices
+# are retained or reproduced in an accompanying document, permission
+# is granted to deal in this work without restriction, including un‐
+# limited rights to use, publicly perform, distribute, sell, modify,
+# merge, give away, or sublicence.
+#
+# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
+# the utmost extent permitted by applicable law, neither express nor
+# implied; without malicious intent or gross negligence. In no event
+# may a licensor, author or contributor be held liable for indirect,
+# direct, other damage, loss, or other issues arising in any way out
+# of dealing in the work, even if advised of the possibility of such
+# damage or existence of a defect, except proven that it results out
+# of said person’s immediate fault when using the work as intended.
+#-
+# hexdump, not NUL byte safe
+
+typeset -Uui16 -Z11 pos=0
+typeset -Uui16 -Z5 hv
+typeset -i1 wc=0x0A
+dasc=
+nl=${wc#1#}
+while IFS= read -r line; do
+       line=$line$nl
+       while [[ -n $line ]]; do
+               hv=1#${line::1}
+               if (( (pos & 15) == 0 )); then
+                       (( pos )) && print "$dasc|"
+                       print -n "${pos#16#}  "
+                       dasc=' |'
+               fi
+               print -n "${hv#16#} "
+               if (( (hv < 32) || (hv > 126) )); then
+                       dasc=$dasc.
+               else
+                       dasc=$dasc${line::1}
+               fi
+               (( (pos++ & 15) == 7 )) && print -n -- '- '
+               line=${line:1}
+       done
+done
+while (( pos & 15 )); do
+       print -n '   '
+       (( (pos++ & 15) == 7 )) && print -n -- '- '
+done
+print "$dasc|"
diff --git a/mksh/hexunump b/mksh/hexunump
new file mode 100644 (file)
index 0000000..8f64956
--- /dev/null
@@ -0,0 +1,61 @@
+# $MirOS: src/bin/mksh/check.t,v 1.464 2011/06/09 21:26:21 tg Exp $
+#-
+# Copyright © 2008, 2009, 2011
+#      Thorsten Glaser <tg@mirbsd.org>
+#
+# Provided that these terms and disclaimer and all copyright notices
+# are retained or reproduced in an accompanying document, permission
+# is granted to deal in this work without restriction, including un‐
+# limited rights to use, publicly perform, distribute, sell, modify,
+# merge, give away, or sublicence.
+#
+# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
+# the utmost extent permitted by applicable law, neither express nor
+# implied; without malicious intent or gross negligence. In no event
+# may a licensor, author or contributor be held liable for indirect,
+# direct, other damage, loss, or other issues arising in any way out
+# of dealing in the work, even if advised of the possibility of such
+# damage or existence of a defect, except proven that it results out
+# of said person’s immediate fault when using the work as intended.
+#-
+# hexdump, not NUL byte safe, Unicode (UCS-2, OPTU-16) output
+
+typeset -Uui16 -Z11 pos=0
+typeset -Uui16 -Z7 hv
+typeset -i1 wc=0x0A
+typeset -i lpos
+dasc=
+nl=${wc#1#}
+while IFS= read -r line; do
+       line=$line$nl
+       lpos=0
+       while (( lpos < ${#line} )); do
+               wc=1#${line:(lpos++):1}
+               if (( (wc < 32) || \
+                   ((wc > 126) && (wc < 160)) )); then
+                       dch=.
+               elif (( (wc & 0xFF80) == 0xEF80 )); then
+                       dch=�
+               else
+                       dch=${wc#1#}
+               fi
+               if (( (pos & 7) == 7 )); then
+                       dasc=$dasc$dch
+                       dch=
+               elif (( (pos & 7) == 0 )); then
+                       (( pos )) && print "$dasc|"
+                       print -n "${pos#16#}  "
+                       dasc=' |'
+               fi
+               let hv=wc
+               print -n "${hv#16#} "
+               (( (pos++ & 7) == 3 )) && \
+                   print -n -- '- '
+               dasc=$dasc$dch
+       done
+done
+while (( pos & 7 )); do
+       print -n '     '
+       (( (pos++ & 7) == 3 )) && print -n -- '- '
+done
+print "$dasc|"