Thomas Roessler <[EMAIL PROTECTED]>: > Maybe a contest about generating the shortest > self-replicating program which runs on a given > architecture is more productive like this. ;-) > > I'm offering 11 bytes, plus portability. Does it work anything like the attached program? Edmund
#include <stdio.h> void escape(char *x) { for (; *x; x++) if (*x == '"' || *x == '\\') printf("\\%c", *x); else if (*x == '\n') printf("\\n\"\n\""); else putchar(*x); } int main(int argc, char *argv[]) { char *x = "#include <stdio.h>\n" "\n" "void escape(char *x)\n" "{\n" " for (; *x; x++)\n" " if (*x == '\"' || *x == '\\\\')\n" " printf(\"\\\\%c\", *x);\n" " else if (*x == '\\n')\n" " printf(\"\\\\n\\\"\\n\\\"\");\n" " else\n" " putchar(*x);\n" "}\n" "\n" "int main(int argc, char *argv[])\n" "{\n" " char *x = \""; char *y = "\";\n" "\n" " printf(\"%s\", x);\n" " escape(x);\n" " printf(\"\\\";\\n char *y = \\\"\");\n" " escape(y);\n" " printf(\"%s\", y);\n" " return 0;\n" "}\n" ""; printf("%s", x); escape(x); printf("\";\n char *y = \""); escape(y); printf("%s", y); return 0; }