Ein klassisches Terminal (z.B. ein VT100) sendet bei Drücken der
Enter-Taste einen CR, das hat mit unterschiedlichen Betriebssystemen
zunächst nichts zu tun. Deswegen machen das Terminalemulationsprogram-
me (Minicom, Hyperterm usw.) genauso. Man kann allerdings viele
Terminals bzw. Emulatoren so umkonfigurieren, dass bei Enter ein CR+LF
oder auch nur ein LF gesendet wird. Der Default ist aber ein einzelnes
CR.
Dein erstes Beispiel zeigt die Empfangsroutine, die Zeichen wahr-
scheinlich von einem Terminal empfängt. Deswegen ist es richtig, auf
CR abzufragen.
Das zweite Beispiel ist die Senderoutine. Die Zeichen stammen nicht
vom Terminal, sondern von deiner Controllersoftware, und diese
verwendet offensichtlich ein LF ('\n') am Zeilenende, wie in C üblich.
Streng genommen müsstest du am Zeilenende sowohl einen CR (setzt den
Cursor an den Anfang der aktuellen Ausgabezeile) also auch einen LF
(bewegt den Cursor eine Zeile tiefer an der gleichen Horizontalposi-
tion) ausgeben. Vielleicht tust du das ja auch. Aber auch hier können
die Terminals oft so umkonfiguriert werden, dass ein einzelner CR oder
LF wie die Kombination aus CR und LF behandelt wird.
Das ganze CR/LF-Gedöns stammt noch aus der Zeit der Fernschreiber, wo
die beiden Steuerzeichen mechanisch umgesetzt wurden. CR ist der
Wagenrücklauf, LF dreht die Papierwalze um ein Zeile weiter. Im
Elektronikzeitalter wäre es sinnvoller und weniger verwirrend, diese
beiden Zeichen durch ein einzelnes namens LE (Line End) zu ersetzen,
das sowohl bei der Eingabe, bei der Ausgabe als auch in Textdateien
verwendet wird.
In Unix/Linux/C und auf den Apple-Rechnern wird das prinzipiell auch
so gemacht, indem nur ein Zeichen (LF in Unix/Linux/C bzw. CR bei
Apple) ein Zeilenende markiert. Die Konvertierung für Ein-/Ausgabe-
geräte, die nach dem klassischen Standard arbeiten, macht das
Betriebssystem. Nur bei hardwarenaher Programmierung schlägt die
Unterscheidung zwischen CR und LF bei Ein- und Ausgabe manchmal noch
zu.
DOS/Windows verhält sich diesbezüglich noch "fernschreibermäßig", was
die Kommunikation mit Ein-/Ausgabegeräten oft etwas erleichtert. Dafür
mussten in die Standardbibliothek des aus der Unix-Welt stammenden C
Krücken eingebaut werden, um zwischen den beiden unterschiedlichen
Zeilenendedarstellungen zu konvertieren.