fix more broken markdown links

We fix more markdown links in markdown files that refer to files
internally to the web site.

Added tmp tools to find and print various markdown links:

* `tmp/md-links.sh` - print all markdown links
* `tmp/md-token-links.sh` - print all markdown links that start with a **%%TOKEN%%**
* `tmp/md-local-links.sh` - print all markdown links to a local file
* `tmp/md-link-paths.sh` - print local file paths referenced in markdown links

Fixed a number of markdown formatting problems with `thanks-for-help.md`.
Fixed markdown links to files in `thanks-for-help.md`.  Improved
heading levels in `thanks-for-help.md`, and made entry sections consistent.

Changed all markdown links that end in "))" to end in a better way.

Explained in `markdown.md` why we are avoiding markdown links that
end in "))".

Ran `make www` to perform the above.

TODO: Fix stuff we broke by mistake doing the above.

TODO: Fix more broken markdown links.
This commit is contained in:
Landon Curt Noll committed 2024-04-26 04:17:20 -07:00
1 parent 60960e1650
commit 4f95e3f3d6
174 files changed
+4008 -2029

No files matched your search

+14 -14
View File
@@ -93,7 +93,7 @@ the rules were changed, requesting non-machine specific code.
This program was selected for the 1987 t-shirt collection.
The C startup routine (via [crt0.o](https://en.wikipedia.org/wiki/Crt0))
The C startup routine, via [crt0.o](https://en.wikipedia.org/wiki/Crt0),
transfers control to a location named `main`. In this case, `main` just happens
to be in the data area. The array of `short`s, which has been further
obfuscated by use of different data types, just happens to form a meaningful set
@@ -188,10 +188,10 @@ since there was no CS curriculum when we started). We had an assignment to
create a pair of programs for the computer networks course. The programs were
supposed to send data reliably from one program to the other over an unreliable
channel. This channel was simulated with a pair of
[pipes](https://en.wikipedia.org/wiki/Pipeline_(software)).
[pipes](https://en.wikipedia.org/wiki/Pipeline_(software)).
We decided for fun to create an
[obfuscated](https://en.wikipedia.org/wiki/Obfuscation_(software)) set of
[obfuscated](https://en.wikipedia.org/wiki/Obfuscation_(software)) set of
programs, only for the
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor), to do this, but
circumventing the channel (i.e. cheating, hence the needed obfuscation). Our
@@ -207,12 +207,12 @@ there](https://groups.google.com/g/net.lang.c/c/lx-TAuEyeRI/m/HdOOnNx6LC0J) and
it.
Since we had just recently created these [obfuscated
programs](https://en.wikipedia.org/wiki/Obfuscation_(software)) we decided we could
programs](https://en.wikipedia.org/wiki/Obfuscation_(software)) we decided we could
use the same technique for an obfuscated C program. We upped the ante a bit by
making it "portable".
To add to the
[obfuscation](https://en.wikipedia.org/wiki/Obfuscation_(software)), we used
[obfuscation](https://en.wikipedia.org/wiki/Obfuscation_(software)), we used
different formats for the integers in the array: some in decimal, some in octal,
some in hexadecimal, and when the value would fit, some as an ASCII character.
@@ -230,7 +230,7 @@ Our program is idempotent under `cb`.
When this program is compiled, the compiler places the array somewhere in
memory, just like it places any compiled code somewhere in memory. Usually, the
C startup code ([crt0.o](https://en.wikipedia.org/wiki/Crt0)) calls a routine
C startup code, [crt0.o](https://en.wikipedia.org/wiki/Crt0), calls a routine
named `main()`. The loader fills in the address in the startup code, but at
least on the old systems where this program ran, it doesn't know that the
`main()` in this program isn't code but data!
@@ -242,13 +242,13 @@ both a [PDP-11](https://en.wikipedia.org/wiki/PDP-11) and a
On the [VAX](https://en.wikipedia.org/wiki/VAX), the routine `main()` is called
with the `calls` instruction. This instruction uses the first (2-byte)
[word](https://en.wikipedia.org/wiki/Word_(computer_architecture)) of the called
[word](https://en.wikipedia.org/wiki/Word_(computer_architecture)) of the called
routine as a mask of
[registers](https://en.wikipedia.org/wiki/Processor_register) that are to be
saved on the [stack](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)).
saved on the [stack](https://en.wikipedia.org/wiki/Stack(abstract_data_type)).
In other words, on the VAX the first word can be anything. On the
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor), the first word
is a [branch](https://en.wikipedia.org/wiki/Branch_(computer_science))
is a [branch](https://en.wikipedia.org/wiki/Branch_(computer_science))
[instruction](https://en.wikipedia.org/wiki/Instruction_set_architecture#Instructions)
that branches over the VAX code. The PDP and VAX codes are thus completely
separate.
@@ -356,7 +356,7 @@ program that we came up with is as follows:
The first word (after the label `vax`) is the
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor) [branch
instruction](https://en.wikipedia.org/wiki/Branch_(computer_science)).
instruction](https://en.wikipedia.org/wiki/Branch_(computer_science)).
[PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor) branch
instructions are octal `400` + the distance divided by `2`. The string that both
the [PDP](https://en.wikipedia.org/wiki/Programmed_Data_Processor) and
@@ -366,10 +366,10 @@ programs use is after the `str` label, and the
`pdp` label.
On the [VAX](https://en.wikipedia.org/wiki/VAX), the program
[pushes](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)) 9 (the length
of the string), the address of the string and 1 (the [file
[pushes](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)) 9 (the length
of the string), the address of the string and 1, the [file
descriptor](https://en.wikipedia.org/wiki/File_descriptor) on the
[stack](https://en.wikipedia.org/wiki/Stack_(abstract_data_type))) and calls
[stack](https://en.wikipedia.org/wiki/Stack_(abstract_data_type)), and calls
`write(2)`. Since we didn't know the exact calling sequence for [system
calls](https://en.wikipedia.org/wiki/System_call), we just copied the source for
the `write(2)` system call stub into our program. After `write(2)` finishes, the
@@ -455,7 +455,7 @@ The only problem we had was that the program had chosen an
Since everybody knows what a [PDP-11](https://en.wikipedia.org/wiki/PDP-11)
branch instruction looks like (everyone knows that the traditional magic word
for an executable, `0407`, is a [PDP-11](https://en.wikipedia.org/wiki/PDP-11)
[branch](https://en.wikipedia.org/wiki/Branch_(computer_science))), we changed
[branch](https://en.wikipedia.org/wiki/Branch_(computer_science)), we changed
that to [decimal](https://en.wikipedia.org/wiki/Decimal). After checking the
size of the resulting program we saw that it was one byte too long. The limit
was 512 bytes, and our program was 513 bytes. So we changed the word `and` in
+6 -6
View File
@@ -452,7 +452,7 @@ that has ever been received! Like all great contest entries, it resulted in a
change of rules for the following year. To prevent a flood of similar programs,
the rules were changed, requesting non-machine specific code.</p>
<p>This program was selected for the 1987 t-shirt collection.</p>
<p>The C startup routine (via <a href="https://en.wikipedia.org/wiki/Crt0">crt0.o</a>)
<p>The C startup routine, via <a href="https://en.wikipedia.org/wiki/Crt0">crt0.o</a>,
transfers control to a location named <code>main</code>. In this case, <code>main</code> just happens
to be in the data area. The array of <code>short</code>s, which has been further
obfuscated by use of different data types, just happens to form a meaningful set
@@ -549,7 +549,7 @@ Our program is idempotent under <code>cb</code>.</p>
<h3 id="more-detailed-analysis">More detailed analysis</h3>
<p>When this program is compiled, the compiler places the array somewhere in
memory, just like it places any compiled code somewhere in memory. Usually, the
C startup code (<a href="https://en.wikipedia.org/wiki/Crt0">crt0.o</a>) calls a routine
C startup code, <a href="https://en.wikipedia.org/wiki/Crt0">crt0.o</a>, calls a routine
named <code>main()</code>. The loader fills in the address in the startup code, but at
least on the old systems where this program ran, it doesn’t know that the
<code>main()</code> in this program isn’t code but data!</p>
@@ -562,7 +562,7 @@ with the <code>calls</code> instruction. This instruction uses the first (2-byte
<a href="https://en.wikipedia.org/wiki/Word_(computer_architecture)">word</a> of the called
routine as a mask of
<a href="https://en.wikipedia.org/wiki/Processor_register">registers</a> that are to be
saved on the <a href="https://en.wikipedia.org/wiki/Stack_(abstract_data_type)">stack</a>.
saved on the <a href="https://en.wikipedia.org/wiki/Stack(abstract_data_type)">stack</a>.
In other words, on the VAX the first word can be anything. On the
<a href="https://en.wikipedia.org/wiki/Programmed_Data_Processor">PDP</a>, the first word
is a <a href="https://en.wikipedia.org/wiki/Branch_(computer_science)">branch</a>
@@ -664,9 +664,9 @@ programs use is after the <code>str</code> label, and the
<code>pdp</code> label.</p>
<p>On the <a href="https://en.wikipedia.org/wiki/VAX">VAX</a>, the program
<a href="https://en.wikipedia.org/wiki/Stack_(abstract_data_type)">pushes</a> 9 (the length
of the string), the address of the string and 1 (the <a href="https://en.wikipedia.org/wiki/File_descriptor">file
of the string), the address of the string and 1, the <a href="https://en.wikipedia.org/wiki/File_descriptor">file
descriptor</a> on the
<a href="https://en.wikipedia.org/wiki/Stack_(abstract_data_type)">stack</a>) and calls
<a href="https://en.wikipedia.org/wiki/Stack_(abstract_data_type)">stack</a>, and calls
<code>write(2)</code>. Since we didn’t know the exact calling sequence for <a href="https://en.wikipedia.org/wiki/System_call">system
calls</a>, we just copied the source for
the <code>write(2)</code> system call stub into our program. After <code>write(2)</code> finishes, the
@@ -745,7 +745,7 @@ The only problem we had was that the program had chosen an
Since everybody knows what a <a href="https://en.wikipedia.org/wiki/PDP-11">PDP-11</a>
branch instruction looks like (everyone knows that the traditional magic word
for an executable, <code>0407</code>, is a <a href="https://en.wikipedia.org/wiki/PDP-11">PDP-11</a>
<a href="https://en.wikipedia.org/wiki/Branch_(computer_science)">branch</a>), we changed
<a href="https://en.wikipedia.org/wiki/Branch_(computer_science)">branch</a>, we changed
that to <a href="https://en.wikipedia.org/wiki/Decimal">decimal</a>. After checking the
size of the resulting program we saw that it was one byte too long. The limit
was 512 bytes, and our program was 513 bytes. So we changed the word <code>and</code> in