1 #
   2 # This file and its contents are supplied under the terms of the
   3 # Common Development and Distribution License ("CDDL"), version 1.0.
   4 # You may only use this file in accordance with the terms of version
   5 # 1.0 of the CDDL.
   6 #
   7 # A full copy of the text of the CDDL should have accompanied this
   8 # source.  A copy of the CDDL is also available via the Internet at
   9 # http://www.illumos.org/license/CDDL.
  10 #
  11 
  12 #
  13 # Copyright (c) 2013 Joyent, Inc.  All rights reserved.
  14 #
  15 
  16 let width=8
  17 
  18 function outputchar
  19 {
  20         banner $3 | /bin/nawk -v line=$1 -v pos=$2 -v width=$width '{ \
  21                 for (i = 1; i <= length($0); i++) { \
  22                         if (substr($0, i, 1) == " ") \
  23                                 continue; \
  24                         printf("\t@letter%d[%d] = lquantize(%d, 0, 40, 1);\n", \
  25                             line, NR, i + (pos * width));
  26                 } \
  27         }'
  28 }
  29 
  30 function outputstr
  31 {
  32         let pos=0;
  33         let line=0
  34 
  35         printf "#pragma D option aggpack\n#pragma D option aggsortkey\n"
  36 
  37         printf "BEGIN\n{\n"
  38         for c in `echo "$1" | /bin/nawk '{ \
  39                 for (i = 1; i <= length($0); i++) { \
  40                         c = substr($0, i, 1); \
  41                         printf("%s\n", c == " " ? "space" : \
  42                             c == "\n" ? "newline" : c); \
  43                 } \
  44         }'`; do
  45                 if [[ "$c" == "space" ]]; then
  46                         let line=line+1
  47                         let pos=0
  48                         continue
  49                 fi
  50 
  51                 outputchar $line $pos $c
  52                 let pos=pos+1
  53         done
  54 
  55         let i=0
  56 
  57         while [[ $i -le $line ]]; do
  58                 printf "\tprinta(@letter%d);\n" $i
  59                 let i=i+1
  60         done
  61         printf "\texit(0);\n}\n"
  62 }
  63 
  64 dtrace -qs /dev/stdin -x encoding=utf8 <<EOF
  65 `outputstr "why must i do this"`
  66 EOF
  67 
  68 dtrace -qs /dev/stdin -x encoding=ascii -x aggzoom <<EOF
  69 `outputstr "i am not well"`
  70 EOF
  71 
  72 dtrace -qs /dev/stdin -x encoding=utf8 -x aggzoom <<EOF
  73 `outputstr "send help"`
  74 EOF
  75