/* a version of 90ec3.c that is expanded and commented */ /* this has the same code and output as 90ec3.c, but is */ /* designed to be much more readable, at the expense of not */ /* outputting the true forward and reverse of its source code */ /* program header and variable declarations */ main() { int i,j; char *p[10]; /* now assign p[i] to be each of the lines in the program except themselves */ p[0]="main(){int i,j;char *p[10];"; p[1]="printf(p[0]);putchar(10);for(i=0;i<=8;i++){putchar('p');putchar('[');"; p[2]="putchar(i+48);putchar(']');putchar('=');putchar(34);printf(p[i]);"; p[3]="putchar(34);putchar(';');putchar(10);}for(i=1;i<=8;i++){printf(p[i]);"; p[4]="putchar(10);}for(i=8;i>0;i--){for(j=strlen(p[i])-1;j>=0;j--)putchar"; p[5]="(p[i][j]);putchar(10);}for(i=8;i>=0;i--){putchar(';');putchar(34);for"; p[6]="(j=strlen(p[i])-1;j>=0;j--)putchar(p[i][j]);putchar(34);putchar('=');"; p[7]="putchar(']');putchar(i+48);putchar('[');putchar('p');putchar(10);}for"; p[8]="(j=strlen(p[0])-1;j>=0;j--)putchar(p[0][j]);putchar(10);}"; /* print the first line of the program */ printf(p[0]); putchar(10); /* print the p[i] lines, use 34 for " and 10 for \n to avoid """" problem */ for(i=0;i<=8;i++){ putchar('p'); putchar('['); putchar(i+48); putchar(']'); putchar('='); putchar(34); printf(p[i]); putchar(34); putchar(';'); putchar(10); } /* use p[2] through p[8] to print the this part of the program */ for(i=1;i<=8;i++){ printf(p[i]); putchar(10); } /* print the main program reversed */ for(i=8;i>0;i--){ for(j=strlen(p[i])-1;j>=0;j--) putchar(p[i][j]); putchar(10); } /* print the p[i]=" " lines reversed - again print "p[i]" char-by-char */ for(i=8;i>=0;i--){ putchar(';'); putchar(34); for(j=strlen(p[i])-1;j>=0;j--) putchar(p[i][j]); putchar(34); putchar('='); putchar(']'); putchar(i+48); putchar('['); putchar('p'); putchar(10); } /* print first line reversed */ for(j=strlen(p[0])-1;j>=0;j--) putchar(p[0][j]); putchar(10); }