C++-Kernel mit GRUB — Änderungen 6687 → 6688

Zeile 12: Zeile 12:
 
void main() {
 
void main() {
 
   // Textausgabe
 
   // Textausgabe
−
   screen << color::blue << "Willkommen im C++-TestKernel!";
+
   screen << background(color::red) << color::blue << "Willkommen im C++-TestKernel!";
 
}
 
}
 
</cpp>
 
</cpp>
Zeile 46: Zeile 46:
 
   };
 
   };
 
}
 
}
 +
 +
struct background
 +
{
 +
  inline background(color::type color)
 +
    : m_color(color){}
 +
 +
  color::type m_color;
 +
};
  
 
class Video
 
class Video
Zeile 62: Zeile 70:
 
     Video& operator << (const char* s);
 
     Video& operator << (const char* s);
  
−
     // Vordergrund
+
     // Vordergrundfarbe setzen
 
     Video& operator << (color::type color);
 
     Video& operator << (color::type color);
 +
 +
    // Hintergrundfarbe setzen
 +
    Video& operator << (const background& color);
  
 
     // Ausgabe eines einzelnen Zeichens
 
     // Ausgabe eines einzelnen Zeichens
Zeile 70: Zeile 81:
 
   private:
 
   private:
 
     // Zeiger auf den Videospeicher
 
     // Zeiger auf den Videospeicher
−
     unsigned short* videomem;
+
     unsigned short* m_videomem;
  
 
     // Y-Position der Textausgabe, je volle Zeile +80
 
     // Y-Position der Textausgabe, je volle Zeile +80
−
     unsigned int off;
+
     unsigned int m_off;
  
 
     // X-Position der Textausgabe, ab Zeilenanfang
 
     // X-Position der Textausgabe, ab Zeilenanfang
−
     unsigned int pos;
+
     unsigned int m_pos;
  
 
     // FB/BG-Farbe
 
     // FB/BG-Farbe
−
     unsigned int screen_color;
+
     unsigned int m_color;
 
};
 
};
  
Zeile 98: Zeile 109:
  
 
Video::Video()
 
Video::Video()
−
   : pos(0), off(0), screen_color(0x0700), videomem((unsigned short*) 0xb8000)
+
   : m_videomem((unsigned short*) 0xb8000), m_off(0), m_pos(0), m_color(0x0700)
 
{
 
{
 
   //Bildschirm leeren
 
   //Bildschirm leeren
Zeile 110: Zeile 121:
 
   // Füllen des Bildschirms mit Leerzeichen
 
   // Füllen des Bildschirms mit Leerzeichen
 
   for(int i = 0;i < (80*25);i++)
 
   for(int i = 0;i < (80*25);i++)
−
     videomem[i] = (unsigned char)' ' | screen_color;
+
     m_videomem[i] = (unsigned char)' ' | m_color;
  
 
   // Zurücksetzen der Textausgabe nach links oben
 
   // Zurücksetzen der Textausgabe nach links oben
−
   pos = 0;
+
   m_pos = 0;
−
   off = 0;
+
   m_off = 0;
 
}
 
}
  
Zeile 126: Zeile 137:
  
 
Video& Video::operator << (color::type color){
 
Video& Video::operator << (color::type color){
−
   screen_color = (color << 12) | (screen_color & 0x0F00);
+
   m_color = (static_cast<unsigned int>(color) << 8) | (m_color & 0xF000);
 +
  return *this;
 +
}
 +
 
 +
Video& Video::operator << (const background& color){
 +
  m_color = (static_cast<unsigned int>(color.m_color) << 12) | (m_color & 0x0F00);
 
   return *this;
 
   return *this;
 
}
 
}
Zeile 132: Zeile 148:
 
void Video::put(char c){
 
void Video::put(char c){
 
   // Wenn die Textausgabe den rechten...
 
   // Wenn die Textausgabe den rechten...
−
   if(pos >= 80){
+
   if(m_pos >= 80){
−
     pos = 0;
+
     m_pos = 0;
−
     off += 80;
+
     m_off += 80;
 
   }
 
   }
  
 
   // ...oder den unteren Bildschirmrand erreicht, gibt es
 
   // ...oder den unteren Bildschirmrand erreicht, gibt es
 
   // einen Umbruch bzw. es wird aufgeräumt.
 
   // einen Umbruch bzw. es wird aufgeräumt.
−
   if(off >= (80*25))
+
   if(m_off >= (80*25))
 
     clear();
 
     clear();
  
 
   // Setzen des Zeichens und der Farbe in den Videospeicher
 
   // Setzen des Zeichens und der Farbe in den Videospeicher
−
   videomem[off + pos] = (unsigned char)c | screen_color;
+
   m_videomem[m_off + m_pos] = (unsigned char)c | m_color;
−
   pos++;
+
   m_pos++;
 
}
 
}
 
</cpp>
 
</cpp>