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