1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 #pragma D option quiet 30 #pragma D option strsize=32 31 32 struct { 33 int index; 34 int length; 35 int nolen; 36 int alt; 37 } command[int]; 38 39 int i; 40 41 BEGIN 42 { 43 str = "foobarbazbop"; 44 str2 = ""; 45 altstr = "CRAIG: Positioned them, I don't "; 46 altstr2 = "know... I'm fairly wide guy."; 47 48 command[i].index = 3; 49 command[i].nolen = 1; 50 i++; 51 52 command[i].index = 300; 53 command[i].nolen = 1; 54 i++; 55 56 command[i].index = -10; 57 command[i].nolen = 1; 58 i++; 59 60 command[i].index = 0; 61 command[i].nolen = 1; 62 i++; 63 64 command[i].index = 1; 65 command[i].nolen = 1; 66 i++; 67 68 command[i].index = strlen(str) - 1; 69 command[i].nolen = 1; 70 i++; 71 72 command[i].index = strlen(str); 73 command[i].nolen = 1; 74 i++; 75 76 command[i].index = strlen(str) + 1; 77 command[i].nolen = 1; 78 i++; 79 80 command[i].index = 8; 81 command[i].length = 20; 82 i++; 83 84 command[i].index = 4; 85 command[i].length = 4; 86 i++; 87 88 command[i].index = 5; 89 command[i].length = strlen(str) - command[i].index + 1; 90 i++; 91 92 command[i].index = 5; 93 command[i].length = strlen(str) - command[i].index + 2; 94 i++; 95 96 command[i].index = 400; 97 command[i].length = 20; 98 i++; 99 100 command[i].index = 400; 101 command[i].length = 0; 102 i++; 103 104 command[i].index = 400; 105 command[i].length = -1; 106 i++; 107 108 command[i].index = 3; 109 command[i].length = 0; 110 i++; 111 112 command[i].index = 3; 113 command[i].length = -1; 114 i++; 115 116 command[i].index = 3; 117 command[i].length = -4; 118 i++; 119 120 command[i].index = 3; 121 command[i].length = -20; 122 i++; 123 124 command[i].index = -10; 125 command[i].length = -5; 126 i++; 127 128 command[i].index = 0; 129 command[i].length = 400; 130 i++; 131 132 command[i].index = -1; 133 command[i].length = 400; 134 i++; 135 136 command[i].index = -1; 137 command[i].length = 0; 138 i++; 139 140 command[i].index = -1; 141 command[i].length = -1; 142 i++; 143 144 command[i].index = -2 * strlen(str); 145 command[i].length = 2 * strlen(str); 146 i++; 147 148 command[i].index = -2 * strlen(str); 149 command[i].length = strlen(str); 150 i++; 151 152 command[i].index = -2 * strlen(str); 153 command[i].length = strlen(str) + 1; 154 i++; 155 156 command[i].index = -1 * strlen(str); 157 command[i].length = strlen(str); 158 i++; 159 160 command[i].index = -1 * strlen(str); 161 command[i].length = strlen(str) - 1; 162 i++; 163 164 command[i].index = 100; 165 command[i].length = 10; 166 command[i].alt = 1; 167 i++; 168 169 command[i].index = 100; 170 command[i].nolen = 1; 171 command[i].alt = 1; 172 i++; 173 174 end = i; 175 i = 0; 176 printf("#!/usr/perl5/bin/perl\n\nBEGIN {\n"); 177 178 } 179 180 tick-1ms 181 /i < end && command[i].nolen/ 182 { 183 this->str = command[i].alt ? altstr : str; 184 this->str2 = command[i].alt ? altstr2 : str2; 185 this->result = substr(command[i].alt ? 186 "CRAIG: Positioned them, I don't know... I'm fairly wide guy." : 187 str, command[i].index); 188 189 printf("\tif (substr(\"%s%s\", %d) ne \"%s\") {\n", 190 this->str, this->str2, command[i].index, this->result); 191 192 printf("\t\tprintf(\"perl => substr(\\\"%s%s\\\", %d) = ", 193 this->str, this->str2, command[i].index); 194 printf("\\\"%%s\\\"\\n\",\n\t\t substr(\"%s%s\", %d));\n", 195 this->str, this->str2, command[i].index); 196 printf("\t\tprintf(\" D => substr(\\\"%s%s\\\", %d) = ", 197 this->str, this->str2, command[i].index); 198 printf("\\\"%%s\\\"\\n\",\n\t\t \"%s\");\n", this->result); 199 printf("\t\t$failed++;\n"); 200 printf("\t}\n\n"); 201 } 202 203 tick-1ms 204 /i < end && !command[i].nolen/ 205 { 206 this->str = command[i].alt ? altstr : str; 207 this->str2 = command[i].alt ? altstr2 : str2; 208 this->result = substr(command[i].alt ? 209 "CRAIG: Positioned them, I don't know... I'm fairly wide guy." : 210 str, command[i].index, command[i].length); 211 212 printf("\tif (substr(\"%s%s\", %d, %d) ne \"%s\") {\n", 213 this->str, this->str2, command[i].index, command[i].length, 214 this->result); 215 printf("\t\tprintf(\"perl => substr(\\\"%s%s\\\", %d, %d) = ", 216 this->str, this->str2, command[i].index, command[i].length); 217 printf("\\\"%%s\\\"\\n\",\n\t\t substr(\"%s%s\", %d, %d));\n", 218 this->str, this->str2, command[i].index, command[i].length); 219 printf("\t\tprintf(\" D => substr(\\\"%s%s\\\", %d, %d) = ", 220 this->str, this->str2, command[i].index, command[i].length); 221 printf("\\\"%%s\\\"\\n\",\n\t\t \"%s\");\n", this->result); 222 printf("\t\t$failed++;\n"); 223 printf("\t}\n\n"); 224 } 225 226 tick-1ms 227 /++i == end/ 228 { 229 printf("\texit($failed);\n}\n"); 230 exit(0); 231 } 232