Konzept Nr. 3 ------------- Die Paletten der Screens werden wirklich verändert. Die GetRGB-Routinen werden gepatcht, um die Originalfarben zurückzuliefern. Auf diese Weise merken OS-Konforme Programme nichts von dem "Betrug". Vorteile: *bessere Grafikkarten und OS-Kompatibilität *schnelleres Screen Handling *kein Verbiegen der ColorMap-Struktur im ViewPort mehr nötig *MakeVPort Patch fällt flach Neues Aktivierungs/Deaktivierungs-Schema ---------------------------------------- Ist PatchActive gleich FALSE, so verändert die PatchColors Routine die Farben nicht. Da das Hauptprogramm mit dem UpdateAll Flag einen Komplett-Refresh aller Farben erzwingt, werden alle Farben in ihren Originalzustand zurückversetzt. Die Load/SetRGB-Routinen führen weiterhin zwei ColorMaps, sind also langsamer als gewöhnlich! Erzeugen von Knotenstrukturen ----------------------------- Der Zeiger auf den ViewPort wird in der Knotenstruktur abgelegt. Eine alternative ColorMap wird mittels GetColorMap() belegt und in der Knotenstruktur gespeichert. Alle relevanten Felder der originalen ColorMap werden in die Backup-ColorMap kopiert. Alle Farben werden mittels der ORIGINAL GetRGB32() aus der originalen ColorMap ausgelesen. Die Einträge der Tabelle werden mit der ORIGINAL SetRGB32CM() in die Backup-Colormap kopiert und dabei gepatcht. Dann wird die gepatchte Farbtabelle mit LoadRGB32 in die original ColorMap eingeladen. Auffinden von Knotenstrukturen ------------------------------ Wird eine Knotenstruktur anhand des ViewPorts aufgefunden, so wird ein Update aller relevanten Felder der Backup-ColorMap durchgeführt. Patch von LoadRGB32() --------------------- Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, Knotenstruktur auffinden. Wenn UpdateAll-Flag nicht gesetzt ist: Schleife: Die neuen Farbwerte werden mittels der ORIGINAL SetRGB32CM() Funktion in die Backup-Farbtabelle geschrieben Gleichzeitig werden die Farben gepatcht und in einer alternativen Tabelle abgelegt. Wenn das UpdateAll-Flag gesetzt ist: Schleife: Die neuen Farbwerte werden mittels der ORIGINAL SetRGB32CM() Funktion in die Backup-Farbtabelle geschrieben ALLE Farben werden mittels der ORIGINAL GetRGB32 aus der Backup-ColorMap ausgelesen, anschließend gepatcht und eine Tabelle erzeugt. Diese Tabelle wird dann mittels der ORIGINAL LoadRGB32() auf die Original ColorMap losgelassen. Patch von SetRGB32CM() ---------------------- Wenn das Feld cm_ViewPort nicht initilisiert ist: ORIGINAL SetRGB32CM() direkt aufrufen Wenn das Feld cm_ViewPort initialisiert ist: Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, die Knotenstruktur auffinden. Farbwert mittels der ORIGINAL SetRGB32CM() in die Backup-ColorMap eintragen. Farbwert patchen und mittels der ORIGINAL SetRGB32CM() in die übergebene ColorMap eintragen. Patch von LoadRGB4() -------------------- Schleife: 4Bit-Farben auf 32Bit erweitern Die neuen Farbwerte werden mittels der ORIGINAL SetRGB32CM() in die Backup-ColorMap geschrieben. Gleichzeitig werden diese Farben gepatcht und in einer Tabelle abgelegt. Diese Tabelle wird dann mittels der ORIGINAL LoadRGB32() auf die originale ColorMap losgelassen. Patch von GetRGB32 ------------------ Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, die Knotenstruktur auffinden. Forbid() Kurzzeitig die Backup-ColorMap in den ViewPort eintragen. Die ORIGINAL GetRGB32()-Funktion aufrufen Die original ColorMap wieder in den ViewPort eintragen. Permit() Patch von GetRGB4 ----------------- Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, die Knotenstruktur auffinden. Forbid() Kurzzeitig die Backup-ColorMap in den ViewPort eintragen. Die ORIGINAL GetRGB4()-Funktion aufrufen Die original ColorMap wieder in den ViewPort eintragen. Permit()