Code: Alles auswählen
if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT APPLE)
Code: Alles auswählen
if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT APPLE)
Code: Alles auswählen
else (WIN32)
if ( USING_GNU_C AND NOT APPLE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DM_PI=3.14159265358979323846" )
Code: Alles auswählen
# This enforces a particular version of CMake that we require to process the script files
# properly.
cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
# As of CMake 2.6 policies were introduced in order to provide a mechanism for
# adding backwards compatibility one feature at a time. We will just specify
# that all policies will use version 2.6 symantics.
cmake_policy(VERSION 2.6)
Du musst bedenken: Die verwenden schon CMake, damit isses eigentlich eh schon egal... :PJonathan hat geschrieben:Egal was für einen obskuren Grund es dafür auch geben mag, sollte man doch trotzdem irgendwie einsehen, dass das keine Gute Lösung sein kann...
Vielleicht haben sie das so gemacht weil ihnen sonst einfach zu viel Code kaputtgeht. Hier ist Quelltext aus dem Microsoft-Beispiel, wie man einen Shell Handler für Thumbnail-Erzeugung registriert:Alexander Kornrumpf hat geschrieben:Ist es also vielleicht ein anderweitig nützliches Detail der Implementierung, was die o. g. Invarianz zerstört? Sprich: ein Trade-Off?
Code: Alles auswählen
if (*pszFileType == L'.')
{
wchar_t szDefaultVal[260];
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
sizeof(szDefaultVal));
// If the key exists and its default value is not empty, use the
// ProgID as the file type.
if (SUCCEEDED(hr) && szDefaultVal[0] != L'\0')
{
pszFileType = szDefaultVal;
}
}
// Create the registry key
// HKCR\<File Type>\shellex\{e357fccd-a995-4576-b01f-234630154e96}
hr = StringCchPrintf(keyPath, ARRAYSIZE(keyPath),
L"%s\\shellex\\{e357fccd-a995-4576-b01f-234630154e96}", pszFileType);
Weil ich ja aus den hunderten Seiten Dokumentation auch was gelernt habe:Schrompf hat geschrieben:Der Großteil dieser absurden Modi ergibt sich aus den absonderlichen Fähigkeiten des damaligen Grafikchips.
Da ich mal, allerdings nur für 10 Minuten, versucht habe zu verstehen wie EGA funktioniert kann ich so richtig respektieren, wie du dich da durchwühlst.Krishty hat geschrieben:Weil ich ja aus den hunderten Seiten Dokumentation auch was gelernt habe:
Frühe Computer wurden direkt an den Fernseher angeschlossen und arbeiteten deshalb direkt auf dem NTSC-Signal. Als die Computer noch mit zwei/vier/acht Farben arbeiteten, konnte man ein Byte Speicher (und einige Transistoren) sparen, indem man die Farbe am Anfang der Zeile setzt und danach nur noch das Helligkeitssignal überträgt (ist bei TV ja beides getrennt). Natürlich hatte man dann nur eine Farbe pro Zeile, aber … doppelte Geschwindigkeit!
Als Commodore auf RGB umstellte, entfiel diese Funktionalität. Dummerweise hatte man dann ein großes Loch mitten im Grafikchip. Der Chefingenieur meinte, das wären drei Monate Arbeit, das wieder raus zu kriegen. Also einigte man sich darauf, die Funktionalität drin zu lassen, aber sie für RGB anzupassen. Und das war dann der erste Hold and Modify-Modus, und 35 Jahre später jammert Krishty, was für ein scheiß Gewusel das im Code ist.
Boah, gut dass du EGA erwähnst. Es scheint ILBMs zu geben, die gar keine eigene Palette mitbringen, und stattdessen auf der EGA-Standardpalette arbeiten. Ich weiß, dass solche Dateien z.B. in den komprimierten Archiven von Commander Keen herumliegen; bin aber bisher an keine Kopie gekommen (Spiel suchen -> Image runterladen -> DOS-Emulator installieren -> schon wieder 5 Uhr morgens, fuck my life). Also eine weitere Verzweigung für die Jammer-Liste oben.Alexander Kornrumpf hat geschrieben:Da ich mal, allerdings nur für 10 Minuten, versucht habe zu verstehen wie EGA funktioniert
So. Habe mich eine Stunde hingesetzt und eine Mini-CRT geschrieben. Alle Symbole definiert. Ich musste kranken Scheiß machen, über den ich hier später noch ausführlicher jammern werde. Und was ist die Frucht meiner Mühen?Krishty hat geschrieben:Mein Thumbnail Handler ist 90 KiB groß. 79 KiB davon entfallen auf die Visual-C++-CRT, die überzeugt ist, folgende Dinge gehörten in mein Programm obwohl ich keinen Gebrauch davon mache:Ich muss also dringend wieder anfangen, meine eigene CRT zu schreiben. Wirklich – fuck that shit.
- log10() (fast 2 KiB)
- parse_command_line(), expand_argument_wildcards(), common_expand_argv_wildcards(), usw – obwohl ich eine DLL kompiliere(!)
- memcpy – ich sehe ein, dass man das manchmal zur Initialisierung braucht; aber nicht, dass es mit 1 KiB größer ist als viele meiner Image Loader
- _raise_exc_ex(), _seh_filter_exe() und weitere Ausnahmebehandlungsroutinen – obwohl Exceptions in den Projekteinstellungen abgeschaltet sind und ich kein SEH nutze
- setmbcp_internal(), write_text_utf8_nolock(), und weiterer Locale-Dreck – obwohl ich keine stdio oder C++-I/O nutze
- __report_gsfailure() – obwohl Security Checks deaktiviert und Security Cookies durch Compiler-Switch ausgeknipst sind
- Rund fünfzig Funktionen betreffend Locks und Mutexe – obwohl ich nichts in Richtung Multithreading verwende außer _InterlockedIncrement() & Co.
- Etliche KiB unkenntlichen Mülls aus einer gewissen winapi_thunks.obj
Code: Alles auswählen
1>dllmain.cpp : fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'f:\dd\vctools\compiler\utc\src\p2\main.c', line 249)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
1> Please choose the Technical Support command on the Visual C++
1> Help menu, or open the Technical Support help file for more information
1> link!RaiseException()+0x58
1> link!CxxThrowException()+0x65
1> link!std::_Xout_of_range()+0x1f
1> link!InvokeCompilerPass()+0x25984
1> link!InvokeCompilerPass()+0x18c0d
1> link!InvokeCompilerPass()+0x18b8b
1> link!InvokeCompilerPass()+0x18fa3
1> link!InvokeCompilerPass()+0x18f14
1> link!InvokeCompilerPass()+0x1be23
1> link!InvokeCompilerPass()+0x1b8d3
1> link!DllGetC2Telemetry()+0xc7cc6