diff --git a/CMakeLists.txt.old b/CMakeLists.txt.old index 47431a58d44..7a6247d5a98 100644 --- a/CMakeLists.txt.old +++ b/CMakeLists.txt.old @@ -1,299 +1,299 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -PROJECT(simulationcraft) - -SET(CPACK_PACKAGE_VERSION "422.5") -SET(CPACK_PACKAGE_VERSION_MAJOR "422") -SET(CPACK_PACKAGE_VERSION_MINOR "5") -SET(CPACK_PACKAGE_VERSION_PATCH "0") - -FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui QtWebKit QtMain QtNetwork) -FIND_PACKAGE(Threads REQUIRED) -FIND_PACKAGE(OpenSSL) - -IF(APPLE) - FIND_LIBRARY(COCOA_LIBRARY Cocoa) - MARK_AS_ADVANCED(COCOA_LIBRARY) - SET(COCOA_LIBS ${COCOA_LIBRARY}) -ENDIF(APPLE) - -SET(EXECUTABLE_OUTPUT_PATH bin) -SET(LIBRARY_OUTPUT_PATH bin) - -############################ -# MAIN SIMULATION ENGINE --> - -SET(SIMC_ENGINE_INCLUDE_DIRS - "engine" -) - -SET(SIMC_ENGINE_SOURCE - "engine/sc_io.cpp" - "engine/sc_thread.cpp" - "engine/sc_util.cpp" - "engine/sim/sc_option.cpp" - "engine/sim/sc_plot.cpp" - "engine/sim/sc_raid_event.cpp" - "engine/sim/sc_reforge_plot.cpp" - "engine/sim/sc_scaling.cpp" - "engine/sim/sc_cooldown.cpp" - "engine/sim/sc_event.cpp" - "engine/sim/sc_expressions.cpp" - "engine/sim/sc_gear_stats.cpp" - "engine/sim/sc_sim.cpp" - "engine/player/sc_unique_gear.cpp" - "engine/player/sc_set_bonus.cpp" - "engine/player/sc_consumable.cpp" - "engine/player/sc_pet.cpp" - "engine/player/sc_item.cpp" - "engine/player/sc_player.cpp" - "engine/util/rng.cpp" - "engine/buff/sc_buff.cpp" - "engine/action/sc_absorb.cpp" - "engine/action/sc_action_state.cpp" - "engine/action/sc_action.cpp" - "engine/action/sc_attack.cpp" - "engine/action/sc_dot.cpp" - "engine/action/sc_heal.cpp" - "engine/action/sc_harmful_spell.cpp" - "engine/action/sc_sequence.cpp" - "engine/action/sc_spell_base.cpp" - "engine/action/sc_stats.cpp" - "engine/class_modules/sc_death_knight.cpp" - "engine/class_modules/sc_druid.cpp" - "engine/class_modules/sc_enemy.cpp" - "engine/class_modules/sc_hunter.cpp" - "engine/class_modules/sc_monk.cpp" - "engine/class_modules/sc_mage.cpp" - "engine/class_modules/sc_paladin.cpp" - "engine/class_modules/sc_priest.cpp" - "engine/class_modules/sc_rogue.cpp" - "engine/class_modules/sc_shaman.cpp" - "engine/class_modules/sc_warlock.cpp" - "engine/class_modules/sc_warrior.cpp" - "engine/dbc/sc_const_data.cpp" - "engine/dbc/sc_data.cpp" - "engine/dbc/sc_item_data.cpp" - "engine/dbc/sc_spell_data.cpp" - "engine/dbc/sc_spell_info.cpp" - "engine/report/sc_report.cpp" - "engine/report/sc_chart.cpp" - "engine/report/sc_report_html_player.cpp" - "engine/report/sc_report_html_sim.cpp" - "engine/report/sc_report_text.cpp" - "engine/report/sc_report_xml.cpp" - "engine/interfaces/sc_js.cpp" - "engine/interfaces/sc_http.cpp" - "engine/interfaces/sc_bcp_api.cpp" - "engine/interfaces/sc_chardev.cpp" - "engine/interfaces/sc_wowhead.cpp" - "engine/interfaces/sc_xml.cpp" - "engine/interfaces/sc_rawr.cpp" -) - -SET(SIMC_ENGINE_HEADERS - "engine/simulationcraft.hpp" - "engine/sc_generic.hpp" - "engine/sc_timespan.hpp" - "engine/util/rng.hpp" - "engine/dbc/specialization.hpp" - "engine/dbc/dbc.hpp" - "engine/utf8.h" - "engine/utf8/checked.h" - "engine/utf8/core.h" - "engine/utf8/unchecked.h" - "engine/report/sc_report.hpp" - "engine/util/sample_data.hpp" - "engine/util/timeline.hpp" -) - -IF(OPENSSL_FOUND) - ADD_DEFINITIONS(-DUSE_OPENSSL) - INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) -ENDIF(OPENSSL_FOUND) - -ADD_LIBRARY(simc_engine STATIC ${SIMC_ENGINE_SOURCE} ${SIMC_ENGINE_HEADERS}) - -# <-- MAIN SIMULATION ENGINE -############################ - -########################### -# CONSOLE CONFIGURATION --> - -SET(SIMC_CONSOLE_SOURCE - "engine/sc_main.cpp" -) - -SET(SIMC_CONSOLE_HEADERS - ${SIMC_ENGINE_HEADERS} -) - -# OpenSSL configuration -> -IF(OPENSSL_FOUND) - ADD_DEFINITIONS(-DUSE_OPENSSL) - INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) -ENDIF(OPENSSL_FOUND) -# <- OpenSSL configuration - -ADD_EXECUTABLE(simc-con ${SIMC_CONSOLE_SOURCE} ${SIMC_CONSOLE_HEADERS}) - -INCLUDE_DIRECTORIES(${SIMC_ENGINE_INCLUDE_DIRS}) - -TARGET_LINK_LIBRARIES(simc-con simc_engine) -IF(WIN32) - TARGET_LINK_LIBRARIES(simc-con wininet) -ENDIF(WIN32) -TARGET_LINK_LIBRARIES(simc-con ${CMAKE_THREAD_LIBS_INIT}) -IF(OPENSSL_FOUND) - TARGET_LINK_LIBRARIES(simc-con ${OPENSSL_LIBRARIES}) -ENDIF(OPENSSL_FOUND) - -INSTALL(TARGETS simc-con DESTINATION "." CONFIGURATIONS Release COMPONENT Console) -SET(CPACK_COMPONENT_CONSOLE_DISPLAY_NAME "Console Application") -SET(CPACK_COMPONENT_CONSOLE_DESCRIPTION "Console application usable from the command line.") -SET(CPACK_COMPONENT_CONSOLE_GROUP "Runtime") -SET(CPACK_COMPONENT_GROUP_RUNTIME_DESCRIPTION "All the tools needed to execute profiles.") -SET(CPACK_COMPONENT_CONSOLE_REQUIRED 1) - -# <-- CONSOLE CONFIGURATION -########################### - -####################### -# QT4 CONFIGURATION --> - -IF(QT4_FOUND) - - SET(SIMC_QT_SOURCE - "qt/main.cpp" - "qt/sc_window.cpp" - "qt/sc_import.cpp" - ) - - SET(SIMC_QT_HEADERS_MOC - "qt/simulationcraftqt.hpp" - ) - - SET(SIMC_QT_HEADERS - ${SIMC_ENGINE_HEADERS} - ${SIMC_QT_HEADERS_MOC} - ) - - IF(APPLE) - SET(SIMC_QT_ICON ${CMAKE_CURRENT_SOURCE_DIR}/qt/icon/Simcraft2.icns) - ADD_DEFINITIONS(-DSIMC_NO_AUTOUPDATE) - ELSE(APPLE) - SET(SIMC_QT_ICON ${CMAKE_CURRENT_SOURCE_DIR}/qt/icon/Simcraft2.ico) - ENDIF(APPLE) - - # OpenSSL configuration -> - IF(OPENSSL_FOUND) - ADD_DEFINITIONS(-DUSE_OPENSSL) - INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) - ENDIF(OPENSSL_FOUND) - # <- OpenSSL configuration - - INCLUDE(${QT_USE_FILE}) - - QT4_WRAP_CPP(SIMC_QT_MOC ${SIMC_QT_HEADERS_MOC}) - - ADD_DEFINITIONS(${QT_DEFINITIONS}) - - IF(WIN32) - ADD_EXECUTABLE(simc-qt WIN32 ${SIMC_QT_SOURCE} ${SIMC_QT_MOC} ${SIMC_QT_HEADERS} ${SIMC_QT_ICON}) - ELSE(WIN32) - ADD_EXECUTABLE(simc-qt ${SIMC_QT_SOURCE} ${SIMC_QT_MOC} ${SIMC_QT_HEADERS} ${SIMC_QT_ICON}) - ENDIF(WIN32) - - INCLUDE_DIRECTORIES(${SIMC_ENGINE_INCLUDE_DIRS}) - - TARGET_LINK_LIBRARIES(simc-qt simc_engine) - IF(WIN32) - TARGET_LINK_LIBRARIES(simc-qt wininet) - ENDIF(WIN32) - TARGET_LINK_LIBRARIES(simc-qt ${QT_LIBRARIES}) - TARGET_LINK_LIBRARIES(simc-qt ${CMAKE_THREAD_LIBS_INIT}) - IF(OPENSSL_FOUND) - TARGET_LINK_LIBRARIES(simc-qt ${OPENSSL_LIBRARIES}) - ENDIF(OPENSSL_FOUND) - IF(APPLE) - TARGET_LINK_LIBRARIES(simc-qt ${COCOA_LIBS}) - ENDIF(APPLE) - - IF(APPLE) - SET(MACOSX_BUNDLE_ICON_FILE qt/icon/Simcraft2.icns) - SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/qt/icon/Simcraft2.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - ENDIF(APPLE) - - SET(PLUGIN_DEST_DIR ".") - SET(QTCONF_DEST_DIR ".") - SET(APPS "\${CMAKE_INSTALL_PREFIX}/simc-qt") - IF(APPLE) - SET(plugin_dest_dir SimulationCraft.app/Contents/MacOS) - SET(qtconf_dest_dir SimulationCraft.app/Contents/Resources) - SET(APPS "\${CMAKE_INSTALL_PREFIX}/SimulationCraft.app") - ENDIF(APPLE) - IF(WIN32) - SET(APPS "\${CMAKE_INSTALL_PREFIX}/simc-qt.exe") - ENDIF(WIN32) - - - INSTALL(TARGETS simc-qt DESTINATION "." CONFIGURATIONS Release COMPONENT GUI) - SET(CPACK_COMPONENT_GUI_DISPLAY_NAME "User Interface Application") - SET(CPACK_COMPONENT_GUI_DESCRIPTION "User interface to access SimulationCraft features.") - SET(CPACK_COMPONENT_GUI_GROUP "Runtime") - -ENDIF() -# <-- QT4 CONFIGURATION -####################### - -INSTALL(DIRECTORY profiles - DESTINATION "." CONFIGURATIONS Release - COMPONENT Profiles - OPTIONAL - PATTERN ".svn" EXCLUDE -) -SET(CPACK_COMPONENT_PROFILES_DISPLAY_NAME "Profiles") -SET(CPACK_COMPONENT_PROFILES_DESCRIPTION "DPS and HPS pre-generated profiles.") -SET(CPACK_COMPONENT_PROFILES_GROUP "Data") -SET(CPACK_COMPONENT_GROUP_DATA_DESCRIPTION "Data to generate DPS and HPS charts.") - -######################################################################################### -######################################### CPACK ######################################### -######################################################################################### - -IF(WIN32 AND NOT UNIX) - SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".") -ENDIF(WIN32 AND NOT UNIX) -INCLUDE(InstallRequiredSystemLibraries) - -SET(CPACK_NSIS_DISPLAY_NAME "SimulationCraft") -SET(CPACK_PACKAGE_VENDOR "SimulationCraft group") -SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/READ_ME_FIRST.txt") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simulationcraft - World of Warcraft DPS Simulator") -SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") -SET(CPACK_PACKAGE_INSTALL_DIRECTORY "SimulationCraft-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") -IF(WIN32 AND NOT UNIX) - SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/qt/icon\\\\Simcraft2.ico") - SET(CPACK_NSIS_MUI_UNICON "${CMAKE_CURRENT_SOURCE_DIR}/qt/icon\\\\Simcraft2.ico") - SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/qt/icon\\\\Simcraft2.ico") - SET(CPACK_NSIS_INSTALLED_ICON_NAME "simc-qt.exe") - SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\code.google.com/p/simulationcraft") - SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\code.google.com/p/simulationcraft/w/list") - SET(CPACK_NSIS_CONTACT "natehieter@gmail.com") - SET(CPACK_NSIS_MODIFY_PATH ON) - SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "simc-qt.exe") - STRING(REPLACE "/" "\\\\" CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " - !include \\\"${CURRENT_SOURCE_DIR}\\\\qt\\\\fileassoc.nsh\\\" - - !insertmacro APP_ASSOCIATE \\\"simc\\\" \\\"simulationcraft.simcfile\\\" \\\"$INSTDIR\\\\simc-qt.exe,0\\\" \\\\ - \\\"Open with SimulationCraft\\\" \\\"open\\\" \\\"$INSTDIR\\\\myapp.exe \\\$\\\\\\\"%1\\\$\\\\\\\"\\\" - ") - - SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " - !insertmacro APP_UNASSOCIATE \\\"simc\\\" \\\"simulationcraft.simcfile\\\" - ") - -ENDIF(WIN32 AND NOT UNIX) - -INCLUDE(CPack) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) + +PROJECT(simulationcraft) + +SET(CPACK_PACKAGE_VERSION "422.5") +SET(CPACK_PACKAGE_VERSION_MAJOR "422") +SET(CPACK_PACKAGE_VERSION_MINOR "5") +SET(CPACK_PACKAGE_VERSION_PATCH "0") + +FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui QtWebKit QtMain QtNetwork) +FIND_PACKAGE(Threads REQUIRED) +FIND_PACKAGE(OpenSSL) + +IF(APPLE) + FIND_LIBRARY(COCOA_LIBRARY Cocoa) + MARK_AS_ADVANCED(COCOA_LIBRARY) + SET(COCOA_LIBS ${COCOA_LIBRARY}) +ENDIF(APPLE) + +SET(EXECUTABLE_OUTPUT_PATH bin) +SET(LIBRARY_OUTPUT_PATH bin) + +############################ +# MAIN SIMULATION ENGINE --> + +SET(SIMC_ENGINE_INCLUDE_DIRS + "engine" +) + +SET(SIMC_ENGINE_SOURCE + "engine/sc_io.cpp" + "engine/sc_thread.cpp" + "engine/sc_util.cpp" + "engine/sim/sc_option.cpp" + "engine/sim/sc_plot.cpp" + "engine/sim/sc_raid_event.cpp" + "engine/sim/sc_reforge_plot.cpp" + "engine/sim/sc_scaling.cpp" + "engine/sim/sc_cooldown.cpp" + "engine/sim/sc_event.cpp" + "engine/sim/sc_expressions.cpp" + "engine/sim/sc_gear_stats.cpp" + "engine/sim/sc_sim.cpp" + "engine/player/sc_unique_gear.cpp" + "engine/player/sc_set_bonus.cpp" + "engine/player/sc_consumable.cpp" + "engine/player/sc_pet.cpp" + "engine/player/sc_item.cpp" + "engine/player/sc_player.cpp" + "engine/util/rng.cpp" + "engine/buff/sc_buff.cpp" + "engine/action/sc_absorb.cpp" + "engine/action/sc_action_state.cpp" + "engine/action/sc_action.cpp" + "engine/action/sc_attack.cpp" + "engine/action/sc_dot.cpp" + "engine/action/sc_heal.cpp" + "engine/action/sc_harmful_spell.cpp" + "engine/action/sc_sequence.cpp" + "engine/action/sc_spell_base.cpp" + "engine/action/sc_stats.cpp" + "engine/class_modules/sc_death_knight.cpp" + "engine/class_modules/sc_druid.cpp" + "engine/class_modules/sc_enemy.cpp" + "engine/class_modules/sc_hunter.cpp" + "engine/class_modules/sc_monk.cpp" + "engine/class_modules/sc_mage.cpp" + "engine/class_modules/sc_paladin.cpp" + "engine/class_modules/sc_priest.cpp" + "engine/class_modules/sc_rogue.cpp" + "engine/class_modules/sc_shaman.cpp" + "engine/class_modules/sc_warlock.cpp" + "engine/class_modules/sc_warrior.cpp" + "engine/dbc/sc_const_data.cpp" + "engine/dbc/sc_data.cpp" + "engine/dbc/sc_item_data.cpp" + "engine/dbc/sc_spell_data.cpp" + "engine/dbc/sc_spell_info.cpp" + "engine/report/sc_report.cpp" + "engine/report/sc_chart.cpp" + "engine/report/sc_report_html_player.cpp" + "engine/report/sc_report_html_sim.cpp" + "engine/report/sc_report_text.cpp" + "engine/report/sc_report_xml.cpp" + "engine/interfaces/sc_js.cpp" + "engine/interfaces/sc_http.cpp" + "engine/interfaces/sc_bcp_api.cpp" + "engine/interfaces/sc_chardev.cpp" + "engine/interfaces/sc_wowhead.cpp" + "engine/interfaces/sc_xml.cpp" + "engine/interfaces/sc_rawr.cpp" +) + +SET(SIMC_ENGINE_HEADERS + "engine/simulationcraft.hpp" + "engine/sc_generic.hpp" + "engine/sc_timespan.hpp" + "engine/util/rng.hpp" + "engine/dbc/specialization.hpp" + "engine/dbc/dbc.hpp" + "engine/utf8.h" + "engine/utf8/checked.h" + "engine/utf8/core.h" + "engine/utf8/unchecked.h" + "engine/report/sc_report.hpp" + "engine/util/sample_data.hpp" + "engine/util/timeline.hpp" +) + +IF(OPENSSL_FOUND) + ADD_DEFINITIONS(-DUSE_OPENSSL) + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) +ENDIF(OPENSSL_FOUND) + +ADD_LIBRARY(simc_engine STATIC ${SIMC_ENGINE_SOURCE} ${SIMC_ENGINE_HEADERS}) + +# <-- MAIN SIMULATION ENGINE +############################ + +########################### +# CONSOLE CONFIGURATION --> + +SET(SIMC_CONSOLE_SOURCE + "engine/sc_main.cpp" +) + +SET(SIMC_CONSOLE_HEADERS + ${SIMC_ENGINE_HEADERS} +) + +# OpenSSL configuration -> +IF(OPENSSL_FOUND) + ADD_DEFINITIONS(-DUSE_OPENSSL) + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) +ENDIF(OPENSSL_FOUND) +# <- OpenSSL configuration + +ADD_EXECUTABLE(simc-con ${SIMC_CONSOLE_SOURCE} ${SIMC_CONSOLE_HEADERS}) + +INCLUDE_DIRECTORIES(${SIMC_ENGINE_INCLUDE_DIRS}) + +TARGET_LINK_LIBRARIES(simc-con simc_engine) +IF(WIN32) + TARGET_LINK_LIBRARIES(simc-con wininet) +ENDIF(WIN32) +TARGET_LINK_LIBRARIES(simc-con ${CMAKE_THREAD_LIBS_INIT}) +IF(OPENSSL_FOUND) + TARGET_LINK_LIBRARIES(simc-con ${OPENSSL_LIBRARIES}) +ENDIF(OPENSSL_FOUND) + +INSTALL(TARGETS simc-con DESTINATION "." CONFIGURATIONS Release COMPONENT Console) +SET(CPACK_COMPONENT_CONSOLE_DISPLAY_NAME "Console Application") +SET(CPACK_COMPONENT_CONSOLE_DESCRIPTION "Console application usable from the command line.") +SET(CPACK_COMPONENT_CONSOLE_GROUP "Runtime") +SET(CPACK_COMPONENT_GROUP_RUNTIME_DESCRIPTION "All the tools needed to execute profiles.") +SET(CPACK_COMPONENT_CONSOLE_REQUIRED 1) + +# <-- CONSOLE CONFIGURATION +########################### + +####################### +# QT4 CONFIGURATION --> + +IF(QT4_FOUND) + + SET(SIMC_QT_SOURCE + "qt/main.cpp" + "qt/sc_window.cpp" + "qt/sc_import.cpp" + ) + + SET(SIMC_QT_HEADERS_MOC + "qt/simulationcraftqt.hpp" + ) + + SET(SIMC_QT_HEADERS + ${SIMC_ENGINE_HEADERS} + ${SIMC_QT_HEADERS_MOC} + ) + + IF(APPLE) + SET(SIMC_QT_ICON ${CMAKE_CURRENT_SOURCE_DIR}/qt/icon/Simcraft2.icns) + ADD_DEFINITIONS(-DSIMC_NO_AUTOUPDATE) + ELSE(APPLE) + SET(SIMC_QT_ICON ${CMAKE_CURRENT_SOURCE_DIR}/qt/icon/Simcraft2.ico) + ENDIF(APPLE) + + # OpenSSL configuration -> + IF(OPENSSL_FOUND) + ADD_DEFINITIONS(-DUSE_OPENSSL) + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) + ENDIF(OPENSSL_FOUND) + # <- OpenSSL configuration + + INCLUDE(${QT_USE_FILE}) + + QT4_WRAP_CPP(SIMC_QT_MOC ${SIMC_QT_HEADERS_MOC}) + + ADD_DEFINITIONS(${QT_DEFINITIONS}) + + IF(WIN32) + ADD_EXECUTABLE(simc-qt WIN32 ${SIMC_QT_SOURCE} ${SIMC_QT_MOC} ${SIMC_QT_HEADERS} ${SIMC_QT_ICON}) + ELSE(WIN32) + ADD_EXECUTABLE(simc-qt ${SIMC_QT_SOURCE} ${SIMC_QT_MOC} ${SIMC_QT_HEADERS} ${SIMC_QT_ICON}) + ENDIF(WIN32) + + INCLUDE_DIRECTORIES(${SIMC_ENGINE_INCLUDE_DIRS}) + + TARGET_LINK_LIBRARIES(simc-qt simc_engine) + IF(WIN32) + TARGET_LINK_LIBRARIES(simc-qt wininet) + ENDIF(WIN32) + TARGET_LINK_LIBRARIES(simc-qt ${QT_LIBRARIES}) + TARGET_LINK_LIBRARIES(simc-qt ${CMAKE_THREAD_LIBS_INIT}) + IF(OPENSSL_FOUND) + TARGET_LINK_LIBRARIES(simc-qt ${OPENSSL_LIBRARIES}) + ENDIF(OPENSSL_FOUND) + IF(APPLE) + TARGET_LINK_LIBRARIES(simc-qt ${COCOA_LIBS}) + ENDIF(APPLE) + + IF(APPLE) + SET(MACOSX_BUNDLE_ICON_FILE qt/icon/Simcraft2.icns) + SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/qt/icon/Simcraft2.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + ENDIF(APPLE) + + SET(PLUGIN_DEST_DIR ".") + SET(QTCONF_DEST_DIR ".") + SET(APPS "\${CMAKE_INSTALL_PREFIX}/simc-qt") + IF(APPLE) + SET(plugin_dest_dir SimulationCraft.app/Contents/MacOS) + SET(qtconf_dest_dir SimulationCraft.app/Contents/Resources) + SET(APPS "\${CMAKE_INSTALL_PREFIX}/SimulationCraft.app") + ENDIF(APPLE) + IF(WIN32) + SET(APPS "\${CMAKE_INSTALL_PREFIX}/simc-qt.exe") + ENDIF(WIN32) + + + INSTALL(TARGETS simc-qt DESTINATION "." CONFIGURATIONS Release COMPONENT GUI) + SET(CPACK_COMPONENT_GUI_DISPLAY_NAME "User Interface Application") + SET(CPACK_COMPONENT_GUI_DESCRIPTION "User interface to access SimulationCraft features.") + SET(CPACK_COMPONENT_GUI_GROUP "Runtime") + +ENDIF() +# <-- QT4 CONFIGURATION +####################### + +INSTALL(DIRECTORY profiles + DESTINATION "." CONFIGURATIONS Release + COMPONENT Profiles + OPTIONAL + PATTERN ".svn" EXCLUDE +) +SET(CPACK_COMPONENT_PROFILES_DISPLAY_NAME "Profiles") +SET(CPACK_COMPONENT_PROFILES_DESCRIPTION "DPS and HPS pre-generated profiles.") +SET(CPACK_COMPONENT_PROFILES_GROUP "Data") +SET(CPACK_COMPONENT_GROUP_DATA_DESCRIPTION "Data to generate DPS and HPS charts.") + +######################################################################################### +######################################### CPACK ######################################### +######################################################################################### + +IF(WIN32 AND NOT UNIX) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".") +ENDIF(WIN32 AND NOT UNIX) +INCLUDE(InstallRequiredSystemLibraries) + +SET(CPACK_NSIS_DISPLAY_NAME "SimulationCraft") +SET(CPACK_PACKAGE_VENDOR "SimulationCraft group") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/READ_ME_FIRST.txt") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simulationcraft - World of Warcraft DPS Simulator") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "SimulationCraft-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") +IF(WIN32 AND NOT UNIX) + SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/qt/icon\\\\Simcraft2.ico") + SET(CPACK_NSIS_MUI_UNICON "${CMAKE_CURRENT_SOURCE_DIR}/qt/icon\\\\Simcraft2.ico") + SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/qt/icon\\\\Simcraft2.ico") + SET(CPACK_NSIS_INSTALLED_ICON_NAME "simc-qt.exe") + SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\code.google.com/p/simulationcraft") + SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\code.google.com/p/simulationcraft/w/list") + SET(CPACK_NSIS_CONTACT "natehieter@gmail.com") + SET(CPACK_NSIS_MODIFY_PATH ON) + SET(CPACK_NSIS_MUI_FINISHPAGE_RUN "simc-qt.exe") + STRING(REPLACE "/" "\\\\" CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " + !include \\\"${CURRENT_SOURCE_DIR}\\\\qt\\\\fileassoc.nsh\\\" + + !insertmacro APP_ASSOCIATE \\\"simc\\\" \\\"simulationcraft.simcfile\\\" \\\"$INSTDIR\\\\simc-qt.exe,0\\\" \\\\ + \\\"Open with SimulationCraft\\\" \\\"open\\\" \\\"$INSTDIR\\\\myapp.exe \\\$\\\\\\\"%1\\\$\\\\\\\"\\\" + ") + + SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " + !insertmacro APP_UNASSOCIATE \\\"simc\\\" \\\"simulationcraft.simcfile\\\" + ") + +ENDIF(WIN32 AND NOT UNIX) + +INCLUDE(CPack) diff --git a/COPYING b/COPYING index 818433ecc0e..94a9ed024d3 100644 --- a/COPYING +++ b/COPYING @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/dbc_extract/autoextract.bat b/dbc_extract/autoextract.bat index b8099a49933..988b3341fdb 100644 --- a/dbc_extract/autoextract.bat +++ b/dbc_extract/autoextract.bat @@ -1,69 +1,69 @@ -@echo off - -setlocal enabledelayedexpansion -set LANG=enUS - -set PTR= -if not %1 == ptr goto start -set PTR= ptr -shift - -:start -set INPATH_A=%~f1\Data -set INPATH_B=%~f1\Data\%LANG% -set OUTPATH=%~f2 - -if exist "%INPATH_A%" goto pathb -echo Error: Unable to find WoW path! %INPATH_A% -echo. -goto usage - -:pathb -if exist "%INPATH_B%" goto next -echo Error: Unable to find WoW path! %INPATH_B% -echo. -goto usage - -:next -if exist "%OUTPATH%" goto okay -echo Error: Unable to find output path! -echo. -goto usage - -:okay -set FILES=misc.MPQ -for %%f in ("%INPATH_A%\wow-update-base*.MPQ") do ( -set FILES=!FILES! %%~nf.MPQ -) -set BUILD=%FILES:~-9,5% - -echo cd "%INPATH_A%" > tmp1.mopaq -echo op %FILES% >> tmp1.mopaq -echo e misc.MPQ DBFilesClient\* "%OUTPATH%\%BUILD%" /fp >> tmp1.mopaq - -set FILES=locale-%LANG%.MPQ -for %%f in ("%INPATH_B%\wow-update-%LANG%*.MPQ") do ( -set FILES=!FILES! %%~nf.MPQ -) -set BUILD=%FILES:~-9,5% - -echo cd "%INPATH_B%" > tmp2.mopaq -echo op %FILES% >> tmp2.mopaq -echo e locale-%LANG%.MPQ DBFilesClient\* "%OUTPATH%\%BUILD%" /fp >> tmp2.mopaq - -mkdir "%OUTPATH%\%BUILD%" -MPQEditor.exe /console tmp1.mopaq -del tmp1.mopaq -MPQEditor.exe /console tmp2.mopaq -del tmp2.mopaq - -echo Generating... -generate.bat%PTR% %BUILD% "%OUTPATH%" - -goto end - -:usage -echo Usage: autoextract.bat [ptr] wowpath outpath - -:end +@echo off + +setlocal enabledelayedexpansion +set LANG=enUS + +set PTR= +if not %1 == ptr goto start +set PTR= ptr +shift + +:start +set INPATH_A=%~f1\Data +set INPATH_B=%~f1\Data\%LANG% +set OUTPATH=%~f2 + +if exist "%INPATH_A%" goto pathb +echo Error: Unable to find WoW path! %INPATH_A% +echo. +goto usage + +:pathb +if exist "%INPATH_B%" goto next +echo Error: Unable to find WoW path! %INPATH_B% +echo. +goto usage + +:next +if exist "%OUTPATH%" goto okay +echo Error: Unable to find output path! +echo. +goto usage + +:okay +set FILES=misc.MPQ +for %%f in ("%INPATH_A%\wow-update-base*.MPQ") do ( +set FILES=!FILES! %%~nf.MPQ +) +set BUILD=%FILES:~-9,5% + +echo cd "%INPATH_A%" > tmp1.mopaq +echo op %FILES% >> tmp1.mopaq +echo e misc.MPQ DBFilesClient\* "%OUTPATH%\%BUILD%" /fp >> tmp1.mopaq + +set FILES=locale-%LANG%.MPQ +for %%f in ("%INPATH_B%\wow-update-%LANG%*.MPQ") do ( +set FILES=!FILES! %%~nf.MPQ +) +set BUILD=%FILES:~-9,5% + +echo cd "%INPATH_B%" > tmp2.mopaq +echo op %FILES% >> tmp2.mopaq +echo e locale-%LANG%.MPQ DBFilesClient\* "%OUTPATH%\%BUILD%" /fp >> tmp2.mopaq + +mkdir "%OUTPATH%\%BUILD%" +MPQEditor.exe /console tmp1.mopaq +del tmp1.mopaq +MPQEditor.exe /console tmp2.mopaq +del tmp2.mopaq + +echo Generating... +generate.bat%PTR% %BUILD% "%OUTPATH%" + +goto end + +:usage +echo Usage: autoextract.bat [ptr] wowpath outpath + +:end endlocal \ No newline at end of file diff --git a/engine/class_modules/sc_druid.cpp b/engine/class_modules/sc_druid.cpp index f75ecea720b..a8306960fb4 100644 --- a/engine/class_modules/sc_druid.cpp +++ b/engine/class_modules/sc_druid.cpp @@ -6125,9 +6125,6 @@ void druid_t::init_scaling() if ( specialization() == DRUID_FERAL ) scales_with[ STAT_SPIRIT ] = false; - if ( specialization() == DRUID_BALANCE ) - scales_with[ STAT_SPIRIT ] = false; - if ( specialization() == DRUID_GUARDIAN ) { scales_with[ STAT_WEAPON_DPS ] = false; diff --git a/engine/class_modules/sc_warlock.cpp b/engine/class_modules/sc_warlock.cpp index 288ddb2fc89..b65fe5f2cf6 100644 --- a/engine/class_modules/sc_warlock.cpp +++ b/engine/class_modules/sc_warlock.cpp @@ -6,8 +6,7 @@ /*TODO for 5.4: - - Implement harvest_life talent: Increases Drain Life damage + Implement demonic breath talent */ namespace { // unnamed namespace @@ -2363,6 +2362,16 @@ struct drain_life_t : public warlock_spell_t consume_tick_resource( d ); } + virtual double action_multiplier() const + { + double am = warlock_spell_t::action_multiplier(); + + if ( p() -> talents.harvest_life -> ok() ) + am *= 1.0 + p() -> talents.harvest_life -> effectN( 1 ).percent(); + + return am; + } + }; struct unstable_affliction_t : public warlock_spell_t diff --git a/engine/player/sc_player.cpp b/engine/player/sc_player.cpp index e8c5c376681..f61c3a01b95 100644 --- a/engine/player/sc_player.cpp +++ b/engine/player/sc_player.cpp @@ -443,7 +443,7 @@ player_t::player_t( sim_t* s, iteration_waiting_time( timespan_t::zero() ), iteration_executed_foreground_actions( 0 ), rps_gain( 0 ), rps_loss( 0 ), - tmi_window( 6.0 ), new_tmi( 0 ), tmi_filter( 1.0 ), + tmi_window( 6.0 ), collected_data( player_collected_data_t( name_str, *sim ) ), vengeance( collected_data.vengeance_timeline ), // Damage @@ -847,9 +847,6 @@ void player_t::init_character_properties() if ( sim -> tmi_window_global > 0 ) tmi_window = sim -> tmi_window_global; - - new_tmi = sim -> new_tmi; - tmi_filter = sim -> tmi_filter; } void scale_challenge_mode( player_t& p, const rating_t& rating ) @@ -9616,6 +9613,7 @@ player_collected_data_t::player_collected_data_t( const std::string& player_name absorb_taken( player_name + " Absorb Taken", s.statistics_level < 2 ), deaths( player_name + " Deaths", s.statistics_level < 2 ), theck_meloree_index( player_name + " Theck-Meloree Index", s.statistics_level < 1 ), + max_spike_amount( player_name + " Max Spike Value", s.statistics_level < 1 ), resource_timelines(), combat_end_resource( RESOURCE_MAX ), stat_timelines(), @@ -9718,6 +9716,7 @@ void player_collected_data_t::analyze( const player_t& p ) // Tank deaths.analyze_all(); theck_meloree_index.analyze_all(); + max_spike_amount.analyze_all(); for ( size_t i = 0; i < resource_timelines.size(); ++i ) { @@ -9833,12 +9832,11 @@ void player_collected_data_t::collect_data( const player_t& p ) if ( ! p.is_enemy() ) // Boss TMI is irrelevant, causes problems in iteration #1 { double tmi = 0; // TMI result + double max_spike = 0; // Maximum spike size if ( f_length ) { // define constants and variables - int window = std::floor( ( p.tmi_window ) / 1 + 0.5 ); // window size, bin time replaces 1 eventually - double w0 = 6; // normalized window size - double hdf = 3; // default health decade factor + int window = std::floor( ( p.tmi_window ) / 1.0 + 0.5 ); // window size, bin time replaces 1 eventually // declare sliding average timeline sc_timeline_t sliding_average_tl; @@ -9850,65 +9848,43 @@ void player_collected_data_t::collect_data( const player_t& p ) // pull the data out of the normalized sliding average timeline std::vector weighted_value = sliding_average_normalized_tl.data(); + max_spike = *std::max_element( weighted_value.begin(), weighted_value.end() ); + max_spike *= window; - if ( p.new_tmi > 0 ) // new TMI implementation for testing - { - // define constants - double D = 10 * p.tmi_filter; // filtering strength - double c2 = std::exp( D ); - double c1 = p.new_tmi * 5000 / D; // slope - - for ( size_t j = 0, size = weighted_value.size(); j < size; j++ ) - { - // normalize to the default window size (6-second window) - weighted_value[ j ] *= w0; - - // calculate exponentially-weighted contribution of this data point - weighted_value[ j ] = std::exp( D * ( weighted_value[ j ] - 1 ) ); - - // add to the TMI total - tmi += weighted_value [ j ]; - } - - // normalize for fight length - tmi /= f_length; + // define constants + double D = 10; // filtering strength + double c2 = 450; // N_0, default fight length for normalization + double c1 = 100000 / D; // health scale factor, determines slope of plot - // constant multiplicative normalization factors - tmi *= c2; - tmi += 1; - tmi = std::log( tmi ); - tmi *= c1; - - } - else // old TMI + for ( size_t j = 0, size = weighted_value.size(); j < size; j++ ) { + // weighted_value is the moving average (i.e. 1-second), so multiplly by window size to get damage in "window" seconds + weighted_value[ j ] *= window; - for ( size_t j = 0, size = weighted_value.size(); j < size; j++ ) - { - // normalize to the default window size (6-second window) - weighted_value[ j ] *= w0; - - // calculate exponentially-weighted contribution of this data point - weighted_value[ j ] = std::exp( 10 * std::log( hdf ) * ( weighted_value[ j ] - 1 ) ); + // calculate exponentially-weighted contribution of this data point using filter strength D + weighted_value[ j ] = std::exp( D * weighted_value[ j ] ); - // add to the TMI total - tmi += weighted_value [ j ]; - } - - // normalize for fight length - tmi /= f_length; - - // constant multiplicative normalization factors - // these are estimates at the moment - will be fine-tuned later - tmi *= 10000; - tmi *= std::pow( static_cast( window ) , 2 ); // normalizes for window size + // add to the TMI total; strictly speaking this should be moved outside the for loop and turned into a sort() followed by a sum for numerical accuracy + tmi += weighted_value [ j ]; } + // multiply by vertical offset factor c2 + tmi *= c2; + // normalize for fight length + tmi /= f_length; + // optional zero-bounding + // tmi += 1; + // take log of result + tmi = std::log( tmi ); + // multiply by health decade scale factor + tmi *= c1; + // if an output file has been defined, write to it print_tmi_debug_csv( &sliding_average_tl, &sliding_average_normalized_tl, weighted_value, p ); } // normalize by fight length and add to TMI data array theck_meloree_index.add( tmi ); + max_spike_amount.add( max_spike ); } else theck_meloree_index.add( 0.0 ); diff --git a/engine/report/sc_report_csv_data.cpp b/engine/report/sc_report_csv_data.cpp index b3b07ebe825..d5e036413c4 100644 --- a/engine/report/sc_report_csv_data.cpp +++ b/engine/report/sc_report_csv_data.cpp @@ -1,43 +1,43 @@ -// ========================================================================== -// Dedmonwakeen's Raid DPS/TPS Simulator. -// Send questions to natehieter@gmail.com -// ========================================================================== - -#include "simulationcraft.hpp" -#include "sc_report.hpp" - -namespace { // unnamed namespace - -void print_player_data( io::ofstream& s, const player_t& p ) -{ - s << "Player " << p.name() << "\n"; - p.collected_data.data_str( s ); -} - -void print_data( io::ofstream& s, const sim_t& sim ) -{ - s << "SimulationCraft " << SC_VERSION << std::endl; - time_t rawtime; time( &rawtime ); - s << "Timestamp: " << ctime( &rawtime ) << std::endl; - - for ( size_t i = 0, size = sim.player_no_pet_list.size(); i < size; ++i ) - { - const player_t& p = *sim.player_no_pet_list[ i ]; - print_player_data( s, p ); - } -} - -} // end unnamed namespace - -void report::print_csv_data( sim_t* sim ) -{ - io::ofstream s; - if ( ! sim -> csv_output_file_str.empty() ) - { - s.open( sim -> csv_output_file_str ); - } - if ( ! s ) - return; - - print_data( s, *sim ); -} +// ========================================================================== +// Dedmonwakeen's Raid DPS/TPS Simulator. +// Send questions to natehieter@gmail.com +// ========================================================================== + +#include "simulationcraft.hpp" +#include "sc_report.hpp" + +namespace { // unnamed namespace + +void print_player_data( io::ofstream& s, const player_t& p ) +{ + s << "Player " << p.name() << "\n"; + p.collected_data.data_str( s ); +} + +void print_data( io::ofstream& s, const sim_t& sim ) +{ + s << "SimulationCraft " << SC_VERSION << std::endl; + time_t rawtime; time( &rawtime ); + s << "Timestamp: " << ctime( &rawtime ) << std::endl; + + for ( size_t i = 0, size = sim.player_no_pet_list.size(); i < size; ++i ) + { + const player_t& p = *sim.player_no_pet_list[ i ]; + print_player_data( s, p ); + } +} + +} // end unnamed namespace + +void report::print_csv_data( sim_t* sim ) +{ + io::ofstream s; + if ( ! sim -> csv_output_file_str.empty() ) + { + s.open( sim -> csv_output_file_str ); + } + if ( ! s ) + return; + + print_data( s, *sim ); +} diff --git a/engine/report/sc_report_html_player.cpp b/engine/report/sc_report_html_player.cpp index 38ab1ecea90..7bac0d636ba 100644 --- a/engine/report/sc_report_html_player.cpp +++ b/engine/report/sc_report_html_player.cpp @@ -2611,7 +2611,7 @@ void print_html_player_description( report::sc_html_stream& os, sim_t* sim, play tmi_display /= 1e6; tmi_letter = "M "; } - else if ( tmi_display >= 100000.0 ) + else if ( tmi_display >= 999.9 ) { tmi_display /= 1e3; tmi_letter = "k "; @@ -2712,7 +2712,7 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim // Absorb if ( cd.aps.mean() > 0 ) { - os << "\t\t\t\t\t\t\t\tAPS\n" + os << "\t\t\t\t\t\t\t\tAPS\n" << "\t\t\t\t\t\t\t\tAPS Error\n" << "\t\t\t\t\t\t\t\tAPS Range\n" << "\t\t\t\t\t\t\t\tAPR\n"; @@ -2724,7 +2724,7 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim // Now do the data row if ( cd.dps.mean() > 0 ) { - double range = ( p -> collected_data.dps.percentile( 0.95 ) - p -> collected_data.dps.percentile( 0.05 ) ) / 2; + double range = ( p -> collected_data.dps.percentile( 0.5 + sim -> confidence / 2 ) - p -> collected_data.dps.percentile( 0.5 - sim -> confidence / 2 ) ); double dps_error = sim_t::distribution_mean_error( *sim, p -> collected_data.dps ); os.printf( "\t\t\t\t\t\t\t\t%.1f\n" @@ -2746,7 +2746,7 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim // Heal if ( cd.hps.mean() > 0 ) { - double range = ( cd.hps.percentile( 0.95 ) - cd.hps.percentile( 0.05 ) ) / 2; + double range = ( cd.hps.percentile( 0.5 + sim -> confidence / 2 ) - cd.hps.percentile( 0.5 - sim -> confidence / 2 ) ); double hps_error = sim_t::distribution_mean_error( *sim, p -> collected_data.hps ); os.printf( "\t\t\t\t\t\t\t\t%.1f\n" @@ -2769,7 +2769,7 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim // Absorb if ( cd.aps.mean() > 0 ) { - double range = ( cd.aps.percentile( 0.95 ) - cd.aps.percentile( 0.05 ) ) / 2; + double range = ( cd.aps.percentile( 0.5 + sim -> confidence / 2 ) - cd.aps.percentile( 0.5 - sim -> confidence / 2 ) ); double aps_error = sim_t::distribution_mean_error( *sim, p -> collected_data.aps ); os.printf( "\t\t\t\t\t\t\t\t%.1f\n" @@ -2792,20 +2792,33 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim if ( p -> primary_role() == ROLE_TANK && p -> type != ENEMY ) { os << "\t\t\t\t\t\t\n" - << "\t\t\t\t\t\t\t\n" + // experimental first row for stacking the tables - wasn't happy with how it looked, may return to it later + //<< "\t\t\t\t\t\t\t\n" // first row + //<< "\t\t\t\t\t\t\t\t\n" + //<< "\t\t\t\t\t\t\t\t\n" + //<< "\t\t\t\t\t\t\t\t\n" + //<< "\t\t\t\t\t\t\t\t\n" + //<< "\t\t\t\t\t\t\t\t\n" + //<< "\t\t\t\t\t\t\t\n" // end first row + << "\t\t\t\t\t\t\t\n" // start second row << "\t\t\t\t\t\t\t\t\n" << "\t\t\t\t\t\t\t\t\n" << "\t\t\t\t\t\t\t\t\n" << "\t\t\t\t\t\t\t\t\n" << "\t\t\t\t\t\t\t\t\n" << "\t\t\t\t\t\t\t\t\n" - << "\t\t\t\t\t\t\t\t\n" - << "\t\t\t\t\t\t\t\t\n" - << "\t\t\t\t\t\t\t\t\n" - << "\t\t\t\t\t\t\t\n" - << "\t\t\t\t\t\t\t\n"; - - double dtps_range = ( cd.dtps.percentile( 0.95 ) - cd.dtps.percentile( 0.05 ) ) / 2; + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\t\n" + << "\t\t\t\t\t\t\t\n" // end second row + << "\t\t\t\t\t\t\t\n"; // start third row + + double dtps_range = ( cd.dtps.percentile( 0.5 + sim -> confidence / 2 ) - cd.dtps.percentile( 0.5 - sim -> confidence / 2 ) ); double dtps_error = sim_t::distribution_mean_error( *sim, p -> collected_data.dtps ); os.printf( "\t\t\t\t\t\t\t\t\n" @@ -2816,16 +2829,16 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim dtps_range, cd.dtps.mean() ? dtps_range / cd.dtps.mean() * 100.0 : 0 ); // spacer - os << "\t\t\t\t\t\t\t\t\n"; + os << "\t\t\t\t\t\t\t\t\n"; double tmi_error = sim_t::distribution_mean_error( *sim, p -> collected_data.theck_meloree_index ); - double tmi_range = ( cd.theck_meloree_index.percentile( 0.95 ) - cd.theck_meloree_index.percentile( 0.05 ) ) / 2; + double tmi_range = ( cd.theck_meloree_index.percentile( 0.5 + sim -> confidence / 2 ) - cd.theck_meloree_index.percentile( 0.5 - sim -> confidence / 2 ) ); // print TMI - if ( cd.theck_meloree_index.mean() > 1.0e8 ) - os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.mean() ); + if ( abs( cd.theck_meloree_index.mean() ) > 1.0e8 ) + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.mean() ); else - os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.mean() ); + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.mean() / 1e3 ); // print TMI error/variance if ( tmi_error > 1.0e6 ) @@ -2835,23 +2848,21 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim } else { - os.printf( "\t\t\t\t\t\t\t\t\n", + os.printf( "\t\t\t\t\t\t\t\t\n", tmi_error, cd.theck_meloree_index.mean() ? tmi_error * 100.0 / cd.theck_meloree_index.mean() : 0.0 ); } // print TMI min/max - if ( cd.theck_meloree_index.max() > 1.0e8 ) - { - os.printf( "\t\t\t\t\t\t\t\t\n" - "\t\t\t\t\t\t\t\t\n", - cd.theck_meloree_index.min(), cd.theck_meloree_index.max() ); - } - else - { - os.printf( "\t\t\t\t\t\t\t\t\n" - "\t\t\t\t\t\t\t\t\n", - cd.theck_meloree_index.min(), cd.theck_meloree_index.max() ); - } + if ( abs( cd.theck_meloree_index.min() ) > 1.0e8 ) + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.min() ); + else + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.min() / 1e3 ); + + if ( abs( cd.theck_meloree_index.max() ) > 1.0e8 ) + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.max() ); + else + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.max() / 1e3 ); + // print TMI range if ( tmi_range > 1.0e8 ) { @@ -2860,10 +2871,22 @@ void print_html_player_results_spec_gear( report::sc_html_stream& os, sim_t* sim } else { - os.printf( "\t\t\t\t\t\t\t\t\n", - tmi_range, cd.theck_meloree_index.mean() ? tmi_range * 100.0 / cd.theck_meloree_index.mean() : 0.0 ); + os.printf( "\t\t\t\t\t\t\t\t\n", + tmi_range / 1e3, cd.theck_meloree_index.mean() ? tmi_range * 100.0 / cd.theck_meloree_index.mean() : 0.0 ); } + + // spacer + os << "\t\t\t\t\t\t\t\t\n"; + + // print Max Spike Size stats + os.printf( "\t\t\t\t\t\t\t\t\n", cd.max_spike_amount.mean() * 100 ); + os.printf( "\t\t\t\t\t\t\t\t\n", cd.max_spike_amount.min() * 100 ); + os.printf( "\t\t\t\t\t\t\t\t\n", cd.max_spike_amount.max() * 100 ); + + // print rough estimate of spike frequency + os.printf( "\t\t\t\t\t\t\t\t\n", cd.theck_meloree_index.mean() ? std::exp( cd.theck_meloree_index.mean() / 1e3 / cd.max_spike_amount.mean() / 100 ) : 0.0 ); + // End defensive table os << "\t\t\t\t\t\t\t\n" << "\t\t\t\t\t\t
DTPS     TMI     MSD
DTPSDTPS ErrorDTPS Range TMITMI ErrorTMI MinTMI MaxTMI Range
TMI MinTMI MaxTMI Range MSD MeanMSD MinMSD MaxMSD Freq.
%.1f               %1.2e%1.3e%.1f%.1fk%.1f / %.2f%%%.0f / %.2f%%%1.2e%1.2e%.1f%.1f%1.2e%.1fk%1.2e%.1fk%.1f / %.1f%%%.1fk / %.1f%%     %.1f%%%.1f%%%.1f%%%.1f
\n"; } diff --git a/engine/report/sc_report_html_sim.cpp b/engine/report/sc_report_html_sim.cpp index f0200e9af57..4187243bd0e 100644 --- a/engine/report/sc_report_html_sim.cpp +++ b/engine/report/sc_report_html_sim.cpp @@ -2051,6 +2051,13 @@ void print_html_help_boxes( report::sc_html_stream& os, sim_t* sim ) << "\t\t\t\n" << "\t\t\n"; + os << "\t\t
\n" + << "\t\t\t
\n" + << "\t\t\t\t

HPS

\n" + << "\t\t\t\t

Average absorption per active player duration.

\n" + << "\t\t\t
\n" + << "\t\t
\n"; + os << "\t\t
\n" << "\t\t\t
\n" << "\t\t\t\t

Constant Buffs

\n" @@ -2145,7 +2152,7 @@ void print_html_help_boxes( report::sc_html_stream& os, sim_t* sim ) os << "\t\t
\n" << "\t\t\t
\n" << "\t\t\t\t

HPS

\n" - << "\t\t\t\t

Average healing (or absorption) per active player duration.

\n" + << "\t\t\t\t

Average healing (and absorption) per active player duration.

\n" << "\t\t\t
\n" << "\t\t
\n"; @@ -2180,7 +2187,29 @@ void print_html_help_boxes( report::sc_html_stream& os, sim_t* sim ) os << "\t\t
\n" << "\t\t\t
\n" << "\t\t\t\t

Theck-Meloree Index

\n" - << "\t\t\t\t

Measure of damage smoothness, calculated over entire fight length. Lower is better.

\n" + << "\t\t\t\t

Measure of damage smoothness, calculated over entire fight length. Related to max spike damage, 1k TMI is roughly equivalent to 1% of your health. Lower is better.

\n" + << "\t\t\t
\n" + << "\t\t
\n"; + + os << "\t\t
\n" + << "\t\t\t
\n" + << "\t\t\t\t

TMI Range

\n" + << "\t\t\t\t

This is the range of TMI values containing " << sim -> confidence * 100 << "% of the data, roughly centered on the mean.

\n" + << "\t\t\t
\n" + << "\t\t
\n"; + + os << "\t\t
\n" + << "\t\t\t
\n" + << "\t\t\t\t

Max Spike Damage

\n" + << "\t\t\t\t

Maximum amount of net damage taken in any " << sim -> tmi_window_global << "-second period, expressed as a percentage of max health. Calculated independently for each iteration. " + << "'MSD Min/Mean/Max' are the lowest/average/highest MSDs out of all iterations.

\n" + << "\t\t\t
\n" + << "\t\t
\n"; + + os << "\t\t
\n" + << "\t\t\t
\n" + << "\t\t\t\t

Max Spike Damage

\n" + << "\t\t\t\t

This is roughly how many spikes as large as MSD Mean you take per iteration. Calculated from TMI and MSD values.

\n" << "\t\t\t
\n" << "\t\t
\n"; @@ -2194,7 +2223,7 @@ void print_html_help_boxes( report::sc_html_stream& os, sim_t* sim ) os << "\t\t
\n" << "\t\t\t
\n" << "\t\t\t\t

Error

\n" - << "\t\t\t\t

Estimator for the " << sim -> confidence * 100.0 << "confidence intervall.

\n" + << "\t\t\t\t

Estimator for the " << sim -> confidence * 100.0 << "% confidence interval.

\n" << "\t\t\t
\n" << "\t\t
\n"; @@ -2278,7 +2307,7 @@ void print_html_help_boxes( report::sc_html_stream& os, sim_t* sim ) os << "\t\t
\n" << "\t\t\t
\n" << "\t\t\t\t

Range

\n" - << "\t\t\t\t

( dps.percentile( 0.95 ) - dps.percentile( 0.05 ) / 2

\n" + << "\t\t\t\t

This is the range of values containing " << sim -> confidence * 100 << "% of the data, roughly centered on the mean.

\n" << "\t\t\t
\n" << "\t\t
\n"; diff --git a/engine/sim/sc_core_sim.cpp b/engine/sim/sc_core_sim.cpp index 0eab187fb22..80428edef32 100644 --- a/engine/sim/sc_core_sim.cpp +++ b/engine/sim/sc_core_sim.cpp @@ -1,445 +1,445 @@ -// ========================================================================== -// Dedmonwakeen's Raid DPS/TPS Simulator. -// Send questions to natehieter@gmail.com -// ========================================================================== - -#include "simulationcraft.hpp" - -core_sim_t::event_managment_t::event_managment_t() : - events_remaining( 0 ), - events_processed( 0 ), - timing_slice( 0 ), - global_event_id( 0 ), - timing_wheel(), - recycled_event_list( nullptr ), - wheel_seconds( 0 ), - wheel_size( 0 ), - wheel_mask( 0 ), - wheel_shift( 5 ), - wheel_granularity( 0.0 ), - wheel_time( timespan_t::zero() ), - all_events_ever_created() -{ - -} - -/* Destructor - * Release all remaining events. - */ -core_sim_t::event_managment_t::~event_managment_t() -{ - core_event_t::release( recycled_event_list ); -} - -/* Add new event to the timing wheel - */ -void core_sim_t::event_managment_t::add_event( core_event_t* e, - timespan_t delta_time, - timespan_t current_time ) -{ - e -> id = ++global_event_id; - - if ( delta_time < timespan_t::zero() ) - delta_time = timespan_t::zero(); - - if ( delta_time > wheel_time ) - { - e -> time = current_time + wheel_time - timespan_t::from_seconds( 1 ); - e -> reschedule_time = current_time + delta_time; - } - else - { - e -> time = current_time + delta_time; - e -> reschedule_time = timespan_t::zero(); - } - - // Determine the timing wheel position to which the event will belong -#ifdef SC_USE_INTEGER_TIME - uint32_t slice = ( uint32_t ) ( e -> time.total_millis() >> wheel_shift ) & wheel_mask; -#else - uint32_t slice = ( uint32_t ) ( e -> time.total_seconds() * wheel_granularity ) & wheel_mask; -#endif - - // Insert event into the event list at the appropriate time - core_event_t** prev = &( timing_wheel[ slice ] ); - while ( ( *prev ) && ( *prev ) -> time <= e -> time ) // Find position in the list - { prev = &( ( *prev ) -> next ); } - // insert event - e -> next = *prev; - *prev = e; - - events_remaining++; - if ( actor_t::ACTOR_EVENT_BOOKKEEPING && e -> actor ) e -> actor -> event_counter++; - -} - -/* Flush all remaining active events - */ -void core_sim_t::event_managment_t::flush_events() -{ - /* Instead of iterating over the whole timing wheel, - * we directly flush the remaining active events == ( all_events_ever_created - recycled_events ) - */ - std::vector events_to_flush = get_events_to_flush(); - - for( size_t i = 0, size = events_to_flush.size(); i < size; ++i ) - { - core_event_t* e = events_to_flush[ i ]; - core_event_t* null_e = e; // necessary evil - core_event_t::cancel( null_e ); - core_event_t::recycle( e ); - } - - // Clear Timing Wheel - timing_wheel.assign( timing_wheel.size(), nullptr ); - - events_remaining = 0; - events_processed = 0; - timing_slice = 0; - global_event_id = 0; -} - -/* Initialize Event Manager - */ -void core_sim_t::event_managment_t::init() -{ - // Timing wheel depth defaults to about 17 minutes with a granularity of 32 buckets per second. - // This makes wheel_size = 32K and it's fully used. - if ( wheel_seconds < 1024 ) wheel_seconds = 1024; // 2^10 Min to ensure limited wrap-around - if ( wheel_granularity <= 0 ) wheel_granularity = 32; // 2^5 Time slices per second - - wheel_time = timespan_t::from_seconds( wheel_seconds ); - -#ifdef SC_USE_INTEGER_TIME - wheel_size = ( uint32_t ) ( wheel_time.total_millis() >> wheel_shift ); -#else - wheel_size = ( uint32_t ) ( wheel_seconds * wheel_granularity ); -#endif - - // Round up the wheel depth to the nearest power of 2 to enable a fast "mod" operation. - for ( wheel_mask = 2; wheel_mask < wheel_size; wheel_mask *= 2 ) { continue; } - wheel_size = wheel_mask; - wheel_mask--; - - // The timing wheel represents an array of event lists: Each time slice has an event list. - timing_wheel.resize( wheel_size ); -} - -/* Select the next event to process - */ -core_event_t* core_sim_t::event_managment_t::next_event() -{ - if ( events_remaining == 0 ) - return nullptr; - - while ( true ) - { - core_event_t*& event_list = timing_wheel[ timing_slice ]; - if ( event_list ) - { - core_event_t* e = event_list; - event_list = e -> next; - events_remaining--; - events_processed++; - return e; - } - - timing_slice++; - if ( timing_slice == timing_wheel.size() ) - { - timing_slice = 0; - // Time Wheel turns around. - } - } - - return nullptr; -} - -/* Reset - */ -void core_sim_t::event_managment_t::reset() -{ - global_event_id = 0; -} - -/* This basically does the exact same thing as std::set_difference - * std::set_difference( from.begin(),from.end(), exluding.begin(), exluding.end(), back_inserter( out ) ); - */ -std::vector core_sim_t::event_managment_t::get_events_to_flush() const -{ - std::vector out; - const std::vector& from = all_events_ever_created; - out.reserve( from.size() ); - const core_event_t* exluding = recycled_event_list; - for( size_t i = 0, size = from.size(); i < size; ++i ) - { - core_event_t* e = from[ i ]; - bool found = false; - for( const core_event_t* re = exluding; re; re = re -> next ) - { - if ( e == re ) - { - found = true; - break; - } - } - if ( ! found ) - out.push_back( e ); - } - return out; -} - -/* Constructor - */ -core_sim_t::core_sim_t() : - em(), - current_time( timespan_t::zero() ), - out_std( *this, &std::cout, sim_ostream_t::no_close() ), - out_error( *this, &std::cerr, sim_ostream_t::no_close() ), - out_log( *this, &std::cout, sim_ostream_t::no_close() ), - out_debug(*this, &std::cout, sim_ostream_t::no_close() ), - debug( false ), - max_time( timespan_t::zero() ), - expected_iteration_time( timespan_t::zero() ), - current_iteration( -1 ), - iterations( 1000 ), - max_events_remaining( 0 ), - total_events_processed( 0 ), - event_stopwatch( STOPWATCH_THREAD ), - monitor_cpu( false ), - canceled( 0 ), - vary_combat_length( 0.0 ), - iteration_canceled( false ) -{ - -} - -/* Destructor - */ -core_sim_t::~core_sim_t() -{ - -} - -// non-virtual Public Functions - -/* Insert a event into the simulations event manager. - * Please use core_event_t::add_event instead - */ -void core_sim_t::add_event( core_event_t* e, - timespan_t delta_time ) -{ - em.add_event( e, delta_time, current_time ); - - if ( em.events_remaining > max_events_remaining ) max_events_remaining = em.events_remaining; - - if ( debug ) - out_debug.printf( "Add Event: %s %.2f %.2f %d %s", - e -> name, e -> time.total_seconds(), - e -> reschedule_time.total_seconds(), - e -> id, e -> actor ? e -> actor -> name() : "" ); - - if ( debug && actor_t::ACTOR_EVENT_BOOKKEEPING && e -> actor ) - { - out_debug.printf( "Actor %s has %d scheduled events", - e -> actor -> name(), e -> actor -> event_counter ); - } - -} - -/* Simulation Time adjustement coefficient - */ -double core_sim_t::iteration_time_adjust() const -{ - if ( iterations <= 1 ) - return 1.0; - - if ( current_iteration == 0 ) - return 1.0; - - return 1.0 + vary_combat_length * ( ( current_iteration % 2 ) ? 1 : -1 ) * current_iteration / ( double ) iterations; -} - -/* Very simple helper function to return the largest expected regular simulation time. - */ -double core_sim_t::expected_max_time() const -{ - return max_time.total_seconds() * ( 1.0 + vary_combat_length ); -} - -/* Is the (whole) simulation canceled? - */ -bool core_sim_t::is_canceled() const -{ - return canceled; -} - -void core_sim_t::cancel_iteration( bool cancel ) -{ - if ( cancel && debug ) - { - out_debug << "Iteration canceled."; - } - - iteration_canceled = cancel; -} - -void core_sim_t::combat( int iteration ) -{ - if ( debug ) - out_debug << "Starting Simulator"; - - current_iteration = iteration; - - begin_combat(); - - while ( core_event_t* e = em.next_event() ) - { - current_time = e -> time; - - if ( actor_t::ACTOR_EVENT_BOOKKEEPING && e -> actor && ! e -> canceled ) - { - // Perform actor event bookkeeping first - e -> actor -> event_counter--; - if ( e -> actor -> event_counter < 0 ) - { - out_error.printf( "sim_t::combat assertion error! canceling event %s leaves negative event count for user %s.\n", e -> name, e -> actor -> name() ); - assert( false ); - } - } - - if ( e -> canceled ) - { - if ( debug ) - out_debug.printf( "Canceled event: %s", e -> name ); - } - else if ( e -> reschedule_time > e -> time ) - { - reschedule_event( e ); - continue; - } - else - { - if ( debug ) - out_debug.printf( "Executing event: %s %s", e -> name, e -> actor ? e -> actor -> name() : "" ); - - if ( monitor_cpu ) - { - stopwatch_t& sw = e -> actor ? e -> actor -> event_stopwatch : event_stopwatch; - sw.mark(); - e -> execute(); - sw.accumulate(); - } - else - { - e -> execute(); - } - } - - core_event_t::recycle( e ); - - if ( iteration_canceled ) - break; - - if ( canceled ) - break; - } - - end_combat(); -} - -void core_sim_t::combat_begin() -{ } - -void core_sim_t::combat_end() -{ - total_events_processed += em.events_processed; -} - -/* Initialize simulator - */ -bool core_sim_t::init() -{ - em.init(); - - return true; -} - -/* Reset the simulator - */ -void core_sim_t::reset() -{ - if ( debug ) - out_debug << "Resetting Simulator"; - - em.reset(); - current_time = timespan_t::zero(); - expected_iteration_time = max_time * iteration_time_adjust(); -} - -/* Begin Combat - */ -void core_sim_t::begin_combat() -{ - reset(); - - if ( debug ) - out_debug << "Combat Begin"; - - combat_begin(); -} - -/* End Combat - * Call virtual combat_end() before flushing events - */ -void core_sim_t::end_combat() -{ - if ( debug ) - out_debug << "Combat End"; - - combat_end(); - - if ( debug ) - out_debug << "Flush Events"; - em.flush_events(); -} - -void core_sim_t::reschedule_event( core_event_t* e ) -{ - if ( debug ) - out_debug.printf( "Reschedule Event: %s %d", e -> name, e -> id ); - - add_event( e, ( e -> reschedule_time - current_time ) ); -} - -sc_raw_ostream_t& sc_raw_ostream_t::printf( const char* format, ... ) -{ - char buffer[ 4048 ]; - - va_list fmtargs; - va_start( fmtargs, format ); - int rval = ::vsnprintf( buffer, sizeof( buffer ), format, fmtargs ); - va_end( fmtargs ); - - assert( rval < 0 || ( static_cast( rval ) < sizeof( buffer ) ) ); - (void) rval; - - (*_stream) << buffer; - return *this; -} - -sim_ostream_t& sim_ostream_t::printf( const char* format, ... ) -{ - char buffer[ 4048 ]; - - va_list fmtargs; - va_start( fmtargs, format ); - int rval = ::vsnprintf( buffer, sizeof( buffer ), format, fmtargs ); - va_end( fmtargs ); - - assert( rval < 0 || ( static_cast( rval ) < sizeof( buffer ) ) ); - (void) rval; - - _raw << util::to_string( sim.current_time.total_seconds(), 3 ) << " " << buffer << "\n"; - return *this; -} +// ========================================================================== +// Dedmonwakeen's Raid DPS/TPS Simulator. +// Send questions to natehieter@gmail.com +// ========================================================================== + +#include "simulationcraft.hpp" + +core_sim_t::event_managment_t::event_managment_t() : + events_remaining( 0 ), + events_processed( 0 ), + timing_slice( 0 ), + global_event_id( 0 ), + timing_wheel(), + recycled_event_list( nullptr ), + wheel_seconds( 0 ), + wheel_size( 0 ), + wheel_mask( 0 ), + wheel_shift( 5 ), + wheel_granularity( 0.0 ), + wheel_time( timespan_t::zero() ), + all_events_ever_created() +{ + +} + +/* Destructor + * Release all remaining events. + */ +core_sim_t::event_managment_t::~event_managment_t() +{ + core_event_t::release( recycled_event_list ); +} + +/* Add new event to the timing wheel + */ +void core_sim_t::event_managment_t::add_event( core_event_t* e, + timespan_t delta_time, + timespan_t current_time ) +{ + e -> id = ++global_event_id; + + if ( delta_time < timespan_t::zero() ) + delta_time = timespan_t::zero(); + + if ( delta_time > wheel_time ) + { + e -> time = current_time + wheel_time - timespan_t::from_seconds( 1 ); + e -> reschedule_time = current_time + delta_time; + } + else + { + e -> time = current_time + delta_time; + e -> reschedule_time = timespan_t::zero(); + } + + // Determine the timing wheel position to which the event will belong +#ifdef SC_USE_INTEGER_TIME + uint32_t slice = ( uint32_t ) ( e -> time.total_millis() >> wheel_shift ) & wheel_mask; +#else + uint32_t slice = ( uint32_t ) ( e -> time.total_seconds() * wheel_granularity ) & wheel_mask; +#endif + + // Insert event into the event list at the appropriate time + core_event_t** prev = &( timing_wheel[ slice ] ); + while ( ( *prev ) && ( *prev ) -> time <= e -> time ) // Find position in the list + { prev = &( ( *prev ) -> next ); } + // insert event + e -> next = *prev; + *prev = e; + + events_remaining++; + if ( actor_t::ACTOR_EVENT_BOOKKEEPING && e -> actor ) e -> actor -> event_counter++; + +} + +/* Flush all remaining active events + */ +void core_sim_t::event_managment_t::flush_events() +{ + /* Instead of iterating over the whole timing wheel, + * we directly flush the remaining active events == ( all_events_ever_created - recycled_events ) + */ + std::vector events_to_flush = get_events_to_flush(); + + for( size_t i = 0, size = events_to_flush.size(); i < size; ++i ) + { + core_event_t* e = events_to_flush[ i ]; + core_event_t* null_e = e; // necessary evil + core_event_t::cancel( null_e ); + core_event_t::recycle( e ); + } + + // Clear Timing Wheel + timing_wheel.assign( timing_wheel.size(), nullptr ); + + events_remaining = 0; + events_processed = 0; + timing_slice = 0; + global_event_id = 0; +} + +/* Initialize Event Manager + */ +void core_sim_t::event_managment_t::init() +{ + // Timing wheel depth defaults to about 17 minutes with a granularity of 32 buckets per second. + // This makes wheel_size = 32K and it's fully used. + if ( wheel_seconds < 1024 ) wheel_seconds = 1024; // 2^10 Min to ensure limited wrap-around + if ( wheel_granularity <= 0 ) wheel_granularity = 32; // 2^5 Time slices per second + + wheel_time = timespan_t::from_seconds( wheel_seconds ); + +#ifdef SC_USE_INTEGER_TIME + wheel_size = ( uint32_t ) ( wheel_time.total_millis() >> wheel_shift ); +#else + wheel_size = ( uint32_t ) ( wheel_seconds * wheel_granularity ); +#endif + + // Round up the wheel depth to the nearest power of 2 to enable a fast "mod" operation. + for ( wheel_mask = 2; wheel_mask < wheel_size; wheel_mask *= 2 ) { continue; } + wheel_size = wheel_mask; + wheel_mask--; + + // The timing wheel represents an array of event lists: Each time slice has an event list. + timing_wheel.resize( wheel_size ); +} + +/* Select the next event to process + */ +core_event_t* core_sim_t::event_managment_t::next_event() +{ + if ( events_remaining == 0 ) + return nullptr; + + while ( true ) + { + core_event_t*& event_list = timing_wheel[ timing_slice ]; + if ( event_list ) + { + core_event_t* e = event_list; + event_list = e -> next; + events_remaining--; + events_processed++; + return e; + } + + timing_slice++; + if ( timing_slice == timing_wheel.size() ) + { + timing_slice = 0; + // Time Wheel turns around. + } + } + + return nullptr; +} + +/* Reset + */ +void core_sim_t::event_managment_t::reset() +{ + global_event_id = 0; +} + +/* This basically does the exact same thing as std::set_difference + * std::set_difference( from.begin(),from.end(), exluding.begin(), exluding.end(), back_inserter( out ) ); + */ +std::vector core_sim_t::event_managment_t::get_events_to_flush() const +{ + std::vector out; + const std::vector& from = all_events_ever_created; + out.reserve( from.size() ); + const core_event_t* exluding = recycled_event_list; + for( size_t i = 0, size = from.size(); i < size; ++i ) + { + core_event_t* e = from[ i ]; + bool found = false; + for( const core_event_t* re = exluding; re; re = re -> next ) + { + if ( e == re ) + { + found = true; + break; + } + } + if ( ! found ) + out.push_back( e ); + } + return out; +} + +/* Constructor + */ +core_sim_t::core_sim_t() : + em(), + current_time( timespan_t::zero() ), + out_std( *this, &std::cout, sim_ostream_t::no_close() ), + out_error( *this, &std::cerr, sim_ostream_t::no_close() ), + out_log( *this, &std::cout, sim_ostream_t::no_close() ), + out_debug(*this, &std::cout, sim_ostream_t::no_close() ), + debug( false ), + max_time( timespan_t::zero() ), + expected_iteration_time( timespan_t::zero() ), + current_iteration( -1 ), + iterations( 1000 ), + max_events_remaining( 0 ), + total_events_processed( 0 ), + event_stopwatch( STOPWATCH_THREAD ), + monitor_cpu( false ), + canceled( 0 ), + vary_combat_length( 0.0 ), + iteration_canceled( false ) +{ + +} + +/* Destructor + */ +core_sim_t::~core_sim_t() +{ + +} + +// non-virtual Public Functions + +/* Insert a event into the simulations event manager. + * Please use core_event_t::add_event instead + */ +void core_sim_t::add_event( core_event_t* e, + timespan_t delta_time ) +{ + em.add_event( e, delta_time, current_time ); + + if ( em.events_remaining > max_events_remaining ) max_events_remaining = em.events_remaining; + + if ( debug ) + out_debug.printf( "Add Event: %s %.2f %.2f %d %s", + e -> name, e -> time.total_seconds(), + e -> reschedule_time.total_seconds(), + e -> id, e -> actor ? e -> actor -> name() : "" ); + + if ( debug && actor_t::ACTOR_EVENT_BOOKKEEPING && e -> actor ) + { + out_debug.printf( "Actor %s has %d scheduled events", + e -> actor -> name(), e -> actor -> event_counter ); + } + +} + +/* Simulation Time adjustement coefficient + */ +double core_sim_t::iteration_time_adjust() const +{ + if ( iterations <= 1 ) + return 1.0; + + if ( current_iteration == 0 ) + return 1.0; + + return 1.0 + vary_combat_length * ( ( current_iteration % 2 ) ? 1 : -1 ) * current_iteration / ( double ) iterations; +} + +/* Very simple helper function to return the largest expected regular simulation time. + */ +double core_sim_t::expected_max_time() const +{ + return max_time.total_seconds() * ( 1.0 + vary_combat_length ); +} + +/* Is the (whole) simulation canceled? + */ +bool core_sim_t::is_canceled() const +{ + return canceled; +} + +void core_sim_t::cancel_iteration( bool cancel ) +{ + if ( cancel && debug ) + { + out_debug << "Iteration canceled."; + } + + iteration_canceled = cancel; +} + +void core_sim_t::combat( int iteration ) +{ + if ( debug ) + out_debug << "Starting Simulator"; + + current_iteration = iteration; + + begin_combat(); + + while ( core_event_t* e = em.next_event() ) + { + current_time = e -> time; + + if ( actor_t::ACTOR_EVENT_BOOKKEEPING && e -> actor && ! e -> canceled ) + { + // Perform actor event bookkeeping first + e -> actor -> event_counter--; + if ( e -> actor -> event_counter < 0 ) + { + out_error.printf( "sim_t::combat assertion error! canceling event %s leaves negative event count for user %s.\n", e -> name, e -> actor -> name() ); + assert( false ); + } + } + + if ( e -> canceled ) + { + if ( debug ) + out_debug.printf( "Canceled event: %s", e -> name ); + } + else if ( e -> reschedule_time > e -> time ) + { + reschedule_event( e ); + continue; + } + else + { + if ( debug ) + out_debug.printf( "Executing event: %s %s", e -> name, e -> actor ? e -> actor -> name() : "" ); + + if ( monitor_cpu ) + { + stopwatch_t& sw = e -> actor ? e -> actor -> event_stopwatch : event_stopwatch; + sw.mark(); + e -> execute(); + sw.accumulate(); + } + else + { + e -> execute(); + } + } + + core_event_t::recycle( e ); + + if ( iteration_canceled ) + break; + + if ( canceled ) + break; + } + + end_combat(); +} + +void core_sim_t::combat_begin() +{ } + +void core_sim_t::combat_end() +{ + total_events_processed += em.events_processed; +} + +/* Initialize simulator + */ +bool core_sim_t::init() +{ + em.init(); + + return true; +} + +/* Reset the simulator + */ +void core_sim_t::reset() +{ + if ( debug ) + out_debug << "Resetting Simulator"; + + em.reset(); + current_time = timespan_t::zero(); + expected_iteration_time = max_time * iteration_time_adjust(); +} + +/* Begin Combat + */ +void core_sim_t::begin_combat() +{ + reset(); + + if ( debug ) + out_debug << "Combat Begin"; + + combat_begin(); +} + +/* End Combat + * Call virtual combat_end() before flushing events + */ +void core_sim_t::end_combat() +{ + if ( debug ) + out_debug << "Combat End"; + + combat_end(); + + if ( debug ) + out_debug << "Flush Events"; + em.flush_events(); +} + +void core_sim_t::reschedule_event( core_event_t* e ) +{ + if ( debug ) + out_debug.printf( "Reschedule Event: %s %d", e -> name, e -> id ); + + add_event( e, ( e -> reschedule_time - current_time ) ); +} + +sc_raw_ostream_t& sc_raw_ostream_t::printf( const char* format, ... ) +{ + char buffer[ 4048 ]; + + va_list fmtargs; + va_start( fmtargs, format ); + int rval = ::vsnprintf( buffer, sizeof( buffer ), format, fmtargs ); + va_end( fmtargs ); + + assert( rval < 0 || ( static_cast( rval ) < sizeof( buffer ) ) ); + (void) rval; + + (*_stream) << buffer; + return *this; +} + +sim_ostream_t& sim_ostream_t::printf( const char* format, ... ) +{ + char buffer[ 4048 ]; + + va_list fmtargs; + va_start( fmtargs, format ); + int rval = ::vsnprintf( buffer, sizeof( buffer ), format, fmtargs ); + va_end( fmtargs ); + + assert( rval < 0 || ( static_cast( rval ) < sizeof( buffer ) ) ); + (void) rval; + + _raw << util::to_string( sim.current_time.total_seconds(), 3 ) << " " << buffer << "\n"; + return *this; +} diff --git a/engine/sim/sc_sim.cpp b/engine/sim/sc_sim.cpp index 00db5f5ebe5..0eb0643d0fc 100644 --- a/engine/sim/sc_sim.cpp +++ b/engine/sim/sc_sim.cpp @@ -868,7 +868,7 @@ sim_t::sim_t( sim_t* p, int index ) : save_prefix_str( "save_" ), save_talent_str( 0 ), talent_format( TALENT_FORMAT_UNCHANGED ), - auto_ready_trigger( 0 ), stat_cache( 1 ), max_aoe_enemies( 20 ), tmi_actor_only( 0 ), tmi_window_global( 0 ), new_tmi( 0 ), tmi_filter( 1.0 ), + auto_ready_trigger( 0 ), stat_cache( 1 ), max_aoe_enemies( 20 ), tmi_actor_only( 0 ), tmi_window_global( 0 ), target_death_pct( 0 ), rel_target_level( 3 ), target_level( -1 ), target_adds( 0 ), desired_targets( 0 ), challenge_mode( false ), scale_to_itemlevel ( -1 ), active_enemies( 0 ), active_allies( 0 ), @@ -1962,8 +1962,6 @@ void sim_t::create_options() opt_int( "desired_targets", desired_targets ), opt_bool( "tmi_actor_only", tmi_actor_only ), opt_float( "tmi_window_global", tmi_window_global ), - opt_int( "new_tmi", new_tmi ), - opt_float( "tmi_filter", tmi_filter), // Character Creation opt_func( "death_knight", parse_player ), opt_func( "deathknight", parse_player ), diff --git a/engine/simulationcraft.hpp b/engine/simulationcraft.hpp index 58018bb1474..9763b4942da 100644 --- a/engine/simulationcraft.hpp +++ b/engine/simulationcraft.hpp @@ -2409,8 +2409,6 @@ struct sim_t : public core_sim_t, private sc_thread_t int max_aoe_enemies; bool tmi_actor_only; double tmi_window_global; - int new_tmi; - double tmi_filter; // Target options double target_death_pct; @@ -3688,6 +3686,7 @@ struct player_collected_data_t // Tank extended_sample_data_t deaths; extended_sample_data_t theck_meloree_index; + extended_sample_data_t max_spike_amount; sc_timeline_t vengeance_timeline; std::array resource_lost, resource_gained; @@ -4156,8 +4155,6 @@ struct player_t : public actor_t double rps_gain, rps_loss; std::string tmi_debug_file_str; double tmi_window; - int new_tmi; - double tmi_filter; auto_dispose< std::vector > buff_list; auto_dispose< std::vector > proc_list; diff --git a/engine/util/concurrency.cpp b/engine/util/concurrency.cpp index 552609b6820..08b40685c42 100644 --- a/engine/util/concurrency.cpp +++ b/engine/util/concurrency.cpp @@ -58,7 +58,7 @@ class sc_thread_t::native_t // mutex_t::native_t ======================================================== /* -#if ! defined( __MINGW32__ ) && WINVER > 0x0502 +#if ! defined( __MINGW32__ ) class mutex_t::native_t : public nonmoveable { CRITICAL_SECTION cs; @@ -72,7 +72,7 @@ class mutex_t::native_t : public nonmoveable PCRITICAL_SECTION primitive() { return &cs; } }; -#else // mingw32 + win xp +#else */ class mutex_t::native_t : public nonmoveable { @@ -91,7 +91,7 @@ class mutex_t::native_t : public nonmoveable // condition_variable_t::native_t =========================================== /* -#if ! defined( __MINGW32__ ) && WINVER > 0x0502 +#if ! defined( __MINGW32__ ) class condition_variable_t::native_t : public nonmoveable { CONDITION_VARIABLE cv; @@ -113,7 +113,7 @@ class condition_variable_t::native_t : public nonmoveable void broadcast() { WakeAllConditionVariable( &cv ); } }; -#else // mingw32 + win xp +#else */ // Emulated condition variable for mingw using win32 thread model. Adapted from // http://www.cs.wustl.edu/~schmidt/win32-cv-1.html @@ -268,7 +268,7 @@ class sc_thread_t::native_t } static void sleep_seconds( double t ) - { ::Sleep( ( DWORD ) (t * 1000 ) ); } + { ::Sleep( ( DWORD ) t * 1000 ); } private: static void set_thread_priority( HANDLE handle, priority_e prio ) @@ -284,7 +284,6 @@ class sc_thread_t::native_t // POSIX #include #include -#include // mutex_t::native_t ======================================================== @@ -359,7 +358,7 @@ class sc_thread_t::native_t { set_thread_priority( pthread_self(), prio ); } static void sleep_seconds( double t ) - { ::sleep( t ); } + { ::sleep( ( unsigned int )t ); } private: static void set_thread_priority( pthread_t t, priority_e prio ) @@ -473,7 +472,5 @@ void sc_thread_t::set_calling_thread_priority( priority_e prio ) void sc_thread_t::wait() { native_handle -> join(); } -// sc_thread_t::sleep() ===================================================== - void sc_thread_t::sleep_seconds( double t ) { native_t::sleep_seconds( t ); } diff --git a/engine/util/sc_resourcepaths.hpp b/engine/util/sc_resourcepaths.hpp index d4b54ead875..8d49ff9e35b 100644 --- a/engine/util/sc_resourcepaths.hpp +++ b/engine/util/sc_resourcepaths.hpp @@ -1,71 +1,71 @@ -// ========================================================================== -// Dedmonwakeen's Raid DPS/TPS Simulator. -// Send questions to natehieter@gmail.com -// ========================================================================== - -#pragma once -#include -#include - -namespace sc_resource_paths { - - std::vector cache(); - std::vector shared_resources(); - std::vector sample_profiles(); - std::vector resource_storage(); - -}; // sc_resource_paths - -std::vector sc_resource_paths::cache() -{ - return resource_storage(); -} - -std::vector sc_resource_paths::resource_storage() -{ - std::vector out; - -#if defined( SC_LINUX_PACKAGING ) - std::string path_prefix; - const char* env = getenv( "XDG_CACHE_HOME" ); - if ( env ) - { - - out.push_back( env + "/SimulationCraft" ); - } - - env = getenv( "HOME" ); - if ( env ) - { - out.push_back( env + "/.cache" + "/SimulationCraft" ); - } - - out.push_back( "/tmp" + "/SimulationCraft" ) ; // back out -#endif - out.emplace_back(); // CWD fallback - - return out; -} - -std::vector sc_resource_paths::sample_profiles() -{ - std::vector out; - -#if defined( SC_LINUX_PACKAGING ) - return shared_resource(); -#endif - - out.emplace_back(); // CWD fallback - return out; -} - -std::vector sc_resource_paths::shared_resources() -{ - std::vector out; -#if defined( SC_LINUX_PACKAGING ) - out.push_back( SC_LINUX_PACKAGING ); -#endif - - out.emplace_back(); // CWD fallback - return out; -} +// ========================================================================== +// Dedmonwakeen's Raid DPS/TPS Simulator. +// Send questions to natehieter@gmail.com +// ========================================================================== + +#pragma once +#include +#include + +namespace sc_resource_paths { + + std::vector cache(); + std::vector shared_resources(); + std::vector sample_profiles(); + std::vector resource_storage(); + +}; // sc_resource_paths + +std::vector sc_resource_paths::cache() +{ + return resource_storage(); +} + +std::vector sc_resource_paths::resource_storage() +{ + std::vector out; + +#if defined( SC_LINUX_PACKAGING ) + std::string path_prefix; + const char* env = getenv( "XDG_CACHE_HOME" ); + if ( env ) + { + + out.push_back( env + "/SimulationCraft" ); + } + + env = getenv( "HOME" ); + if ( env ) + { + out.push_back( env + "/.cache" + "/SimulationCraft" ); + } + + out.push_back( "/tmp" + "/SimulationCraft" ) ; // back out +#endif + out.emplace_back(); // CWD fallback + + return out; +} + +std::vector sc_resource_paths::sample_profiles() +{ + std::vector out; + +#if defined( SC_LINUX_PACKAGING ) + return shared_resource(); +#endif + + out.emplace_back(); // CWD fallback + return out; +} + +std::vector sc_resource_paths::shared_resources() +{ + std::vector out; +#if defined( SC_LINUX_PACKAGING ) + out.push_back( SC_LINUX_PACKAGING ); +#endif + + out.emplace_back(); // CWD fallback + return out; +} diff --git a/generate_profiles_x64.bat b/generate_profiles_x64.bat index 0fe255138c8..0ff04b70330 100644 --- a/generate_profiles_x64.bat +++ b/generate_profiles_x64.bat @@ -1,10 +1,10 @@ -del /s simc_cache.dat - -:: Preraid doesn't match the typical pattern -cd profiles/PreRaid -%~dp0\simc64.exe generate_PreRaid.simc -cd ../.. - -forfiles -s -m generate_????.simc -c "cmd /c echo Running @path && %~dp0simc64.exe @file" - +del /s simc_cache.dat + +:: Preraid doesn't match the typical pattern +cd profiles/PreRaid +%~dp0\simc64.exe generate_PreRaid.simc +cd ../.. + +forfiles -s -m generate_????.simc -c "cmd /c echo Running @path && %~dp0simc64.exe @file" + pause \ No newline at end of file diff --git a/qt/.gitignore b/qt/.gitignore index 09623e5fa79..528225c9d55 100644 --- a/qt/.gitignore +++ b/qt/.gitignore @@ -1,6 +1,6 @@ -Info.plist -build -moc_simulationcraftqt.cpp -simcqt.app -simcqt.xcodeproj +Info.plist +build +moc_simulationcraftqt.cpp +simcqt.app +simcqt.xcodeproj sc_mac_update.o diff --git a/qt/simcqt.rc b/qt/simcqt.rc index ad69dbfbe66..c8432f5d75f 100644 --- a/qt/simcqt.rc +++ b/qt/simcqt.rc @@ -1,64 +1,64 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource." - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (South Africa) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENS) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_SOUTH_AFRICA -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON2 ICON "icon\\Simcraft2.ico" - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (South Africa) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED +// Microsoft Visual C++ generated resource script. +// +#include "resource." + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (South Africa) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENS) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_SOUTH_AFRICA +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON2 ICON "icon\\Simcraft2.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (South Africa) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/scale_factors.mk b/scale_factors.mk index 1a5ee1e1ea6..ab0eea34cf4 100644 --- a/scale_factors.mk +++ b/scale_factors.mk @@ -1,76 +1,76 @@ -# ========================================================================== -# Dedmonwakeen's Raid DPS/TPS Simulator. -# Send questions to natehieter@gmail.com -# ========================================================================== - -# Ugh - -profile = $(subst _auto,,$(subst death_knight,Death_Knight,$(subst dr,Dr,$(subst hu,Hu,$(subst mag,Mag,$(subst p,P,$(subst ro,Ro,$(subst sh,Sh,$(subst wa,Wa,$1))))))))) - -# Regenerate html reports when class models change - -MODULE = ./simc -HTML = html -LIVE = 406 -PTR = 410 - -MODELS =\ - death_knight \ - druid \ - hunter \ - mage \ - paladin \ - priest \ - rogue \ - shaman \ - warlock \ - warrior - -REPORTS_LIVE := $(MODELS:%=$(HTML)/$(LIVE)/%_auto.html) -REPORTS_PTR := $(MODELS:%=$(HTML)/$(PTR)/%_auto.html) - -SRC = engine - -DEP_LIVE =\ - $(SRC)/sc_extra_data.inc \ - $(SRC)/sc_item_data.inc \ - $(SRC)/sc_scale_data.inc \ - $(SRC)/sc_spell_data.inc \ - $(SRC)/sc_spell_lists.inc \ - $(SRC)/sc_talent_data.inc - -DEP_PTR =\ - $(SRC)/sc_extra_data_ptr.inc \ - $(SRC)/sc_item_data_ptr.inc \ - $(SRC)/sc_scale_data_ptr.inc \ - $(SRC)/sc_spell_data_ptr.inc \ - $(SRC)/sc_spell_lists_ptr.inc \ - $(SRC)/sc_talent_data_ptr.inc - -ITERATIONS = 25000 -THREADS = 2 -SF = 1 -OPTS = iterations=$(ITERATIONS) threads=$(THREADS) calculate_scale_factors=$(SF) hosted_html=1 -GEAR = T11_372 - -.PHONY: live ptr all clean - -live: $(REPORTS_LIVE) - -ptr: $(REPORTS_PTR) - -all: live ptr - -clean: - /bin/rm -f $(REPORTS_LIVE) $(REPORTS_PTR) - -$(HTML)/$(LIVE)/%_auto.html: $(SRC)/sc_%.cpp $(DEP_LIVE) - -@echo Generating $@ - -@$(MODULE) $(OPTS) $(call profile,$(basename $(@F)))_$(GEAR).simc output=$(basename $(@F))_live.txt html=$@ - -# We should make _PTR_.simc files even if they just reload the live version - -$(HTML)/$(PTR)/%_auto.html: $(SRC)/sc_%.cpp $(DEP_PTR) - -@echo Generating $@ - -@$(MODULE) ptr=1 $(OPTS) $(call profile,$(basename $(@F)))_$(GEAR)_PTR.simc output=$(basename $(@F))_ptr.txt html=$@ - +# ========================================================================== +# Dedmonwakeen's Raid DPS/TPS Simulator. +# Send questions to natehieter@gmail.com +# ========================================================================== + +# Ugh + +profile = $(subst _auto,,$(subst death_knight,Death_Knight,$(subst dr,Dr,$(subst hu,Hu,$(subst mag,Mag,$(subst p,P,$(subst ro,Ro,$(subst sh,Sh,$(subst wa,Wa,$1))))))))) + +# Regenerate html reports when class models change + +MODULE = ./simc +HTML = html +LIVE = 406 +PTR = 410 + +MODELS =\ + death_knight \ + druid \ + hunter \ + mage \ + paladin \ + priest \ + rogue \ + shaman \ + warlock \ + warrior + +REPORTS_LIVE := $(MODELS:%=$(HTML)/$(LIVE)/%_auto.html) +REPORTS_PTR := $(MODELS:%=$(HTML)/$(PTR)/%_auto.html) + +SRC = engine + +DEP_LIVE =\ + $(SRC)/sc_extra_data.inc \ + $(SRC)/sc_item_data.inc \ + $(SRC)/sc_scale_data.inc \ + $(SRC)/sc_spell_data.inc \ + $(SRC)/sc_spell_lists.inc \ + $(SRC)/sc_talent_data.inc + +DEP_PTR =\ + $(SRC)/sc_extra_data_ptr.inc \ + $(SRC)/sc_item_data_ptr.inc \ + $(SRC)/sc_scale_data_ptr.inc \ + $(SRC)/sc_spell_data_ptr.inc \ + $(SRC)/sc_spell_lists_ptr.inc \ + $(SRC)/sc_talent_data_ptr.inc + +ITERATIONS = 25000 +THREADS = 2 +SF = 1 +OPTS = iterations=$(ITERATIONS) threads=$(THREADS) calculate_scale_factors=$(SF) hosted_html=1 +GEAR = T11_372 + +.PHONY: live ptr all clean + +live: $(REPORTS_LIVE) + +ptr: $(REPORTS_PTR) + +all: live ptr + +clean: + /bin/rm -f $(REPORTS_LIVE) $(REPORTS_PTR) + +$(HTML)/$(LIVE)/%_auto.html: $(SRC)/sc_%.cpp $(DEP_LIVE) + -@echo Generating $@ + -@$(MODULE) $(OPTS) $(call profile,$(basename $(@F)))_$(GEAR).simc output=$(basename $(@F))_live.txt html=$@ + +# We should make _PTR_.simc files even if they just reload the live version + +$(HTML)/$(PTR)/%_auto.html: $(SRC)/sc_%.cpp $(DEP_PTR) + -@echo Generating $@ + -@$(MODULE) ptr=1 $(OPTS) $(call profile,$(basename $(@F)))_$(GEAR)_PTR.simc output=$(basename $(@F))_ptr.txt html=$@ + diff --git a/server_scripts/php/beta_chart.php b/server_scripts/php/beta_chart.php index c4f05025360..c59d354eadd 100644 --- a/server_scripts/php/beta_chart.php +++ b/server_scripts/php/beta_chart.php @@ -1,20 +1,20 @@ - 0) ? $array[1] - 1 : 0; -if (($patch == 'nil') || preg_match('/[^a-zA-Z0-9_\-\.]/', $file)) { - header("Location: pixel.gif"); - exit; -} -if ($file == '.html') $file = 'Raid_T11_372.html'; -$string = file_get_contents("$patch/$file", false, NULL, -1, 2000000); -if (preg_match_all('/("|>)(http:\/\/[0-9]\.chart\.apis\.google\.com.*?)("|<)/', $string, $m)) { - $chart = htmlspecialchars_decode($m[2][$number]); - $chart = str_replace('DPS Ranking', $patch[0] . '.' . $patch[1] . '.' . $patch[2] . '+' . str_replace('_', '+', preg_replace('/[0-9]+$/', '', $array[0])), $chart); - header("Location: $chart"); -} else { - header("Location: pixel.gif"); -} -?> + 0) ? $array[1] - 1 : 0; +if (($patch == 'nil') || preg_match('/[^a-zA-Z0-9_\-\.]/', $file)) { + header("Location: pixel.gif"); + exit; +} +if ($file == '.html') $file = 'Raid_T11_372.html'; +$string = file_get_contents("$patch/$file", false, NULL, -1, 2000000); +if (preg_match_all('/("|>)(http:\/\/[0-9]\.chart\.apis\.google\.com.*?)("|<)/', $string, $m)) { + $chart = htmlspecialchars_decode($m[2][$number]); + $chart = str_replace('DPS Ranking', $patch[0] . '.' . $patch[1] . '.' . $patch[2] . '+' . str_replace('_', '+', preg_replace('/[0-9]+$/', '', $array[0])), $chart); + header("Location: $chart"); +} else { + header("Location: pixel.gif"); +} +?> diff --git a/server_scripts/php/beta_redir.php b/server_scripts/php/beta_redir.php index a508f428fe2..003ee8f569f 100644 --- a/server_scripts/php/beta_redir.php +++ b/server_scripts/php/beta_redir.php @@ -1,10 +1,10 @@ - + diff --git a/server_scripts/php/chart.php b/server_scripts/php/chart.php index 2c9d8dfb94f..959fa685abe 100644 --- a/server_scripts/php/chart.php +++ b/server_scripts/php/chart.php @@ -1,20 +1,20 @@ - 0) ? $array[1] - 1 : 0; -if (($patch == 'nil') || preg_match('/[^a-zA-Z0-9_\-\.]/', $file)) { - header("Location: pixel.gif"); - exit; -} -if ($file == '.html') $file = 'Raid_T11_372.html'; -$string = file_get_contents("$patch/$file", false, NULL, -1, 2000000); -if (preg_match_all('/("|>)(http:\/\/[0-9]\.chart\.apis\.google\.com.*?)("|<)/', $string, $m)) { - $chart = htmlspecialchars_decode($m[2][$number]); - $chart = str_replace('DPS Ranking', $patch[0] . '.' . $patch[1] . '.' . $patch[2] . '+' . str_replace('_', '+', preg_replace('/[0-9]+$/', '', $array[0])), $chart); - header("Location: $chart"); -} else { - header("Location: pixel.gif"); -} -?> + 0) ? $array[1] - 1 : 0; +if (($patch == 'nil') || preg_match('/[^a-zA-Z0-9_\-\.]/', $file)) { + header("Location: pixel.gif"); + exit; +} +if ($file == '.html') $file = 'Raid_T11_372.html'; +$string = file_get_contents("$patch/$file", false, NULL, -1, 2000000); +if (preg_match_all('/("|>)(http:\/\/[0-9]\.chart\.apis\.google\.com.*?)("|<)/', $string, $m)) { + $chart = htmlspecialchars_decode($m[2][$number]); + $chart = str_replace('DPS Ranking', $patch[0] . '.' . $patch[1] . '.' . $patch[2] . '+' . str_replace('_', '+', preg_replace('/[0-9]+$/', '', $array[0])), $chart); + header("Location: $chart"); +} else { + header("Location: pixel.gif"); +} +?> diff --git a/server_scripts/php/chart_ptr.php b/server_scripts/php/chart_ptr.php index 4682c7673ca..5d617cf4f8b 100644 --- a/server_scripts/php/chart_ptr.php +++ b/server_scripts/php/chart_ptr.php @@ -1,4 +1,4 @@ - + diff --git a/server_scripts/php/download.php b/server_scripts/php/download.php index 1a5bcb6643c..f4a7f81692f 100644 --- a/server_scripts/php/download.php +++ b/server_scripts/php/download.php @@ -1,40 +1,40 @@ - true, // do not output to browser - CURLOPT_URL => $url, // set URL - CURLOPT_NOBODY => false, // do a HEAD request only - CURLOPT_TIMEOUT => $timeout); // set timeout - curl_setopt_array($ch, $opts); - - curl_exec($ch); // do it! - - $test = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $retval = $test == 200; // check if HTTP OK - - curl_close($ch); // close handle - - return $retval; -} - -if (!$platform) $platform = "win"; -$version = trim(file_get_contents("REALRELEASE$platform")); -$new = trim(file_get_contents("FRESHRELEASE")); -if ($version != $new) { - if ($platform == "win") $filename = "simc-$new-win32.zip"; - else if ($platform == "mac") $filename = "simc-$new-osx-x86.dmg"; - if (is_available("http://simulationcraft.googlecode.com/files/$filename")) { - copy("FRESHRELEASE", "REALRELEASE$platform"); - $version = $new; - } -} -if ($platform == "win") $filename = "simc-$version-win32.zip"; -else if ($platform == "mac") $filename = "simc-$version-osx-x86.dmg"; -else { - header("HTTP/1.0 404 Not Found"); - exit; -} -header("Location: http://simulationcraft.googlecode.com/files/$filename"); -?> + true, // do not output to browser + CURLOPT_URL => $url, // set URL + CURLOPT_NOBODY => false, // do a HEAD request only + CURLOPT_TIMEOUT => $timeout); // set timeout + curl_setopt_array($ch, $opts); + + curl_exec($ch); // do it! + + $test = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $retval = $test == 200; // check if HTTP OK + + curl_close($ch); // close handle + + return $retval; +} + +if (!$platform) $platform = "win"; +$version = trim(file_get_contents("REALRELEASE$platform")); +$new = trim(file_get_contents("FRESHRELEASE")); +if ($version != $new) { + if ($platform == "win") $filename = "simc-$new-win32.zip"; + else if ($platform == "mac") $filename = "simc-$new-osx-x86.dmg"; + if (is_available("http://simulationcraft.googlecode.com/files/$filename")) { + copy("FRESHRELEASE", "REALRELEASE$platform"); + $version = $new; + } +} +if ($platform == "win") $filename = "simc-$version-win32.zip"; +else if ($platform == "mac") $filename = "simc-$version-osx-x86.dmg"; +else { + header("HTTP/1.0 404 Not Found"); + exit; +} +header("Location: http://simulationcraft.googlecode.com/files/$filename"); +?> diff --git a/server_scripts/php/download_beta.php b/server_scripts/php/download_beta.php index 1dcfcd9f409..0e27d53e3e5 100644 --- a/server_scripts/php/download_beta.php +++ b/server_scripts/php/download_beta.php @@ -1,40 +1,40 @@ - true, // do not output to browser - CURLOPT_URL => $url, // set URL - CURLOPT_NOBODY => false, // do a HEAD request only - CURLOPT_TIMEOUT => $timeout); // set timeout - curl_setopt_array($ch, $opts); - - curl_exec($ch); // do it! - - $test = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $retval = $test == 200; // check if HTTP OK - - curl_close($ch); // close handle - - return $retval; -} - -if (!$platform) $platform = "win"; -$version = trim(file_get_contents("REALRELEASE_BETA$platform")); -$new = trim(file_get_contents("FRESHRELEASE_BETA")); -if ($version != $new) { - if ($platform == "win") $filename = "simc-$new-win32.zip"; - else if ($platform == "mac") $filename = "simc-$new-osx-x86.dmg"; - if (is_available("http://simulationcraft.googlecode.com/files/$filename")) { - copy("FRESHRELEASE_BETA", "REALRELEASE_BETA$platform"); - $version = $new; - } -} -if ($platform == "win") $filename = "simc-$version-win32.zip"; -else if ($platform == "mac") $filename = "simc-$version-osx-x86.dmg"; -else { - header("HTTP/1.0 404 Not Found"); - exit; -} -header("Location: http://simulationcraft.googlecode.com/files/$filename"); -?> + true, // do not output to browser + CURLOPT_URL => $url, // set URL + CURLOPT_NOBODY => false, // do a HEAD request only + CURLOPT_TIMEOUT => $timeout); // set timeout + curl_setopt_array($ch, $opts); + + curl_exec($ch); // do it! + + $test = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $retval = $test == 200; // check if HTTP OK + + curl_close($ch); // close handle + + return $retval; +} + +if (!$platform) $platform = "win"; +$version = trim(file_get_contents("REALRELEASE_BETA$platform")); +$new = trim(file_get_contents("FRESHRELEASE_BETA")); +if ($version != $new) { + if ($platform == "win") $filename = "simc-$new-win32.zip"; + else if ($platform == "mac") $filename = "simc-$new-osx-x86.dmg"; + if (is_available("http://simulationcraft.googlecode.com/files/$filename")) { + copy("FRESHRELEASE_BETA", "REALRELEASE_BETA$platform"); + $version = $new; + } +} +if ($platform == "win") $filename = "simc-$version-win32.zip"; +else if ($platform == "mac") $filename = "simc-$version-osx-x86.dmg"; +else { + header("HTTP/1.0 404 Not Found"); + exit; +} +header("Location: http://simulationcraft.googlecode.com/files/$filename"); +?> diff --git a/server_scripts/php/download_beta_mac.php b/server_scripts/php/download_beta_mac.php index c58da95d8c8..af9bc86505a 100644 --- a/server_scripts/php/download_beta_mac.php +++ b/server_scripts/php/download_beta_mac.php @@ -1,4 +1,4 @@ - + diff --git a/server_scripts/php/download_beta_win.php b/server_scripts/php/download_beta_win.php index 780bb6c03fe..4d8bf764b08 100644 --- a/server_scripts/php/download_beta_win.php +++ b/server_scripts/php/download_beta_win.php @@ -1,4 +1,4 @@ - + diff --git a/server_scripts/php/download_mac.php b/server_scripts/php/download_mac.php index 47cd70721f9..b6fed748031 100644 --- a/server_scripts/php/download_mac.php +++ b/server_scripts/php/download_mac.php @@ -1,4 +1,4 @@ - + diff --git a/server_scripts/php/download_win.php b/server_scripts/php/download_win.php index 8ac21e5f6b7..41d27e138ca 100644 --- a/server_scripts/php/download_win.php +++ b/server_scripts/php/download_win.php @@ -1,4 +1,4 @@ - + diff --git a/server_scripts/php/redir.php b/server_scripts/php/redir.php index 8c75eaf415c..30e7afc9307 100644 --- a/server_scripts/php/redir.php +++ b/server_scripts/php/redir.php @@ -1,10 +1,10 @@ - + diff --git a/server_scripts/php/redir_ptr.php b/server_scripts/php/redir_ptr.php index 8e7f96b6696..55f3393ae2f 100644 --- a/server_scripts/php/redir_ptr.php +++ b/server_scripts/php/redir_ptr.php @@ -1,10 +1,10 @@ - + diff --git a/server_scripts/php/rel_chart.php b/server_scripts/php/rel_chart.php index a08585a9a6b..662320746e9 100644 --- a/server_scripts/php/rel_chart.php +++ b/server_scripts/php/rel_chart.php @@ -1,35 +1,35 @@ - 0) ? $array[1] - 1 : 0; -if (($patch == 'nil') || preg_match('/[^a-zA-Z0-9_\.]/', $file)) { - header("Location: pixel.gif"); - exit; -} -if ($file == '.html') $file = 'Raid_T11_372.html'; -$string = file_get_contents("$patch/$file", false, NULL, -1, 200000); -if (preg_match_all('/("|>)(http:\/\/[0-9]\.chart\.apis\.google\.com.*?)("|<)/', $string, $m)) { - $chart = htmlspecialchars_decode($m[2][$number]); - $chart = str_replace('DPS Ranking', $patch[0] . '.' . $patch[1] . '.' . $patch[2] . '+' . str_replace('_', '+', $array[0]), $chart); - if (preg_match('/chd=t:([\|0-9]+)/', $chart, $m)) { - $array = explode('|', $m[1]); - $value = $array[count($array) - 1]; - foreach ($array as $a) { - $newvalue = $a - $value; - $chart = str_replace("++$a++", "++$newvalue++", $chart); - $newarray[] = $newvalue; - } - $chart = str_replace($m[1], implode('|', $newarray), $chart); - } - if (preg_match('/chds=0,([0-9]+)/', $chart, $m)) { - $max = max($array); - $newsize = round($m[1] * ( ( $max - $value ) / $max )); - $chart = str_replace($m[0], "chds=0,$newsize", $chart); - } - header("Location: $chart"); -} else { - header("Location: pixel.gif"); -} -?> + 0) ? $array[1] - 1 : 0; +if (($patch == 'nil') || preg_match('/[^a-zA-Z0-9_\.]/', $file)) { + header("Location: pixel.gif"); + exit; +} +if ($file == '.html') $file = 'Raid_T11_372.html'; +$string = file_get_contents("$patch/$file", false, NULL, -1, 200000); +if (preg_match_all('/("|>)(http:\/\/[0-9]\.chart\.apis\.google\.com.*?)("|<)/', $string, $m)) { + $chart = htmlspecialchars_decode($m[2][$number]); + $chart = str_replace('DPS Ranking', $patch[0] . '.' . $patch[1] . '.' . $patch[2] . '+' . str_replace('_', '+', $array[0]), $chart); + if (preg_match('/chd=t:([\|0-9]+)/', $chart, $m)) { + $array = explode('|', $m[1]); + $value = $array[count($array) - 1]; + foreach ($array as $a) { + $newvalue = $a - $value; + $chart = str_replace("++$a++", "++$newvalue++", $chart); + $newarray[] = $newvalue; + } + $chart = str_replace($m[1], implode('|', $newarray), $chart); + } + if (preg_match('/chds=0,([0-9]+)/', $chart, $m)) { + $max = max($array); + $newsize = round($m[1] * ( ( $max - $value ) / $max )); + $chart = str_replace($m[0], "chds=0,$newsize", $chart); + } + header("Location: $chart"); +} else { + header("Location: pixel.gif"); +} +?> diff --git a/server_scripts/php/rel_chart_ptr.php b/server_scripts/php/rel_chart_ptr.php index 5980ad4412a..adba815ac0e 100644 --- a/server_scripts/php/rel_chart_ptr.php +++ b/server_scripts/php/rel_chart_ptr.php @@ -1,4 +1,4 @@ - + diff --git a/server_scripts/simulate.sh b/server_scripts/simulate.sh index e620ac81f35..d79b6238475 100644 --- a/server_scripts/simulate.sh +++ b/server_scripts/simulate.sh @@ -1,51 +1,51 @@ -#!/bin/bash -HOME_DIR="/home/jon" -SIMC_DIR="$HOME_DIR/simc_mop" -SITE_DIR="$HOME_DIR/sites/simulationcraft.org" -AUTO_DIR="$SITE_DIR/auto" -SPEC_DIR="$HOME_DIR/autosim.d" -MAIL_ADR="\"jon@valvatne.com\" \"autosimc@mailinator.com\"" -if [ ! -f "$HOME_DIR/simulate.lock" ]; then - /usr/bin/svn update "$SIMC_DIR" --non-interactive - REV=`/usr/bin/svn info "$SIMC_DIR/engine" | grep "Last Changed Rev" | sed "s/[^0-9]*//"` - REV2=`/usr/bin/svn info "$SIMC_DIR/profiles" | grep "Last Changed Rev" | sed "s/[^0-9]*//"` - if [ "$REV2" -gt "$REV" ]; then - REV=$REV2 - fi - if [ ! -f "$AUTO_DIR/r$REV-compile.txt" ]; then - echo "r$REV" >"$HOME_DIR/simulate.lock" - cd "$SIMC_DIR/engine" - make OS=UNIX >"$AUTO_DIR/r$REV-compile.txt" || make -s OS=UNIX 2>"$AUTO_DIR/r$REV-errors.txt" - if [ -f "$AUTO_DIR/r$REV-errors.txt" ]; then - cat "$AUTO_DIR/r$REV-errors.txt" | /usr/bin/mail -s "Compile error (r$REV)" $MAIL_ADR - else - for SIM_FILE in $SPEC_DIR/*; do - SIM_NAME=$(basename "$SIM_FILE") - if [ ! -e "$AUTO_DIR/$SIM_NAME" ]; then - mkdir "$AUTO_DIR/$SIM_NAME" - fi - SIM_SPEC=$(cat "$SPEC_DIR/$SIM_NAME") - "$SIMC_DIR/engine/simc" $SIM_SPEC "html=$AUTO_DIR/$SIM_NAME/r$REV.html" "output=$AUTO_DIR/$SIM_NAME/r$REV.txt" >"$AUTO_DIR/$SIM_NAME/r$REV.output.txt" 2>"$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" - if [ -s "$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" -o ! -f "$AUTO_DIR/$SIM_NAME/r$REV.html" ]; then - cat "$AUTO_DIR/$SIM_NAME/r$REV.output.txt" >>"$AUTO_DIR/$SIM_NAME/r$REV.txt" - cat "$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" >>"$AUTO_DIR/$SIM_NAME/r$REV.txt" - cat "$AUTO_DIR/$SIM_NAME/r$REV.txt" | /usr/bin/mail -s "Runtime error (r$REV)" $MAIL_ADR - fi - rm "$AUTO_DIR/$SIM_NAME/r$REV.output.txt" - rm "$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" - if [ -f "$AUTO_DIR/$SIM_NAME/r$REV.html" ]; then - sed -ri 's/(SimulationCraft [0-9-]+<\/a>)/\1 (r'$REV')<\/a>/g' "$AUTO_DIR/$SIM_NAME/r$REV.html" - BETAFOLDER=`head -50 "$AUTO_DIR/$SIM_NAME/r$REV.html" | grep "for World of Warcraft" | sed "s/.*\([0-9]\)\.\([0-9]\)\.\([0-9]\).*/\1\2\3/"` - echo $BETAFOLDER > "$SITE_DIR/BETAFOLDER" - if [ ! -e "$SITE_DIR/$BETAFOLDER" ]; then - mkdir "$SITE_DIR/$BETAFOLDER" - /usr/bin/svn add "$SITE_DIR/$BETAFOLDER" - fi - cp "$AUTO_DIR/$SIM_NAME/r$REV.html" "$SITE_DIR/$BETAFOLDER/$SIM_NAME.html" - fi - done - fi - rm "$HOME_DIR/simulate.lock" - fi -fi - +#!/bin/bash +HOME_DIR="/home/jon" +SIMC_DIR="$HOME_DIR/simc_mop" +SITE_DIR="$HOME_DIR/sites/simulationcraft.org" +AUTO_DIR="$SITE_DIR/auto" +SPEC_DIR="$HOME_DIR/autosim.d" +MAIL_ADR="\"jon@valvatne.com\" \"autosimc@mailinator.com\"" +if [ ! -f "$HOME_DIR/simulate.lock" ]; then + /usr/bin/svn update "$SIMC_DIR" --non-interactive + REV=`/usr/bin/svn info "$SIMC_DIR/engine" | grep "Last Changed Rev" | sed "s/[^0-9]*//"` + REV2=`/usr/bin/svn info "$SIMC_DIR/profiles" | grep "Last Changed Rev" | sed "s/[^0-9]*//"` + if [ "$REV2" -gt "$REV" ]; then + REV=$REV2 + fi + if [ ! -f "$AUTO_DIR/r$REV-compile.txt" ]; then + echo "r$REV" >"$HOME_DIR/simulate.lock" + cd "$SIMC_DIR/engine" + make OS=UNIX >"$AUTO_DIR/r$REV-compile.txt" || make -s OS=UNIX 2>"$AUTO_DIR/r$REV-errors.txt" + if [ -f "$AUTO_DIR/r$REV-errors.txt" ]; then + cat "$AUTO_DIR/r$REV-errors.txt" | /usr/bin/mail -s "Compile error (r$REV)" $MAIL_ADR + else + for SIM_FILE in $SPEC_DIR/*; do + SIM_NAME=$(basename "$SIM_FILE") + if [ ! -e "$AUTO_DIR/$SIM_NAME" ]; then + mkdir "$AUTO_DIR/$SIM_NAME" + fi + SIM_SPEC=$(cat "$SPEC_DIR/$SIM_NAME") + "$SIMC_DIR/engine/simc" $SIM_SPEC "html=$AUTO_DIR/$SIM_NAME/r$REV.html" "output=$AUTO_DIR/$SIM_NAME/r$REV.txt" >"$AUTO_DIR/$SIM_NAME/r$REV.output.txt" 2>"$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" + if [ -s "$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" -o ! -f "$AUTO_DIR/$SIM_NAME/r$REV.html" ]; then + cat "$AUTO_DIR/$SIM_NAME/r$REV.output.txt" >>"$AUTO_DIR/$SIM_NAME/r$REV.txt" + cat "$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" >>"$AUTO_DIR/$SIM_NAME/r$REV.txt" + cat "$AUTO_DIR/$SIM_NAME/r$REV.txt" | /usr/bin/mail -s "Runtime error (r$REV)" $MAIL_ADR + fi + rm "$AUTO_DIR/$SIM_NAME/r$REV.output.txt" + rm "$AUTO_DIR/$SIM_NAME/r$REV.errors.txt" + if [ -f "$AUTO_DIR/$SIM_NAME/r$REV.html" ]; then + sed -ri 's/(SimulationCraft [0-9-]+<\/a>)/\1 (r'$REV')<\/a>/g' "$AUTO_DIR/$SIM_NAME/r$REV.html" + BETAFOLDER=`head -50 "$AUTO_DIR/$SIM_NAME/r$REV.html" | grep "for World of Warcraft" | sed "s/.*\([0-9]\)\.\([0-9]\)\.\([0-9]\).*/\1\2\3/"` + echo $BETAFOLDER > "$SITE_DIR/BETAFOLDER" + if [ ! -e "$SITE_DIR/$BETAFOLDER" ]; then + mkdir "$SITE_DIR/$BETAFOLDER" + /usr/bin/svn add "$SITE_DIR/$BETAFOLDER" + fi + cp "$AUTO_DIR/$SIM_NAME/r$REV.html" "$SITE_DIR/$BETAFOLDER/$SIM_NAME.html" + fi + done + fi + rm "$HOME_DIR/simulate.lock" + fi +fi + diff --git a/server_scripts/svn_cronjobs.sh b/server_scripts/svn_cronjobs.sh index cb12653fdc0..4e9fa028d2b 100644 --- a/server_scripts/svn_cronjobs.sh +++ b/server_scripts/svn_cronjobs.sh @@ -1,4 +1,4 @@ -/usr/bin/svn update /home/jon/sites/simulationcraft.org --non-interactive --quiet -/usr/bin/svn list http://simulationcraft.googlecode.com/svn/tags/ | grep release-4 | tail -1 | sed "s/.*\([0-9][0-9][0-9]\-[0-9]\).*/\1/" > /home/jon/sites/simulationcraft.org/FRESHRELEASE -/usr/bin/svn list http://simulationcraft.googlecode.com/svn/tags/ | grep release-5 | tail -1 | sed "s/.*\([0-9][0-9][0-9]\-[0-9]\).*/\1/" > /home/jon/sites/simulationcraft.org/FRESHRELEASE_BETA -/home/jon/simulate.sh +/usr/bin/svn update /home/jon/sites/simulationcraft.org --non-interactive --quiet +/usr/bin/svn list http://simulationcraft.googlecode.com/svn/tags/ | grep release-4 | tail -1 | sed "s/.*\([0-9][0-9][0-9]\-[0-9]\).*/\1/" > /home/jon/sites/simulationcraft.org/FRESHRELEASE +/usr/bin/svn list http://simulationcraft.googlecode.com/svn/tags/ | grep release-5 | tail -1 | sed "s/.*\([0-9][0-9][0-9]\-[0-9]\).*/\1/" > /home/jon/sites/simulationcraft.org/FRESHRELEASE_BETA +/home/jon/simulate.sh diff --git a/simc10.sln b/simc10.sln index 74326550928..840a1ff967d 100644 --- a/simc10.sln +++ b/simc10.sln @@ -1,34 +1,34 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simc10", "vs\simc10.vcxproj", "{D963926C-4A85-4600-8626-51FA12FDF5C1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simcqt10", "vs\simcqt10.vcxproj", "{8B5B7EB0-9B3B-3682-B018-64769C525784}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.Build.0 = Debug|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.ActiveCfg = Debug|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.Build.0 = Debug|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.ActiveCfg = Release|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.Build.0 = Release|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.ActiveCfg = Release|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.Build.0 = Release|x64 - {8B5B7EB0-9B3B-3682-B018-64769C525784}.Debug|Win32.ActiveCfg = Debug|Win32 - {8B5B7EB0-9B3B-3682-B018-64769C525784}.Debug|Win32.Build.0 = Debug|Win32 - {8B5B7EB0-9B3B-3682-B018-64769C525784}.Debug|x64.ActiveCfg = Debug|Win32 - {8B5B7EB0-9B3B-3682-B018-64769C525784}.Release|Win32.ActiveCfg = Release|Win32 - {8B5B7EB0-9B3B-3682-B018-64769C525784}.Release|Win32.Build.0 = Release|Win32 - {8B5B7EB0-9B3B-3682-B018-64769C525784}.Release|x64.ActiveCfg = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simc10", "vs\simc10.vcxproj", "{D963926C-4A85-4600-8626-51FA12FDF5C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simcqt10", "vs\simcqt10.vcxproj", "{8B5B7EB0-9B3B-3682-B018-64769C525784}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.Build.0 = Debug|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.ActiveCfg = Debug|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.Build.0 = Debug|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.ActiveCfg = Release|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.Build.0 = Release|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.ActiveCfg = Release|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.Build.0 = Release|x64 + {8B5B7EB0-9B3B-3682-B018-64769C525784}.Debug|Win32.ActiveCfg = Debug|Win32 + {8B5B7EB0-9B3B-3682-B018-64769C525784}.Debug|Win32.Build.0 = Debug|Win32 + {8B5B7EB0-9B3B-3682-B018-64769C525784}.Debug|x64.ActiveCfg = Debug|Win32 + {8B5B7EB0-9B3B-3682-B018-64769C525784}.Release|Win32.ActiveCfg = Release|Win32 + {8B5B7EB0-9B3B-3682-B018-64769C525784}.Release|Win32.Build.0 = Release|Win32 + {8B5B7EB0-9B3B-3682-B018-64769C525784}.Release|x64.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/simc11.sln b/simc11.sln index 96e9d59602c..66a42c8b889 100644 --- a/simc11.sln +++ b/simc11.sln @@ -1,43 +1,43 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simc", "vs\simc11.vcxproj", "{D963926C-4A85-4600-8626-51FA12FDF5C1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_rng", "vs\sc_rng11.vcxproj", "{4C7D8805-E08F-4198-A469-3245DEBBA6EB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimcGUI_qt5.1.0", "vs\simcqt11.vcxproj", "{A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.Build.0 = Debug|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.ActiveCfg = Debug|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.Build.0 = Debug|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.ActiveCfg = Release|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.Build.0 = Release|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.ActiveCfg = Release|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.Build.0 = Release|x64 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.ActiveCfg = Debug|Win32 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.Build.0 = Debug|Win32 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.ActiveCfg = Debug|x64 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.Build.0 = Debug|x64 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|Win32.ActiveCfg = Release|Win32 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|x64.ActiveCfg = Release|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.ActiveCfg = Debug|Win32 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.Build.0 = Debug|Win32 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.ActiveCfg = Debug|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.Build.0 = Debug|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|Win32.ActiveCfg = Release|Win32 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.ActiveCfg = Release|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2012 for Windows Desktop +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simc", "vs\simc11.vcxproj", "{D963926C-4A85-4600-8626-51FA12FDF5C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sc_rng", "vs\sc_rng11.vcxproj", "{4C7D8805-E08F-4198-A469-3245DEBBA6EB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimcGUI_qt5.1.0", "vs\simcqt11.vcxproj", "{A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.Build.0 = Debug|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.ActiveCfg = Debug|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.Build.0 = Debug|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.ActiveCfg = Release|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.Build.0 = Release|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.ActiveCfg = Release|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.Build.0 = Release|x64 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.ActiveCfg = Debug|Win32 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.Build.0 = Debug|Win32 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.ActiveCfg = Debug|x64 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.Build.0 = Debug|x64 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|Win32.ActiveCfg = Release|Win32 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|x64.ActiveCfg = Release|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.ActiveCfg = Debug|Win32 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.Build.0 = Debug|Win32 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.ActiveCfg = Debug|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.Build.0 = Debug|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|Win32.ActiveCfg = Release|Win32 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.ActiveCfg = Release|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/simc12.sln b/simc12.sln index a45f69ba031..b75516fdabe 100644 --- a/simc12.sln +++ b/simc12.sln @@ -1,41 +1,41 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simc", "vs\simc12.vcxproj", "{D963926C-4A85-4600-8626-51FA12FDF5C1}" -EndProject -#Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimcGUI_qt5.1.0", "vs\simcqt12.vcxproj", "{A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}" -#EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.Build.0 = Debug|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.ActiveCfg = Debug|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.Build.0 = Debug|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.ActiveCfg = Release|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.Build.0 = Release|Win32 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.ActiveCfg = Release|x64 - {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.Build.0 = Release|x64 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.ActiveCfg = Debug|Win32 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.Build.0 = Debug|Win32 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.ActiveCfg = Debug|x64 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.Build.0 = Debug|x64 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|Win32.ActiveCfg = Release|Win32 - {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|x64.ActiveCfg = Release|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.ActiveCfg = Debug|Win32 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.Build.0 = Debug|Win32 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.ActiveCfg = Debug|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.Build.0 = Debug|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|Win32.ActiveCfg = Release|Win32 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.ActiveCfg = Release|x64 - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2012 for Windows Desktop +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simc", "vs\simc12.vcxproj", "{D963926C-4A85-4600-8626-51FA12FDF5C1}" +EndProject +#Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimcGUI_qt5.1.0", "vs\simcqt12.vcxproj", "{A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}" +#EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|Win32.Build.0 = Debug|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.ActiveCfg = Debug|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Debug|x64.Build.0 = Debug|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.ActiveCfg = Release|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|Win32.Build.0 = Release|Win32 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.ActiveCfg = Release|x64 + {D963926C-4A85-4600-8626-51FA12FDF5C1}.Release|x64.Build.0 = Release|x64 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.ActiveCfg = Debug|Win32 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|Win32.Build.0 = Debug|Win32 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.ActiveCfg = Debug|x64 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Debug|x64.Build.0 = Debug|x64 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|Win32.ActiveCfg = Release|Win32 + {4C7D8805-E08F-4198-A469-3245DEBBA6EB}.Release|x64.ActiveCfg = Release|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.ActiveCfg = Debug|Win32 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|Win32.Build.0 = Debug|Win32 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.ActiveCfg = Debug|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Debug|x64.Build.0 = Debug|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|Win32.ActiveCfg = Release|Win32 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.ActiveCfg = Release|x64 + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/simcqt.rc b/simcqt.rc index 4b7be03cd71..32ada43beb7 100644 --- a/simcqt.rc +++ b/simcqt.rc @@ -1 +1 @@ -IDI_ICON1 ICON DISCARDABLE "qt/icon/simcraft2.ico" +IDI_ICON1 ICON DISCARDABLE "qt/icon/simcraft2.ico" diff --git a/util_scripts/debug_sim.py b/util_scripts/debug_sim.py index b22cf9a3aaa..568c6ddc9de 100644 --- a/util_scripts/debug_sim.py +++ b/util_scripts/debug_sim.py @@ -1,35 +1,35 @@ -# This script is intended to easily allow checking of many sim setups in debug to catch bugs. - -import subprocess as sb -import time - -simc_bin = "simc.exe" -iterations=4 -threads=1 -output_dir="d:/dev/simc/debug/" -classes = [ - #("priest", ["shadow","discipline","holy"]), - ("priest", ["shadow",]), - ("shaman", ["elemental", "enhancement", "restoration"]), - #("druid",["guardian","feral","balance","restoration"]), - ("druid",["guardian","feral","balance"]), - ("warrior",["fury","arms","protection"]), - ("paladin",["holy","retribution","protection"]), - ("rogue",["subtlety","combat","assassination"]), - ("warlock",["demonology","affliction","destruction"]), - #("monk",["brewmaster","windwalker","mistweaver"]), - ("monk",["brewmaster","windwalker"]), - ] - -for wowclass in classes: - for spec in wowclass[1]: - try: - command = "{bin} {wclass}=foo spec={spec} iterations={iterations} threads={threads} output={output}" \ - .format( bin=simc_bin, wclass=wowclass[0], spec=spec, iterations=iterations, threads=threads, output=output_dir+ wowclass[0] + "_" + spec + ".txt" ) - print( "Simulating {wclass} spec {spec}".format(wclass=wowclass[0], spec=spec) ) - print( command ) - time.sleep(0.1) - sb.check_call( command ) - time.sleep(2) - except sb.CalledProcessError as e: - print ("Exited with non-zero return code: " + str(e.returncode) ) +# This script is intended to easily allow checking of many sim setups in debug to catch bugs. + +import subprocess as sb +import time + +simc_bin = "simc.exe" +iterations=4 +threads=1 +output_dir="d:/dev/simc/debug/" +classes = [ + #("priest", ["shadow","discipline","holy"]), + ("priest", ["shadow",]), + ("shaman", ["elemental", "enhancement", "restoration"]), + #("druid",["guardian","feral","balance","restoration"]), + ("druid",["guardian","feral","balance"]), + ("warrior",["fury","arms","protection"]), + ("paladin",["holy","retribution","protection"]), + ("rogue",["subtlety","combat","assassination"]), + ("warlock",["demonology","affliction","destruction"]), + #("monk",["brewmaster","windwalker","mistweaver"]), + ("monk",["brewmaster","windwalker"]), + ] + +for wowclass in classes: + for spec in wowclass[1]: + try: + command = "{bin} {wclass}=foo spec={spec} iterations={iterations} threads={threads} output={output}" \ + .format( bin=simc_bin, wclass=wowclass[0], spec=spec, iterations=iterations, threads=threads, output=output_dir+ wowclass[0] + "_" + spec + ".txt" ) + print( "Simulating {wclass} spec {spec}".format(wclass=wowclass[0], spec=spec) ) + print( command ) + time.sleep(0.1) + sb.check_call( command ) + time.sleep(2) + except sb.CalledProcessError as e: + print ("Exited with non-zero return code: " + str(e.returncode) ) diff --git a/util_scripts/test_profiles.bat b/util_scripts/test_profiles.bat index 7ca55e2babb..60405e30b28 100644 --- a/util_scripts/test_profiles.bat +++ b/util_scripts/test_profiles.bat @@ -1,9 +1,9 @@ -call simc.exe Raid_T15H.simc threads=4 iterations=10 > log.txt -call simc.exe Raid_T15N.simc threads=4 iterations=10 > log.txt -call simc.exe Raid_T15H.simc optimal_raid=0 threads=4 iterations=10 > log.txt -call simc.exe Raid_T15N.simc optimal_raid=0 threads=4 iterations=10 > log.txt - -call simc.exe ptr=1 Raid_T15H.simc optimal_raid=0 threads=4 iterations=10 > log.txt -call simc.exe ptr=1 Raid_T15N.simc optimal_raid=0 threads=4 iterations=10 > log.txt -call simc.exe ptr=1 Raid_T15H.simc optimal_raid=0 threads=4 iterations=10 > log.txt +call simc.exe Raid_T15H.simc threads=4 iterations=10 > log.txt +call simc.exe Raid_T15N.simc threads=4 iterations=10 > log.txt +call simc.exe Raid_T15H.simc optimal_raid=0 threads=4 iterations=10 > log.txt +call simc.exe Raid_T15N.simc optimal_raid=0 threads=4 iterations=10 > log.txt + +call simc.exe ptr=1 Raid_T15H.simc optimal_raid=0 threads=4 iterations=10 > log.txt +call simc.exe ptr=1 Raid_T15N.simc optimal_raid=0 threads=4 iterations=10 > log.txt +call simc.exe ptr=1 Raid_T15H.simc optimal_raid=0 threads=4 iterations=10 > log.txt call simc.exe ptr=1 Raid_T15N.simc optimal_raid=0 threads=4 iterations=10 > log.txt \ No newline at end of file diff --git a/vs/CommonIncludeDirectories.props b/vs/CommonIncludeDirectories.props index 5b7d55a79a5..daea33c7380 100644 --- a/vs/CommonIncludeDirectories.props +++ b/vs/CommonIncludeDirectories.props @@ -1,12 +1,12 @@ - - - - - - - - $(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) - - - + + + + + + + + $(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) + + + \ No newline at end of file diff --git a/vs/OutputDirectories.props b/vs/OutputDirectories.props index 1b68becf047..f0f0458e377 100644 --- a/vs/OutputDirectories.props +++ b/vs/OutputDirectories.props @@ -1,19 +1,19 @@ - - - - $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ - - - int\$(PlatformShortName)\$(Configuration)\ - - - - copy "$(TargetPath)" "$(SolutionDir)" - - - - - Copy simc to the main directory. - - + + + + $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ + + + int\$(PlatformShortName)\$(Configuration)\ + + + + copy "$(TargetPath)" "$(SolutionDir)" + + + + + Copy simc to the main directory. + + \ No newline at end of file diff --git a/vs/PrecompiledHeaders.props b/vs/PrecompiledHeaders.props index 3968447ba51..8e2f1359695 100644 --- a/vs/PrecompiledHeaders.props +++ b/vs/PrecompiledHeaders.props @@ -1,17 +1,17 @@ - - - - - - - - Use - - - - - simulationcraft.hpp - - - + + + + + + + + Use + + + + + simulationcraft.hpp + + + \ No newline at end of file diff --git a/vs/Qt_vs10.props b/vs/Qt_vs10.props index aeb4d9ae36d..d505a005987 100644 --- a/vs/Qt_vs10.props +++ b/vs/Qt_vs10.props @@ -1,15 +1,15 @@ - - - - - C:\Qt\4.8.5 - - - - - - $(QTDIR) - true - - + + + + + C:\Qt\4.8.5 + + + + + + $(QTDIR) + true + + \ No newline at end of file diff --git a/vs/Qt_vs11.props b/vs/Qt_vs11.props index ffd79a4df40..3a18777d9da 100644 --- a/vs/Qt_vs11.props +++ b/vs/Qt_vs11.props @@ -1,8 +1,8 @@ - - - - - C:\Qt\5.2.1\5.2.1\msvc2012_64 - C:\Qt\5.2.1\5.2.1\msvc2012 - + + + + + C:\Qt\5.2.1\5.2.1\msvc2012_64 + C:\Qt\5.2.1\5.2.1\msvc2012 + \ No newline at end of file diff --git a/vs/basetsd.h b/vs/basetsd.h index 4a5a11943ed..5e0f8b3775f 100644 --- a/vs/basetsd.h +++ b/vs/basetsd.h @@ -1,495 +1,495 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - - basetsd.h - -Abstract: - - Type definitions for the basic sized types. - -Author: - -Revision History: - ---*/ - -#ifndef _BASETSD_H_ -#define _BASETSD_H_ - -#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) - #define POINTER_64 __ptr64 - typedef unsigned __int64 POINTER_64_INT; - #if defined(_WIN64) - #define POINTER_32 __ptr32 - #else - #define POINTER_32 - #endif -#else - #if defined(_MAC) && defined(_MAC_INT_64) - #define POINTER_64 __ptr64 - typedef unsigned __int64 POINTER_64_INT; - #else - #if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) - #define POINTER_64 __ptr64 - #else - #define POINTER_64 - #endif - typedef unsigned long POINTER_64_INT; - #endif - #define POINTER_32 -#endif - -#if defined(_IA64_) || defined(_AMD64_) -#define FIRMWARE_PTR -#else -#define FIRMWARE_PTR POINTER_32 -#endif - -#if (_MSC_FULL_VER >= 140041204) && !defined(MIDL_PASS) && !defined(RC_INVOKED) -#define POINTER_SIGNED __sptr -#define POINTER_UNSIGNED __uptr -#else -#define POINTER_SIGNED -#define POINTER_UNSIGNED -#endif - -#define SPOINTER_32 POINTER_SIGNED POINTER_32 -#define UPOINTER_32 POINTER_UNSIGNED POINTER_32 - -#if _MSC_VER > 1000 -#pragma once -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef signed char INT8, *PINT8; -typedef signed short INT16, *PINT16; -typedef signed int INT32, *PINT32; -typedef signed __int64 INT64, *PINT64; -typedef unsigned char UINT8, *PUINT8; -typedef unsigned short UINT16, *PUINT16; -typedef unsigned int UINT32, *PUINT32; -typedef unsigned __int64 UINT64, *PUINT64; - -// -// The following types are guaranteed to be signed and 32 bits wide. -// - -typedef signed int LONG32, *PLONG32; - -// -// The following types are guaranteed to be unsigned and 32 bits wide. -// - -typedef unsigned int ULONG32, *PULONG32; -typedef unsigned int DWORD32, *PDWORD32; - -#if !defined(_W64) -#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86) || defined(_ARM_) || defined(_M_ARM)) && _MSC_VER >= 1300 -#define _W64 __w64 -#else -#define _W64 -#endif -#endif - -// -// The INT_PTR is guaranteed to be the same size as a pointer. Its -// size with change with pointer size (32/64). It should be used -// anywhere that a pointer is cast to an integer type. UINT_PTR is -// the unsigned variation. -// -// __int3264 is intrinsic to 64b MIDL but not to old MIDL or to C compiler. -// -#if ( defined(__midl) && (501 < __midl) ) - - typedef [public] __int3264 INT_PTR, *PINT_PTR; - typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR; - - typedef [public] __int3264 LONG_PTR, *PLONG_PTR; - typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR; - -#else // midl64 -// old midl and C++ compiler - -#if defined(_WIN64) - typedef __int64 INT_PTR, *PINT_PTR; - typedef unsigned __int64 UINT_PTR, *PUINT_PTR; - - typedef __int64 LONG_PTR, *PLONG_PTR; - typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; - - #define __int3264 __int64 - -#else - typedef _W64 int INT_PTR, *PINT_PTR; - typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; - - typedef _W64 long LONG_PTR, *PLONG_PTR; - typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR; - - #define __int3264 __int32 - -#endif -#endif // midl64 - -// -// HALF_PTR is half the size of a pointer it intended for use with -// within structures which contain a pointer and two small fields. -// UHALF_PTR is the unsigned variation. -// - -#ifdef _WIN64 - -#define ADDRESS_TAG_BIT 0x40000000000UI64 - -typedef __int64 SHANDLE_PTR; -typedef unsigned __int64 HANDLE_PTR; -typedef unsigned int UHALF_PTR, *PUHALF_PTR; -typedef int HALF_PTR, *PHALF_PTR; - -#if !defined(__midl) -__inline -unsigned long -HandleToULong( - const void *h - ) -{ - return((unsigned long) (ULONG_PTR) h ); -} - -__inline -long -HandleToLong( - const void *h - ) -{ - return((long) (LONG_PTR) h ); -} - -__inline -void * -ULongToHandle( - const unsigned long h - ) -{ - return((void *) (UINT_PTR) h ); -} - - -__inline -void * -LongToHandle( - const long h - ) -{ - return((void *) (INT_PTR) h ); -} - - -__inline -unsigned long -PtrToUlong( - const void *p - ) -{ - return((unsigned long) (ULONG_PTR) p ); -} - -__inline -unsigned int -PtrToUint( - const void *p - ) -{ - return((unsigned int) (UINT_PTR) p ); -} - -__inline -unsigned short -PtrToUshort( - const void *p - ) -{ - return((unsigned short) (unsigned long) (ULONG_PTR) p ); -} - -__inline -long -PtrToLong( - const void *p - ) -{ - return((long) (LONG_PTR) p ); -} - -__inline -int -PtrToInt( - const void *p - ) -{ - return((int) (INT_PTR) p ); -} - -__inline -short -PtrToShort( - const void *p - ) -{ - return((short) (long) (LONG_PTR) p ); -} - -__inline -void * -IntToPtr( - const int i - ) -// Caution: IntToPtr() sign-extends the int value. -{ - return( (void *)(INT_PTR)i ); -} - -__inline -void * -UIntToPtr( - const unsigned int ui - ) -// Caution: UIntToPtr() zero-extends the unsigned int value. -{ - return( (void *)(UINT_PTR)ui ); -} - -__inline -void * -LongToPtr( - const long l - ) -// Caution: LongToPtr() sign-extends the long value. -{ - return( (void *)(LONG_PTR)l ); -} - -__inline -void * -ULongToPtr( - const unsigned long ul - ) -// Caution: ULongToPtr() zero-extends the unsigned long value. -{ - return( (void *)(ULONG_PTR)ul ); -} - -#define PtrToPtr64( p ) ((void * POINTER_64) p) -#define Ptr64ToPtr( p ) ((void *) p) -#define HandleToHandle64( h ) (PtrToPtr64( h )) -#define Handle64ToHandle( h ) (Ptr64ToPtr( h )) - -__inline -void * -Ptr32ToPtr( - const void * POINTER_32 p - ) -{ - return((void *) (ULONG_PTR) (unsigned long) p); -} - -__inline -void * -Handle32ToHandle( - const void * POINTER_32 h - ) -{ - return((void *) (LONG_PTR) (long) h); -} - -__inline -void * POINTER_32 -PtrToPtr32( - const void *p - ) -{ - return((void * POINTER_32) (unsigned long) (ULONG_PTR) p); -} - -#define HandleToHandle32( h ) (PtrToPtr32( h )) - -#endif // !_midl - -#else // !_WIN64 - -#define ADDRESS_TAG_BIT 0x80000000UL - -typedef unsigned short UHALF_PTR, *PUHALF_PTR; -typedef short HALF_PTR, *PHALF_PTR; -typedef _W64 long SHANDLE_PTR; -typedef _W64 unsigned long HANDLE_PTR; - -#define HandleToULong( h ) ((ULONG)(ULONG_PTR)(h) ) -#define HandleToLong( h ) ((LONG)(LONG_PTR) (h) ) -#define ULongToHandle( ul ) ((HANDLE)(ULONG_PTR) (ul) ) -#define LongToHandle( h ) ((HANDLE)(LONG_PTR) (h) ) -#define PtrToUlong( p ) ((ULONG)(ULONG_PTR) (p) ) -#define PtrToLong( p ) ((LONG)(LONG_PTR) (p) ) -#define PtrToUint( p ) ((UINT)(UINT_PTR) (p) ) -#define PtrToInt( p ) ((INT)(INT_PTR) (p) ) -#define PtrToUshort( p ) ((unsigned short)(ULONG_PTR)(p) ) -#define PtrToShort( p ) ((short)(LONG_PTR)(p) ) -#define IntToPtr( i ) ((VOID *)(INT_PTR)((int)i)) -#define UIntToPtr( ui ) ((VOID *)(UINT_PTR)((unsigned int)ui)) -#define LongToPtr( l ) ((VOID *)(LONG_PTR)((long)l)) -#define ULongToPtr( ul ) ((VOID *)(ULONG_PTR)((unsigned long)ul)) - -#if !defined(__midl) -__inline -void * POINTER_64 -PtrToPtr64( - const void *p - ) -{ - return((void * POINTER_64) (unsigned __int64) (ULONG_PTR)p ); -} - -__inline -void * -Ptr64ToPtr( - const void * POINTER_64 p - ) -{ - return((void *) (ULONG_PTR) (unsigned __int64) p); -} - -__inline -void * POINTER_64 -HandleToHandle64( - const void *h - ) -{ - return((void * POINTER_64)(__int64)(LONG_PTR)h ); -} - -__inline -void * -Handle64ToHandle( - const void * POINTER_64 h - ) -{ - return((void *) (ULONG_PTR) (unsigned __int64) h ); -} -#endif - -#define Ptr32ToPtr( p ) ((void *) p) -#define Handle32ToHandle( h ) (Ptr32ToPtr( h )) -#define PtrToPtr32( p ) ((void * POINTER_32) p) -#define HandleToHandle32( h ) (PtrToPtr32( h )) - -#endif // !_WIN64 - -#define HandleToUlong(h) HandleToULong(h) -#define UlongToHandle(ul) ULongToHandle(ul) -#define UlongToPtr(ul) ULongToPtr(ul) -#define UintToPtr(ui) UIntToPtr(ui) - -#define MAXUINT_PTR (~((UINT_PTR)0)) -#define MAXINT_PTR ((INT_PTR)(MAXUINT_PTR >> 1)) -#define MININT_PTR (~MAXINT_PTR) - -#define MAXULONG_PTR (~((ULONG_PTR)0)) -#define MAXLONG_PTR ((LONG_PTR)(MAXULONG_PTR >> 1)) -#define MINLONG_PTR (~MAXLONG_PTR) - -#define MAXUHALF_PTR ((UHALF_PTR)~0) -#define MAXHALF_PTR ((HALF_PTR)(MAXUHALF_PTR >> 1)) -#define MINHALF_PTR (~MAXHALF_PTR) - -// -// SIZE_T used for counts or ranges which need to span the range of -// of a pointer. SSIZE_T is the signed variation. -// - -typedef ULONG_PTR SIZE_T, *PSIZE_T; -typedef LONG_PTR SSIZE_T, *PSSIZE_T; - -#if _WIN32_WINNT >= 0x0600 || (defined(__cplusplus) && defined(WINDOWS_ENABLE_CPLUSPLUS)) - -#define MAXUINT8 ((UINT8)~((UINT8)0)) -#define MAXINT8 ((INT8)(MAXUINT8 >> 1)) -#define MININT8 ((INT8)~MAXINT8) - -#define MAXUINT16 ((UINT16)~((UINT16)0)) -#define MAXINT16 ((INT16)(MAXUINT16 >> 1)) -#define MININT16 ((INT16)~MAXINT16) - -#define MAXUINT32 ((UINT32)~((UINT32)0)) -#define MAXINT32 ((INT32)(MAXUINT32 >> 1)) -#define MININT32 ((INT32)~MAXINT32) - -#define MAXUINT64 ((UINT64)~((UINT64)0)) -#define MAXINT64 ((INT64)(MAXUINT64 >> 1)) -#define MININT64 ((INT64)~MAXINT64) - -#define MAXULONG32 ((ULONG32)~((ULONG32)0)) -#define MAXLONG32 ((LONG32)(MAXULONG32 >> 1)) -#define MINLONG32 ((LONG32)~MAXLONG32) - -#define MAXULONG64 ((ULONG64)~((ULONG64)0)) -#define MAXLONG64 ((LONG64)(MAXULONG64 >> 1)) -#define MINLONG64 ((LONG64)~MAXLONG64) - -#define MAXULONGLONG ((ULONGLONG)~((ULONGLONG)0)) -#define MINLONGLONG ((LONGLONG)~MAXLONGLONG) - -#define MAXSIZE_T ((SIZE_T)~((SIZE_T)0)) -#define MAXSSIZE_T ((SSIZE_T)(MAXSIZE_T >> 1)) -#define MINSSIZE_T ((SSIZE_T)~MAXSSIZE_T) - -#define MAXUINT ((UINT)~((UINT)0)) -#define MAXINT ((INT)(MAXUINT >> 1)) -#define MININT ((INT)~MAXINT) - -#define MAXDWORD32 ((DWORD32)~((DWORD32)0)) -#define MAXDWORD64 ((DWORD64)~((DWORD64)0)) - -#endif // _WIN32_WINNT >= 0x0600 - -// -// Add Windows flavor DWORD_PTR types -// - -typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; - -// -// The following types are guaranteed to be signed and 64 bits wide. -// - -typedef __int64 LONG64, *PLONG64; - - -// -// The following types are guaranteed to be unsigned and 64 bits wide. -// - -typedef unsigned __int64 ULONG64, *PULONG64; -typedef unsigned __int64 DWORD64, *PDWORD64; - -// begin_wudfwdm - -// -// Legacy thread affinity. -// - -typedef ULONG_PTR KAFFINITY; -typedef KAFFINITY *PKAFFINITY; - -// end_wudfwdm - -#ifdef __cplusplus -} -#endif - -#endif // _BASETSD_H_ +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + basetsd.h + +Abstract: + + Type definitions for the basic sized types. + +Author: + +Revision History: + +--*/ + +#ifndef _BASETSD_H_ +#define _BASETSD_H_ + +#if !defined(_MAC) && (defined(_M_MRX000) || defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_VER >= 1100) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) + #define POINTER_64 __ptr64 + typedef unsigned __int64 POINTER_64_INT; + #if defined(_WIN64) + #define POINTER_32 __ptr32 + #else + #define POINTER_32 + #endif +#else + #if defined(_MAC) && defined(_MAC_INT_64) + #define POINTER_64 __ptr64 + typedef unsigned __int64 POINTER_64_INT; + #else + #if (_MSC_VER >= 1300) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) + #define POINTER_64 __ptr64 + #else + #define POINTER_64 + #endif + typedef unsigned long POINTER_64_INT; + #endif + #define POINTER_32 +#endif + +#if defined(_IA64_) || defined(_AMD64_) +#define FIRMWARE_PTR +#else +#define FIRMWARE_PTR POINTER_32 +#endif + +#if (_MSC_FULL_VER >= 140041204) && !defined(MIDL_PASS) && !defined(RC_INVOKED) +#define POINTER_SIGNED __sptr +#define POINTER_UNSIGNED __uptr +#else +#define POINTER_SIGNED +#define POINTER_UNSIGNED +#endif + +#define SPOINTER_32 POINTER_SIGNED POINTER_32 +#define UPOINTER_32 POINTER_UNSIGNED POINTER_32 + +#if _MSC_VER > 1000 +#pragma once +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef signed char INT8, *PINT8; +typedef signed short INT16, *PINT16; +typedef signed int INT32, *PINT32; +typedef signed __int64 INT64, *PINT64; +typedef unsigned char UINT8, *PUINT8; +typedef unsigned short UINT16, *PUINT16; +typedef unsigned int UINT32, *PUINT32; +typedef unsigned __int64 UINT64, *PUINT64; + +// +// The following types are guaranteed to be signed and 32 bits wide. +// + +typedef signed int LONG32, *PLONG32; + +// +// The following types are guaranteed to be unsigned and 32 bits wide. +// + +typedef unsigned int ULONG32, *PULONG32; +typedef unsigned int DWORD32, *PDWORD32; + +#if !defined(_W64) +#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86) || defined(_ARM_) || defined(_M_ARM)) && _MSC_VER >= 1300 +#define _W64 __w64 +#else +#define _W64 +#endif +#endif + +// +// The INT_PTR is guaranteed to be the same size as a pointer. Its +// size with change with pointer size (32/64). It should be used +// anywhere that a pointer is cast to an integer type. UINT_PTR is +// the unsigned variation. +// +// __int3264 is intrinsic to 64b MIDL but not to old MIDL or to C compiler. +// +#if ( defined(__midl) && (501 < __midl) ) + + typedef [public] __int3264 INT_PTR, *PINT_PTR; + typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR; + + typedef [public] __int3264 LONG_PTR, *PLONG_PTR; + typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR; + +#else // midl64 +// old midl and C++ compiler + +#if defined(_WIN64) + typedef __int64 INT_PTR, *PINT_PTR; + typedef unsigned __int64 UINT_PTR, *PUINT_PTR; + + typedef __int64 LONG_PTR, *PLONG_PTR; + typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; + + #define __int3264 __int64 + +#else + typedef _W64 int INT_PTR, *PINT_PTR; + typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; + + typedef _W64 long LONG_PTR, *PLONG_PTR; + typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR; + + #define __int3264 __int32 + +#endif +#endif // midl64 + +// +// HALF_PTR is half the size of a pointer it intended for use with +// within structures which contain a pointer and two small fields. +// UHALF_PTR is the unsigned variation. +// + +#ifdef _WIN64 + +#define ADDRESS_TAG_BIT 0x40000000000UI64 + +typedef __int64 SHANDLE_PTR; +typedef unsigned __int64 HANDLE_PTR; +typedef unsigned int UHALF_PTR, *PUHALF_PTR; +typedef int HALF_PTR, *PHALF_PTR; + +#if !defined(__midl) +__inline +unsigned long +HandleToULong( + const void *h + ) +{ + return((unsigned long) (ULONG_PTR) h ); +} + +__inline +long +HandleToLong( + const void *h + ) +{ + return((long) (LONG_PTR) h ); +} + +__inline +void * +ULongToHandle( + const unsigned long h + ) +{ + return((void *) (UINT_PTR) h ); +} + + +__inline +void * +LongToHandle( + const long h + ) +{ + return((void *) (INT_PTR) h ); +} + + +__inline +unsigned long +PtrToUlong( + const void *p + ) +{ + return((unsigned long) (ULONG_PTR) p ); +} + +__inline +unsigned int +PtrToUint( + const void *p + ) +{ + return((unsigned int) (UINT_PTR) p ); +} + +__inline +unsigned short +PtrToUshort( + const void *p + ) +{ + return((unsigned short) (unsigned long) (ULONG_PTR) p ); +} + +__inline +long +PtrToLong( + const void *p + ) +{ + return((long) (LONG_PTR) p ); +} + +__inline +int +PtrToInt( + const void *p + ) +{ + return((int) (INT_PTR) p ); +} + +__inline +short +PtrToShort( + const void *p + ) +{ + return((short) (long) (LONG_PTR) p ); +} + +__inline +void * +IntToPtr( + const int i + ) +// Caution: IntToPtr() sign-extends the int value. +{ + return( (void *)(INT_PTR)i ); +} + +__inline +void * +UIntToPtr( + const unsigned int ui + ) +// Caution: UIntToPtr() zero-extends the unsigned int value. +{ + return( (void *)(UINT_PTR)ui ); +} + +__inline +void * +LongToPtr( + const long l + ) +// Caution: LongToPtr() sign-extends the long value. +{ + return( (void *)(LONG_PTR)l ); +} + +__inline +void * +ULongToPtr( + const unsigned long ul + ) +// Caution: ULongToPtr() zero-extends the unsigned long value. +{ + return( (void *)(ULONG_PTR)ul ); +} + +#define PtrToPtr64( p ) ((void * POINTER_64) p) +#define Ptr64ToPtr( p ) ((void *) p) +#define HandleToHandle64( h ) (PtrToPtr64( h )) +#define Handle64ToHandle( h ) (Ptr64ToPtr( h )) + +__inline +void * +Ptr32ToPtr( + const void * POINTER_32 p + ) +{ + return((void *) (ULONG_PTR) (unsigned long) p); +} + +__inline +void * +Handle32ToHandle( + const void * POINTER_32 h + ) +{ + return((void *) (LONG_PTR) (long) h); +} + +__inline +void * POINTER_32 +PtrToPtr32( + const void *p + ) +{ + return((void * POINTER_32) (unsigned long) (ULONG_PTR) p); +} + +#define HandleToHandle32( h ) (PtrToPtr32( h )) + +#endif // !_midl + +#else // !_WIN64 + +#define ADDRESS_TAG_BIT 0x80000000UL + +typedef unsigned short UHALF_PTR, *PUHALF_PTR; +typedef short HALF_PTR, *PHALF_PTR; +typedef _W64 long SHANDLE_PTR; +typedef _W64 unsigned long HANDLE_PTR; + +#define HandleToULong( h ) ((ULONG)(ULONG_PTR)(h) ) +#define HandleToLong( h ) ((LONG)(LONG_PTR) (h) ) +#define ULongToHandle( ul ) ((HANDLE)(ULONG_PTR) (ul) ) +#define LongToHandle( h ) ((HANDLE)(LONG_PTR) (h) ) +#define PtrToUlong( p ) ((ULONG)(ULONG_PTR) (p) ) +#define PtrToLong( p ) ((LONG)(LONG_PTR) (p) ) +#define PtrToUint( p ) ((UINT)(UINT_PTR) (p) ) +#define PtrToInt( p ) ((INT)(INT_PTR) (p) ) +#define PtrToUshort( p ) ((unsigned short)(ULONG_PTR)(p) ) +#define PtrToShort( p ) ((short)(LONG_PTR)(p) ) +#define IntToPtr( i ) ((VOID *)(INT_PTR)((int)i)) +#define UIntToPtr( ui ) ((VOID *)(UINT_PTR)((unsigned int)ui)) +#define LongToPtr( l ) ((VOID *)(LONG_PTR)((long)l)) +#define ULongToPtr( ul ) ((VOID *)(ULONG_PTR)((unsigned long)ul)) + +#if !defined(__midl) +__inline +void * POINTER_64 +PtrToPtr64( + const void *p + ) +{ + return((void * POINTER_64) (unsigned __int64) (ULONG_PTR)p ); +} + +__inline +void * +Ptr64ToPtr( + const void * POINTER_64 p + ) +{ + return((void *) (ULONG_PTR) (unsigned __int64) p); +} + +__inline +void * POINTER_64 +HandleToHandle64( + const void *h + ) +{ + return((void * POINTER_64)(__int64)(LONG_PTR)h ); +} + +__inline +void * +Handle64ToHandle( + const void * POINTER_64 h + ) +{ + return((void *) (ULONG_PTR) (unsigned __int64) h ); +} +#endif + +#define Ptr32ToPtr( p ) ((void *) p) +#define Handle32ToHandle( h ) (Ptr32ToPtr( h )) +#define PtrToPtr32( p ) ((void * POINTER_32) p) +#define HandleToHandle32( h ) (PtrToPtr32( h )) + +#endif // !_WIN64 + +#define HandleToUlong(h) HandleToULong(h) +#define UlongToHandle(ul) ULongToHandle(ul) +#define UlongToPtr(ul) ULongToPtr(ul) +#define UintToPtr(ui) UIntToPtr(ui) + +#define MAXUINT_PTR (~((UINT_PTR)0)) +#define MAXINT_PTR ((INT_PTR)(MAXUINT_PTR >> 1)) +#define MININT_PTR (~MAXINT_PTR) + +#define MAXULONG_PTR (~((ULONG_PTR)0)) +#define MAXLONG_PTR ((LONG_PTR)(MAXULONG_PTR >> 1)) +#define MINLONG_PTR (~MAXLONG_PTR) + +#define MAXUHALF_PTR ((UHALF_PTR)~0) +#define MAXHALF_PTR ((HALF_PTR)(MAXUHALF_PTR >> 1)) +#define MINHALF_PTR (~MAXHALF_PTR) + +// +// SIZE_T used for counts or ranges which need to span the range of +// of a pointer. SSIZE_T is the signed variation. +// + +typedef ULONG_PTR SIZE_T, *PSIZE_T; +typedef LONG_PTR SSIZE_T, *PSSIZE_T; + +#if _WIN32_WINNT >= 0x0600 || (defined(__cplusplus) && defined(WINDOWS_ENABLE_CPLUSPLUS)) + +#define MAXUINT8 ((UINT8)~((UINT8)0)) +#define MAXINT8 ((INT8)(MAXUINT8 >> 1)) +#define MININT8 ((INT8)~MAXINT8) + +#define MAXUINT16 ((UINT16)~((UINT16)0)) +#define MAXINT16 ((INT16)(MAXUINT16 >> 1)) +#define MININT16 ((INT16)~MAXINT16) + +#define MAXUINT32 ((UINT32)~((UINT32)0)) +#define MAXINT32 ((INT32)(MAXUINT32 >> 1)) +#define MININT32 ((INT32)~MAXINT32) + +#define MAXUINT64 ((UINT64)~((UINT64)0)) +#define MAXINT64 ((INT64)(MAXUINT64 >> 1)) +#define MININT64 ((INT64)~MAXINT64) + +#define MAXULONG32 ((ULONG32)~((ULONG32)0)) +#define MAXLONG32 ((LONG32)(MAXULONG32 >> 1)) +#define MINLONG32 ((LONG32)~MAXLONG32) + +#define MAXULONG64 ((ULONG64)~((ULONG64)0)) +#define MAXLONG64 ((LONG64)(MAXULONG64 >> 1)) +#define MINLONG64 ((LONG64)~MAXLONG64) + +#define MAXULONGLONG ((ULONGLONG)~((ULONGLONG)0)) +#define MINLONGLONG ((LONGLONG)~MAXLONGLONG) + +#define MAXSIZE_T ((SIZE_T)~((SIZE_T)0)) +#define MAXSSIZE_T ((SSIZE_T)(MAXSIZE_T >> 1)) +#define MINSSIZE_T ((SSIZE_T)~MAXSSIZE_T) + +#define MAXUINT ((UINT)~((UINT)0)) +#define MAXINT ((INT)(MAXUINT >> 1)) +#define MININT ((INT)~MAXINT) + +#define MAXDWORD32 ((DWORD32)~((DWORD32)0)) +#define MAXDWORD64 ((DWORD64)~((DWORD64)0)) + +#endif // _WIN32_WINNT >= 0x0600 + +// +// Add Windows flavor DWORD_PTR types +// + +typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; + +// +// The following types are guaranteed to be signed and 64 bits wide. +// + +typedef __int64 LONG64, *PLONG64; + + +// +// The following types are guaranteed to be unsigned and 64 bits wide. +// + +typedef unsigned __int64 ULONG64, *PULONG64; +typedef unsigned __int64 DWORD64, *PDWORD64; + +// begin_wudfwdm + +// +// Legacy thread affinity. +// + +typedef ULONG_PTR KAFFINITY; +typedef KAFFINITY *PKAFFINITY; + +// end_wudfwdm + +#ifdef __cplusplus +} +#endif + +#endif // _BASETSD_H_ diff --git a/vs/sc_rng11.vcxproj b/vs/sc_rng11.vcxproj index 7dcb04a3c0b..2e26d58107d 100644 --- a/vs/sc_rng11.vcxproj +++ b/vs/sc_rng11.vcxproj @@ -1,170 +1,170 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST - - - - - - - {4C7D8805-E08F-4198-A469-3245DEBBA6EB} - Win32Proj - rng - - - - Application - true - v110 - Unicode - - - Application - true - v110 - Unicode - - - Application - false - v110 - true - Unicode - - - Application - false - v110 - true - Unicode - - - - - - - - - - - - - - - - - - - - - - - true - $(SolutionDir)\engine;$(IncludePath) - - - true - - - false - - - false - $(Platform)\$(Configuration)\ - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - - Console - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - Console - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Speed - true - Fast - StreamingSIMDExtensions2 - - - Console - true - true - true - - - - - Level3 - - - Full - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Speed - true - Strict - true - false - - - Console - true - true - true - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);UNIT_TEST + + + + + + + {4C7D8805-E08F-4198-A469-3245DEBBA6EB} + Win32Proj + rng + + + + Application + true + v110 + Unicode + + + Application + true + v110 + Unicode + + + Application + false + v110 + true + Unicode + + + Application + false + v110 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\engine;$(IncludePath) + + + true + + + false + + + false + $(Platform)\$(Configuration)\ + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + + Console + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + Speed + true + Fast + StreamingSIMDExtensions2 + + + Console + true + true + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + Speed + true + Strict + true + false + + + Console + true + true + true + + + + + \ No newline at end of file diff --git a/vs/sc_rng11.vcxproj.filters b/vs/sc_rng11.vcxproj.filters index 9c9430b6663..f78d0bbb6cc 100644 --- a/vs/sc_rng11.vcxproj.filters +++ b/vs/sc_rng11.vcxproj.filters @@ -1,19 +1,19 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - - - - - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + + + + + + \ No newline at end of file diff --git a/vs/simc10.vcxproj b/vs/simc10.vcxproj index 5eaf2146aa6..07fcc5aa8d5 100644 --- a/vs/simc10.vcxproj +++ b/vs/simc10.vcxproj @@ -1,192 +1,192 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {D963926C-4A85-4600-8626-51FA12FDF5C1} - simc - Win32Proj - - - - Application - Unicode - true - - - Application - Unicode - true - - - Application - Unicode - - - Application - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - true - true - false - false - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - true - - - - Disabled - WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level3 - EditAndContinue - 4996 - 4101 - - - wininet.lib %(AdditionalOptions) - true - Console - MachineX86 - false - - - - del simc_cache.dat - - - - - Disabled - WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level3 - ProgramDatabase - 4996 - simulationcraft.hpp - $(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) - - - wininet.lib %(AdditionalOptions) - true - Console - false - - - - - /w34263 /w34264 /w34265 /w34266 /analyze:stacksize65536' %(AdditionalOptions) - MaxSpeed - true - Neither - WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - true - true - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - 4101 - - - wininet.lib %(AdditionalOptions) - true - Console - true - true - MachineX86 - true - - - - - - - /w34263 /w34264 /w34265 /w34266 %(AdditionalOptions) - MaxSpeed - true - Neither - WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - true - true - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - - - wininet.lib %(AdditionalOptions) - true - Console - true - true - true - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D963926C-4A85-4600-8626-51FA12FDF5C1} + simc + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + true + + + Application + Unicode + + + Application + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + true + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + true + + + + Disabled + WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + Level3 + EditAndContinue + 4996 + 4101 + + + wininet.lib %(AdditionalOptions) + true + Console + MachineX86 + false + + + + del simc_cache.dat + + + + + Disabled + WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebugDLL + Level3 + ProgramDatabase + 4996 + simulationcraft.hpp + $(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) + + + wininet.lib %(AdditionalOptions) + true + Console + false + + + + + /w34263 /w34264 /w34265 /w34266 /analyze:stacksize65536' %(AdditionalOptions) + MaxSpeed + true + Neither + WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + true + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + 4101 + + + wininet.lib %(AdditionalOptions) + true + Console + true + true + MachineX86 + true + + + + + + + /w34263 /w34264 /w34265 /w34266 %(AdditionalOptions) + MaxSpeed + true + Neither + WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + true + true + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + + + wininet.lib %(AdditionalOptions) + true + Console + true + true + true + + + + + + + \ No newline at end of file diff --git a/vs/simc11.vcxproj b/vs/simc11.vcxproj index 5176b2e7ef9..76bca630a82 100644 --- a/vs/simc11.vcxproj +++ b/vs/simc11.vcxproj @@ -1,232 +1,232 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {D963926C-4A85-4600-8626-51FA12FDF5C1} - simc - Win32Proj - simc - - - - Application - Unicode - true - v110 - - - Application - Unicode - true - v110 - - - Application - Unicode - v110 - - - Application - Unicode - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - true - true - false - false - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - false - - - false - $(SolutionDir)int\$(PlatformShortName)\$(Configuration)\ - - - false - $(ProjectName)64 - - - false - $(ProjectName)64 - - - - Disabled - WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - false - EnableFastChecks - MultiThreadedDebugDLL - Level3 - EditAndContinue - 4996 - 4101 - true - false - StreamingSIMDExtensions2 - true - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - true - Fast - - - wininet.lib %(AdditionalOptions) - true - Console - MachineX86 - false - - - - del simc_cache.dat - - - - - Disabled - WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - true - false - true - true - Strict - - - wininet.lib %(AdditionalOptions) - true - Console - false - - - - - /w34263 /w34264 /w34265 /w34266 /analyze:stacksize65536' %(AdditionalOptions) - MaxSpeed - true - Speed - WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - false - true - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - 4101 - true - true - StreamingSIMDExtensions2 - true - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - Fast - - - wininet.lib %(AdditionalOptions) - true - Console - true - true - MachineX86 - true - - - - - - - /w34263 /w34264 /w34265 /w34266 %(AdditionalOptions) - MaxSpeed - true - Speed - WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - false - true - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - true - false - true - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - Fast - - - wininet.lib %(AdditionalOptions) - true - Console - true - true - true - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D963926C-4A85-4600-8626-51FA12FDF5C1} + simc + Win32Proj + simc + + + + Application + Unicode + true + v110 + + + Application + Unicode + true + v110 + + + Application + Unicode + v110 + + + Application + Unicode + v110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + true + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + false + + + false + $(SolutionDir)int\$(PlatformShortName)\$(Configuration)\ + + + false + $(ProjectName)64 + + + false + $(ProjectName)64 + + + + Disabled + WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebugDLL + Level3 + EditAndContinue + 4996 + 4101 + true + false + StreamingSIMDExtensions2 + true + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + true + Fast + + + wininet.lib %(AdditionalOptions) + true + Console + MachineX86 + false + + + + del simc_cache.dat + + + + + Disabled + WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + true + false + true + true + Strict + + + wininet.lib %(AdditionalOptions) + true + Console + false + + + + + /w34263 /w34264 /w34265 /w34266 /analyze:stacksize65536' %(AdditionalOptions) + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + 4101 + true + true + StreamingSIMDExtensions2 + true + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + Fast + + + wininet.lib %(AdditionalOptions) + true + Console + true + true + MachineX86 + true + + + + + + + /w34263 /w34264 /w34265 /w34266 %(AdditionalOptions) + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + true + false + true + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + Fast + + + wininet.lib %(AdditionalOptions) + true + Console + true + true + true + + + + + + + \ No newline at end of file diff --git a/vs/simc12.vcxproj b/vs/simc12.vcxproj index 5de403e7451..f11b1c33076 100644 --- a/vs/simc12.vcxproj +++ b/vs/simc12.vcxproj @@ -1,232 +1,232 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {D963926C-4A85-4600-8626-51FA12FDF5C1} - simc - Win32Proj - simc - - - - Application - Unicode - true - v120 - - - Application - Unicode - true - v120 - - - Application - Unicode - v120 - - - Application - Unicode - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - true - true - false - false - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - true - - - false - $(SolutionDir)int\$(PlatformShortName)\$(Configuration)\ - - - false - $(ProjectName)64 - - - true - $(ProjectName)64 - - - - Disabled - WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - false - EnableFastChecks - MultiThreadedDebugDLL - Level3 - EditAndContinue - 4996 - 4101 - true - false - StreamingSIMDExtensions2 - true - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - true - Fast - - - wininet.lib %(AdditionalOptions) - true - Console - MachineX86 - false - - - - del simc_cache.dat - - - - - Disabled - WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - true - false - true - true - Strict - - - wininet.lib %(AdditionalOptions) - true - Console - false - - - - - /w34263 /w34264 /w34265 /w34266 /analyze:stacksize65536' %(AdditionalOptions) - MaxSpeed - true - Speed - WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - false - true - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - 4101 - true - true - StreamingSIMDExtensions2 - true - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - Fast - - - wininet.lib %(AdditionalOptions) - true - Console - true - true - MachineX86 - true - - - - - - - /w34263 /w34264 /w34265 /w34266 %(AdditionalOptions) - MaxSpeed - true - Speed - WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - false - true - Level3 - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - true - true - true - $(SolutionDir)engine;%(AdditionalIncludeDirectories) - Strict - - - wininet.lib %(AdditionalOptions) - true - Console - true - true - true - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D963926C-4A85-4600-8626-51FA12FDF5C1} + simc + Win32Proj + simc + + + + Application + Unicode + true + v120 + + + Application + Unicode + true + v120 + + + Application + Unicode + v120 + + + Application + Unicode + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + true + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + true + + + false + $(SolutionDir)int\$(PlatformShortName)\$(Configuration)\ + + + false + $(ProjectName)64 + + + true + $(ProjectName)64 + + + + Disabled + WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebugDLL + Level3 + EditAndContinue + 4996 + 4101 + true + false + StreamingSIMDExtensions2 + true + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + true + Fast + + + wininet.lib %(AdditionalOptions) + true + Console + MachineX86 + false + + + + del simc_cache.dat + + + + + Disabled + WIN32;_DEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + true + false + true + true + Strict + + + wininet.lib %(AdditionalOptions) + true + Console + false + + + + + /w34263 /w34264 /w34265 /w34266 /analyze:stacksize65536' %(AdditionalOptions) + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + 4101 + true + true + StreamingSIMDExtensions2 + true + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + Fast + + + wininet.lib %(AdditionalOptions) + true + Console + true + true + MachineX86 + true + + + + + + + /w34263 /w34264 /w34265 /w34266 %(AdditionalOptions) + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;WINDOWS;%(PreprocessorDefinitions) + MultiThreaded + false + true + Level3 + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + true + true + true + $(SolutionDir)engine;%(AdditionalIncludeDirectories) + Strict + + + wininet.lib %(AdditionalOptions) + true + Console + true + true + true + + + + + + + \ No newline at end of file diff --git a/vs/simcqt10.vcxproj b/vs/simcqt10.vcxproj index bc11ce6a633..65b36a8856a 100644 --- a/vs/simcqt10.vcxproj +++ b/vs/simcqt10.vcxproj @@ -1,171 +1,171 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {8B5B7EB0-9B3B-3682-B018-64769C525784} - simcqt - Qt4VSv1.0 - - - - Application - false - Unicode - true - - - Application - false - Unicode - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - .\ - debug\ - true - .\ - release\ - true - false - SimulationCraft - - - SimulationCraft - - - - 0 - Unsigned - None - - - Disabled - $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)engine;%(AdditionalIncludeDirectories) - _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) - false - false - Sync - MultiThreadedDebugDLL - false - false - true - Use - simulationcraft.hpp - debug\ - debug\ - .\ - Level3 - true - ProgramDatabase - %(DisableSpecificWarnings) - true - StreamingSIMDExtensions2 - Fast - true - - - _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) - - - "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" -"/MACHINE:i386" %(AdditionalOptions) - qtmaind.lib;wininet.lib;QtWebKitd4.lib;QtNetworkd4.lib;QtGuid4.lib;QtCored4.lib;%(AdditionalDependencies) - SimulationCraft.exe - true - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - true - - - Windows - - - MachineX86 - - - - - 0 - Unsigned - None - - - Full - $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) - QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) - false - false - Sync - MultiThreaded - false - true - false - true - Use - simulationcraft.hpp - release\ - release\ - .\ - Level3 - true - - - %(DisableSpecificWarnings) - true - true - StreamingSIMDExtensions2 - Fast - - - QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) - - - "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions) - qtmain.lib;wininet.lib;QtWebKit4.lib;QtNetwork4.lib;QtGui4.lib;QtCore4.lib;%(AdditionalDependencies) - SimulationCraft.exe - true - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - false - - - Windows - UseLinkTimeCodeGeneration - MachineX86 - - - msvcrt.lib - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + + {8B5B7EB0-9B3B-3682-B018-64769C525784} + simcqt + Qt4VSv1.0 + + + + Application + false + Unicode + true + + + Application + false + Unicode + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + .\ + debug\ + true + .\ + release\ + true + false + SimulationCraft + + + SimulationCraft + + + + 0 + Unsigned + None + + + Disabled + $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)engine;%(AdditionalIncludeDirectories) + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + false + false + Sync + MultiThreadedDebugDLL + false + false + true + Use + simulationcraft.hpp + debug\ + debug\ + .\ + Level3 + true + ProgramDatabase + %(DisableSpecificWarnings) + true + StreamingSIMDExtensions2 + Fast + true + + + _WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" +"/MACHINE:i386" %(AdditionalOptions) + qtmaind.lib;wininet.lib;QtWebKitd4.lib;QtNetworkd4.lib;QtGuid4.lib;QtCored4.lib;%(AdditionalDependencies) + SimulationCraft.exe + true + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + true + + + Windows + + + MachineX86 + + + + + 0 + Unsigned + None + + + Full + $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) + QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + false + false + Sync + MultiThreaded + false + true + false + true + Use + simulationcraft.hpp + release\ + release\ + .\ + Level3 + true + + + %(DisableSpecificWarnings) + true + true + StreamingSIMDExtensions2 + Fast + + + QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" "/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions) + qtmain.lib;wininet.lib;QtWebKit4.lib;QtNetwork4.lib;QtGui4.lib;QtCore4.lib;%(AdditionalDependencies) + SimulationCraft.exe + true + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + false + + + Windows + UseLinkTimeCodeGeneration + MachineX86 + + + msvcrt.lib + + + + + + + + + + + + \ No newline at end of file diff --git a/vs/simcqt11.vcxproj b/vs/simcqt11.vcxproj index 7798a2125e6..da9ca7bbc58 100644 --- a/vs/simcqt11.vcxproj +++ b/vs/simcqt11.vcxproj @@ -1,319 +1,319 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - - Document - "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp - $(SolutionDir)qrc_simcqt.cpp - $(QTDIR)\bin\rcc.exe - Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp - - - Designer - "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp - Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp - $(SolutionDir)qrc_simcqt.cpp - $(QTDIR)\bin\rcc.exe - "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp - "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp - Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp - Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp - $(SolutionDir)qrc_simcqt.cpp - $(SolutionDir)qrc_simcqt.cpp - $(QTDIR)\bin\rcc.exe - $(QTDIR)\bin\rcc.exe - - - - - NotUsing - NotUsing - NotUsing - NotUsing - - - - {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97} - simcqt11 - Qt5VSv1.0 - SimcGUI_qt5.1.0 - - - - Application - Unicode - true - v110 - - - Application - false - Unicode - v110 - - - Application - Unicode - true - v110 - - - Application - false - Unicode - v110 - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - true - true - false - SimulationCraft - - - SimulationCraft - int_gui\$(Platform)\$(Configuration)\ - $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ - - - int_gui\$(Platform)\$(Configuration)\ - $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ - - - $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ - int_gui\$(Platform)\$(Configuration)\ - SimulationCraft - - - $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ - int_gui\$(Platform)\$(Configuration)\ - SimulationCraft - - - - $(QTDIR_x64) - - - $(QTDIR_x86) - - - - 0 - Unsigned - None - - - Disabled - $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)engine;%(AdditionalIncludeDirectories) - _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_VERSION_5;%(PreprocessorDefinitions) - false - false - Sync - MultiThreadedDebugDLL - false - false - true - Use - simulationcraft.hpp - $(IntDir) - $(IntDir) - Level3 - true - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - StreamingSIMDExtensions2 - Fast - true - .\ - - - _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) - - - qtmaind.lib;wininet.lib;Qt5WebKitd.lib;Qt5Networkd.lib;Qt5Guid.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5WebKitWidgetsd.lib;%(AdditionalDependencies) - true - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - true - - - Windows - - - - - - - 0 - Unsigned - None - - - MaxSpeed - $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) - QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_VERSION_5;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) - MultiThreadedDLL - false - true - false - true - Use - simulationcraft.hpp - Level3 - true - - - 4005;4996;%(DisableSpecificWarnings) - true - true - Fast - true - Speed - true - true - - - QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) - - - qtmain.lib;wininet.lib;Qt5WebKit.lib;Qt5Network.lib;Qt5Gui.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5WebKitWidgets.lib;%(AdditionalDependencies) - true - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - false - - - Windows - - - - - - - 0 - Unsigned - None - - - Disabled - $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)engine;%(AdditionalIncludeDirectories) - _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_VERSION_5;%(PreprocessorDefinitions) - false - false - Sync - MultiThreadedDebugDLL - false - false - true - Use - simulationcraft.hpp - $(IntDir) - $(IntDir) - Level3 - true - ProgramDatabase - 4005;4996;%(DisableSpecificWarnings) - true - StreamingSIMDExtensions2 - Fast - true - .\ - - - _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) - - - qtmaind.lib;wininet.lib;Qt5WebKitd.lib;Qt5Networkd.lib;Qt5Guid.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5WebKitWidgetsd.lib;%(AdditionalDependencies) - true - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - true - - - Windows - - - - - - - 0 - Unsigned - None - - - MaxSpeed - $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) - QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_VERSION_5;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) - MultiThreadedDLL - false - true - false - true - Use - simulationcraft.hpp - Level3 - true - - - 4005;4996;%(DisableSpecificWarnings) - true - true - Fast - true - Speed - true - true - - - QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) - - - qtmain.lib;wininet.lib;Qt5WebKit.lib;Qt5Network.lib;Qt5Gui.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5WebKitWidgets.lib;%(AdditionalDependencies) - true - $(QTDIR)\lib;%(AdditionalLibraryDirectories) - false - - - Windows - - - - - - - - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + Document + "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp + $(SolutionDir)qrc_simcqt.cpp + $(QTDIR)\bin\rcc.exe + Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp + + + Designer + "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp + Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp + $(SolutionDir)qrc_simcqt.cpp + $(QTDIR)\bin\rcc.exe + "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp + "$(QTDIR)\bin\rcc.exe" -name simcqt ..\qt\%(Filename).qrc -o $(SolutionDir)qrc_simcqt.cpp + Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp + Creating resource %(Identity) to $(SolutionDir)qrc_simcqt.cpp + $(SolutionDir)qrc_simcqt.cpp + $(SolutionDir)qrc_simcqt.cpp + $(QTDIR)\bin\rcc.exe + $(QTDIR)\bin\rcc.exe + + + + + NotUsing + NotUsing + NotUsing + NotUsing + + + + {A4EECBB3-65A3-40BD-AD41-ED02BF5A3A97} + simcqt11 + Qt5VSv1.0 + SimcGUI_qt5.1.0 + + + + Application + Unicode + true + v110 + + + Application + false + Unicode + v110 + + + Application + Unicode + true + v110 + + + Application + false + Unicode + v110 + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + true + true + false + SimulationCraft + + + SimulationCraft + int_gui\$(Platform)\$(Configuration)\ + $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ + + + int_gui\$(Platform)\$(Configuration)\ + $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ + + + $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ + int_gui\$(Platform)\$(Configuration)\ + SimulationCraft + + + $(SolutionDir)bin\$(PlatformShortName)\$(Configuration)\ + int_gui\$(Platform)\$(Configuration)\ + SimulationCraft + + + + $(QTDIR_x64) + + + $(QTDIR_x86) + + + + 0 + Unsigned + None + + + Disabled + $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)engine;%(AdditionalIncludeDirectories) + _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_VERSION_5;%(PreprocessorDefinitions) + false + false + Sync + MultiThreadedDebugDLL + false + false + true + Use + simulationcraft.hpp + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + StreamingSIMDExtensions2 + Fast + true + .\ + + + _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + qtmaind.lib;wininet.lib;Qt5WebKitd.lib;Qt5Networkd.lib;Qt5Guid.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5WebKitWidgetsd.lib;%(AdditionalDependencies) + true + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + true + + + Windows + + + + + + + 0 + Unsigned + None + + + MaxSpeed + $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) + QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_VERSION_5;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + false + true + false + true + Use + simulationcraft.hpp + Level3 + true + + + 4005;4996;%(DisableSpecificWarnings) + true + true + Fast + true + Speed + true + true + + + QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + qtmain.lib;wininet.lib;Qt5WebKit.lib;Qt5Network.lib;Qt5Gui.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5WebKitWidgets.lib;%(AdditionalDependencies) + true + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + false + + + Windows + + + + + + + 0 + Unsigned + None + + + Disabled + $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)engine;%(AdditionalIncludeDirectories) + _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;QT_VERSION_5;%(PreprocessorDefinitions) + false + false + Sync + MultiThreadedDebugDLL + false + false + true + Use + simulationcraft.hpp + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + 4005;4996;%(DisableSpecificWarnings) + true + StreamingSIMDExtensions2 + Fast + true + .\ + + + _WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;QT_LARGEFILE_SUPPORT;Q_OS_WIN;QT_DLL;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;_DEBUG;%(PreprocessorDefinitions) + + + qtmaind.lib;wininet.lib;Qt5WebKitd.lib;Qt5Networkd.lib;Qt5Guid.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5WebKitWidgetsd.lib;%(AdditionalDependencies) + true + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + true + + + Windows + + + + + + + 0 + Unsigned + None + + + MaxSpeed + $(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWebKit;$(QTDIR)\include;$(QTDIR)\include\ActiveQt;$(QTDIR)\include\QtANGLE;$(QTDIR)\mkspecs\default;$(SolutionDir);$(SolutionDir)vs;$(SolutionDir)engine;%(AdditionalIncludeDirectories) + QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_VERSION_5;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;NDEBUG;%(PreprocessorDefinitions) + MultiThreadedDLL + false + true + false + true + Use + simulationcraft.hpp + Level3 + true + + + 4005;4996;%(DisableSpecificWarnings) + true + true + Fast + true + Speed + true + true + + + QT_NO_DEBUG;NDEBUG;_WINDOWS;UNICODE;WIN32;QT_OPENGL_LIB;Q_OS_WIN;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;QT_WEBKIT_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;%(PreprocessorDefinitions) + + + qtmain.lib;wininet.lib;Qt5WebKit.lib;Qt5Network.lib;Qt5Gui.lib;Qt5Core.lib;Qt5Widgets.lib;Qt5WebKitWidgets.lib;%(AdditionalDependencies) + true + $(QTDIR)\lib;%(AdditionalLibraryDirectories) + false + + + Windows + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows_installer/GPL3.rtf b/windows_installer/GPL3.rtf index b3a1397fbfd..6dae7f9a762 100644 --- a/windows_installer/GPL3.rtf +++ b/windows_installer/GPL3.rtf @@ -1,678 +1,678 @@ -{\rtf1\ansi\ansicpg1252\deff0\deflang2055{\fonttbl{\f0\fnil\fcharset0 Courier New;}} -{\colortbl ;\red0\green0\blue255;} -{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\lang7\f0\fs18 GNU GENERAL PUBLIC LICENSE\par - Version 3, 29 June 2007\par -\par - Copyright (C) 2007 Free Software Foundation, Inc. <{\field{\*\fldinst{HYPERLINK "http://fsf.org/"}}{\fldrslt{\ul\cf1 http://fsf.org/}}}\f0\fs18 >\par - Everyone is permitted to copy and distribute verbatim copies\par - of this license document, but changing it is not allowed.\par -\par - Preamble\par -\par - The GNU General Public License is a free, copyleft license for\par -software and other kinds of works.\par -\par - The licenses for most software and other practical works are designed\par -to take away your freedom to share and change the works. By contrast,\par -the GNU General Public License is intended to guarantee your freedom to\par -share and change all versions of a program--to make sure it remains free\par -software for all its users. We, the Free Software Foundation, use the\par -GNU General Public License for most of our software; it applies also to\par -any other work released this way by its authors. You can apply it to\par -your programs, too.\par -\par - When we speak of free software, we are referring to freedom, not\par -price. Our General Public Licenses are designed to make sure that you\par -have the freedom to distribute copies of free software (and charge for\par -them if you wish), that you receive source code or can get it if you\par -want it, that you can change the software or use pieces of it in new\par -free programs, and that you know you can do these things.\par -\par - To protect your rights, we need to prevent others from denying you\par -these rights or asking you to surrender the rights. Therefore, you have\par -certain responsibilities if you distribute copies of the software, or if\par -you modify it: responsibilities to respect the freedom of others.\par -\par - For example, if you distribute copies of such a program, whether\par -gratis or for a fee, you must pass on to the recipients the same\par -freedoms that you received. You must make sure that they, too, receive\par -or can get the source code. And you must show them these terms so they\par -know their rights.\par -\par - Developers that use the GNU GPL protect your rights with two steps:\par -(1) assert copyright on the software, and (2) offer you this License\par -giving you legal permission to copy, distribute and/or modify it.\par -\par - For the developers' and authors' protection, the GPL clearly explains\par -that there is no warranty for this free software. For both users' and\par -authors' sake, the GPL requires that modified versions be marked as\par -changed, so that their problems will not be attributed erroneously to\par -authors of previous versions.\par -\par - Some devices are designed to deny users access to install or run\par -modified versions of the software inside them, although the manufacturer\par -can do so. This is fundamentally incompatible with the aim of\par -protecting users' freedom to change the software. The systematic\par -pattern of such abuse occurs in the area of products for individuals to\par -use, which is precisely where it is most unacceptable. Therefore, we\par -have designed this version of the GPL to prohibit the practice for those\par -products. If such problems arise substantially in other domains, we\par -stand ready to extend this provision to those domains in future versions\par -of the GPL, as needed to protect the freedom of users.\par -\par - Finally, every program is threatened constantly by software patents.\par -States should not allow patents to restrict development and use of\par -software on general-purpose computers, but in those that do, we wish to\par -avoid the special danger that patents applied to a free program could\par -make it effectively proprietary. To prevent this, the GPL assures that\par -patents cannot be used to render the program non-free.\par -\par - The precise terms and conditions for copying, distribution and\par -modification follow.\par -\par - TERMS AND CONDITIONS\par -\par - 0. Definitions.\par -\par - "This License" refers to version 3 of the GNU General Public License.\par -\par - "Copyright" also means copyright-like laws that apply to other kinds of\par -works, such as semiconductor masks.\par -\par - "The Program" refers to any copyrightable work licensed under this\par -License. Each licensee is addressed as "you". "Licensees" and\par -"recipients" may be individuals or organizations.\par -\par - To "modify" a work means to copy from or adapt all or part of the work\par -in a fashion requiring copyright permission, other than the making of an\par -exact copy. The resulting work is called a "modified version" of the\par -earlier work or a work "based on" the earlier work.\par -\par - A "covered work" means either the unmodified Program or a work based\par -on the Program.\par -\par - To "propagate" a work means to do anything with it that, without\par -permission, would make you directly or secondarily liable for\par -infringement under applicable copyright law, except executing it on a\par -computer or modifying a private copy. Propagation includes copying,\par -distribution (with or without modification), making available to the\par -public, and in some countries other activities as well.\par -\par - To "convey" a work means any kind of propagation that enables other\par -parties to make or receive copies. Mere interaction with a user through\par -a computer network, with no transfer of a copy, is not conveying.\par -\par - An interactive user interface displays "Appropriate Legal Notices"\par -to the extent that it includes a convenient and prominently visible\par -feature that (1) displays an appropriate copyright notice, and (2)\par -tells the user that there is no warranty for the work (except to the\par -extent that warranties are provided), that licensees may convey the\par -work under this License, and how to view a copy of this License. If\par -the interface presents a list of user commands or options, such as a\par -menu, a prominent item in the list meets this criterion.\par -\par - 1. Source Code.\par -\par - The "source code" for a work means the preferred form of the work\par -for making modifications to it. "Object code" means any non-source\par -form of a work.\par -\par - A "Standard Interface" means an interface that either is an official\par -standard defined by a recognized standards body, or, in the case of\par -interfaces specified for a particular programming language, one that\par -is widely used among developers working in that language.\par -\par - The "System Libraries" of an executable work include anything, other\par -than the work as a whole, that (a) is included in the normal form of\par -packaging a Major Component, but which is not part of that Major\par -Component, and (b) serves only to enable use of the work with that\par -Major Component, or to implement a Standard Interface for which an\par -implementation is available to the public in source code form. A\par -"Major Component", in this context, means a major essential component\par -(kernel, window system, and so on) of the specific operating system\par -(if any) on which the executable work runs, or a compiler used to\par -produce the work, or an object code interpreter used to run it.\par -\par - The "Corresponding Source" for a work in object code form means all\par -the source code needed to generate, install, and (for an executable\par -work) run the object code and to modify the work, including scripts to\par -control those activities. However, it does not include the work's\par -System Libraries, or general-purpose tools or generally available free\par -programs which are used unmodified in performing those activities but\par -which are not part of the work. For example, Corresponding Source\par -includes interface definition files associated with source files for\par -the work, and the source code for shared libraries and dynamically\par -linked subprograms that the work is specifically designed to require,\par -such as by intimate data communication or control flow between those\par -subprograms and other parts of the work.\par -\par - The Corresponding Source need not include anything that users\par -can regenerate automatically from other parts of the Corresponding\par -Source.\par -\par - The Corresponding Source for a work in source code form is that\par -same work.\par -\par - 2. Basic Permissions.\par -\par - All rights granted under this License are granted for the term of\par -copyright on the Program, and are irrevocable provided the stated\par -conditions are met. This License explicitly affirms your unlimited\par -permission to run the unmodified Program. The output from running a\par -covered work is covered by this License only if the output, given its\par -content, constitutes a covered work. This License acknowledges your\par -rights of fair use or other equivalent, as provided by copyright law.\par -\par - You may make, run and propagate covered works that you do not\par -convey, without conditions so long as your license otherwise remains\par -in force. You may convey covered works to others for the sole purpose\par -of having them make modifications exclusively for you, or provide you\par -with facilities for running those works, provided that you comply with\par -the terms of this License in conveying all material for which you do\par -not control copyright. Those thus making or running the covered works\par -for you must do so exclusively on your behalf, under your direction\par -and control, on terms that prohibit them from making any copies of\par -your copyrighted material outside their relationship with you.\par -\par - Conveying under any other circumstances is permitted solely under\par -the conditions stated below. Sublicensing is not allowed; section 10\par -makes it unnecessary.\par -\par - 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\par -\par - No covered work shall be deemed part of an effective technological\par -measure under any applicable law fulfilling obligations under article\par -11 of the WIPO copyright treaty adopted on 20 December 1996, or\par -similar laws prohibiting or restricting circumvention of such\par -measures.\par -\par - When you convey a covered work, you waive any legal power to forbid\par -circumvention of technological measures to the extent such circumvention\par -is effected by exercising rights under this License with respect to\par -the covered work, and you disclaim any intention to limit operation or\par -modification of the work as a means of enforcing, against the work's\par -users, your or third parties' legal rights to forbid circumvention of\par -technological measures.\par -\par - 4. Conveying Verbatim Copies.\par -\par - You may convey verbatim copies of the Program's source code as you\par -receive it, in any medium, provided that you conspicuously and\par -appropriately publish on each copy an appropriate copyright notice;\par -keep intact all notices stating that this License and any\par -non-permissive terms added in accord with section 7 apply to the code;\par -keep intact all notices of the absence of any warranty; and give all\par -recipients a copy of this License along with the Program.\par -\par - You may charge any price or no price for each copy that you convey,\par -and you may offer support or warranty protection for a fee.\par -\par - 5. Conveying Modified Source Versions.\par -\par - You may convey a work based on the Program, or the modifications to\par -produce it from the Program, in the form of source code under the\par -terms of section 4, provided that you also meet all of these conditions:\par -\par - a) The work must carry prominent notices stating that you modified\par - it, and giving a relevant date.\par -\par - b) The work must carry prominent notices stating that it is\par - released under this License and any conditions added under section\par - 7. This requirement modifies the requirement in section 4 to\par - "keep intact all notices".\par -\par - c) You must license the entire work, as a whole, under this\par - License to anyone who comes into possession of a copy. This\par - License will therefore apply, along with any applicable section 7\par - additional terms, to the whole of the work, and all its parts,\par - regardless of how they are packaged. This License gives no\par - permission to license the work in any other way, but it does not\par - invalidate such permission if you have separately received it.\par -\par - d) If the work has interactive user interfaces, each must display\par - Appropriate Legal Notices; however, if the Program has interactive\par - interfaces that do not display Appropriate Legal Notices, your\par - work need not make them do so.\par -\par - A compilation of a covered work with other separate and independent\par -works, which are not by their nature extensions of the covered work,\par -and which are not combined with it such as to form a larger program,\par -in or on a volume of a storage or distribution medium, is called an\par -"aggregate" if the compilation and its resulting copyright are not\par -used to limit the access or legal rights of the compilation's users\par -beyond what the individual works permit. Inclusion of a covered work\par -in an aggregate does not cause this License to apply to the other\par -parts of the aggregate.\par -\par - 6. Conveying Non-Source Forms.\par -\par - You may convey a covered work in object code form under the terms\par -of sections 4 and 5, provided that you also convey the\par -machine-readable Corresponding Source under the terms of this License,\par -in one of these ways:\par -\par - a) Convey the object code in, or embodied in, a physical product\par - (including a physical distribution medium), accompanied by the\par - Corresponding Source fixed on a durable physical medium\par - customarily used for software interchange.\par -\par - b) Convey the object code in, or embodied in, a physical product\par - (including a physical distribution medium), accompanied by a\par - written offer, valid for at least three years and valid for as\par - long as you offer spare parts or customer support for that product\par - model, to give anyone who possesses the object code either (1) a\par - copy of the Corresponding Source for all the software in the\par - product that is covered by this License, on a durable physical\par - medium customarily used for software interchange, for a price no\par - more than your reasonable cost of physically performing this\par - conveying of source, or (2) access to copy the\par - Corresponding Source from a network server at no charge.\par -\par - c) Convey individual copies of the object code with a copy of the\par - written offer to provide the Corresponding Source. This\par - alternative is allowed only occasionally and noncommercially, and\par - only if you received the object code with such an offer, in accord\par - with subsection 6b.\par -\par - d) Convey the object code by offering access from a designated\par - place (gratis or for a charge), and offer equivalent access to the\par - Corresponding Source in the same way through the same place at no\par - further charge. You need not require recipients to copy the\par - Corresponding Source along with the object code. If the place to\par - copy the object code is a network server, the Corresponding Source\par - may be on a different server (operated by you or a third party)\par - that supports equivalent copying facilities, provided you maintain\par - clear directions next to the object code saying where to find the\par - Corresponding Source. Regardless of what server hosts the\par - Corresponding Source, you remain obligated to ensure that it is\par - available for as long as needed to satisfy these requirements.\par -\par - e) Convey the object code using peer-to-peer transmission, provided\par - you inform other peers where the object code and Corresponding\par - Source of the work are being offered to the general public at no\par - charge under subsection 6d.\par -\par - A separable portion of the object code, whose source code is excluded\par -from the Corresponding Source as a System Library, need not be\par -included in conveying the object code work.\par -\par - A "User Product" is either (1) a "consumer product", which means any\par -tangible personal property which is normally used for personal, family,\par -or household purposes, or (2) anything designed or sold for incorporation\par -into a dwelling. In determining whether a product is a consumer product,\par -doubtful cases shall be resolved in favor of coverage. For a particular\par -product received by a particular user, "normally used" refers to a\par -typical or common use of that class of product, regardless of the status\par -of the particular user or of the way in which the particular user\par -actually uses, or expects or is expected to use, the product. A product\par -is a consumer product regardless of whether the product has substantial\par -commercial, industrial or non-consumer uses, unless such uses represent\par -the only significant mode of use of the product.\par -\par - "Installation Information" for a User Product means any methods,\par -procedures, authorization keys, or other information required to install\par -and execute modified versions of a covered work in that User Product from\par -a modified version of its Corresponding Source. The information must\par -suffice to ensure that the continued functioning of the modified object\par -code is in no case prevented or interfered with solely because\par -modification has been made.\par -\par - If you convey an object code work under this section in, or with, or\par -specifically for use in, a User Product, and the conveying occurs as\par -part of a transaction in which the right of possession and use of the\par -User Product is transferred to the recipient in perpetuity or for a\par -fixed term (regardless of how the transaction is characterized), the\par -Corresponding Source conveyed under this section must be accompanied\par -by the Installation Information. But this requirement does not apply\par -if neither you nor any third party retains the ability to install\par -modified object code on the User Product (for example, the work has\par -been installed in ROM).\par -\par - The requirement to provide Installation Information does not include a\par -requirement to continue to provide support service, warranty, or updates\par -for a work that has been modified or installed by the recipient, or for\par -the User Product in which it has been modified or installed. Access to a\par -network may be denied when the modification itself materially and\par -adversely affects the operation of the network or violates the rules and\par -protocols for communication across the network.\par -\par - Corresponding Source conveyed, and Installation Information provided,\par -in accord with this section must be in a format that is publicly\par -documented (and with an implementation available to the public in\par -source code form), and must require no special password or key for\par -unpacking, reading or copying.\par -\par - 7. Additional Terms.\par -\par - "Additional permissions" are terms that supplement the terms of this\par -License by making exceptions from one or more of its conditions.\par -Additional permissions that are applicable to the entire Program shall\par -be treated as though they were included in this License, to the extent\par -that they are valid under applicable law. If additional permissions\par -apply only to part of the Program, that part may be used separately\par -under those permissions, but the entire Program remains governed by\par -this License without regard to the additional permissions.\par -\par - When you convey a copy of a covered work, you may at your option\par -remove any additional permissions from that copy, or from any part of\par -it. (Additional permissions may be written to require their own\par -removal in certain cases when you modify the work.) You may place\par -additional permissions on material, added by you to a covered work,\par -for which you have or can give appropriate copyright permission.\par -\par - Notwithstanding any other provision of this License, for material you\par -add to a covered work, you may (if authorized by the copyright holders of\par -that material) supplement the terms of this License with terms:\par -\par - a) Disclaiming warranty or limiting liability differently from the\par - terms of sections 15 and 16 of this License; or\par -\par - b) Requiring preservation of specified reasonable legal notices or\par - author attributions in that material or in the Appropriate Legal\par - Notices displayed by works containing it; or\par -\par - c) Prohibiting misrepresentation of the origin of that material, or\par - requiring that modified versions of such material be marked in\par - reasonable ways as different from the original version; or\par -\par - d) Limiting the use for publicity purposes of names of licensors or\par - authors of the material; or\par -\par - e) Declining to grant rights under trademark law for use of some\par - trade names, trademarks, or service marks; or\par -\par - f) Requiring indemnification of licensors and authors of that\par - material by anyone who conveys the material (or modified versions of\par - it) with contractual assumptions of liability to the recipient, for\par - any liability that these contractual assumptions directly impose on\par - those licensors and authors.\par -\par - All other non-permissive additional terms are considered "further\par -restrictions" within the meaning of section 10. If the Program as you\par -received it, or any part of it, contains a notice stating that it is\par -governed by this License along with a term that is a further\par -restriction, you may remove that term. If a license document contains\par -a further restriction but permits relicensing or conveying under this\par -License, you may add to a covered work material governed by the terms\par -of that license document, provided that the further restriction does\par -not survive such relicensing or conveying.\par -\par - If you add terms to a covered work in accord with this section, you\par -must place, in the relevant source files, a statement of the\par -additional terms that apply to those files, or a notice indicating\par -where to find the applicable terms.\par -\par - Additional terms, permissive or non-permissive, may be stated in the\par -form of a separately written license, or stated as exceptions;\par -the above requirements apply either way.\par -\par - 8. Termination.\par -\par - You may not propagate or modify a covered work except as expressly\par -provided under this License. Any attempt otherwise to propagate or\par -modify it is void, and will automatically terminate your rights under\par -this License (including any patent licenses granted under the third\par -paragraph of section 11).\par -\par - However, if you cease all violation of this License, then your\par -license from a particular copyright holder is reinstated (a)\par -provisionally, unless and until the copyright holder explicitly and\par -finally terminates your license, and (b) permanently, if the copyright\par -holder fails to notify you of the violation by some reasonable means\par -prior to 60 days after the cessation.\par -\par - Moreover, your license from a particular copyright holder is\par -reinstated permanently if the copyright holder notifies you of the\par -violation by some reasonable means, this is the first time you have\par -received notice of violation of this License (for any work) from that\par -copyright holder, and you cure the violation prior to 30 days after\par -your receipt of the notice.\par -\par - Termination of your rights under this section does not terminate the\par -licenses of parties who have received copies or rights from you under\par -this License. If your rights have been terminated and not permanently\par -reinstated, you do not qualify to receive new licenses for the same\par -material under section 10.\par -\par - 9. Acceptance Not Required for Having Copies.\par -\par - You are not required to accept this License in order to receive or\par -run a copy of the Program. Ancillary propagation of a covered work\par -occurring solely as a consequence of using peer-to-peer transmission\par -to receive a copy likewise does not require acceptance. However,\par -nothing other than this License grants you permission to propagate or\par -modify any covered work. These actions infringe copyright if you do\par -not accept this License. Therefore, by modifying or propagating a\par -covered work, you indicate your acceptance of this License to do so.\par -\par - 10. Automatic Licensing of Downstream Recipients.\par -\par - Each time you convey a covered work, the recipient automatically\par -receives a license from the original licensors, to run, modify and\par -propagate that work, subject to this License. You are not responsible\par -for enforcing compliance by third parties with this License.\par -\par - An "entity transaction" is a transaction transferring control of an\par -organization, or substantially all assets of one, or subdividing an\par -organization, or merging organizations. If propagation of a covered\par -work results from an entity transaction, each party to that\par -transaction who receives a copy of the work also receives whatever\par -licenses to the work the party's predecessor in interest had or could\par -give under the previous paragraph, plus a right to possession of the\par -Corresponding Source of the work from the predecessor in interest, if\par -the predecessor has it or can get it with reasonable efforts.\par -\par - You may not impose any further restrictions on the exercise of the\par -rights granted or affirmed under this License. For example, you may\par -not impose a license fee, royalty, or other charge for exercise of\par -rights granted under this License, and you may not initiate litigation\par -(including a cross-claim or counterclaim in a lawsuit) alleging that\par -any patent claim is infringed by making, using, selling, offering for\par -sale, or importing the Program or any portion of it.\par -\par - 11. Patents.\par -\par - A "contributor" is a copyright holder who authorizes use under this\par -License of the Program or a work on which the Program is based. The\par -work thus licensed is called the contributor's "contributor version".\par -\par - A contributor's "essential patent claims" are all patent claims\par -owned or controlled by the contributor, whether already acquired or\par -hereafter acquired, that would be infringed by some manner, permitted\par -by this License, of making, using, or selling its contributor version,\par -but do not include claims that would be infringed only as a\par -consequence of further modification of the contributor version. For\par -purposes of this definition, "control" includes the right to grant\par -patent sublicenses in a manner consistent with the requirements of\par -this License.\par -\par - Each contributor grants you a non-exclusive, worldwide, royalty-free\par -patent license under the contributor's essential patent claims, to\par -make, use, sell, offer for sale, import and otherwise run, modify and\par -propagate the contents of its contributor version.\par -\par - In the following three paragraphs, a "patent license" is any express\par -agreement or commitment, however denominated, not to enforce a patent\par -(such as an express permission to practice a patent or covenant not to\par -sue for patent infringement). To "grant" such a patent license to a\par -party means to make such an agreement or commitment not to enforce a\par -patent against the party.\par -\par - If you convey a covered work, knowingly relying on a patent license,\par -and the Corresponding Source of the work is not available for anyone\par -to copy, free of charge and under the terms of this License, through a\par -publicly available network server or other readily accessible means,\par -then you must either (1) cause the Corresponding Source to be so\par -available, or (2) arrange to deprive yourself of the benefit of the\par -patent license for this particular work, or (3) arrange, in a manner\par -consistent with the requirements of this License, to extend the patent\par -license to downstream recipients. "Knowingly relying" means you have\par -actual knowledge that, but for the patent license, your conveying the\par -covered work in a country, or your recipient's use of the covered work\par -in a country, would infringe one or more identifiable patents in that\par -country that you have reason to believe are valid.\par -\par - If, pursuant to or in connection with a single transaction or\par -arrangement, you convey, or propagate by procuring conveyance of, a\par -covered work, and grant a patent license to some of the parties\par -receiving the covered work authorizing them to use, propagate, modify\par -or convey a specific copy of the covered work, then the patent license\par -you grant is automatically extended to all recipients of the covered\par -work and works based on it.\par -\par - A patent license is "discriminatory" if it does not include within\par -the scope of its coverage, prohibits the exercise of, or is\par -conditioned on the non-exercise of one or more of the rights that are\par -specifically granted under this License. You may not convey a covered\par -work if you are a party to an arrangement with a third party that is\par -in the business of distributing software, under which you make payment\par -to the third party based on the extent of your activity of conveying\par -the work, and under which the third party grants, to any of the\par -parties who would receive the covered work from you, a discriminatory\par -patent license (a) in connection with copies of the covered work\par -conveyed by you (or copies made from those copies), or (b) primarily\par -for and in connection with specific products or compilations that\par -contain the covered work, unless you entered into that arrangement,\par -or that patent license was granted, prior to 28 March 2007.\par -\par - Nothing in this License shall be construed as excluding or limiting\par -any implied license or other defenses to infringement that may\par -otherwise be available to you under applicable patent law.\par -\par - 12. No Surrender of Others' Freedom.\par -\par - If conditions are imposed on you (whether by court order, agreement or\par -otherwise) that contradict the conditions of this License, they do not\par -excuse you from the conditions of this License. If you cannot convey a\par -covered work so as to satisfy simultaneously your obligations under this\par -License and any other pertinent obligations, then as a consequence you may\par -not convey it at all. For example, if you agree to terms that obligate you\par -to collect a royalty for further conveying from those to whom you convey\par -the Program, the only way you could satisfy both those terms and this\par -License would be to refrain entirely from conveying the Program.\par -\par - 13. Use with the GNU Affero General Public License.\par -\par - Notwithstanding any other provision of this License, you have\par -permission to link or combine any covered work with a work licensed\par -under version 3 of the GNU Affero General Public License into a single\par -combined work, and to convey the resulting work. The terms of this\par -License will continue to apply to the part which is the covered work,\par -but the special requirements of the GNU Affero General Public License,\par -section 13, concerning interaction through a network will apply to the\par -combination as such.\par -\par - 14. Revised Versions of this License.\par -\par - The Free Software Foundation may publish revised and/or new versions of\par -the GNU General Public License from time to time. Such new versions will\par -be similar in spirit to the present version, but may differ in detail to\par -address new problems or concerns.\par -\par - Each version is given a distinguishing version number. If the\par -Program specifies that a certain numbered version of the GNU General\par -Public License "or any later version" applies to it, you have the\par -option of following the terms and conditions either of that numbered\par -version or of any later version published by the Free Software\par -Foundation. If the Program does not specify a version number of the\par -GNU General Public License, you may choose any version ever published\par -by the Free Software Foundation.\par -\par - If the Program specifies that a proxy can decide which future\par -versions of the GNU General Public License can be used, that proxy's\par -public statement of acceptance of a version permanently authorizes you\par -to choose that version for the Program.\par -\par - Later license versions may give you additional or different\par -permissions. However, no additional obligations are imposed on any\par -author or copyright holder as a result of your choosing to follow a\par -later version.\par -\par - 15. Disclaimer of Warranty.\par -\par - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\par -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\par -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY\par -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\par -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\par -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\par -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\par -ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par -\par - 16. Limitation of Liability.\par -\par - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\par -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\par -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\par -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\par -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\par -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\par -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\par -SUCH DAMAGES.\par -\par - 17. Interpretation of Sections 15 and 16.\par -\par - If the disclaimer of warranty and limitation of liability provided\par -above cannot be given local legal effect according to their terms,\par -reviewing courts shall apply local law that most closely approximates\par -an absolute waiver of all civil liability in connection with the\par -Program, unless a warranty or assumption of liability accompanies a\par -copy of the Program in return for a fee.\par -\par - END OF TERMS AND CONDITIONS\par -\par - How to Apply These Terms to Your New Programs\par -\par - If you develop a new program, and you want it to be of the greatest\par -possible use to the public, the best way to achieve this is to make it\par -free software which everyone can redistribute and change under these terms.\par -\par - To do so, attach the following notices to the program. It is safest\par -to attach them to the start of each source file to most effectively\par -state the exclusion of warranty; and each file should have at least\par -the "copyright" line and a pointer to where the full notice is found.\par -\par - \par - Copyright (C) \par -\par - This program is free software: you can redistribute it and/or modify\par - it under the terms of the GNU General Public License as published by\par - the Free Software Foundation, either version 3 of the License, or\par - (at your option) any later version.\par -\par - This program is distributed in the hope that it will be useful,\par - but WITHOUT ANY WARRANTY; without even the implied warranty of\par - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par - GNU General Public License for more details.\par -\par - You should have received a copy of the GNU General Public License\par - along with this program. If not, see <{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt{\ul\cf1 http://www.gnu.org/licenses/}}}\f0\fs18 >.\par -\par -Also add information on how to contact you by electronic and paper mail.\par -\par - If the program does terminal interaction, make it output a short\par -notice like this when it starts in an interactive mode:\par -\par - Copyright (C) \par - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par - This is free software, and you are welcome to redistribute it\par - under certain conditions; type `show c' for details.\par -\par -The hypothetical commands `show w' and `show c' should show the appropriate\par -parts of the General Public License. Of course, your program's commands\par -might be different; for a GUI interface, you would use an "about box".\par -\par - You should also get your employer (if you work as a programmer) or school,\par -if any, to sign a "copyright disclaimer" for the program, if necessary.\par -For more information on this, and how to apply and follow the GNU GPL, see\par -<{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt{\ul\cf1 http://www.gnu.org/licenses/}}}\f0\fs18 >.\par -\par - The GNU General Public License does not permit incorporating your program\par -into proprietary programs. If your program is a subroutine library, you\par -may consider it more useful to permit linking proprietary applications with\par -the library. If this is what you want to do, use the GNU Lesser General\par -Public License instead of this License. But first, please read\par -<{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/philosophy/why-not-lgpl.html"}}{\fldrslt{\ul\cf1 http://www.gnu.org/philosophy/why-not-lgpl.html}}}\f0\fs18 >.\par -} +{\rtf1\ansi\ansicpg1252\deff0\deflang2055{\fonttbl{\f0\fnil\fcharset0 Courier New;}} +{\colortbl ;\red0\green0\blue255;} +{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\lang7\f0\fs18 GNU GENERAL PUBLIC LICENSE\par + Version 3, 29 June 2007\par +\par + Copyright (C) 2007 Free Software Foundation, Inc. <{\field{\*\fldinst{HYPERLINK "http://fsf.org/"}}{\fldrslt{\ul\cf1 http://fsf.org/}}}\f0\fs18 >\par + Everyone is permitted to copy and distribute verbatim copies\par + of this license document, but changing it is not allowed.\par +\par + Preamble\par +\par + The GNU General Public License is a free, copyleft license for\par +software and other kinds of works.\par +\par + The licenses for most software and other practical works are designed\par +to take away your freedom to share and change the works. By contrast,\par +the GNU General Public License is intended to guarantee your freedom to\par +share and change all versions of a program--to make sure it remains free\par +software for all its users. We, the Free Software Foundation, use the\par +GNU General Public License for most of our software; it applies also to\par +any other work released this way by its authors. You can apply it to\par +your programs, too.\par +\par + When we speak of free software, we are referring to freedom, not\par +price. Our General Public Licenses are designed to make sure that you\par +have the freedom to distribute copies of free software (and charge for\par +them if you wish), that you receive source code or can get it if you\par +want it, that you can change the software or use pieces of it in new\par +free programs, and that you know you can do these things.\par +\par + To protect your rights, we need to prevent others from denying you\par +these rights or asking you to surrender the rights. Therefore, you have\par +certain responsibilities if you distribute copies of the software, or if\par +you modify it: responsibilities to respect the freedom of others.\par +\par + For example, if you distribute copies of such a program, whether\par +gratis or for a fee, you must pass on to the recipients the same\par +freedoms that you received. You must make sure that they, too, receive\par +or can get the source code. And you must show them these terms so they\par +know their rights.\par +\par + Developers that use the GNU GPL protect your rights with two steps:\par +(1) assert copyright on the software, and (2) offer you this License\par +giving you legal permission to copy, distribute and/or modify it.\par +\par + For the developers' and authors' protection, the GPL clearly explains\par +that there is no warranty for this free software. For both users' and\par +authors' sake, the GPL requires that modified versions be marked as\par +changed, so that their problems will not be attributed erroneously to\par +authors of previous versions.\par +\par + Some devices are designed to deny users access to install or run\par +modified versions of the software inside them, although the manufacturer\par +can do so. This is fundamentally incompatible with the aim of\par +protecting users' freedom to change the software. The systematic\par +pattern of such abuse occurs in the area of products for individuals to\par +use, which is precisely where it is most unacceptable. Therefore, we\par +have designed this version of the GPL to prohibit the practice for those\par +products. If such problems arise substantially in other domains, we\par +stand ready to extend this provision to those domains in future versions\par +of the GPL, as needed to protect the freedom of users.\par +\par + Finally, every program is threatened constantly by software patents.\par +States should not allow patents to restrict development and use of\par +software on general-purpose computers, but in those that do, we wish to\par +avoid the special danger that patents applied to a free program could\par +make it effectively proprietary. To prevent this, the GPL assures that\par +patents cannot be used to render the program non-free.\par +\par + The precise terms and conditions for copying, distribution and\par +modification follow.\par +\par + TERMS AND CONDITIONS\par +\par + 0. Definitions.\par +\par + "This License" refers to version 3 of the GNU General Public License.\par +\par + "Copyright" also means copyright-like laws that apply to other kinds of\par +works, such as semiconductor masks.\par +\par + "The Program" refers to any copyrightable work licensed under this\par +License. Each licensee is addressed as "you". "Licensees" and\par +"recipients" may be individuals or organizations.\par +\par + To "modify" a work means to copy from or adapt all or part of the work\par +in a fashion requiring copyright permission, other than the making of an\par +exact copy. The resulting work is called a "modified version" of the\par +earlier work or a work "based on" the earlier work.\par +\par + A "covered work" means either the unmodified Program or a work based\par +on the Program.\par +\par + To "propagate" a work means to do anything with it that, without\par +permission, would make you directly or secondarily liable for\par +infringement under applicable copyright law, except executing it on a\par +computer or modifying a private copy. Propagation includes copying,\par +distribution (with or without modification), making available to the\par +public, and in some countries other activities as well.\par +\par + To "convey" a work means any kind of propagation that enables other\par +parties to make or receive copies. Mere interaction with a user through\par +a computer network, with no transfer of a copy, is not conveying.\par +\par + An interactive user interface displays "Appropriate Legal Notices"\par +to the extent that it includes a convenient and prominently visible\par +feature that (1) displays an appropriate copyright notice, and (2)\par +tells the user that there is no warranty for the work (except to the\par +extent that warranties are provided), that licensees may convey the\par +work under this License, and how to view a copy of this License. If\par +the interface presents a list of user commands or options, such as a\par +menu, a prominent item in the list meets this criterion.\par +\par + 1. Source Code.\par +\par + The "source code" for a work means the preferred form of the work\par +for making modifications to it. "Object code" means any non-source\par +form of a work.\par +\par + A "Standard Interface" means an interface that either is an official\par +standard defined by a recognized standards body, or, in the case of\par +interfaces specified for a particular programming language, one that\par +is widely used among developers working in that language.\par +\par + The "System Libraries" of an executable work include anything, other\par +than the work as a whole, that (a) is included in the normal form of\par +packaging a Major Component, but which is not part of that Major\par +Component, and (b) serves only to enable use of the work with that\par +Major Component, or to implement a Standard Interface for which an\par +implementation is available to the public in source code form. A\par +"Major Component", in this context, means a major essential component\par +(kernel, window system, and so on) of the specific operating system\par +(if any) on which the executable work runs, or a compiler used to\par +produce the work, or an object code interpreter used to run it.\par +\par + The "Corresponding Source" for a work in object code form means all\par +the source code needed to generate, install, and (for an executable\par +work) run the object code and to modify the work, including scripts to\par +control those activities. However, it does not include the work's\par +System Libraries, or general-purpose tools or generally available free\par +programs which are used unmodified in performing those activities but\par +which are not part of the work. For example, Corresponding Source\par +includes interface definition files associated with source files for\par +the work, and the source code for shared libraries and dynamically\par +linked subprograms that the work is specifically designed to require,\par +such as by intimate data communication or control flow between those\par +subprograms and other parts of the work.\par +\par + The Corresponding Source need not include anything that users\par +can regenerate automatically from other parts of the Corresponding\par +Source.\par +\par + The Corresponding Source for a work in source code form is that\par +same work.\par +\par + 2. Basic Permissions.\par +\par + All rights granted under this License are granted for the term of\par +copyright on the Program, and are irrevocable provided the stated\par +conditions are met. This License explicitly affirms your unlimited\par +permission to run the unmodified Program. The output from running a\par +covered work is covered by this License only if the output, given its\par +content, constitutes a covered work. This License acknowledges your\par +rights of fair use or other equivalent, as provided by copyright law.\par +\par + You may make, run and propagate covered works that you do not\par +convey, without conditions so long as your license otherwise remains\par +in force. You may convey covered works to others for the sole purpose\par +of having them make modifications exclusively for you, or provide you\par +with facilities for running those works, provided that you comply with\par +the terms of this License in conveying all material for which you do\par +not control copyright. Those thus making or running the covered works\par +for you must do so exclusively on your behalf, under your direction\par +and control, on terms that prohibit them from making any copies of\par +your copyrighted material outside their relationship with you.\par +\par + Conveying under any other circumstances is permitted solely under\par +the conditions stated below. Sublicensing is not allowed; section 10\par +makes it unnecessary.\par +\par + 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\par +\par + No covered work shall be deemed part of an effective technological\par +measure under any applicable law fulfilling obligations under article\par +11 of the WIPO copyright treaty adopted on 20 December 1996, or\par +similar laws prohibiting or restricting circumvention of such\par +measures.\par +\par + When you convey a covered work, you waive any legal power to forbid\par +circumvention of technological measures to the extent such circumvention\par +is effected by exercising rights under this License with respect to\par +the covered work, and you disclaim any intention to limit operation or\par +modification of the work as a means of enforcing, against the work's\par +users, your or third parties' legal rights to forbid circumvention of\par +technological measures.\par +\par + 4. Conveying Verbatim Copies.\par +\par + You may convey verbatim copies of the Program's source code as you\par +receive it, in any medium, provided that you conspicuously and\par +appropriately publish on each copy an appropriate copyright notice;\par +keep intact all notices stating that this License and any\par +non-permissive terms added in accord with section 7 apply to the code;\par +keep intact all notices of the absence of any warranty; and give all\par +recipients a copy of this License along with the Program.\par +\par + You may charge any price or no price for each copy that you convey,\par +and you may offer support or warranty protection for a fee.\par +\par + 5. Conveying Modified Source Versions.\par +\par + You may convey a work based on the Program, or the modifications to\par +produce it from the Program, in the form of source code under the\par +terms of section 4, provided that you also meet all of these conditions:\par +\par + a) The work must carry prominent notices stating that you modified\par + it, and giving a relevant date.\par +\par + b) The work must carry prominent notices stating that it is\par + released under this License and any conditions added under section\par + 7. This requirement modifies the requirement in section 4 to\par + "keep intact all notices".\par +\par + c) You must license the entire work, as a whole, under this\par + License to anyone who comes into possession of a copy. This\par + License will therefore apply, along with any applicable section 7\par + additional terms, to the whole of the work, and all its parts,\par + regardless of how they are packaged. This License gives no\par + permission to license the work in any other way, but it does not\par + invalidate such permission if you have separately received it.\par +\par + d) If the work has interactive user interfaces, each must display\par + Appropriate Legal Notices; however, if the Program has interactive\par + interfaces that do not display Appropriate Legal Notices, your\par + work need not make them do so.\par +\par + A compilation of a covered work with other separate and independent\par +works, which are not by their nature extensions of the covered work,\par +and which are not combined with it such as to form a larger program,\par +in or on a volume of a storage or distribution medium, is called an\par +"aggregate" if the compilation and its resulting copyright are not\par +used to limit the access or legal rights of the compilation's users\par +beyond what the individual works permit. Inclusion of a covered work\par +in an aggregate does not cause this License to apply to the other\par +parts of the aggregate.\par +\par + 6. Conveying Non-Source Forms.\par +\par + You may convey a covered work in object code form under the terms\par +of sections 4 and 5, provided that you also convey the\par +machine-readable Corresponding Source under the terms of this License,\par +in one of these ways:\par +\par + a) Convey the object code in, or embodied in, a physical product\par + (including a physical distribution medium), accompanied by the\par + Corresponding Source fixed on a durable physical medium\par + customarily used for software interchange.\par +\par + b) Convey the object code in, or embodied in, a physical product\par + (including a physical distribution medium), accompanied by a\par + written offer, valid for at least three years and valid for as\par + long as you offer spare parts or customer support for that product\par + model, to give anyone who possesses the object code either (1) a\par + copy of the Corresponding Source for all the software in the\par + product that is covered by this License, on a durable physical\par + medium customarily used for software interchange, for a price no\par + more than your reasonable cost of physically performing this\par + conveying of source, or (2) access to copy the\par + Corresponding Source from a network server at no charge.\par +\par + c) Convey individual copies of the object code with a copy of the\par + written offer to provide the Corresponding Source. This\par + alternative is allowed only occasionally and noncommercially, and\par + only if you received the object code with such an offer, in accord\par + with subsection 6b.\par +\par + d) Convey the object code by offering access from a designated\par + place (gratis or for a charge), and offer equivalent access to the\par + Corresponding Source in the same way through the same place at no\par + further charge. You need not require recipients to copy the\par + Corresponding Source along with the object code. If the place to\par + copy the object code is a network server, the Corresponding Source\par + may be on a different server (operated by you or a third party)\par + that supports equivalent copying facilities, provided you maintain\par + clear directions next to the object code saying where to find the\par + Corresponding Source. Regardless of what server hosts the\par + Corresponding Source, you remain obligated to ensure that it is\par + available for as long as needed to satisfy these requirements.\par +\par + e) Convey the object code using peer-to-peer transmission, provided\par + you inform other peers where the object code and Corresponding\par + Source of the work are being offered to the general public at no\par + charge under subsection 6d.\par +\par + A separable portion of the object code, whose source code is excluded\par +from the Corresponding Source as a System Library, need not be\par +included in conveying the object code work.\par +\par + A "User Product" is either (1) a "consumer product", which means any\par +tangible personal property which is normally used for personal, family,\par +or household purposes, or (2) anything designed or sold for incorporation\par +into a dwelling. In determining whether a product is a consumer product,\par +doubtful cases shall be resolved in favor of coverage. For a particular\par +product received by a particular user, "normally used" refers to a\par +typical or common use of that class of product, regardless of the status\par +of the particular user or of the way in which the particular user\par +actually uses, or expects or is expected to use, the product. A product\par +is a consumer product regardless of whether the product has substantial\par +commercial, industrial or non-consumer uses, unless such uses represent\par +the only significant mode of use of the product.\par +\par + "Installation Information" for a User Product means any methods,\par +procedures, authorization keys, or other information required to install\par +and execute modified versions of a covered work in that User Product from\par +a modified version of its Corresponding Source. The information must\par +suffice to ensure that the continued functioning of the modified object\par +code is in no case prevented or interfered with solely because\par +modification has been made.\par +\par + If you convey an object code work under this section in, or with, or\par +specifically for use in, a User Product, and the conveying occurs as\par +part of a transaction in which the right of possession and use of the\par +User Product is transferred to the recipient in perpetuity or for a\par +fixed term (regardless of how the transaction is characterized), the\par +Corresponding Source conveyed under this section must be accompanied\par +by the Installation Information. But this requirement does not apply\par +if neither you nor any third party retains the ability to install\par +modified object code on the User Product (for example, the work has\par +been installed in ROM).\par +\par + The requirement to provide Installation Information does not include a\par +requirement to continue to provide support service, warranty, or updates\par +for a work that has been modified or installed by the recipient, or for\par +the User Product in which it has been modified or installed. Access to a\par +network may be denied when the modification itself materially and\par +adversely affects the operation of the network or violates the rules and\par +protocols for communication across the network.\par +\par + Corresponding Source conveyed, and Installation Information provided,\par +in accord with this section must be in a format that is publicly\par +documented (and with an implementation available to the public in\par +source code form), and must require no special password or key for\par +unpacking, reading or copying.\par +\par + 7. Additional Terms.\par +\par + "Additional permissions" are terms that supplement the terms of this\par +License by making exceptions from one or more of its conditions.\par +Additional permissions that are applicable to the entire Program shall\par +be treated as though they were included in this License, to the extent\par +that they are valid under applicable law. If additional permissions\par +apply only to part of the Program, that part may be used separately\par +under those permissions, but the entire Program remains governed by\par +this License without regard to the additional permissions.\par +\par + When you convey a copy of a covered work, you may at your option\par +remove any additional permissions from that copy, or from any part of\par +it. (Additional permissions may be written to require their own\par +removal in certain cases when you modify the work.) You may place\par +additional permissions on material, added by you to a covered work,\par +for which you have or can give appropriate copyright permission.\par +\par + Notwithstanding any other provision of this License, for material you\par +add to a covered work, you may (if authorized by the copyright holders of\par +that material) supplement the terms of this License with terms:\par +\par + a) Disclaiming warranty or limiting liability differently from the\par + terms of sections 15 and 16 of this License; or\par +\par + b) Requiring preservation of specified reasonable legal notices or\par + author attributions in that material or in the Appropriate Legal\par + Notices displayed by works containing it; or\par +\par + c) Prohibiting misrepresentation of the origin of that material, or\par + requiring that modified versions of such material be marked in\par + reasonable ways as different from the original version; or\par +\par + d) Limiting the use for publicity purposes of names of licensors or\par + authors of the material; or\par +\par + e) Declining to grant rights under trademark law for use of some\par + trade names, trademarks, or service marks; or\par +\par + f) Requiring indemnification of licensors and authors of that\par + material by anyone who conveys the material (or modified versions of\par + it) with contractual assumptions of liability to the recipient, for\par + any liability that these contractual assumptions directly impose on\par + those licensors and authors.\par +\par + All other non-permissive additional terms are considered "further\par +restrictions" within the meaning of section 10. If the Program as you\par +received it, or any part of it, contains a notice stating that it is\par +governed by this License along with a term that is a further\par +restriction, you may remove that term. If a license document contains\par +a further restriction but permits relicensing or conveying under this\par +License, you may add to a covered work material governed by the terms\par +of that license document, provided that the further restriction does\par +not survive such relicensing or conveying.\par +\par + If you add terms to a covered work in accord with this section, you\par +must place, in the relevant source files, a statement of the\par +additional terms that apply to those files, or a notice indicating\par +where to find the applicable terms.\par +\par + Additional terms, permissive or non-permissive, may be stated in the\par +form of a separately written license, or stated as exceptions;\par +the above requirements apply either way.\par +\par + 8. Termination.\par +\par + You may not propagate or modify a covered work except as expressly\par +provided under this License. Any attempt otherwise to propagate or\par +modify it is void, and will automatically terminate your rights under\par +this License (including any patent licenses granted under the third\par +paragraph of section 11).\par +\par + However, if you cease all violation of this License, then your\par +license from a particular copyright holder is reinstated (a)\par +provisionally, unless and until the copyright holder explicitly and\par +finally terminates your license, and (b) permanently, if the copyright\par +holder fails to notify you of the violation by some reasonable means\par +prior to 60 days after the cessation.\par +\par + Moreover, your license from a particular copyright holder is\par +reinstated permanently if the copyright holder notifies you of the\par +violation by some reasonable means, this is the first time you have\par +received notice of violation of this License (for any work) from that\par +copyright holder, and you cure the violation prior to 30 days after\par +your receipt of the notice.\par +\par + Termination of your rights under this section does not terminate the\par +licenses of parties who have received copies or rights from you under\par +this License. If your rights have been terminated and not permanently\par +reinstated, you do not qualify to receive new licenses for the same\par +material under section 10.\par +\par + 9. Acceptance Not Required for Having Copies.\par +\par + You are not required to accept this License in order to receive or\par +run a copy of the Program. Ancillary propagation of a covered work\par +occurring solely as a consequence of using peer-to-peer transmission\par +to receive a copy likewise does not require acceptance. However,\par +nothing other than this License grants you permission to propagate or\par +modify any covered work. These actions infringe copyright if you do\par +not accept this License. Therefore, by modifying or propagating a\par +covered work, you indicate your acceptance of this License to do so.\par +\par + 10. Automatic Licensing of Downstream Recipients.\par +\par + Each time you convey a covered work, the recipient automatically\par +receives a license from the original licensors, to run, modify and\par +propagate that work, subject to this License. You are not responsible\par +for enforcing compliance by third parties with this License.\par +\par + An "entity transaction" is a transaction transferring control of an\par +organization, or substantially all assets of one, or subdividing an\par +organization, or merging organizations. If propagation of a covered\par +work results from an entity transaction, each party to that\par +transaction who receives a copy of the work also receives whatever\par +licenses to the work the party's predecessor in interest had or could\par +give under the previous paragraph, plus a right to possession of the\par +Corresponding Source of the work from the predecessor in interest, if\par +the predecessor has it or can get it with reasonable efforts.\par +\par + You may not impose any further restrictions on the exercise of the\par +rights granted or affirmed under this License. For example, you may\par +not impose a license fee, royalty, or other charge for exercise of\par +rights granted under this License, and you may not initiate litigation\par +(including a cross-claim or counterclaim in a lawsuit) alleging that\par +any patent claim is infringed by making, using, selling, offering for\par +sale, or importing the Program or any portion of it.\par +\par + 11. Patents.\par +\par + A "contributor" is a copyright holder who authorizes use under this\par +License of the Program or a work on which the Program is based. The\par +work thus licensed is called the contributor's "contributor version".\par +\par + A contributor's "essential patent claims" are all patent claims\par +owned or controlled by the contributor, whether already acquired or\par +hereafter acquired, that would be infringed by some manner, permitted\par +by this License, of making, using, or selling its contributor version,\par +but do not include claims that would be infringed only as a\par +consequence of further modification of the contributor version. For\par +purposes of this definition, "control" includes the right to grant\par +patent sublicenses in a manner consistent with the requirements of\par +this License.\par +\par + Each contributor grants you a non-exclusive, worldwide, royalty-free\par +patent license under the contributor's essential patent claims, to\par +make, use, sell, offer for sale, import and otherwise run, modify and\par +propagate the contents of its contributor version.\par +\par + In the following three paragraphs, a "patent license" is any express\par +agreement or commitment, however denominated, not to enforce a patent\par +(such as an express permission to practice a patent or covenant not to\par +sue for patent infringement). To "grant" such a patent license to a\par +party means to make such an agreement or commitment not to enforce a\par +patent against the party.\par +\par + If you convey a covered work, knowingly relying on a patent license,\par +and the Corresponding Source of the work is not available for anyone\par +to copy, free of charge and under the terms of this License, through a\par +publicly available network server or other readily accessible means,\par +then you must either (1) cause the Corresponding Source to be so\par +available, or (2) arrange to deprive yourself of the benefit of the\par +patent license for this particular work, or (3) arrange, in a manner\par +consistent with the requirements of this License, to extend the patent\par +license to downstream recipients. "Knowingly relying" means you have\par +actual knowledge that, but for the patent license, your conveying the\par +covered work in a country, or your recipient's use of the covered work\par +in a country, would infringe one or more identifiable patents in that\par +country that you have reason to believe are valid.\par +\par + If, pursuant to or in connection with a single transaction or\par +arrangement, you convey, or propagate by procuring conveyance of, a\par +covered work, and grant a patent license to some of the parties\par +receiving the covered work authorizing them to use, propagate, modify\par +or convey a specific copy of the covered work, then the patent license\par +you grant is automatically extended to all recipients of the covered\par +work and works based on it.\par +\par + A patent license is "discriminatory" if it does not include within\par +the scope of its coverage, prohibits the exercise of, or is\par +conditioned on the non-exercise of one or more of the rights that are\par +specifically granted under this License. You may not convey a covered\par +work if you are a party to an arrangement with a third party that is\par +in the business of distributing software, under which you make payment\par +to the third party based on the extent of your activity of conveying\par +the work, and under which the third party grants, to any of the\par +parties who would receive the covered work from you, a discriminatory\par +patent license (a) in connection with copies of the covered work\par +conveyed by you (or copies made from those copies), or (b) primarily\par +for and in connection with specific products or compilations that\par +contain the covered work, unless you entered into that arrangement,\par +or that patent license was granted, prior to 28 March 2007.\par +\par + Nothing in this License shall be construed as excluding or limiting\par +any implied license or other defenses to infringement that may\par +otherwise be available to you under applicable patent law.\par +\par + 12. No Surrender of Others' Freedom.\par +\par + If conditions are imposed on you (whether by court order, agreement or\par +otherwise) that contradict the conditions of this License, they do not\par +excuse you from the conditions of this License. If you cannot convey a\par +covered work so as to satisfy simultaneously your obligations under this\par +License and any other pertinent obligations, then as a consequence you may\par +not convey it at all. For example, if you agree to terms that obligate you\par +to collect a royalty for further conveying from those to whom you convey\par +the Program, the only way you could satisfy both those terms and this\par +License would be to refrain entirely from conveying the Program.\par +\par + 13. Use with the GNU Affero General Public License.\par +\par + Notwithstanding any other provision of this License, you have\par +permission to link or combine any covered work with a work licensed\par +under version 3 of the GNU Affero General Public License into a single\par +combined work, and to convey the resulting work. The terms of this\par +License will continue to apply to the part which is the covered work,\par +but the special requirements of the GNU Affero General Public License,\par +section 13, concerning interaction through a network will apply to the\par +combination as such.\par +\par + 14. Revised Versions of this License.\par +\par + The Free Software Foundation may publish revised and/or new versions of\par +the GNU General Public License from time to time. Such new versions will\par +be similar in spirit to the present version, but may differ in detail to\par +address new problems or concerns.\par +\par + Each version is given a distinguishing version number. If the\par +Program specifies that a certain numbered version of the GNU General\par +Public License "or any later version" applies to it, you have the\par +option of following the terms and conditions either of that numbered\par +version or of any later version published by the Free Software\par +Foundation. If the Program does not specify a version number of the\par +GNU General Public License, you may choose any version ever published\par +by the Free Software Foundation.\par +\par + If the Program specifies that a proxy can decide which future\par +versions of the GNU General Public License can be used, that proxy's\par +public statement of acceptance of a version permanently authorizes you\par +to choose that version for the Program.\par +\par + Later license versions may give you additional or different\par +permissions. However, no additional obligations are imposed on any\par +author or copyright holder as a result of your choosing to follow a\par +later version.\par +\par + 15. Disclaimer of Warranty.\par +\par + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\par +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\par +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY\par +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\par +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\par +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\par +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\par +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par +\par + 16. Limitation of Liability.\par +\par + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\par +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\par +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\par +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\par +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\par +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\par +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\par +SUCH DAMAGES.\par +\par + 17. Interpretation of Sections 15 and 16.\par +\par + If the disclaimer of warranty and limitation of liability provided\par +above cannot be given local legal effect according to their terms,\par +reviewing courts shall apply local law that most closely approximates\par +an absolute waiver of all civil liability in connection with the\par +Program, unless a warranty or assumption of liability accompanies a\par +copy of the Program in return for a fee.\par +\par + END OF TERMS AND CONDITIONS\par +\par + How to Apply These Terms to Your New Programs\par +\par + If you develop a new program, and you want it to be of the greatest\par +possible use to the public, the best way to achieve this is to make it\par +free software which everyone can redistribute and change under these terms.\par +\par + To do so, attach the following notices to the program. It is safest\par +to attach them to the start of each source file to most effectively\par +state the exclusion of warranty; and each file should have at least\par +the "copyright" line and a pointer to where the full notice is found.\par +\par + \par + Copyright (C) \par +\par + This program is free software: you can redistribute it and/or modify\par + it under the terms of the GNU General Public License as published by\par + the Free Software Foundation, either version 3 of the License, or\par + (at your option) any later version.\par +\par + This program is distributed in the hope that it will be useful,\par + but WITHOUT ANY WARRANTY; without even the implied warranty of\par + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par + GNU General Public License for more details.\par +\par + You should have received a copy of the GNU General Public License\par + along with this program. If not, see <{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt{\ul\cf1 http://www.gnu.org/licenses/}}}\f0\fs18 >.\par +\par +Also add information on how to contact you by electronic and paper mail.\par +\par + If the program does terminal interaction, make it output a short\par +notice like this when it starts in an interactive mode:\par +\par + Copyright (C) \par + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par + This is free software, and you are welcome to redistribute it\par + under certain conditions; type `show c' for details.\par +\par +The hypothetical commands `show w' and `show c' should show the appropriate\par +parts of the General Public License. Of course, your program's commands\par +might be different; for a GUI interface, you would use an "about box".\par +\par + You should also get your employer (if you work as a programmer) or school,\par +if any, to sign a "copyright disclaimer" for the program, if necessary.\par +For more information on this, and how to apply and follow the GNU GPL, see\par +<{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/"}}{\fldrslt{\ul\cf1 http://www.gnu.org/licenses/}}}\f0\fs18 >.\par +\par + The GNU General Public License does not permit incorporating your program\par +into proprietary programs. If your program is a subroutine library, you\par +may consider it more useful to permit linking proprietary applications with\par +the library. If this is what you want to do, use the GNU Lesser General\par +Public License instead of this License. But first, please read\par +<{\field{\*\fldinst{HYPERLINK "http://www.gnu.org/philosophy/why-not-lgpl.html"}}{\fldrslt{\ul\cf1 http://www.gnu.org/philosophy/why-not-lgpl.html}}}\f0\fs18 >.\par +} \ No newline at end of file diff --git a/windows_installer/SimulationCraft.wxs b/windows_installer/SimulationCraft.wxs index ab9b02f782f..7f20cc67319 100644 --- a/windows_installer/SimulationCraft.wxs +++ b/windows_installer/SimulationCraft.wxs @@ -1,125 +1,125 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows_installer/create_installer.bat b/windows_installer/create_installer.bat index a113ffc2286..3153f96bf60 100644 --- a/windows_installer/create_installer.bat +++ b/windows_installer/create_installer.bat @@ -1,17 +1,17 @@ -:: Create a Windows Installer File ( .msi ) using WiX Toolset - -:: Wix Toolset: http://wixtoolset.org/ -:: Documentation: http://wix.tramontana.co.hu/ - -IF (%1) == () exit /b - -set version=%1 - -:: create automated file list for profiles -call heat dir ./profiles PROFILES -generate container -template fragment -projectname SimulationCraft -gg -cg Profiles -var var.profiles -dr INSTALLDIR -out profiles.wxs - -:: compile Installer configuration & profiles -call candle -dprofiles=profiles -dprod_ver=%version% SimulationCraft.wxs profiles.wxs - -:: link everything together into SimulationCraft.msi +:: Create a Windows Installer File ( .msi ) using WiX Toolset + +:: Wix Toolset: http://wixtoolset.org/ +:: Documentation: http://wix.tramontana.co.hu/ + +IF (%1) == () exit /b + +set version=%1 + +:: create automated file list for profiles +call heat dir ./profiles PROFILES -generate container -template fragment -projectname SimulationCraft -gg -cg Profiles -var var.profiles -dr INSTALLDIR -out profiles.wxs + +:: compile Installer configuration & profiles +call candle -dprofiles=profiles -dprod_ver=%version% SimulationCraft.wxs profiles.wxs + +:: link everything together into SimulationCraft.msi call light -ext WixUIExtension -out SimulationCraft-%version%.msi SimulationCraft.wixobj profiles.wixobj \ No newline at end of file