// 323 - Self reproducing program by Ambrus ZSBAN // // This program writes its source code to stdout. // RVLVQRVLVQ #include #include char s1[]= "// 323 - Self reproducing program by Ambrus ZSBAN\n" "//\n" "// This program writes its source code to stdout.\n" "// RVLVQRVLVQ\n" "\n" "#include \n" "#include \n" "char s1[]=\n" "\""; char s2[]= "\";\n" "\n" "int main (void) {\n" " char *p;\n" " int x;\n" " printf (\"%s\", s1);\n" " p= s1;\n" " while (*p) {\n" " switch (*p) {\n" " case '\\n':\n" " printf (\"\\\\n\\\"\\n\\\"\");\n" " break;\n" " case '\\\\':\n" " printf (\"\\\\\\\\\");\n" " break;\n" " case '\\\"':\n" " printf (\"\\\\\\\"\");\n" " break;\n" " default:\n" " x= strcspn (p, \"\\n\\\\\\\"\");\n" " printf (\"%.*s\", x, p);\n" " p+= x -1;\n" " }\n" " p++;\n" " }\n" " printf (\"\\\";\\nchar s2[]=\\n\\\"\");\n" " p= s2;\n" " while (*p) {\n" " switch (*p) {\n" " case '\\n':\n" " printf (\"\\\\n\\\"\\n\\\"\");\n" " break;\n" " case '\\\\':\n" " printf (\"\\\\\\\\\");\n" " break;\n" " case '\\\"':\n" " printf (\"\\\\\\\"\");\n" " break;\n" " default:\n" " x= strcspn (p, \"\\n\\\\\\\"\");\n" " printf (\"%.*s\", x, p);\n" " p+= x -1;\n" " }\n" " p++;\n" " }\n" " printf (\"%s\", s2);\n" " return;\n" " }\n" "\n" "\n" ""; int main (void) { char *p; int x; printf ("%s", s1); p= s1; while (*p) { switch (*p) { case '\n': printf ("\\n\"\n\""); break; case '\\': printf ("\\\\"); break; case '\"': printf ("\\\""); break; default: x= strcspn (p, "\n\\\""); printf ("%.*s", x, p); p+= x -1; } p++; } printf ("\";\nchar s2[]=\n\""); p= s2; while (*p) { switch (*p) { case '\n': printf ("\\n\"\n\""); break; case '\\': printf ("\\\\"); break; case '\"': printf ("\\\""); break; default: x= strcspn (p, "\n\\\""); printf ("%.*s", x, p); p+= x -1; } p++; } printf ("%s", s2); return; }