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;
}

Reply via email to