[net.sources] standardized C self-printer

lew (11/04/82)

char *a[32];
main(){
	int i;
	a[0]="char *a[32];";
	a[1]="main(){";
	a[2]="\tint i;";
	a[3]="\tfor( i=0 ; i<3 ; i++ ) printf(\"%s\\n\",a[i]);";
	a[4]="\tfor( i=0 ; i<32 ; i++ ) quote(i);";
	a[5]="\tfor( i=3 ; i<32 ; i++ ) printf(\"%s\\n\",a[i]);";
	a[6]="}";
	a[7]="quote(i)";
	a[8]="int i;";
	a[9]="{";
	a[10]="\tchar *p;";
	a[11]="\tprintf(\"\\ta[%d]=\\\"\",i);";
	a[12]="\tfor( p=a[i] ; *p ; p++ ){";
	a[13]="\t\tswitch( *p ){";
	a[14]="\t\tcase '\\n':";
	a[15]="\t\t\tprintf(\"\\\\n\");";
	a[16]="\t\t\tbreak;";
	a[17]="\t\tcase '\\t':";
	a[18]="\t\t\tprintf(\"\\\\t\");";
	a[19]="\t\t\tbreak;";
	a[20]="\t\tcase '\"':";
	a[21]="\t\t\tprintf(\"\\\\\\\"\");";
	a[22]="\t\t\tbreak;";
	a[23]="\t\tcase '\\\\':";
	a[24]="\t\t\tprintf(\"\\\\\\\\\");";
	a[25]="\t\t\tbreak;";
	a[26]="\t\tdefault:";
	a[27]="\t\t\tputchar(*p);";
	a[28]="\t\t}";
	a[29]="\t}";
	a[30]="\tprintf(\"\\\";\\n\");";
	a[31]="}";
	for( i=0 ; i<3 ; i++ ) printf("%s\n",a[i]);
	for( i=0 ; i<32 ; i++ ) quote(i);
	for( i=3 ; i<32 ; i++ ) printf("%s\n",a[i]);
}
quote(i)
int i;
{
	char *p;
	printf("\ta[%d]=\"",i);
	for( p=a[i] ; *p ; p++ ){
		switch( *p ){
		case '\n':
			printf("\\n");
			break;
		case '\t':
			printf("\\t");
			break;
		case '"':
			printf("\\\"");
			break;
		case '\\':
			printf("\\\\");
			break;
		default:
			putchar(*p);
		}
	}
	printf("\";\n");
}