diff --git a/1993/lmfjyh/README.md b/1993/lmfjyh/README.md index f5d5b87df..dbfeebf33 100644 --- a/1993/lmfjyh/README.md +++ b/1993/lmfjyh/README.md @@ -6,25 +6,31 @@ If you have gcc < 2.3.3 you can build this entry like: make all ``` -This will create a file called `";main(){puts("Hello World!");}char*C=".c` which -would print `Hello World!` when compiled. +This will try to create a file whose actual filename is literally: + +``` +";main(){puts("Hello World!");}char*C=".c +``` + +When that file is compiled, it will greet the world in the +traditional fashion of C. For an explanation of why and how this works see the author's remarks. The gist -of the entry itself, however, is the file name _itself **is** the code_. +of the entry itself, however, is the file name _itself_ **is** _part of the code_. -NOTE: we delete the temporary file whether or not the compilation succeeds -because it is an unsafe filename and not doing so would cause problems for -anyone running `make`. +NOTE: We delete the temporary file as part of `make all` whether +or not the compilation succeeds. This is a Makefile **feature** +that might **bug** anyone running the make command. :-) -This entry will not compile with gcc < 2.3.3 as it relies on a bug which was -fixed in gcc 2.3.3 which was fixed a very long time ago now. There is an -alternate version for [those of -us](https://www.collinsdictionary.com/dictionary/english/everyone) with gcc >= -2.3.3. See [Alternate code](#alternate-code) section below for more details. +This entry will not compile with gcc version >= 2.3.3 as it relied +on a bug which was later fixed in gcc 2.3.3, and that happened +_a long time ago_ (.. _in a galaxy far, far away_?). -However, there is an another version that will be compiled in the extremely -likely case this fails. This should happen automatically. See [Alternate -code](#alternate-code) below for more details on it. +If `make all` fails to compile, a suggestion of compiling and running +the alternate version is printed. This alternate version is a variant +for [those of us](https://www.collinsdictionary.com/dictionary/english/everyone) +with gcc >= 2.3.3 or using clang. See [Alternate code](#alternate-code) +section below for more details. ### Bugs and (Mis)features: @@ -51,8 +57,7 @@ If you have gcc < 2.3.3 (i.e. the entry can compile): This version does what the code did but in a way that will work with modern compilers. We'd like to say there's something special about it but there isn't. -Nonetheless it will be compiled in case the original entry fails to compile -(which will happen unless you have gcc < 2.3.3. +Nonetheless it will be compiled in case the original entry fails to compile. ### Alternate build: diff --git a/1993/lmfjyh/index.html b/1993/lmfjyh/index.html index 2e4b01193..76cc57703 100644 --- a/1993/lmfjyh/index.html +++ b/1993/lmfjyh/index.html @@ -142,36 +142,37 @@ Location: FI - Republic of Finland To build:

If you have gcc < 2.3.3 you can build this entry like:

make all
-

This will create a file called ";main(){puts("Hello World!");}char*C=".c which -would print Hello World! when compiled.

+

This will try to create a file whose actual filename is literally:

+
";main(){puts("Hello World!");}char*C=".c
+

When that file is compiled, it will greet the world in the +traditional fashion of C.

For an explanation of why and how this works see the author’s remarks. The gist -of the entry itself, however, is the file name itself is the code.

-

NOTE: we delete the temporary file whether or not the compilation succeeds -because it is an unsafe filename and not doing so would cause problems for -anyone running make.

-

This entry will not compile with gcc < 2.3.3 as it relies on a bug which was -fixed in gcc 2.3.3 which was fixed a very long time ago now. There is an -alternate version for those of -us with gcc >= -2.3.3. See Alternate code section below for more details.

-

However, there is an another version that will be compiled in the extremely -likely case this fails. This should happen automatically. See Alternate -code below for more details on it.

+of the entry itself, however, is the file name itself is part of the code.

+

NOTE: We delete the temporary file as part of make all whether +or not the compilation succeeds. This is a Makefile feature +that might bug anyone running the make command. :-)

+

This entry will not compile with gcc version >= 2.3.3 as it relied +on a bug which was later fixed in gcc 2.3.3, and that happened +a long time ago (.. in a galaxy far, far away?).

+

If make all fails to compile, a suggestion of compiling and running +the alternate version is printed. This alternate version is a variant +for those of us +with gcc >= 2.3.3 or using clang. See Alternate code +section below for more details.

Bugs and (Mis)features:

The current status of this entry is:

STATUS: INABIAF - please **DO NOT** fix

For more detailed information see 1993 lmfjyh bugs.

To use:

If you have gcc < 2.3.3 (i.e. the entry can compile):

-
./lmfjyh
+
./lmfjyh

Alternate code:

This version does what the code did but in a way that will work with modern compilers. We’d like to say there’s something special about it but there isn’t. -Nonetheless it will be compiled in case the original entry fails to compile -(which will happen unless you have gcc < 2.3.3.

+Nonetheless it will be compiled in case the original entry fails to compile.

Alternate build:

Should you wish to build this version manually:

-
make alt
+
make alt

Alternate use:

Use lmfjyh.alt as you would lmfjyh above. Note that other code could also be done with the bug that the entry abuses but that would have to be manually @@ -187,10 +188,10 @@ best with C-source code.

As an example, I have taken a simple “Hello world!” program that should be familiar to all C-programmers.

Listing 1: A simple “Hello World” program

-
main()
-{
-  puts("Hello World!");
-}
+
main()
+{
+  puts("Hello World!");
+}

Packing method

Normally a file name is used only to identify the file, but this new revolutionary method introduces a totally new concept: THE FILE NAME IS THE @@ -198,9 +199,9 @@ PROGRAM. There is no need to waste valuable disk space to store source The program is embedded in the file name, only a minor portion of it is inside the file.

Listing 2: Compressed “Hello world”

-
char*_=__FILE__;
+
char*_=__FILE__;

Listing 3: Code embedded in the file name

-
";main(){puts("Hello World!");}char*C=".c
+
";main(){puts("Hello World!");}char*C=".c

The sample program in listing 1 is 36 bytes long. By using the new compression method, the example program may be squeezed to sixteen bytes. In the example the compression ratio is 2:1. It is evident