Add reusable examples from the mksh regression test suite
authorThorsten Glaser <tg@mirbsd.org>
Wed, 9 Mar 2011 13:15:46 +0000 (14:15 +0100)
committerThorsten Glaser <tg@mirbsd.org>
Wed, 9 Mar 2011 13:15:46 +0000 (14:15 +0100)
mksh/hexdump [new file with mode: 0644]
mksh/hexudump [new file with mode: 0644]

diff --git a/mksh/hexdump b/mksh/hexdump
new file mode 100644 (file)
index 0000000..4e5e5c9
--- /dev/null
@@ -0,0 +1,53 @@
+# $MirOS: src/bin/mksh/check.t,v 1.418 2011/03/08 18:49:48 tg Exp $
+#-
+# Copyright © 2008, 2009
+#      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
+if (( (pos & 15) != 1 )); then
+       while (( pos & 15 )); do
+               print -n '   '
+               (( (pos++ & 15) == 7 )) && print -n -- '- '
+       done
+       print "$dasc|"
+fi
diff --git a/mksh/hexudump b/mksh/hexudump
new file mode 100644 (file)
index 0000000..ef617e5
--- /dev/null
@@ -0,0 +1,63 @@
+# $MirOS: src/bin/mksh/check.t,v 1.418 2011/03/08 18:49:48 tg Exp $
+#-
+# Copyright © 2008, 2009
+#      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
+if (( pos & 7 )); then
+       while (( pos & 7 )); do
+               print -n '     '
+               (( (pos++ & 7) == 3 )) && print -n -- '- '
+       done
+       print "$dasc|"
+fi