Xref: utzoo comp.sources.wanted:9877 alt.sources.wanted:107 Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!cs.utexas.edu!rice!uw-beaver!zephyr.ens.tek.com!tektronix!percy!reed!trost From: trost@reed.bitnet (Bill Trost) Newsgroups: comp.sources.wanted,alt.sources.wanted Subject: Re: Backwards cat [trick recursive main()] Message-ID: <13772@reed.UUCP> Date: 20 Dec 89 00:03:23 GMT References: <6488@lindy.Stanford.EDU> <5840@eos.UUCP> Sender: news@reed.UUCP Distribution: usa Lines: 49 >... then there's always (modulo stack death), the classic: > > #include > > main() { > char line[BUFSIZ]; > > if (gets(line) == NULL) > return; > main(); > puts(line); > } But you forgot to handle arguments! #include main(argc, argv) char** argv; { switch (argc) { default: main(argc - 1, argv + 1); /* FALLS THROUGH */ case 2: if (argv[1][0] != '-' || argv[1][1] != '\0') { FILE* fp; if (fp = fopen(argv[1])) { main(-1, (char **) fp); fclose(fp); } break; } /* FALLS THROUGH */ case 1: main(-1, stdin); break; case -1: { char line[BUFSIZ]; if (!fgets(line, BUFSIZ, (FILE *) argv)) return; main(argc, argv); fputs(line, stdout); } } }