C — Änderungen 6045 → 6054

Zeile 23: Zeile 23:
 
Zeiger sind einzigartig in C. Mit Zeigern kann man wie bei Assembler direkt auf den Arbeitsspeicher zugreifen (allerdings nicht auf Register).
 
Zeiger sind einzigartig in C. Mit Zeigern kann man wie bei Assembler direkt auf den Arbeitsspeicher zugreifen (allerdings nicht auf Register).
 
Folgender Beispielcode verdeutlicht dies:
 
Folgender Beispielcode verdeutlicht dies:
−
/* Standardfunktionen für die Shell */
+
<c>
−
  /***********************************************************************************
+
  int console_attr = 7, console_x = 0, console_y = 0;
−
* Funktion Oneletter: Zeigt ein Buchstaben an einer bestimmten Position
+
 
−
* Groundcolour: Vordergrundfarbe
+
  void putchar(int c)
−
* Backcolour: Hintergrundfarbe
 
−
* Letter: Der Buchstabe
 
−
* Zeile: Die Zeile des Buchstaben
 
−
* Position: Welche Position der Buchstabe in der Zeile hat
 
−
***********************************************************************************
 
−
*/
 
−
  void OneLetter(unsigned char Groundcolour, unsigned char Backcolour, unsigned char Letter, unsigned char Zeile, unsigned char  Position)
 
 
  {
 
  {
−
char Colour;
+
    unsigned char *console = (unsigned char *)0xB8000;
−
unsigned short int Atribut;
+
 
−
unsigned short int *Text = 0xB8000;
+
    if ((c != '\n') && (c != '\r'))
−
/* Prüfen ob überhaupt Farben möglich sind */
+
    {
−
if(Groundcolour > 16)
+
        console += (console_y * 80 + console_x) * 2;
−
{
+
        *(console++) = c;
−
End();
+
        *console = console_attr;
−
}
+
        console_x++;
−
if(Backcolour > 16)
+
    }
−
{
+
    else if (c == '\r')
−
End();
+
    {
−
}
+
        console_x = 0;
−
/* Zusammlegen der Farbe */
+
    }
−
Colour = Groundcolour * 16 + Backcolour;
+
 
−
Atrribut = Colour <<8;
+
    while ((console_x >= 80) || (c == '\n'))
−
Atrribut = Atrribut | Letter;
+
    {
−
/* Adress für die richtige Positionierung finden */
+
        if (console_x >= 80)
−
Text += y * 80 + x;
+
        {
−
*Text = Atrribut;
+
            console_x -= 80;
 +
        }
 +
        console_y++;
 +
        while (console_y >= 25)
 +
        {
 +
            console_y--;
 +
            memmove((void *)0xB8000, (void *)0xB80A0, 3840);
 +
            memset((void *)0xB8F00, 0, 160);
 +
        }
 +
        c = 0;
 +
    }
 
  }
 
  }
−
<!-- Urheber ist Be59. Code steht unter BSD -->
+
</c>
−
Es handelt sich um den Code für die Textausgabe aus [[FiKe]].
+
<!-- Urheber ist XanClic, Code steht unter der WTFPL - ungetestet! -->
−
Die Zeile 3 beinhaltet einen Zeiger, der für die Textausgabe essentiell ist. Dieser Zeiger kann erhöht werden (Zeile 18) oder
+
Hierbei handelt es sich um einen Beispielcode, der zeigt, wie eine putchar()-Funktion beispielsweise aussehen könnte.
−
auf dem zeigende Wert verändert werden (Zeile 19).<br>
+
Die Zeile 5 beinhaltet einen Zeiger, der für die Textausgabe essentiell ist. Dieser Zeiger kann erhöht werden (Zeile 7) oder
 +
auf dem zeigende Wert verändert werden (Zeile 9). In Zeile 8 wird zuerst der Wert, auf den den console zeigt, verändert und dann der Zeiger um eins erhöht.<br>
  
 
== Bekannte C-Compiler ==
 
== Bekannte C-Compiler ==