12be1a816SJohn Birrell /*
22be1a816SJohn Birrell  * CDDL HEADER START
32be1a816SJohn Birrell  *
42be1a816SJohn Birrell  * The contents of this file are subject to the terms of the
52be1a816SJohn Birrell  * Common Development and Distribution License (the "License").
62be1a816SJohn Birrell  * You may not use this file except in compliance with the License.
72be1a816SJohn Birrell  *
82be1a816SJohn Birrell  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
92be1a816SJohn Birrell  * or http://www.opensolaris.org/os/licensing.
102be1a816SJohn Birrell  * See the License for the specific language governing permissions
112be1a816SJohn Birrell  * and limitations under the License.
122be1a816SJohn Birrell  *
132be1a816SJohn Birrell  * When distributing Covered Code, include this CDDL HEADER in each
142be1a816SJohn Birrell  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
152be1a816SJohn Birrell  * If applicable, add the following below this CDDL HEADER, with the
162be1a816SJohn Birrell  * fields enclosed by brackets "[]" replaced with your own identifying
172be1a816SJohn Birrell  * information: Portions Copyright [yyyy] [name of copyright owner]
182be1a816SJohn Birrell  *
192be1a816SJohn Birrell  * CDDL HEADER END
202be1a816SJohn Birrell  */
212be1a816SJohn Birrell 
222be1a816SJohn Birrell /*
23f8ac9d32SJohn Birrell  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
242be1a816SJohn Birrell  * Use is subject to license terms.
252be1a816SJohn Birrell  */
262be1a816SJohn Birrell 
272be1a816SJohn Birrell #pragma ident	"%Z%%M%	%I%	%E% SMI"
282be1a816SJohn Birrell 
292be1a816SJohn Birrell #pragma D option quiet
30f8ac9d32SJohn Birrell #pragma D option strsize=32
312be1a816SJohn Birrell 
322be1a816SJohn Birrell struct {
332be1a816SJohn Birrell 	int index;
342be1a816SJohn Birrell 	int length;
352be1a816SJohn Birrell 	int nolen;
36f8ac9d32SJohn Birrell 	int alt;
372be1a816SJohn Birrell } command[int];
382be1a816SJohn Birrell 
392be1a816SJohn Birrell int i;
402be1a816SJohn Birrell 
412be1a816SJohn Birrell BEGIN
422be1a816SJohn Birrell {
432be1a816SJohn Birrell 	str = "foobarbazbop";
44f8ac9d32SJohn Birrell 	str2 = "";
45f8ac9d32SJohn Birrell 	altstr = "CRAIG: Positioned them, I don't ";
46f8ac9d32SJohn Birrell 	altstr2 = "know... I'm fairly wide guy.";
472be1a816SJohn Birrell 
482be1a816SJohn Birrell 	command[i].index = 3;
492be1a816SJohn Birrell 	command[i].nolen = 1;
502be1a816SJohn Birrell 	i++;
512be1a816SJohn Birrell 
522be1a816SJohn Birrell 	command[i].index = 300;
532be1a816SJohn Birrell 	command[i].nolen = 1;
542be1a816SJohn Birrell 	i++;
552be1a816SJohn Birrell 
562be1a816SJohn Birrell 	command[i].index = -10;
572be1a816SJohn Birrell 	command[i].nolen = 1;
582be1a816SJohn Birrell 	i++;
592be1a816SJohn Birrell 
602be1a816SJohn Birrell 	command[i].index = 0;
612be1a816SJohn Birrell 	command[i].nolen = 1;
622be1a816SJohn Birrell 	i++;
632be1a816SJohn Birrell 
642be1a816SJohn Birrell 	command[i].index = 1;
652be1a816SJohn Birrell 	command[i].nolen = 1;
662be1a816SJohn Birrell 	i++;
672be1a816SJohn Birrell 
682be1a816SJohn Birrell 	command[i].index = strlen(str) - 1;
692be1a816SJohn Birrell 	command[i].nolen = 1;
702be1a816SJohn Birrell 	i++;
712be1a816SJohn Birrell 
722be1a816SJohn Birrell 	command[i].index = strlen(str);
732be1a816SJohn Birrell 	command[i].nolen = 1;
742be1a816SJohn Birrell 	i++;
752be1a816SJohn Birrell 
762be1a816SJohn Birrell 	command[i].index = strlen(str) + 1;
772be1a816SJohn Birrell 	command[i].nolen = 1;
782be1a816SJohn Birrell 	i++;
792be1a816SJohn Birrell 
802be1a816SJohn Birrell 	command[i].index = 8;
812be1a816SJohn Birrell 	command[i].length = 20;
822be1a816SJohn Birrell 	i++;
832be1a816SJohn Birrell 
842be1a816SJohn Birrell 	command[i].index = 4;
852be1a816SJohn Birrell 	command[i].length = 4;
862be1a816SJohn Birrell 	i++;
872be1a816SJohn Birrell 
882be1a816SJohn Birrell 	command[i].index = 5;
892be1a816SJohn Birrell 	command[i].length = strlen(str) - command[i].index + 1;
902be1a816SJohn Birrell 	i++;
912be1a816SJohn Birrell 
922be1a816SJohn Birrell 	command[i].index = 5;
932be1a816SJohn Birrell 	command[i].length = strlen(str) - command[i].index + 2;
942be1a816SJohn Birrell 	i++;
952be1a816SJohn Birrell 
962be1a816SJohn Birrell 	command[i].index = 400;
972be1a816SJohn Birrell 	command[i].length = 20;
982be1a816SJohn Birrell 	i++;
992be1a816SJohn Birrell 
1002be1a816SJohn Birrell 	command[i].index = 400;
1012be1a816SJohn Birrell 	command[i].length = 0;
1022be1a816SJohn Birrell 	i++;
1032be1a816SJohn Birrell 
1042be1a816SJohn Birrell 	command[i].index = 400;
1052be1a816SJohn Birrell 	command[i].length = -1;
1062be1a816SJohn Birrell 	i++;
1072be1a816SJohn Birrell 
1082be1a816SJohn Birrell 	command[i].index = 3;
1092be1a816SJohn Birrell 	command[i].length = 0;
1102be1a816SJohn Birrell 	i++;
1112be1a816SJohn Birrell 
1122be1a816SJohn Birrell 	command[i].index = 3;
1132be1a816SJohn Birrell 	command[i].length = -1;
1142be1a816SJohn Birrell 	i++;
1152be1a816SJohn Birrell 
116f8ac9d32SJohn Birrell 	command[i].index = 3;
117f8ac9d32SJohn Birrell 	command[i].length = -4;
118f8ac9d32SJohn Birrell 	i++;
119f8ac9d32SJohn Birrell 
120f8ac9d32SJohn Birrell 	command[i].index = 3;
121f8ac9d32SJohn Birrell 	command[i].length = -20;
122f8ac9d32SJohn Birrell 	i++;
123f8ac9d32SJohn Birrell 
124f8ac9d32SJohn Birrell 	command[i].index = -10;
125f8ac9d32SJohn Birrell 	command[i].length = -5;
126f8ac9d32SJohn Birrell 	i++;
127f8ac9d32SJohn Birrell 
1282be1a816SJohn Birrell 	command[i].index = 0;
1292be1a816SJohn Birrell 	command[i].length = 400;
1302be1a816SJohn Birrell 	i++;
1312be1a816SJohn Birrell 
1322be1a816SJohn Birrell 	command[i].index = -1;
1332be1a816SJohn Birrell 	command[i].length = 400;
1342be1a816SJohn Birrell 	i++;
1352be1a816SJohn Birrell 
1362be1a816SJohn Birrell 	command[i].index = -1;
1372be1a816SJohn Birrell 	command[i].length = 0;
1382be1a816SJohn Birrell 	i++;
1392be1a816SJohn Birrell 
1402be1a816SJohn Birrell 	command[i].index = -1;
1412be1a816SJohn Birrell 	command[i].length = -1;
1422be1a816SJohn Birrell 	i++;
1432be1a816SJohn Birrell 
1442be1a816SJohn Birrell 	command[i].index = -2 * strlen(str);
1452be1a816SJohn Birrell 	command[i].length = 2 * strlen(str);
1462be1a816SJohn Birrell 	i++;
1472be1a816SJohn Birrell 
1482be1a816SJohn Birrell 	command[i].index = -2 * strlen(str);
1492be1a816SJohn Birrell 	command[i].length = strlen(str);
1502be1a816SJohn Birrell 	i++;
1512be1a816SJohn Birrell 
1522be1a816SJohn Birrell 	command[i].index = -2 * strlen(str);
1532be1a816SJohn Birrell 	command[i].length = strlen(str) + 1;
1542be1a816SJohn Birrell 	i++;
1552be1a816SJohn Birrell 
1562be1a816SJohn Birrell 	command[i].index = -1 * strlen(str);
1572be1a816SJohn Birrell 	command[i].length = strlen(str);
1582be1a816SJohn Birrell 	i++;
1592be1a816SJohn Birrell 
1602be1a816SJohn Birrell 	command[i].index = -1 * strlen(str);
1612be1a816SJohn Birrell 	command[i].length = strlen(str) - 1;
1622be1a816SJohn Birrell 	i++;
1632be1a816SJohn Birrell 
164f8ac9d32SJohn Birrell 	command[i].index = 100;
165f8ac9d32SJohn Birrell 	command[i].length = 10;
166f8ac9d32SJohn Birrell 	command[i].alt = 1;
167f8ac9d32SJohn Birrell 	i++;
168f8ac9d32SJohn Birrell 
169f8ac9d32SJohn Birrell 	command[i].index = 100;
170f8ac9d32SJohn Birrell 	command[i].nolen = 1;
171f8ac9d32SJohn Birrell 	command[i].alt = 1;
172f8ac9d32SJohn Birrell 	i++;
173f8ac9d32SJohn Birrell 
1742be1a816SJohn Birrell 	end = i;
1752be1a816SJohn Birrell 	i = 0;
1762be1a816SJohn Birrell 	printf("#!/usr/perl5/bin/perl\n\nBEGIN {\n");
1772be1a816SJohn Birrell 
1782be1a816SJohn Birrell }
1792be1a816SJohn Birrell 
1802be1a816SJohn Birrell tick-1ms
1812be1a816SJohn Birrell /i < end && command[i].nolen/
1822be1a816SJohn Birrell {
183f8ac9d32SJohn Birrell 	this->str = command[i].alt ? altstr : str;
184f8ac9d32SJohn Birrell 	this->str2 = command[i].alt ? altstr2 : str2;
185f8ac9d32SJohn Birrell 	this->result = substr(command[i].alt ?
186f8ac9d32SJohn Birrell 	    "CRAIG: Positioned them, I don't know... I'm fairly wide guy." :
187f8ac9d32SJohn Birrell 	    str, command[i].index);
18820594ebfSJohn Birrell 
189f8ac9d32SJohn Birrell 	printf("\tif (substr(\"%s%s\", %d) ne \"%s\") {\n",
190f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index, this->result);
19120594ebfSJohn Birrell 
192f8ac9d32SJohn Birrell 	printf("\t\tprintf(\"perl => substr(\\\"%s%s\\\", %d) = ",
193f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index);
194f8ac9d32SJohn Birrell 	printf("\\\"%%s\\\"\\n\",\n\t\t    substr(\"%s%s\", %d));\n",
195f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index);
196f8ac9d32SJohn Birrell 	printf("\t\tprintf(\"   D => substr(\\\"%s%s\\\", %d) = ",
197f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index);
1982be1a816SJohn Birrell 	printf("\\\"%%s\\\"\\n\",\n\t\t    \"%s\");\n", this->result);
1992be1a816SJohn Birrell 	printf("\t\t$failed++;\n");
2002be1a816SJohn Birrell 	printf("\t}\n\n");
2012be1a816SJohn Birrell }
2022be1a816SJohn Birrell 
2032be1a816SJohn Birrell tick-1ms
2042be1a816SJohn Birrell /i < end && !command[i].nolen/
2052be1a816SJohn Birrell {
206f8ac9d32SJohn Birrell 	this->str = command[i].alt ? altstr : str;
207f8ac9d32SJohn Birrell 	this->str2 = command[i].alt ? altstr2 : str2;
208f8ac9d32SJohn Birrell 	this->result = substr(command[i].alt ?
209f8ac9d32SJohn Birrell 	    "CRAIG: Positioned them, I don't know... I'm fairly wide guy." :
210f8ac9d32SJohn Birrell 	    str, command[i].index, command[i].length);
2112be1a816SJohn Birrell 
212f8ac9d32SJohn Birrell 	printf("\tif (substr(\"%s%s\", %d, %d) ne \"%s\") {\n",
213f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index, command[i].length,
214f8ac9d32SJohn Birrell 	    this->result);
215f8ac9d32SJohn Birrell 	printf("\t\tprintf(\"perl => substr(\\\"%s%s\\\", %d, %d) = ",
216f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index, command[i].length);
217f8ac9d32SJohn Birrell 	printf("\\\"%%s\\\"\\n\",\n\t\t    substr(\"%s%s\", %d, %d));\n",
218f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index, command[i].length);
219f8ac9d32SJohn Birrell 	printf("\t\tprintf(\"   D => substr(\\\"%s%s\\\", %d, %d) = ",
220f8ac9d32SJohn Birrell 	    this->str, this->str2, command[i].index, command[i].length);
2212be1a816SJohn Birrell 	printf("\\\"%%s\\\"\\n\",\n\t\t    \"%s\");\n", this->result);
2222be1a816SJohn Birrell 	printf("\t\t$failed++;\n");
2232be1a816SJohn Birrell 	printf("\t}\n\n");
2242be1a816SJohn Birrell }
2252be1a816SJohn Birrell 
2262be1a816SJohn Birrell tick-1ms
2272be1a816SJohn Birrell /++i == end/
2282be1a816SJohn Birrell {
2292be1a816SJohn Birrell 	printf("\texit($failed);\n}\n");
2302be1a816SJohn Birrell 	exit(0);
2312be1a816SJohn Birrell }
232