httraqt-1.4.11/0000775000175000017500000000000014356063646013502 5ustar karbofoskarbofoshttraqt-1.4.11/README0000664000175000017500000001265014355543007014357 0ustar karbofoskarbofosHow to compile source code and create packages Get the project from sourceforge.net. Must be installed on your Linux system: gcc-c++, make, cmake, httrack-dev If You have any problems during compiling with any header files (*.h) from httrack-dev package, please deinstall this development package and install from http://www.httrack.com/page/2/en/index.html and install this under /usr/local/... For creating makefile and compiling of HTTraQt: cmake . make If You want to create th package (DEB of RPM), must be installed rpm-build or dpkg and: for DEB based distributions: make package-binary-deb or for RPM make package-binary-rpm Version history 1.4.11, Qt6 support 1.4.10, russian translation fixed cmakelists bugfix 1.4.9, added options QT_USE_FAST_CONCATENATION, QT_USE_FAST_OPERATOR_PLUS fixed generation of package dependencies list fixed cmakelists settings for Qt5 version 1.4.8, Main GUI fixed for displays with small resolution 1.4.7, Ticket 34, rulez seperated by newline insteed of space 1.4.6, Hotfix for Qt5 compiling 1.4.5, Icons as files, #32 overworked code, #33 multiple urls are fixed 1.4.4, Icons for Dialogs are fixed, size column is fixed in progress 1.4.3, patched for HTTrack 3.48-13 1.4.2, patched for HTTrack 3.48-10, thanks to Xavier Roche 1.4.1, overworked icons handling 1.4.0, support of new translation file format, short form. 1.3.4, translation correctures 1.3.3, translation class extended for new file format; htsnet.h fixed for new libhttrack > 3.48.9 1.3.2, additional bellarussian language 1.3.1, options are in separate class, options map as static; option for shutdown delay time 1.3.0, Shutdown/Hibernate have been implemented, Autoclose MessageBoxes for it; Qt5 ready; for compiling with Qt5 change the row "SET(USE_QT_VERSION 4)" at beginning of CMakeLists.txt; Additional switch definition in file version.h: USE_QT_VERSION, autogeneration depended from cmake option 1.2.4, first call of ProgressTab: no rows if initialisation 1.2.3, OptionsDialog: activation of first page after any button click fixed; replaced "H" icon, #28; hide password on proxyoptions; 1.2.2, OptionsDialog: wrapping of text in widgets implemented. 1.2.1, Options are moved from QVector to QMap; too often creating of OptionsDialog fixed 1.2.0, SystemTray mode was implemented, ProcessPage: rows will be hidden if no info 1.1.11, limit options: comboboxes are editable 1.1.10, closed tickets: #19, #22, #26, #21, #27 version compatibile to WinHTTrack, webhttrack projects 1.1.9, sync for QSettings write 1.1.8, additional parameter "BuildTopIndex" 1.1.7, handling of parameters like webhttrack: separated with "space" 1.1.6, fixed: dependencies bug: libhttrack -> libhttrack2 1.1.5, fixed: if checkbox is "false", not toggles 1.1.4, fixed mistake with URL dialog if rejected; remastered checkInstanceRuns() 1.1.3, fixed bug in "Rules options" widget, fixed: new project after downloaded project 1.1.2, "Cancel" button will be hidden if no file name, ticket #14 1.1.1, executable bit during creating of package, ticket #15 1.1.0, cancel download of separate file implemented, ticket #10 1.0.17, remastered translation of dictionaries, remastered dialog boxes: translations for buttons, fixed InsertUrlDialog crash, ticket #11 1.0.16, fixed cinese and japanese dictionaries 1.0.15, additional submenu for selection of font size: option for cecutient people; downlaod abort of selected file is possible crash during switch of languiages fixed 1.0.14, fixed dependencies bug, ticket #9; fixed selecting working path, ticket #7; removed make httraqt_rpm, httraqt_deb; remastered cmake cpack rulez: make package-binary-deb; package-binary-rpm; package-binary-stgz; package-binary-tbz2; package-binary-tgz; package_source are possible 1.0.13, fixed close app mistake, ticket #4; fixed BuildStringDialog bug, ticket #3; fixed QFileDialog bug for Qt4.7, ticket #5. many thanks to katiem 1.0.12, fixed "OptionsLimits" widget 1.0.11, fixed CPack rulez for debian (detection of act. dpkg architecture) 1.0.10, fixed russian language file 1.0.9, font size for all widgets depended from system font size 1.0.8, one styleSheet/same font size for all widgets 1.0.7, fixed problems with font size 1.0.6, countdown timer changed to stop of downloading 1.0.5, removed popup after breaked downloading, like WinHTTrack; fixed update bug 1.0.4, fixed autodetection of architecture during DEB creating. 1.0.3, remastered vectors init, removed std=c++0x option for compatibility with compilers older GCC 4.4. Checked on Debian 6 and OS/2 1.0.2, removed Qt3Support dependencies from UI files 1.0.1, possible to generate RPM filez 1.0.0, fixed progress tab init, fixed sheduler 0.99.10, fixed bug in OptionsTab url edit widget. cmake settings are in separate files for Linux, OSX (dummy file), Windows (dummy file). 0.99.9, fixed "make package" only for debian (and based) distributions. fixed mistake with language files location after installation. 0.99.8, changes in cmake configuration files. "make package" will be solved in next update of project 0.99.7, additional checking of to loaded icon file size. allowed size < 1kB 0.99.6, additional icons for language actions, remastered about popup window 0.99.5, additional autoselecting of QCheckButtons for extensions in OptionsRulez 0.99.4, implemented GUI actions: new project, browse, changed app dir detection 0.99.3, first official release httraqt-1.4.11/CMakeLists.txt0000664000175000017500000003056014356063217016240 0ustar karbofoskarbofosPROJECT(httraqt) # Configure CMake ... CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) #CMAKE_POLICY(SET CMP0003 OLD) #CMAKE_POLICY(SET CMP0015 OLD) # Qt versions to set: 4, 5, 6 SET(USE_QT_VERSION 6) MESSAGE(STATUS "Using of Qt version for compiling: ${USE_QT_VERSION}") OPTION (USE_DEBUGGER "Include in binary file debug information" OFF) # SET(USE_DEBUGGER false) #enable or disable profiling info # SET(USE_PROFILER false) OPTION (USE_PROFILER "Include in binary file profiling information" OFF) IF(USE_DEBUGGER) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} -Wall") ELSE() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} -Wall") ENDIF() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS") # INCLUDE(CPack) INCLUDE(CheckIncludeFile) INCLUDE(CheckIncludeFileCXX) INCLUDE(TestCXXAcceptsFlag) INCLUDE(CheckCXXCompilerFlag) INCLUDE(FindPkgConfig) # SET(TARGET_NAME httraqt ) SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") SET(CURRENT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}) INCLUDE(OutOfSourceBuild) # Disallow in-source builds INCLUDE(GenerateDEF) # Convenience macro for linking Win32 DLLs using MSVC INCLUDE(Dependencies) # INCLUDE(HTTRAQTWordSize) # Detect 32/64 bit platform # INCLUDE(HTTRAQTCompiler) # Detect problematic compilers # Set the HTTraQt version #cat README | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 EXECUTE_PROCESS ( COMMAND cat README COMMAND grep -E "^[0-9]+\\.[0-9]+\\.[0-9]+" COMMAND head -n 1 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} RESULT_VARIABLE HTTQTVERSION OUTPUT_VARIABLE DESCRIBE_STRING OUTPUT_STRIP_TRAILING_WHITESPACE) IF(NOT DESCRIBE_STRING) SET(DESCRIBE_STRING "no valid git tag for ${PROJECT_NAME} found") ELSE() STRING(REGEX MATCH "([0-9]+\\.[0-9]+\\.[0-9]+)" HTTRAQT_VERSION "${DESCRIBE_STRING}" ) IF (NOT HTTRAQT_VERSION) SET(DESCRIBE_STRING "no valid git tag ${PROJECT_NAME}-x.x.x found") ENDIF() ENDIF() SET(APP_RESOURCES "${PROJECT_SOURCE_DIR}/sources/httraqt.qrc") MESSAGE("-- Version info: ${HTTRAQT_VERSION}") SET(VERSION ${HTTRAQT_VERSION}) EXECUTE_PROCESS ( COMMAND date +"%d %b %Y" COMMAND sed -e "s/\"//g" OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) MESSAGE("-- Version build date: ${BUILD_DATE}") configure_file ( "${PROJECT_SOURCE_DIR}/sources/version.h.in" "${PROJECT_SOURCE_DIR}/sources/version.h" ) # SET(HTTRAQT_PACKAGE httraqt) # SET(HTTRAQT_VERSION ${HTTRAQT_MAJOR_VERSION}.${HTTRAQT_MINOR_VERSION}.${HTTRAQT_RELEASE_VERSION}.${HTTRAQT_BUILD_VERSION}) SET(HTTRAQT_HOST ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_PROCESSOR}) SET(HTTRAQT_COPYRIGHT "Copyright (c) 2012-2023, Eduard Kalinowski. All Rights Reserved.") SET(HTTRAQT_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) IF(${USE_QT_VERSION} MATCHES "4" OR ${USE_QT_VERSION} MATCHES "5") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-exceptions -fno-rtti") ENDIF() IF(${USE_QT_VERSION} MATCHES "6") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -fno-exceptions -fno-rtti") ENDIF() # options for gprof IF(USE_PROFILER) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") # after execution of program: gprof ./build/ponyprog # and get the information from gprof.txt file MESSAGE(STATUS "Compile with profiling information") ELSE() MESSAGE(STATUS "Compile without profiling information") ENDIF() MESSAGE(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") # Setup high-level build options IF(WIN32 AND MSVC) SET(HTTRAQT_ENABLE_SYMBOL_VISIBILITY_DEFAULT ON) ELSE() SET(HTTRAQT_ENABLE_SYMBOL_VISIBILITY_DEFAULT OFF) ENDIF() IF(${USE_QT_VERSION} MATCHES "4") FIND_PACKAGE(Qt4 REQUIRED) INCLUDE(FindQt4) IF(NOT QT4_FOUND) MESSAGE(FATAL_ERROR "Qt4 could not be found. " "If it's INSTALLed in a non-standard location, specify the path to qmake in QT_QMAKE_EXECUTABLE. " "You can do it in interactive mode (ccmake instead of cmake) or using -DVAR=VAL syntax.") ENDIF() ENDIF() IF(${USE_QT_VERSION} MATCHES "5") FIND_PACKAGE (Qt5 REQUIRED COMPONENTS Widgets) FIND_PACKAGE (Qt5 REQUIRED COMPONENTS Multimedia) FIND_PACKAGE (Qt5 REQUIRED COMPONENTS DBus) IF(NOT Qt5Widgets_FOUND) MESSAGE(FATAL_ERROR "Qt5 could not be found. " "If it's INSTALLed in a non-standard location, specify the path to qmake in QT_QMAKE_EXECUTABLE. " "You can do it in interactive mode (ccmake instead of cmake) or using -DVAR=VAL syntax.") ENDIF() ENDIF() IF(${USE_QT_VERSION} MATCHES "6") FIND_PACKAGE (Qt6 REQUIRED COMPONENTS Widgets) FIND_PACKAGE (Qt6 REQUIRED COMPONENTS Multimedia) FIND_PACKAGE (Qt6 REQUIRED COMPONENTS DBus) IF(NOT Qt6Widgets_FOUND) MESSAGE(FATAL_ERROR "Qt6 could not be found. " "If it's INSTALLed in a non-standard location, specify the path to qmake in QT_QMAKE_EXECUTABLE. " "You can do it in interactive mode (ccmake instead of cmake) or using -DVAR=VAL syntax.") ENDIF() ENDIF() INCLUDE(FindHttrack) SET( HTTRACK_INCLUDES_DIR "" ) SET(HTTRAQT_CPACK_PACKAGE_SHLIBDEPS ON) IF(${USE_QT_VERSION} MATCHES "4") INCLUDE_DIRECTORIES(${QT_INCLUDES}) MESSAGE(STATUS "QT_INCLUDES ${QT_INCLUDES}") # LINK_DIRECTORIES(${QT_LIBRARY_DIR}) MESSAGE(STATUS "QT_LIBRARY_DIR ${QT_LIBRARY_DIR}") ENDIF() IF(${USE_QT_VERSION} MATCHES "5") INCLUDE_DIRECTORIES(${Qt5Widgets_INCLUDE_DIRS}, ${Qt5Multimedia_INCLUDE_DIRS}, ${Qt5DBus_INCLUDE_DIRS}) MESSAGE(STATUS "QT_INCLUDES ${Qt5Widgets_INCLUDE_DIRS}, ${Qt5Multimedia_INCLUDE_DIRS}, ${Qt5DBus_INCLUDE_DIRS}") ENDIF() IF(${USE_QT_VERSION} MATCHES "6") INCLUDE_DIRECTORIES(${Qt6Widgets_INCLUDE_DIRS}, ${Qt6Multimedia_INCLUDE_DIRS}, ${Qt6DBus_INCLUDE_DIRS}) MESSAGE(STATUS "QT_INCLUDES ${Qt6Widgets_INCLUDE_DIRS}, ${Qt6Multimedia_INCLUDE_DIRS}, ${Qt6DBus_INCLUDE_DIRS}") ENDIF() SET ( OBJECTS_DIR temp ) SET ( MOC_DIR temp ) SET ( UI_HEADERS_DIR temp ) SET ( UI_SOURCES_DIR temp ) SET ( QT_USE_QTDBUS 1 ) ADD_SUBDIRECTORY(sources/main) ADD_SUBDIRECTORY(sources/options) #ADD_SUBDIRECTORY(sources/icons) INCLUDE_DIRECTORIES( ${HTTRACK_INCLUDES_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/sources/options/includes ${CMAKE_CURRENT_SOURCE_DIR}/sources/main/includes ) IF(${USE_QT_VERSION} MATCHES "4") #QT4_WRAP_CPP(APP_HEADERS_MOC ${HTTRACK_HEADERS} ${MAIN_HEADERS} ${OPT_HEADERS} ) QT4_WRAP_CPP(APP_HEADERS_MOC ${MAIN_HEADERS} ${OPT_HEADERS} ) QT4_WRAP_UI(APP_FORMS_HEADERS ${MAIN_FORMS} ${OPT_FORMS}) QT4_ADD_RESOURCES(APP_RESOURCES_RCC ${APP_RESOURCES}) ENDIF() IF(${USE_QT_VERSION} MATCHES "5") #QT5_WRAP_CPP(APP_HEADERS_MOC ${HTTRACK_HEADERS} ${MAIN_HEADERS} ${OPT_HEADERS} ) QT5_WRAP_CPP(APP_HEADERS_MOC ${MAIN_HEADERS} ${OPT_HEADERS} ) QT5_WRAP_UI(APP_FORMS_HEADERS ${MAIN_FORMS} ${OPT_FORMS}) QT5_ADD_RESOURCES(APP_RESOURCES_RCC ${APP_RESOURCES}) ENDIF() IF(${USE_QT_VERSION} MATCHES "6") #QT5_WRAP_CPP(APP_HEADERS_MOC ${HTTRACK_HEADERS} ${MAIN_HEADERS} ${OPT_HEADERS} ) QT6_WRAP_CPP(APP_HEADERS_MOC ${MAIN_HEADERS} ${OPT_HEADERS} ) QT6_WRAP_UI(APP_FORMS_HEADERS ${MAIN_FORMS} ${OPT_FORMS}) QT6_ADD_RESOURCES(APP_RESOURCES_RCC ${APP_RESOURCES}) ENDIF() INCLUDE_DIRECTORIES( ${HTTRACK_INCLUDES_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) SOURCE_GROUP( "Generated Files" FILES ${MOC_FILES_CPP} ${APP_FORMS_HEADERS} ${APP_RESOURCES_RCC} ) IF(NOT ${USE_DEBUGGER}) ADD_DEFINITIONS(${QT_DEFINITIONS} -DQT_NO_DEBUG_OUTPUT -DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) #ADD_DEFINITIONS(${QT_DEFINITIONS} -DQT_NO_DEBUG_OUTPUT) ENDIF() IF(${USE_QT_VERSION} MATCHES "4") INCLUDE(${QT_USE_FILE}) ADD_DEFINITIONS(${QT_DEFINITIONS} -DQT_PROJECT -DNO_QT3SUPPORT -DDISABLE_QT3SUPPORT) ENDIF() IF(${USE_QT_VERSION} MATCHES "5") ADD_DEFINITIONS( ${Qt5Widgets_DEFINITIONS}) ENDIF() IF(${USE_QT_VERSION} MATCHES "6") ADD_DEFINITIONS( ${Qt6Widgets_DEFINITIONS}) ENDIF() ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${APP_SOURCES} ${MAIN_SOURCES} ${OPT_SOURCES} ${APP_HEADERS_MOC} ${APP_FORMS_HEADERS} ${APP_RESOURCES_RCC} ) IF(${USE_QT_VERSION} MATCHES "4") TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} ${QT_LIBRARIES} httrack) ENDIF() IF(${USE_QT_VERSION} MATCHES "5") TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} ${Qt5Widgets_LIBRARIES} ${Qt5DBus_LIBRARIES} httrack) ENDIF() IF(${USE_QT_VERSION} MATCHES "6") TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} ${Qt6Widgets_LIBRARIES} ${Qt6DBus_LIBRARIES} httrack) ENDIF() ADD_CUSTOM_TARGET (tags COMMAND ctags -R -f tags ${CMAKE_SOURCE_DIR}/sources/main ${CMAKE_SOURCE_DIR}/sources/options WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) # MESSAGE("CMAKE_SOURCE_DIR main ${CMAKE_SOURCE_DIR}") # MESSAGE("CMAKE_CURRENT_BINARY_DIR main ${CMAKE_CURRENT_BINARY_DIR}") # INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) # Setup module enabled/disabled defaults ... IF(WIN32) SET(HTTRAQT_BUILD_GLX_MODULE_DEFAULT OFF) SET(HTTRAQT_BUILD_OSX_MODULE_DEFAULT OFF) SET(HTTRAQT_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT OFF) ENDIF() IF(UNIX AND NOT APPLE) SET(HTTRAQT_BUILD_GLX_MODULE_DEFAULT OFF) SET(HTTRAQT_BUILD_OSX_MODULE_DEFAULT OFF) SET(HTTRAQT_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT OFF) ENDIF() IF(APPLE) SET(HTTRAQT_BUILD_GLX_MODULE_DEFAULT OFF) SET(HTTRAQT_BUILD_OSX_MODULE_DEFAULT ON) SET(HTTRAQT_BUILD_VIRTUAL_OFFSCREEN_MODULE_DEFAULT OFF) ENDIF() OPTION(HTTRAQT_ENABLE_SYMBOL_VISIBILITY "Minimize the number of symbols exported from shared libraries." ${HTTRAQT_ENABLE_SYMBOL_VISIBILITY_DEFAULT}) MARK_AS_ADVANCED(HTTRAQT_ENABLE_SYMBOL_VISIBILITY) # OPTION(HTTRAQT_ENABLE_TESTING "Build the HTTraQt regression test suite." OFF) # SET(BUILD_TESTING ${HTTRAQT_ENABLE_TESTING} CACHE INTERNAL "" FORCE) # INCLUDE(CTest) # MARK_AS_ADVANCED(DART_TESTING_TIMEOUT) # IF(HTTRAQT_ENABLE_TESTING) # CMAKE_MINIMUM_REQUIRED(VERSION 2.6.1 FATAL_ERROR) # CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake @ONLY) # ENDIF(HTTRAQT_ENABLE_TESTING) # Find required external packages HTTRAQT_CHECK_REQUIRED_DEPENDENCY(HTTRAQT_HTTRACK_FOUND "libhttrack2" "http://www.httrack.com" "") # HTTRAQT_CHECK_OPTIONAL_DEPENDENCY(HTTRAQT_BUILD_3DS_IO_MODULE HTTRAQT_3DS_FOUND "lib3ds") # Capture system configuration INCLUDE(SystemConfiguration) # Win32 configuration IF(WIN32) IF(NOT MSVC) SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-runtime-pseudo-reloc" CACHE STRING "" FORCE) SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-runtime-pseudo-reloc -Wl,--export-all-symbols" CACHE STRING "" FORCE) ENDIF() ENDIF() # Setup output directories ... SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${HTTRAQT_BINARY_DIR}/bin) SET(HTTRAQT_LIBDIR lib) # Allows us to handle 64-bit libs if/when it becomes necessary. IF(WIN32) SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${HTTRAQT_BINARY_DIR}/bin) ELSE() SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${HTTRAQT_BINARY_DIR}/${HTTRAQT_LIBDIR}) ENDIF() # Setup a macro for compiling resources ... MACRO(HTTRAQT_COMPILE_RESOURCE OUTPUT INPUT RESOURCE_PATH) SET(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}") SET(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${INPUT}.cpp") GET_FILENAME_COMPONENT(OUTPUT_PATH ${OUTPUT_FILE} PATH) GET_TARGET_PROPERTY(HTTRAQT_RESOURCE_COMPILER httraqt-resource-compiler LOCATION) ADD_CUSTOM_COMMAND( DEPENDS httraqt-resource-compiler DEPENDS ${INPUT_FILE} COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_PATH} COMMAND ${HTTRAQT_RESOURCE_COMPILER} --input ${INPUT_FILE} --path \"${RESOURCE_PATH}\" --output ${OUTPUT_FILE} OUTPUT ${OUTPUT_FILE} COMMENT "Compiling resource ${INPUT_FILE}" ) LIST(APPEND ${OUTPUT} ${OUTPUT_FILE}) ENDMACRO(HTTRAQT_COMPILE_RESOURCE) # Setup subdirectories ... HTTRAQT_CONDITIONAL_BUILD(MSVC gendef) OPTION(HTTRAQT_ENABLE_DISTRIBUTION "Enable distribution targets." ON) HTTRAQT_CONDITIONAL_BUILD(HTTRAQT_ENABLE_DISTRIBUTION distribution) # Hide some cruft ... MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY) MARK_AS_ADVANCED(CMAKE_EXECUTABLE_FORMAT) MARK_AS_ADVANCED(CMAKE_LIBRARY_OUTPUT_DIRECTORY) MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES) MARK_AS_ADVANCED(CMAKE_OSX_DEPLOYMENT_TARGET) MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT) MARK_AS_ADVANCED(CMAKE_RUNTIME_OUTPUT_DIRECTORY) MARK_AS_ADVANCED(CMAKE_USE_CHRPATH) httraqt-1.4.11/clean.sh0000775000175000017500000000037113042707374015116 0ustar karbofoskarbofos#!/bin/bash #make clean rm -if $(find . -name "*.orig") rm -if $(find . -name "*~") rm -if $(find ./sources/ -name "*.cmake") rm -if $(find . -name "Makefile") rm -ifr $(find . -name "CMakeFiles") rm ./build/* -rf rm ./*.cmake rm ./CMakeCache.txt httraqt-1.4.11/LICENSE0000775000175000017500000010451514355526763014523 0ustar karbofoskarbofos 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: HTTraQt Copyright (C) 2012-2023 Eduard Kalinowski 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 . httraqt-1.4.11/icons/0000775000175000017500000000000013042707374014607 5ustar karbofoskarbofoshttraqt-1.4.11/icons/hicolor/0000775000175000017500000000000013042707374016246 5ustar karbofoskarbofoshttraqt-1.4.11/icons/hicolor/64x64/0000775000175000017500000000000013042707374017041 5ustar karbofoskarbofoshttraqt-1.4.11/icons/hicolor/64x64/apps/0000775000175000017500000000000013042707374020004 5ustar karbofoskarbofoshttraqt-1.4.11/icons/hicolor/64x64/apps/httraqt.png0000664000175000017500000001010313042707374022174 0ustar karbofoskarbofosPNG  IHDR@@iqbKGD7A pHYs  tIME 9; IDATxݚ{WUkqwιrsNn&M H,8ePpq?Ji PeP@k["iFDuPdv iRڄ&{y}Mk}o^km}J[=08^·n#pl'OKdr # ;G  _ؓλyjɚ;Ose(~.*" mB=drťzT'rf͓reUsK.Pדʁjky? Buu JQBt{ mS +sHP^Z80;>]E$cb+؋ٽ\=EҲ9ҀRg>ǹc/iܺpڪ. (NfH!@8XI-m9TZ\ZCB7{&f9%$dѡ{ȝ pk~{,&e:27:Gɮ,x&Z1fM:D:JlWJwU}2ujh?ujFpޒwo 1OprT)Դ.[H $+qTatх!=G6E;V uZ02*4:?FU)1qX%4e*ġ@]|d;2eveґ9: l 'ZJPe݂ ,FJ-6q?a߽U6"w3f3)UKY}Q҇Opbc)ѫwޫ۾9C,M %T{x3xUu]|˥/*GhVmǸ_PpK`*XR=@mi{O,@o17Q#sӸ|Db @0x{5odE7q_(1!Fb !sTtMB,LwODF HH <+;8mӝucW6U@sT`l*޼ҝX $r'kW]ʫvA8 D7O,-㵋.|Ur7-!!D;0`@ 9N\wW呈=A =i cc$  |=yk ?Vzo_D!nswȯ_ZS"g!P*ՙtOէ ~NfQ%JsøVnz),4rGYHρ\LJ&꣔~K?о5traO1UB[gx4$y']ƍO^OU:Yqt;t$%&ۿ*MYbQ >p%Ͼ$cr ^|f=b<s `fÈ2my͂ .f H_:oqͧs|Q- 3Rcva^§pt)Gu6-]K)K{Iuqmzæws֔Riᵧj۽G7?VP< m2Rfjq|y/|WnYIO|[^$iv - un;կ/{j8fEuȦS~uT Tr)| +Bfs*TFƘ8 Z7gl|i@D nP5s0kܣbn}NP»K#e#`׽n;ۿ={Y|YQp!JQ % aMYh5 fLQ&p.[goH ^pjb0Dx"0Vj)O 6nU4xGL,>Ve1MnaQʁF% !Dq%Km!+YM!<ƔyEAs"W<Auk׳z:v1nJ@tZ-j!FYd5k/Y R|I޹p 9FB>$ߍh'P5˯oV#qLו v 9)|:`=s]OAzF 0ݫWN٠ua$k~"kˆ;<|=R#q(xDZ#XҼG(-1h%ģK,㽻?7M= Q%I!WΪ2B864(+Da=9:l؈ PUzYXPć=yO P) sƈXIP`]{t0~UP Wc,Z96=5^6y7nco5N"4 $K )cOVX„RT!Xʠت)I繹 Owh yIucţzqHQU=T=~2 @L*?=~T>zE)1xvSO6(Yv8NˠI%bq~q$ 0^[I CId噯r ia294'^;&ڏϯ>ӚG(3B x.%s@sJ:f1Suƒ^S Z ҏ2 qm  MW) GZB_p~͢>#4}T2:;|u^zཧ(r<}#@N>?nZN*o}Q~1%tՌ`CմRz.~QN/(Mg yL`tsm 8`^z 1\bˏr뫞M4ŊPET3\g3s҅_;q)cρ@l32:qכ~k( !VZ8 @gg$JNjuaIENDB`httraqt-1.4.11/icons/hicolor/32x32/0000775000175000017500000000000013042707374017027 5ustar karbofoskarbofoshttraqt-1.4.11/icons/hicolor/32x32/apps/0000775000175000017500000000000013064252656017774 5ustar karbofoskarbofoshttraqt-1.4.11/icons/hicolor/32x32/apps/httraqt.xpm0000644000175000017500000001756713064252656022227 0ustar karbofoskarbofos/* XPM */ static char * httraqt_xpm[] = { "32 32 364 2", " c None", ". c #6CCF90", "+ c #4F86AA", "@ c #4C6CD5", "# c #4C60E7", "$ c #5D98B7", "% c #63BE8D", "& c #3C60B9", "* c #4A72C7", "= c #5890C0", "- c #517DC7", "; c #5DA2A8", "> c #457D9C", ", c #476CC1", "' c #75E092", ") c #71D891", "! c #6DC99A", "~ c #6BD583", "{ c #3C6C9F", "] c #5B95B6", "^ c #71DC8E", "/ c #6DC99B", "( c #6DD885", "_ c #3D6E9C", ": c #5781CC", "< c #6DCA99", "[ c #4D81B5", "} c #3F5AD3", "| c #517FBA", "1 c #6ECB99", "2 c #71D990", "3 c #4F8BA7", "4 c #3752C8", "5 c #2B4E9D", "6 c #529493", "7 c #70D593", "8 c #55A683", "9 c #2F53A1", "0 c #3951D0", "a c #316282", "b c #72DA91", "c c #6DCB98", "d c #70D592", "e c #6AD185", "f c #2B597A", "g c #304CB4", "h c #3357A2", "i c #57A491", "j c #6DCD96", "k c #70D394", "l c #38707B", "m c #244887", "n c #324FB5", "o c #407595", "p c #67B3A9", "q c #6BB3AF", "r c #73C9A8", "s c #6FBEB2", "t c #78DC98", "u c #529F82", "v c #204874", "w c #314FAC", "x c #3E5CC5", "y c #5373DB", "z c #5170D5", "A c #5877DC", "B c #5D72F1", "C c #6D92E0", "D c #74C7AC", "E c #6CD289", "F c #1F466B", "G c #5691A5", "H c #4F7BC4", "I c #4159D3", "J c #4159D1", "K c #465BD6", "L c #455BD7", "M c #536CE6", "N c #74CEA5", "O c #2F5A7D", "P c #539593", "Q c #66C395", "R c #355AA3", "S c #23487F", "T c #22477A", "U c #27498B", "V c #5276D1", "W c #4C8F8A", "X c #3C6E8B", "Y c #68C494", "Z c #335C91", "` c #204671", " . c #1E466E", ".. c #25488B", "+. c #5375D2", "@. c #65BC90", "#. c #2D5D76", "$. c #63B0A1", "%. c #356092", "&. c #224778", "*. c #214774", "=. c #26488D", "-. c #5274D2", ";. c #74E08A", ">. c #2B5876", ",. c #599BA1", "'. c #386495", "). c #214776", "!. c #254888", "~. c #4E72CB", "{. c #335D82", "]. c #518DA1", "^. c #3B6899", "/. c #23477F", "(. c #23477C", "_. c #254886", ":. c #4662D6", "<. c #5C9CB8", "[. c #62AEB2", "}. c #68BCA9", "|. c #6DCB9F", "1. c #73D996", "2. c #3A6689", "3. c #5089A4", "4. c #3D6C9B", "5. c #244882", "6. c #2A4C98", "7. c #3752C1", "8. c #4459E7", "9. c #4B60E7", "0. c #546CF4", "a. c #5572EF", "b. c #5677EA", "c. c #587DE2", "d. c #5A84DC", "e. c #618FD5", "f. c #68A2C7", "g. c #6BB8B0", "h. c #6FCA9E", "i. c #3B678E", "j. c #568EAE", "k. c #3F709B", "l. c #254889", "m. c #2E4DAC", "n. c #354FC4", "o. c #3952C9", "p. c #3450B9", "q. c #3650C3", "r. c #3752C4", "s. c #3853C4", "t. c #3A55C6", "u. c #3E57D2", "v. c #425BDD", "w. c #485FE4", "x. c #4861DD", "y. c #5790B5", "z. c #375D93", "A. c #5D9EAD", "B. c #42759F", "C. c #26498B", "D. c #244780", "E. c #29499A", "F. c #4E6BD9", "G. c #6BBFA3", "H. c #64ADA8", "I. c #5C9BB4", "J. c #5789C4", "K. c #5278CF", "L. c #4A66D4", "M. c #405BCE", "N. c #3351B7", "O. c #2D4CA4", "P. c #547FC2", "Q. c #73DC8E", "R. c #355D99", "S. c #70C7A5", "T. c #5396A1", "U. c #2C4BA3", "V. c #27488F", "W. c #304DB4", "X. c #68A4C3", "Y. c #7CDD92", "Z. c #5D91B2", "`. c #2A4A98", " + c #4066A8", ".+ c #79D694", "++ c #5EAE92", "@+ c #4271A9", "#+ c #59A2A3", "$+ c #2E4CA8", "%+ c #344FC3", "&+ c #6DA9C7", "*+ c #81C38B", "=+ c #82B28A", "-+ c #A3C7B3", ";+ c #829AB7", ">+ c #5B73B0", ",+ c #8496D1", "'+ c #B4CCCB", ")+ c #8EA795", "!+ c #7FA987", "~+ c #7DD88A", "{+ c #3E6F97", "]+ c #5DA1AC", "^+ c #5BA3A9", "/+ c #324EB7", "(+ c #2A4A9E", "_+ c #3650CB", ":+ c #6BA3CC", "<+ c #91D497", "[+ c #8FA29A", "}+ c #889993", "|+ c #BECCCB", "1+ c #AABAB7", "2+ c #AABAB8", "3+ c #CBD7D9", "4+ c #CEDCDE", "5+ c #98A8A2", "6+ c #8C9E97", "7+ c #91BD9E", "8+ c #6BCE8B", "9+ c #3855B7", "0+ c #74DA95", "a+ c #5FAAAB", "b+ c #3752C3", "c+ c #2E4BB3", "d+ c #3851D2", "e+ c #6DA9C8", "f+ c #8CE893", "g+ c #B2C4BB", "h+ c #9BA7A2", "i+ c #C6D1CF", "j+ c #BBC6C4", "k+ c #ACB7B1", "l+ c #B2BBB7", "m+ c #C4CECD", "n+ c #C5CFD0", "o+ c #BBC8C5", "p+ c #AADBB4", "q+ c #5FB38C", "r+ c #3751C1", "s+ c #76DA98", "t+ c #3852C8", "u+ c #2F4BB7", "v+ c #3951D4", "w+ c #6AA2CD", "x+ c #BACEC2", "y+ c #B3BDBA", "z+ c #C8D2D2", "A+ c #C5CFCF", "B+ c #B9C2BF", "C+ c #BCC5C1", "D+ c #CDD5D7", "E+ c #D2DADE", "F+ c #C4D2CE", "G+ c #A6E6B1", "H+ c #68C68D", "I+ c #2D4CAB", "J+ c #5FA2B0", "K+ c #62ADAE", "L+ c #3B55CD", "M+ c #2F4CB6", "N+ c #3750D0", "O+ c #699CD1", "P+ c #B8D1C0", "Q+ c #C9D4D4", "R+ c #D8E3E4", "S+ c #DFE7EB", "T+ c #DCE5E8", "U+ c #DEE7EA", "V+ c #E4EDF4", "W+ c #E3EBF1", "X+ c #D3E6E0", "Y+ c #9EEDAA", "Z+ c #66BAA0", "`+ c #61A8B1", " @ c #3D57CD", ".@ c #324DBF", "+@ c #3850D4", "@@ c #6899D5", "#@ c #A8D4B0", "$@ c #C8D3D3", "%@ c #D9E4E6", "&@ c #E4EBF3", "*@ c #E6EDF5", "=@ c #E5EDF5", "-@ c #E5EEF5", ";@ c #E6EFF7", ">@ c #D5EAE4", ",@ c #92F09D", "'@ c #64B49F", ")@ c #4267C0", "!@ c #3651C4", "~@ c #314CBA", "{@ c #354EC8", "]@ c #557DCF", "^@ c #6ED492", "/@ c #9BDBA3", "(@ c #C1CDCD", "_@ c #D6E1E3", ":@ c #E4ECF3", "<@ c #E7EFF7", "[@ c #E7F0F8", "}@ c #E8F1F9", "|@ c #CFE8DF", "1@ c #5692B1", "2@ c #334FBD", "3@ c #304CB5", "4@ c #2D4BAB", "5@ c #2F4BB2", "6@ c #3551BC", "7@ c #4D7CB9", "8@ c #70D494", "9@ c #90E399", "0@ c #BAC6C5", "a@ c #D1DCDE", "b@ c #E4ECF4", "c@ c #E8F0F9", "d@ c #E9F2FA", "e@ c #C5E5D5", "f@ c #518EA6", "g@ c #2D4CA6", "h@ c #2C4BA7", "i@ c #294A9F", "j@ c #2B4AA4", "k@ c #2B4BA4", "l@ c #3F66B8", "m@ c #70CBA2", "n@ c #B2BFBE", "o@ c #CBD7D8", "p@ c #E3EBF2", "q@ c #E7EEF6", "r@ c #E9F1FA", "s@ c #E2EDF5", "t@ c #B8E5C7", "u@ c #497AAE", "v@ c #26488F", "w@ c #294999", "x@ c #29499D", "y@ c #294A9D", "z@ c #294997", "A@ c #4065BB", "B@ c #70C6AA", "C@ c #AEB8B6", "D@ c #C8D3D4", "E@ c #E0EAF1", "F@ c #E6EEF6", "G@ c #E8F0F8", "H@ c #EAF2FB", "I@ c #E1ECF4", "J@ c #A9E4B7", "K@ c #61AFA4", "L@ c #3557AE", "M@ c #314DB8", "N@ c #334FBE", "O@ c #304DB1", "P@ c #3853C5", "Q@ c #5E9AC2", "R@ c #94CB99", "S@ c #B1BEBA", "T@ c #D5DFE5", "U@ c #E2EAF2", "V@ c #E0E8EF", "W@ c #BDD9CB", " . + @ # $ ", " % & * = - ; ", " > , ' ) ! ", " ~ { ] ^ / ", " ( _ : < ", " [ } | 1 2 ", " 3 4 5 6 1 7 ", " 8 9 0 a b c d ", " e f g h i j k ", " l m n o p q r s t ", " u v w x y z A B C D ", " E F G H I J K L M N ", " O P Q R S T U V ", " W X Y Z ` ...+. ", " @.#.$.%.&.*.=.-. ", " ;.>.,.'.T ).!.~. ", " {.].^./.(._.:.<.[.}.|.1. ", " 2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h. ", " i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y. ", " z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P. ", " Q.R.S.T.U.V.W.X. Y.Z.`. +.+ ", " ++@+ #+$+=.%+&+ *+=+-+;+>+,+'+)+!+~+ ", " {+]+ ^+/+(+_+:+ <+[+}+|+1+2+3+4+5+6+7+ ", " 8+9+0+ a+b+c+d+e+ f+g+h+i+j+k+l+m+n+o+p+ ", " q+r+s+ a+t+u+v+w+ x+y+z+A+B+C+D+E+F+G+ ", " H+I+J+ K+L+M+N+O+ P+Q+R+S+T+U+V+W+X+Y+ ", " Z+ `+ @.@+@@@ #@$@%@&@*@=@-@;@>@,@ ", " '@)@!@~@{@]@^@ /@(@_@:@<@[@}@;@|@ ", " 1@2@3@4@5@6@7@8@ 9@0@a@b@<@c@d@-@e@ ", " f@g@h@i@j@k@l@m@ n@o@p@q@c@r@s@t@ ", " u@v@w@x@y@z@A@B@ C@D@E@F@G@H@I@J@ ", " K@L@M@N@O@P@Q@ R@S@T@U@b@V@W@ "}; httraqt-1.4.11/icons/hicolor/32x32/apps/httraqt.png0000664000175000017500000000270513042707374022173 0ustar karbofoskarbofosPNG  IHDR szzbKGD7A pHYs  tIME 9#tRIDATXýKl\W91sW8vQ(E$vUT!DE J@MUAtXUB$PILIg3qc 7Y8wt~{+BO;evt}m^{Bd^0o$ߗ'?NofL6ŁOޢg;OyӮi&;J+DD'O !\>ߛM|cٕP^NɅsW왗.5ޝ"t#s.ԅ`;{("gvjr-@%ܲ8񬩜ϒwe&>6C5=#%~8te O,_&~$qzFk<_O?$x }g:#  ~R0wGR{5O:1!GSҕ"ޣ9sU%NDfĀ^ljCLXɡ,AAa ($!A[%~wpSG9tXTbx ?H'.pm^| m)7b"""L{t68!b(#?n܌@X}UNr"66%$_aZ%R Ke UU0u@Բq{ *q>tjөf =4լ(+dk#w9OvhuK  5|[_21?Nzos'e_f,Uo>_NƖp q^1u <#7KT %)`}$g5~A GSM #i*kgO4] JWa[Y,كDÁ{?_ e[fs»5NbC w~M0B,E< J4^:C.<ҮG.'2j /%@k6!1&Xw S(Z.qqa w~g鱧ez/PhI#XfU1mR9\'-eY뵝|卟,m uVff_ڶ5 cPZl<&;T>1AX'2ux˳+\z}g ! í#"1 u{p£&A\&24h4 [~'~U:O h@ILBO!FC>qxȃCݬ.<ڢrqQC)8Y# 0r4Աmi*z"Eer(6<&1`" == ${ASTYLE3_VERSION}* ]]; then ARTISTIC_STYLE_OPTIONS="$ARTISTIC_STYLE_OPTIONS --pad-comma --add-braces" elif [[ "`$CMD --version 2>&1`" == ${ASTYLE2_VERSION}* ]]; then ARTISTIC_STYLE_OPTIONS="$ARTISTIC_STYLE_OPTIONS --add-brackets" else echo "Requested version 2 or 3" exit 2 fi set -e $CMD $ARTISTIC_STYLE_OPTIONS --suffix=none --recursive "sources/*.cpp" "sources/*.h" httraqt-1.4.11/templates/0000775000175000017500000000000013042707374015472 5ustar karbofoskarbofoshttraqt-1.4.11/templates/index-footer.html0000664000175000017500000000114113042707374020760 0ustar karbofoskarbofos


Mirror and index made by HTTrack Website Copier [XR&CO'2002]
%s %s
httraqt-1.4.11/templates/topindex-bodycat.html0000664000175000017500000000004113042707374021630 0ustar karbofoskarbofos
%s httraqt-1.4.11/templates/Makefile.am0000664000175000017500000000035313042707374017527 0ustar karbofoskarbofos templatesdir = $(datadir)/httrack/templates templates_DATA = index-body.html index-header.html topindex-footer.html \ index-footer.html topindex-body.html topindex-header.html \ topindex-bodycat.html EXTRA_DIST = $(templates_DATA) httraqt-1.4.11/templates/index-header.html0000664000175000017500000001021413042707374020713 0ustar karbofoskarbofos Local index - HTTrack Website Copier %s
HTTrack Website Copier - Open Source offline browser
Local index - HTTrack

Index of locally available sites:

httraqt-1.4.11/templates/index-body.html0000664000175000017500000000016313042707374020422 0ustar karbofoskarbofos httraqt-1.4.11/templates/topindex-footer.html0000664000175000017500000000112013042707374021500 0ustar karbofoskarbofos
· %s

Mirror and index made by HTTrack Website Copier [XR&CO'2002]
%s
httraqt-1.4.11/templates/Makefile.in0000664000175000017500000002117313042707374017543 0ustar karbofoskarbofos# Makefile.in generated by automake 1.7.9 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFAULT_CFLAGS = @DEFAULT_CFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DL_LIBS = @DL_LIBS@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LFS_FLAG = @LFS_FLAG@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOCKET_LIBS = @SOCKET_LIBS@ STRIP = @STRIP@ THREADS_CFLAGS = @THREADS_CFLAGS@ THREADS_LIBS = @THREADS_LIBS@ V6_FLAG = @V6_FLAG@ VERSION = @VERSION@ VERSION_INFO = @VERSION_INFO@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ templatesdir = $(datadir)/httrack/templates templates_DATA = index-body.html index-header.html topindex-footer.html \ index-footer.html topindex-body.html topindex-header.html \ topindex-bodycat.html EXTRA_DIST = $(templates_DATA) subdir = templates ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = DIST_SOURCES = DATA = $(templates_DATA) DIST_COMMON = $(srcdir)/Makefile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu templates/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: templatesDATA_INSTALL = $(INSTALL_DATA) install-templatesDATA: $(templates_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(templatesdir) @list='$(templates_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(templatesDATA_INSTALL) $$d$$p $(DESTDIR)$(templatesdir)/$$f"; \ $(templatesDATA_INSTALL) $$d$$p $(DESTDIR)$(templatesdir)/$$f; \ done uninstall-templatesDATA: @$(NORMAL_UNINSTALL) @list='$(templates_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(templatesdir)/$$f"; \ rm -f $(DESTDIR)$(templatesdir)/$$f; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: $(mkinstalldirs) $(DESTDIR)$(templatesdir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-templatesDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-templatesDATA .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip install-templatesDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am uninstall-templatesDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: httraqt-1.4.11/templates/topindex-body.html0000664000175000017500000000017413042707374021147 0ustar karbofoskarbofos · %s httraqt-1.4.11/templates/topindex-header.html0000664000175000017500000001006413042707374021441 0ustar karbofoskarbofos List of available projects - HTTrack Website Copier %s
HTTrack Website Copier - Open Source offline browser

Index of locally available projects:

httraqt-1.4.11/distribution/0000775000175000017500000000000013112123120016166 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/genslmeta.bat0000664000175000017500000000034313042707374020662 0ustar karbofoskarbofos:: Check fie name was passed IF [%1]==[] GOTO E_FLAG :: pass shader file through preprocessor then pass results to sl2xml cpp.exe -E -P -x c %1 | httraqt-sl2xml.exe > %1.slmeta EXIT :E_FLAG ECHO. shader name missing ECHO. httraqt-1.4.11/distribution/CMakeLists.txt0000664000175000017500000001103713112123120020730 0ustar karbofoskarbofos# Setup automatic generation of the changelog MESSAGE(STATUS "CPack for Linux configuration..." ) SET( CPACK_SOURCE_PACKAGE_FILE_NAME "httraqt-${HTTRAQT_VERSION}" ) SET( CPACK_SOURCE_IGNORE_FILES "/\\\\.svn/" "/\\\\.kdev4/" "/\\\\.git/" "/pics/" "/build/" "~$" "\\\\.pcs$" # "TODO.txt" # "CMakeLists.txt.user" # "/doxygen/" # "${CMAKE_BINARY_DIR}" ) # --- Package generation SET( HTTRAQT_CPACK_BUILD_CONFIG "Release_and_Debug" ) SET( HTTRAQT_CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME}) SET( HTTRAQT_CPACK_PACKAGE_VENDOR "KarboSoft" ) SET( HTTRAQT_CPACK_PACKAGE_INSTALL_DIRECTORY "HTTraQt ${HTTRAQT_VERSION}" ) SET( HTTRAQT_CPACK_PACKAGE_INSTALL_REGISTRY_KEY "HTTraQt ${HTTRAQT_VERSION}" ) SET( HTTRAQT_CPACK_PACKAGE_HOMEPAGE "http://httraqt.sourceforge.net/" ) # Setup global packaging parameters ... SET( HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS "${CURRENT_BUILD_DIR};httraqt;ALL;/" ) # MESSAGE("HTTRAQT_BINARY_DIR ${CURRENT_BUILD_DIR}") SET( HTTRAQT_CPACK_PACKAGE_DESCRIPTION "HTTraQt free GUI for httrack library." ) SET( HTTRAQT_CPACK_PACKAGE_FILE_NAME "httraqt-setup-${HTTRAQT_VERSION}" ) SET( HTTRAQT_CPACK_PACKAGE_VERSION "${HTTRAQT_VERSION}" ) SET( HTTRAQT_CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENCE" ) SET( HTTRAQT_CPACK_SOURCE_IGNORE_FILES "/CVS/;/.svn/;/.hg/" ) SET( HTTRAQT_CPACK_SOURCE_INSTALLED_DIRECTORIES "${PROJECT_SOURCE_DIR};/" ) SET( HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME "httraqt-source-${HTTRAQT_VERSION}" ) # SET( HTTRAQT_CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME} ) SET( HTTRAQT_CPACK_PACKAGE_VERSION ${HTTRAQT_VERSION} ) SET( HTTRAQT_CPACK_PACKAGE_RELEASE 0 ) SET( HTTRAQT_CPACK_PACKAGE_MAINTAINER "Eduard Kalinowski " ) SET( HTTRAQT_CPACK_PACKAGE_MAINTAINER_NAME "Eduard Kalinowski" ) SET( HTTRAQT_CPACK_PACKAGE_MAINTAINER_EMAIL "eduard_kalinowski@yahoo.de" ) SET( HTTRAQT_CPACK_PACKAGE_DESCRIPTION "HTTraQt is the website copier for offline browsing" ) SET( HTTRAQT_CPACK_PACKAGE_DESCRIPTION_SUMMARY "HTTraQt network tool" ) # SET( PACKAGE_DEPENDS ${hugr_dependencies} ) # SET( HTTRAQT_CPACK_PACKAGE_DEPENDS "${HTTRAQT_CPACK_PACKAGE_SHLIBDEPS}" ) #SET( HTTRAQT_CPACK_PACKAGE_DEPENDS "libhttrack2, libqtcore4, libqtgui4, libc6, libstdc++6" ) SET( HTTRAQT_CPACK_PACKAGE_DEPENDS "libhttrack2, ${HTTRAQT_CPACK_PACKAGE_DEPENDS}" ) # SET( PACKAGE_DEPENDS "libc6 (>= 2.1.3), libhttrack (>= 3.42.1), libqtcore4 (>= 4:4.6.1), libqtgui4 (>= 4:4.5.3), libstdc++6 (>= 4.1.1)" ) SET( HTTRAQT_CPACK_PACKAGE_GROUP "Groupe" ) SET( HTTRAQT_CPACK_PACKAGE_LICENSE "GPL3" ) # ADD_CUSTOM_TARGET(changelog # COMMAND ${GITCOMMAND} log > ${HTTRAQT_BINARY_DIR}/ChangeLog # WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} # ) # Setup convenience targets for tagging and branching # SET( HTTRAQT_VERSION_TAG "httraqt-${HTTRAQT_MAJOR_VERSION}.${HTTRAQT_MINOR_VERSION}.${HTTRAQT_RELEASE_VERSION}.${HTTRAQT_BUILD_VERSION}" ) # SET( HTTRAQT_VERSION_TAG "httraqt-${HTTRAQT_VERSION}" ) # ADD_CUSTOM_TARGET(tag-version # COMMAND ${GITCOMMAND} tag ${HTTRAQT_VERSION_TAG} # WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} # ) #SET( HTTRAQT_BRANCH_TAG "httraqt-release-${HTTRAQT_MAJOR_VERSION}.${HTTRAQT_MINOR_VERSION}" ) #ADD_CUSTOM_TARGET(tag-branch # COMMAND ${SVNCOMMAND} cp ${HTTRAQT_SVN_TRUNK} # ${HTTRAQT_SVN_BRANCHES}/${HTTRAQT_BRANCH_TAG} -m "COMP: Branched HTTraQt Version ${HTTRAQT_MAJOR_VERSION}.${HTTRAQT_MINOR_VERSION}" # WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} # ) # MESSAGE("CMAKE_CURRENT_SOURCE_DIR distr ${CMAKE_CURRENT_SOURCE_DIR} : ${PROJECT_SOURCE_DIR}") # Get a SourceForge username so we can upload distributables to the FRS IF(WIN32) SET( HTTRAQT_SOURCEFORGE_USERNAME "$ENV{USERNAME}" CACHE STRING "SourceForge user account name, for uploading distribution files." ) ELSE(WIN32) SET( HTTRAQT_SOURCEFORGE_USERNAME "$ENV{USER}" CACHE STRING "SourceForge user account name, for uploading distribution files." ) ENDIF(WIN32) MARK_AS_ADVANCED(HTTRAQT_SOURCEFORGE_USERNAME) # Setup some macros that can be used by the platform-specific distribution logic MACRO(HTTRAQT_CHECK_INSTALLED_VERSION FOUND PACKAGE EXPECTED) IF(NOT ${FOUND} STREQUAL ${EXPECTED}) MESSAGE(SEND_ERROR "Found ${PACKAGE} version ${FOUND} - for installation, version ${EXPECTED} is required." ) ENDIF(NOT ${FOUND} STREQUAL ${EXPECTED}) ENDMACRO(HTTRAQT_CHECK_INSTALLED_VERSION) # Generate source packages # ADD_SUBDIRECTORY(source) INCLUDE(CPack) # Generate platform-specific binary packages IF(APPLE) ADD_SUBDIRECTORY(osx) ENDIF(APPLE) IF(UNIX AND NOT APPLE) ADD_SUBDIRECTORY(posix) ENDIF(UNIX AND NOT APPLE) IF(WIN32) ADD_SUBDIRECTORY(win32) ENDIF(WIN32) httraqt-1.4.11/distribution/osx/0000775000175000017500000000000013042707374017024 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/osx/CMakeLists.txt0000664000175000017500000000530113042707374021563 0ustar karbofoskarbofos#OPTION(HTTRAQT_INSTALL_AQSIS "Include Aqsis in the K-3D installer" OFF) #OPTION(HTTRAQT_INSTALL_CGKIT "Include cgkit in the K-3D installer" OFF) #OPTION(HTTRAQT_INSTALL_PYGTK "Include PyGTK in the K-3D installer" OFF) #OPTION(HTTRAQT_INSTALL_PYOPENGL "Include PyOpenGL in the K-3D installer" OFF) #OPTION(HTTRAQT_INSTALL_PYTHON "Include Python in the K-3D installer" ON) OPTION(HTTRAQT_CREATE_PACKAGEMAKER_PACKAGE "Include an option to build a MacOSX PackageMaker package." OFF) SET(HTTRAQT_BINARY_LOCATIONS ) LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt") LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt-make-module-proxy") LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt-renderframe") LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt-renderjob") LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt-resource-compiler") LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt-sl2xml") LIST(APPEND HTTRAQT_BINARY_LOCATIONS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/httraqt-uuidgen") FILE(GLOB_RECURSE HTTRAQT_PLUGIN_BINARIES "${HTTRAQT_BINARY_DIR}/${HTTRAQT_LIBDIR}/httraqt/plugins/*.module") LIST(APPEND HTTRAQT_BINARY_LOCATIONS ${HTTRAQT_PLUGIN_BINARIES}) # Enable automatic installation of library dependencies ... CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/dependencies.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/dependencies.cmake" @ONLY) INSTALL(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/dependencies.cmake") # Install some runtime dependencies that can't be detected via static analysis ... # This is an ugly hack, we should be able to detect this automatically, but I'm feeling lazy ... SET(HTTRAQT_MACPORTS_DIR "/opt/local" CACHE PATH "Root directory containing installed MacPorts packages") MARK_AS_ADVANCED(HTTRAQT_MACPORTS_DIR) INSTALL( PROGRAMS ${HTTRAQT_MACPORTS_DIR}/lib/libgailutil.18.dylib DESTINATION lib ) INSTALL( DIRECTORY ${HTTRAQT_MACPORTS_DIR}/lib/gtk-2.0/2.10.0 DESTINATION lib/gtk-2.0 USE_SOURCE_PERMISSIONS ) INSTALL( DIRECTORY ${HTTRAQT_MACPORTS_DIR}/lib/gtk-2.0/modules DESTINATION lib/gtk-2.0/2.10.0 USE_SOURCE_PERMISSIONS ) INSTALL( DIRECTORY ${HTTRAQT_MACPORTS_DIR}/lib/pango DESTINATION lib USE_SOURCE_PERMISSIONS ) INSTALL( DIRECTORY ${HTTRAQT_MACPORTS_DIR}/etc/gtk-2.0 ${HTTRAQT_MACPORTS_DIR}/etc/fonts ${HTTRAQT_MACPORTS_DIR}/etc/pango DESTINATION etc ) # Bundle packaging is always available ... ADD_SUBDIRECTORY(bundle) # We optionally support creating packagemaker packages ... IF(HTTRAQT_CREATE_PACKAGEMAKER_PACKAGE) ADD_SUBDIRECTORY(packagemaker) ENDIF(HTTRAQT_CREATE_PACKAGEMAKER_PACKAGE) httraqt-1.4.11/distribution/osx/dependencies.cmake.in0000664000175000017500000000164413042707374023066 0ustar karbofoskarbofosINCLUDE(GetPrerequisites) SET(SKIP_FILES "^/usr/X11.*$" ) FOREACH(LOCATION @HTTRAQT_BINARY_LOCATIONS@) MESSAGE(STATUS "Installing: ${LOCATION} dependencies") # Excludes system dependencies, but finds recursive dependencies GET_PREREQUISITES(${LOCATION} DEPENDENCIES 1 0 "" "") FOREACH(DEPENDENCY ${DEPENDENCIES}) GET_FILENAME_COMPONENT(DEPENDENCY_NAME "${DEPENDENCY}" NAME) GET_FILENAME_COMPONENT(DEPENDENCY_ACTUAL "${DEPENDENCY}" REALPATH) SET(INSTALL_FILE 1) FOREACH(SKIP_FILE ${SKIP_FILES}) IF(DEPENDENCY_ACTUAL MATCHES "${SKIP_FILE}") SET(INSTALL_FILE 0) BREAK() ENDIF() ENDFOREACH() IF(INSTALL_FILE) MESSAGE(STATUS "Copying ${DEPENDENCY_ACTUAL} to ${CMAKE_INSTALL_PREFIX}/lib/${DEPENDENCY_NAME}") EXECUTE_PROCESS( COMMAND ${CMAKE_COMMAND} -E copy_if_different "${DEPENDENCY_ACTUAL}" "${CMAKE_INSTALL_PREFIX}/lib/${DEPENDENCY_NAME}" ) ENDIF() ENDFOREACH() ENDFOREACH() httraqt-1.4.11/distribution/osx/packagemaker/0000775000175000017500000000000013042707374021437 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/osx/packagemaker/CMakeLists.txt0000664000175000017500000000137613042707374024206 0ustar karbofoskarbofos# The CPack PackageMaker generator ignores CMAKE_INSTALL_PREFIX and places everything in /usr, complain if there is a mismatch IF(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr") MESSAGE(SEND_ERROR "HTTRAQT_CREATE_PACKAGEMAKER_PACKAGE requires CMAKE_INSTALL_PREFIX set to \"/usr\".") ENDIF(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr") # Generate a packagemaker package ... CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/COPYING ${CMAKE_CURRENT_BINARY_DIR}/COPYING.txt COPYONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-packagemaker.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-packagemaker.cpack) ADD_CUSTOM_TARGET(package-binary-packagemaker ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-packagemaker.cpack ) httraqt-1.4.11/distribution/osx/packagemaker/readme.txt0000664000175000017500000000023513042707374023435 0ustar karbofoskarbofosHTTraQt is licensed under the GNU General Public License. For further information, visit the HTTraQt web site: http://httraqt.sourceforge.net/ Thank You httraqt-1.4.11/distribution/osx/packagemaker/welcome.txt0000664000175000017500000000011213042707374023625 0ustar karbofoskarbofosHTTraQt is a complete free GUI for website downloading library httrack. httraqt-1.4.11/distribution/osx/packagemaker/package-binary-packagemaker.cpack.in0000664000175000017500000000137213042707374030340 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "PackageMaker") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_EXECUTABLES "httraqt" "HTTraQt ${HTTRAQT_VERSION}") SET(CPACK_PACKAGE_FILE_NAME "httraqt-setup-${HTTRAQT_VERSION}-${CMAKE_SYSTEM_PROCESSOR}") SET(CPACK_PACKAGE_NAME "HTTraQt") SET(CPACK_PACKAGE_VENDOR "http://httraqt.sourceforge.net/") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENCE") SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README") #SET(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/welcome.txt") httraqt-1.4.11/distribution/osx/bundle/0000775000175000017500000000000013042707374020275 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/osx/bundle/Info.plist.in0000664000175000017500000000175613042707374022663 0ustar karbofoskarbofos CFBundleDevelopmentRegion English CFBundleExecutable HTTraQt CFBundleGetInfoString @HTTRAQT_VERSION@, @HTTRAQT_COPYRIGHT@ CFBundleIconFile HTTraQt CFBundleIdentifier org.httraqt.HTTraQt CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleShortVersionString @HTTRAQT_VERSION@ CFBundleSignature HTTraQt CFBundleVersion @HTTRAQT_VERSION@ NSHumanReadableCopyright @HTTRAQT_COPYRIGHT@ LSMinimumSystemVersion 10.5 httraqt-1.4.11/distribution/osx/bundle/CMakeLists.txt0000664000175000017500000000126213042707374023036 0ustar karbofoskarbofos# Generate an application bundle (new-style) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-bundle.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-bundle.cpack) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist @ONLY) ADD_CUSTOM_TARGET(package-binary-bundle ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-bundle.cpack ) # Upload the binary bundle to SourceForge for use with the FRS ADD_CUSTOM_TARGET(upload-binary-bundle rsync -avP -e ssh ${CMAKE_CURRENT_BINARY_DIR}/httraqt-setup-${HTTRAQT_VERSION}-${CMAKE_SYSTEM_PROCESSOR}.dmg ${HTTRAQT_SOURCEFORGE_USERNAME}@frs.sourceforge.net:uploads/ ) httraqt-1.4.11/distribution/osx/bundle/package-binary-bundle.cpack.in0000664000175000017500000000134413042707374026033 0ustar karbofoskarbofosSET(CPACK_BUNDLE_ICON "${share_SOURCE_DIR}/icons/httraqt.icns") SET(CPACK_BUNDLE_NAME "HTTraQt") SET(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist") SET(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/httraqt-startup") SET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "Bundle") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "httraqt-setup-${HTTRAQT_VERSION}-${CMAKE_SYSTEM_PROCESSOR}") SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/volume.icns") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") httraqt-1.4.11/distribution/osx/bundle/httraqt-startup0000664000175000017500000000305213042707374023407 0ustar karbofoskarbofos#!/bin/sh # # Author: Aaron Voisine # Inkscape Modifications: Michael Wybrow # HTTraQt Modifications: Timothy M. Shead echo "INFO: Starting $0" HTTRAQT_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/HTTraQt//'`" HTTRAQT_RESOURCES="$HTTRAQT_BUNDLE/Contents/Resources" HTTRAQT_TEMP="/tmp/httraqt/$UID" HTTRAQT_ETC="$HTTRAQT_TEMP/etc" HTTRAQT_PANGO_RC_FILE="$HTTRAQT_ETC/pango/pangorc" rm -rf "$HTTRAQT_TEMP" mkdir -p "$HTTRAQT_ETC/pango" sed -e 's|/opt/local/etc|'"$HTTRAQT_ETC|g" "$HTTRAQT_RESOURCES/etc/pango/pangorc" > "$HTTRAQT_ETC/pango/pangorc" sed -e 's|/opt/local|\"'"$HTTRAQT_RESOURCES|g" -e "s/\.so/.so\"/g" "$HTTRAQT_RESOURCES/etc/pango/pango.modules" > "$HTTRAQT_ETC/pango/pango.modules" sed -e 's|/opt/local|'"$HTTRAQT_RESOURCES|g" -e "s/\.so/.so\"/g" "$HTTRAQT_RESOURCES/etc/gtk-2.0/gdk-pixbuf.loaders" > "$HTTRAQT_ETC/gdk-pixbuf.loaders" cp -f "$HTTRAQT_RESOURCES/etc/pango/pangox.aliases" "$HTTRAQT_ETC/pango/pangox.aliases" export "DYLD_LIBRARY_PATH=$HTTRAQT_RESOURCES/lib" export "FONTCONFIG_PATH=$HTTRAQT_RESOURCES/etc/fonts" export "GDK_PIXBUF_MODULE_FILE=$HTTRAQT_ETC/gdk-pixbuf.loaders" export "GTK_PATH=$HTTRAQT_RESOURCES/lib/gtk-2.0" export "PANGO_RC_FILE=$HTTRAQT_PANGO_RC_FILE" export "PATH=$HTTRAQT_RESOURCES/bin:$PATH" export exec "$HTTRAQT_RESOURCES/bin/httraqt" "--log-level=debug" "--plugins=$HTTRAQT_RESOURCES/lib/httraqt/plugins" "--share=$HTTRAQT_RESOURCES/share/httraqt" "--ui=$HTTRAQT_RESOURCES/lib/httraqt/plugins/httraqt-ngui.module" echo "INFO: Finishing $0" httraqt-1.4.11/distribution/win32/0000775000175000017500000000000013042707374017155 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/win32/aqsisrc0000664000175000017500000000174613042707374020555 0ustar karbofoskarbofosOption "display" "string file" ["file_dspy.dll"] Option "display" "string framebuffer" ["piqsl_dspy.dll"] Option "display" "string zfile" ["file_dspy.dll"] Option "display" "string zframebuffer" ["file_dspy.dll"] Option "display" "string shadow" ["file_dspy.dll"] Option "display" "string tiff" ["file_dspy.dll"] Option "display" "string xpm" ["xpm_dspy.dll"] Option "display" "string exr" ["exr_dspy.dll"] Option "display" "string bmp" ["bmp_dspy.dll"] Option "display" "string debugdd" ["debugdd"] Option "display" "string piqsl" ["piqsl_dspy.dll"] Option "display" "string legacyframebuffer" ["file_dspy.dll"] Option "searchpath" "string shader" [".:@:%SIMBIONT_RM_COMPONENTS%/../SimbiontRM:%SIMBIONT_RM_COMPONENTS%/..:"] Option "searchpath" "string archive" [".:@:"] Option "searchpath" "string texture" [".:@:"] Option "searchpath" "string display" [".:@:"] Option "searchpath" "string procedural" [".:@:%MASSIVE_HOME%/bin:"] Option "searchpath" "string resource" [".:@:"] httraqt-1.4.11/distribution/win32/CMakeLists.txt0000664000175000017500000002366113042707374021725 0ustar karbofoskarbofosOPTION(HTTRAQT_INSTALL_AQSIS "Include Aqsis in the HTTraQt installer" OFF) OPTION(HTTRAQT_INSTALL_BOOST "Include Boost in the HTTraQt installer" OFF) OPTION(HTTRAQT_INSTALL_CGKIT "Include cgkit in the HTTraQt installer" OFF) OPTION(HTTRAQT_INSTALL_GTKMM "Include gtkmm in the HTTraQt installer" OFF) OPTION(HTTRAQT_INSTALL_PYGTK "Include PyGTK in the HTTraQt installer" OFF) OPTION(HTTRAQT_INSTALL_PYOPENGL "Include PyOpenGL in the HTTraQt installer" OFF) OPTION(HTTRAQT_INSTALL_PYTHON "Include Python in the HTTraQt installer" OFF) HTTRAQT_CHECK_INSTALLED_PYTHON_DEPENDENCY(HTTRAQT_INSTALL_CGKIT) HTTRAQT_CHECK_INSTALLED_PYTHON_DEPENDENCY(HTTRAQT_INSTALL_PYGTK) HTTRAQT_CHECK_INSTALLED_PYTHON_DEPENDENCY(HTTRAQT_INSTALL_PYOPENGL) #install mingwm10.dll FIND_PROGRAM(HTTRAQT_MINGW_GCC mingw32-gcc.exe C:/mingw/bin DOC "Path to the MinGW GCC command") MARK_AS_ADVANCED(HTTRAQT_MINGW_GCC) GET_FILENAME_COMPONENT(HTTRAQT_MINGW_PATH ${HTTRAQT_MINGW_GCC} PATH) INSTALL(FILES ${HTTRAQT_MINGW_PATH}/mingwm10.dll DESTINATION bin) IF(HTTRAQT_INSTALL_AQSIS) FIND_PROGRAM(HTTRAQT_AQSIS_COMMAND aqsis.exe DOC "Path to an installed aqsis.exe." ) MARK_AS_ADVANCED(HTTRAQT_AQSIS_COMMAND) IF(NOT HTTRAQT_AQSIS_COMMAND) MESSAGE(SEND_ERROR "Could not locate aqsis.exe.") ENDIF(NOT HTTRAQT_AQSIS_COMMAND) IF(NOT HTTRAQT_BUILD_BUNDLED_RENDERMAN_ENGINES_MODULE) MESSAGE(SEND_ERROR "HTTRAQT_INSTALL_AQSIS requires HTTRAQT_BUILD_BUNDLED_RENDERMAN_ENGINES_MODULE") ENDIF(NOT HTTRAQT_BUILD_BUNDLED_RENDERMAN_ENGINES_MODULE) EXECUTE_PROCESS( COMMAND ${HTTRAQT_AQSIS_COMMAND} --version OUTPUT_VARIABLE HTTRAQT_AQSIS_VERSION ) IF(HTTRAQT_AQSIS_VERSION) STRING(REGEX REPLACE " \\(revision.*" "" HTTRAQT_AQSIS_VERSION ${HTTRAQT_AQSIS_VERSION}) STRING(REGEX REPLACE "aqsis version " "" HTTRAQT_AQSIS_VERSION ${HTTRAQT_AQSIS_VERSION}) HTTRAQT_CHECK_INSTALLED_VERSION(${HTTRAQT_AQSIS_VERSION} "Aqsis" "1.6.0") ELSE(HTTRAQT_AQSIS_VERSION) MESSAGE(SEND_ERROR "Error determining Aqsis version.") ENDIF(HTTRAQT_AQSIS_VERSION) GET_FILENAME_COMPONENT(HTTRAQT_AQSIS_PATH ${HTTRAQT_AQSIS_COMMAND} PATH) INSTALL(DIRECTORY ${HTTRAQT_AQSIS_PATH}/ DESTINATION bin USE_SOURCE_PERMISSIONS PATTERN aqsisrc EXCLUDE ) # Install generic aqsisrc, omitting paths (those are set at runtime through command line options) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/aqsisrc DESTINATION bin) #install msvcrt, needed since aqsis 1.4 FIND_PROGRAM(VCREDIST_X86_2005 vcredist_x86_2005.exe DOC "Path to the Visual Studio C++ 2005 SP1 redistributable") INSTALL(FILES ${VCREDIST_X86_2005} DESTINATION redist) SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x86_2005.exe\\\"'") ENDIF(HTTRAQT_INSTALL_AQSIS) IF(HTTRAQT_INSTALL_BOOST) set(aPrevBoostLib "") foreach(aBoostLib ${Boost_LIBRARIES}) if(NOT (aBoostLib STREQUAL "debug" OR aBoostLib STREQUAL "optimized" OR aPrevBoostLib STREQUAL "debug")) INSTALL(FILES ${aBoostLib} DESTINATION bin) endif() set(aPrevBoostLib ${aBoostLib}) endforeach(aBoostLib) ENDIF(HTTRAQT_INSTALL_BOOST) IF(HTTRAQT_BUILD_COLLADA_IO_MODULE) INSTALL(FILES ${HTTRAQT_COLLADA_LIBRARY} DESTINATION bin) ENDIF(HTTRAQT_BUILD_COLLADA_IO_MODULE) IF(HTTRAQT_INSTALL_GTKMM) INCLUDE(HTTRAQTDFindPkgConfig) PKG_CHECK_MODULES(ATK atk) PKG_CHECK_MODULES(ATKMM atkmm-1.6) PKG_CHECK_MODULES(CAIRO cairo) PKG_CHECK_MODULES(CAIROMM cairomm-1.0) PKG_CHECK_MODULES(GDK gdk-2.0) PKG_CHECK_MODULES(GDKGLEXT gdkglext-1.0) PKG_CHECK_MODULES(GDKGLEXTW gdkglext-win32-1.0) PKG_CHECK_MODULES(GDKMM gdkmm-2.4) PKG_CHECK_MODULES(GTK gtk+-2.0) PKG_CHECK_MODULES(GTKMM gtkmm-2.4) HTTRAQT_CHECK_INSTALLED_VERSION(${ATK_VERSION} "atk" "1.24.0") HTTRAQT_CHECK_INSTALLED_VERSION(${ATKMM_VERSION} "atkmm" "2.14.3") HTTRAQT_CHECK_INSTALLED_VERSION(${CAIRO_VERSION} "cairo" "1.8.6") HTTRAQT_CHECK_INSTALLED_VERSION(${CAIROMM_VERSION} "cairomm" "1.8.0") HTTRAQT_CHECK_INSTALLED_VERSION(${GDK_VERSION} "gdk" "2.14.7") HTTRAQT_CHECK_INSTALLED_VERSION(${GDKGLEXT_VERSION} "gdkglext" "1.2.0") HTTRAQT_CHECK_INSTALLED_VERSION(${GDKGLEXTW_VERSION} "gdkglext-win32" "1.2.0") HTTRAQT_CHECK_INSTALLED_VERSION(${GDKMM_VERSION} "gdkmm" "2.14.3") HTTRAQT_CHECK_INSTALLED_VERSION(${GTK_VERSION} "gtk" "2.14.7") HTTRAQT_CHECK_INSTALLED_VERSION(${GTKMM_VERSION} "gtkmm" "2.14.3") # This is an ugly hack, we should be able to detect this automatically, but I'm feeling lazy ... SET(HTTRAQT_GTK_DIR "c:/gtk" CACHE PATH "Root directory containing GTK/gtkmm") MARK_AS_ADVANCED(HTTRAQT_GTK_DIR) INSTALL(DIRECTORY ${HTTRAQT_GTK_DIR}/bin/ DESTINATION bin USE_SOURCE_PERMISSIONS PATTERN *.pdb EXCLUDE PATTERN *-config EXCLUDE PATTERN *glade* EXCLUDE PATTERN *xml++* EXCLUDE PATTERN atkmm-1.6d.dll EXCLUDE PATTERN gdkmm-2.4d.dll EXCLUDE PATTERN gettext.sh EXCLUDE PATTERN glib-gettextize EXCLUDE PATTERN glib-mkenums EXCLUDE PATTERN glibmm-2.4d.dll EXCLUDE PATTERN gtkaio.sh EXCLUDE PATTERN gtkautogen EXCLUDE PATTERN gtkconfigure EXCLUDE PATTERN gtkmm-2.4d.dll EXCLUDE PATTERN msg*.exe EXCLUDE PATTERN pangomm-1.4d.dll EXCLUDE PATTERN sigc-2.0d.dll EXCLUDE ) INSTALL(DIRECTORY ${HTTRAQT_GTK_DIR}/etc/ DESTINATION etc USE_SOURCE_PERMISSIONS ) INSTALL(DIRECTORY ${HTTRAQT_GTK_DIR}/lib/ DESTINATION ${HTTRAQT_LIBDIR} USE_SOURCE_PERMISSIONS PATTERN *.a EXCLUDE PATTERN *.lib EXCLUDE PATTERN *.pdb EXCLUDE PATTERN *glade* EXCLUDE PATTERN gdkmm-2.4 EXCLUDE PATTERN glib-2.0 EXCLUDE PATTERN glibmm-2.4 EXCLUDE PATTERN gtkglext-1.0 EXCLUDE PATTERN gtkmm-2.4 EXCLUDE PATTERN include EXCLUDE PATTERN libxml++-2.6 EXCLUDE PATTERN pkgconfig EXCLUDE PATTERN sigc++-2.0 EXCLUDE ) # Override the default gtkrc file with our own INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/gtkrc DESTINATION etc/gtk-2.0) ENDIF(HTTRAQT_INSTALL_GTKMM) IF(HTTRAQT_INSTALL_PYTHON) FIND_PROGRAM(HTTRAQT_PYTHON_COMMAND python.exe PATHS "c:/python26" DOC "Path to an installed python.exe." ) MARK_AS_ADVANCED(HTTRAQT_PYTHON_COMMAND) IF(NOT HTTRAQT_PYTHON_COMMAND) MESSAGE(SEND_ERROR "Could not locate python.exe.") ENDIF(NOT HTTRAQT_PYTHON_COMMAND) FIND_PROGRAM(HTTRAQT_PYTHON_LIBRARY python26.dll DOC "Path to the installed python26.dll" ) MARK_AS_ADVANCED(HTTRAQT_PYTHON_LIBRARY) IF(NOT HTTRAQT_PYTHON_LIBRARY) MESSAGE(SEND_ERROR "Could not locate python26.dll.") ENDIF(NOT HTTRAQT_PYTHON_LIBRARY) EXECUTE_PROCESS( COMMAND ${HTTRAQT_PYTHON_COMMAND} -V ERROR_VARIABLE HTTRAQT_PYTHON_VERSION ) IF(HTTRAQT_PYTHON_VERSION) STRING(REGEX REPLACE "^Python ([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" HTTRAQT_PYTHON_VERSION ${HTTRAQT_PYTHON_VERSION}) HTTRAQT_CHECK_INSTALLED_VERSION(${HTTRAQT_PYTHON_VERSION} "Python" "2.6.1") ELSE(HTTRAQT_PYTHON_VERSION) MESSAGE(SEND_ERROR "Error determining Python version.") ENDIF(HTTRAQT_PYTHON_VERSION) INSTALL(PROGRAMS ${HTTRAQT_PYTHON_COMMAND} ${HTTRAQT_PYTHON_LIBRARY} DESTINATION bin ) GET_FILENAME_COMPONENT(HTTRAQT_PYTHON_PATH ${HTTRAQT_PYTHON_COMMAND} PATH) FILE(GLOB HTTRAQT_PYTHON_MODULES ${HTTRAQT_PYTHON_PATH}/Lib/*.py) INSTALL(PROGRAMS ${HTTRAQT_PYTHON_MODULES} DESTINATION ${HTTRAQT_LIBDIR} ) SET(HTTRAQT_PYTHON_SITE_PACKAGES ${HTTRAQT_PYTHON_PATH}/Lib/site-packages) IF(HTTRAQT_INSTALL_CGKIT) EXECUTE_PROCESS( COMMAND ${HTTRAQT_PYTHON_COMMAND} -c "import cgkit.cgkitinfo;print cgkit.cgkitinfo.version" OUTPUT_VARIABLE HTTRAQT_CGKIT_VERSION ) IF(HTTRAQT_CGKIT_VERSION) STRING(REGEX REPLACE "^([0-9]+\\.[0-9]+\\.[0-9]+[^ ]*).*" "\\1" HTTRAQT_CGKIT_VERSION ${HTTRAQT_CGKIT_VERSION}) HTTRAQT_CHECK_INSTALLED_VERSION(${HTTRAQT_CGKIT_VERSION} "cgkit" "2.0.0alpha8") ELSE(HTTRAQT_CGKIT_VERSION) MESSAGE(SEND_ERROR "Error determining cgkit version.") ENDIF(HTTRAQT_CGKIT_VERSION) INSTALL(DIRECTORY ${HTTRAQT_PYTHON_SITE_PACKAGES}/cgkit DESTINATION ${HTTRAQT_LIBDIR}/site-packages PATTERN *.pyc EXCLUDE PATTERN *.pyo EXCLUDE ) ENDIF(HTTRAQT_INSTALL_CGKIT) IF(HTTRAQT_INSTALL_PYGTK) EXECUTE_PROCESS( COMMAND ${HTTRAQT_PYTHON_COMMAND} -c "import gtk;print gtk.pygtk_version" OUTPUT_VARIABLE HTTRAQT_PYGTK_VERSION ) IF(HTTRAQT_PYGTK_VERSION) STRING(REGEX REPLACE ".*([0-9]+), ([0-9]+), ([0-9]+).*" "\\1.\\2.\\3" HTTRAQT_PYGTK_VERSION ${HTTRAQT_PYGTK_VERSION}) HTTRAQT_CHECK_INSTALLED_VERSION(${HTTRAQT_PYGTK_VERSION} "PyGTK" "2.12.1") ELSE(HTTRAQT_PYGTK_VERSION) MESSAGE(SEND_ERROR "Error determining PyGTK version.") ENDIF(HTTRAQT_PYGTK_VERSION) INSTALL(DIRECTORY ${HTTRAQT_PYTHON_SITE_PACKAGES}/cairo DESTINATION ${HTTRAQT_LIBDIR}/site-packages PATTERN *.pyc EXCLUDE PATTERN *.pyo EXCLUDE ) INSTALL(DIRECTORY ${HTTRAQT_PYTHON_SITE_PACKAGES}/gtk-2.0 DESTINATION ${HTTRAQT_LIBDIR}/site-packages PATTERN *.pyc EXCLUDE PATTERN *.pyo EXCLUDE ) INSTALL(PROGRAMS ${HTTRAQT_PYTHON_SITE_PACKAGES}/pygtk.py DESTINATION ${HTTRAQT_LIBDIR}/site-packages ) ENDIF(HTTRAQT_INSTALL_PYGTK) IF(HTTRAQT_INSTALL_PYOPENGL) EXECUTE_PROCESS( COMMAND ${HTTRAQT_PYTHON_COMMAND} -c "import OpenGL.version;print OpenGL.version.__version__" OUTPUT_VARIABLE HTTRAQT_PYOPENGL_VERSION ) IF(HTTRAQT_PYOPENGL_VERSION) STRING(REGEX REPLACE "^([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" HTTRAQT_PYOPENGL_VERSION ${HTTRAQT_PYOPENGL_VERSION}) HTTRAQT_CHECK_INSTALLED_VERSION(${HTTRAQT_PYOPENGL_VERSION} "PyOpenGL" "3.0.0") ELSE(HTTRAQT_PYOPENGL_VERSION) MESSAGE(SEND_ERROR "Error determining PyOpenGL version.") ENDIF(HTTRAQT_PYOPENGL_VERSION) INSTALL(DIRECTORY ${HTTRAQT_PYTHON_SITE_PACKAGES}/OpenGL DESTINATION ${HTTRAQT_LIBDIR}/site-packages PATTERN *.pyc EXCLUDE PATTERN *.pyo EXCLUDE ) ENDIF(HTTRAQT_INSTALL_PYOPENGL) #Needed for Python 2.6 FIND_PROGRAM(VCREDIST_X86_2008 vcredist_x86_2008.exe DOC "Path to the Visual Studio C++ 2008 SP1 redistributable") INSTALL(FILES ${VCREDIST_X86_2008} DESTINATION redist) SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x86_2008.exe\\\"'") ENDIF(HTTRAQT_INSTALL_PYTHON) ADD_SUBDIRECTORY(nsis) httraqt-1.4.11/distribution/win32/gtkrc0000664000175000017500000000222513042707374020213 0ustar karbofoskarbofosgtk-icon-sizes = "gtk-menu=13,13:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32" gtk-toolbar-icon-size = small-toolbar # disable images in buttons. i've only seen ugly delphi apps use this feature. gtk-button-images = 0 # enable/disable images in menus. most "stock" microsoft apps don't use these, except sparingly. # the office apps use them heavily, though. gtk-menu-images = 1 # use the win32 button ordering instead of the GNOME HIG one, where applicable gtk-alternative-button-order = 1 style "msw-default" { GtkWidget::interior-focus = 1 GtkOptionMenu::indicator-size = { 9, 5 } GtkOptionMenu::indicator-spacing = { 7, 5, 2, 2 } GtkSpinButton::shadow-type = in # Owen and I disagree that these should be themable #GtkUIManager::add-tearoffs = 0 #GtkComboBox::add-tearoffs = 0 GtkComboBox::appears-as-list = 1 GtkComboBox::focus-on-click = 0 GOComboBox::add_tearoffs = 0 GtkTreeView::allow-rules = 0 GtkTreeView::expander-size = 12 GtkExpander::expander-size = 12 GtkScrolledWindow::scrollbar_spacing = 1 GtkSeparatorMenuItem::horizontal-padding = 2 engine "wimp" { } } class "*" style "msw-default"httraqt-1.4.11/distribution/win32/nsis/0000775000175000017500000000000013042707374020131 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/win32/nsis/CMakeLists.txt0000664000175000017500000000043313042707374022671 0ustar karbofoskarbofos# Generate NSIS installer CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-nsis.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-nsis.cpack) ADD_CUSTOM_TARGET(package-binary-nsis ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-nsis.cpack ) httraqt-1.4.11/distribution/win32/nsis/package-binary-nsis.cpack.in0000664000175000017500000000230013042707374025363 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "@CMAKE_GENERATOR@") SET(CPACK_GENERATOR "NSIS") SET(CPACK_INSTALL_CMAKE_PROJECTS "@HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS@") SET(CPACK_NSIS_HELP_LINK "http://httraqt.sourceforge.net/") SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\httraqt.exe") SET(CPACK_NSIS_MENU_LINKS "http://httraqt.sourceforge.net/" "HTTraQt Help") SET(CPACK_NSIS_MUI_ICON "@share_SOURCE_DIR@/icons\\\\httraqt.ico") SET(CPACK_PACKAGE_DESCRIPTION "@HTTRAQT_CPACK_PACKAGE_DESCRIPTION@") SET(CPACK_PACKAGE_EXECUTABLES "httraqt" "HTTraQt @HTTRAQT_VERSION@") SET(CPACK_PACKAGE_FILE_NAME "@HTTRAQT_CPACK_PACKAGE_FILE_NAME@") SET(CPACK_PACKAGE_ICON "@CMAKE_CURRENT_SOURCE_DIR@\\\\headerimage.bmp") SET(CPACK_PACKAGE_INSTALL_DIRECTORY "HTTraQt @HTTRAQT_VERSION@") SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "HTTraQt @HTTRAQT_VERSION@") SET(CPACK_PACKAGE_NAME "@HTTRAQT_CPACK_PACKAGE_NAME@") SET(CPACK_NSIS_PACKAGE_NAME "HTTraQt") SET(CPACK_PACKAGE_VENDOR "http://httraqt.sourceforge.net/") SET(CPACK_PACKAGE_VERSION "@HTTRAQT_CPACK_PACKAGE_VERSION@") SET(CPACK_RESOURCE_FILE_LICENSE "@HTTRAQT_CPACK_RESOURCE_FILE_LICENSE@") SET(CPACK_NSIS_MODIFY_PATH "ON") SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@") httraqt-1.4.11/distribution/source/0000775000175000017500000000000013042707374017513 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/source/package-source-zip.cpack.in0000664000175000017500000000074013042707374024615 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "ZIP") SET(CPACK_IGNORE_FILES "${HTTRAQT_CPACK_SOURCE_IGNORE_FILES}") SET(CPACK_INSTALLED_DIRECTORIES "${HTTRAQT_CPACK_SOURCE_INSTALLED_DIRECTORIES}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") httraqt-1.4.11/distribution/source/CMakeLists.txt0000664000175000017500000000454013042707374022256 0ustar karbofoskarbofosSET(HTTRAQT_PACKAGE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") FILE(MAKE_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}") # Generate source packages CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-source-tbz2.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-source-tbz2.cpack) ADD_CUSTOM_TARGET(package-source-tbz2 WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config "${CMAKE_CURRENT_BINARY_DIR}/package-source-tbz2.cpack" ) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-source-tgz.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-source-tgz.cpack) ADD_CUSTOM_TARGET(package-source-tgz WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config "${CMAKE_CURRENT_BINARY_DIR}/package-source-tgz.cpack" ) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-source-zip.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-source-zip.cpack) ADD_CUSTOM_TARGET(package-source-zip WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config "${CMAKE_CURRENT_BINARY_DIR}/package-source-zip.cpack" ) # Upload source packages to SourceForge # ADD_CUSTOM_TARGET(upload-package-source-tbz2 # DEPENDS "${HTTRAQT_PACKAGE_DIRECTORY}/${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.bz2" # WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" # COMMAND rsync -e ssh -R --progress --protect-args "HTTraQt ${HTTRAQT_VERSION}/${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.bz2" "${HTTRAQT_SOURCEFORGE_USERNAME},k3d@frs.sourceforge.net:/home/frs/project/k/k3/k3d/HTTraQt Source/" # ) # # ADD_CUSTOM_TARGET(upload-package-source-tgz # DEPENDS "${HTTRAQT_PACKAGE_DIRECTORY}/${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz" # WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" # COMMAND rsync -e ssh -R --progress --protect-args "HTTraQt ${HTTRAQT_VERSION}/${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz" "${HTTRAQT_SOURCEFORGE_USERNAME},k3d@frs.sourceforge.net:/home/frs/project/k/k3/k3d/HTTraQt Source/" # ) # # ADD_CUSTOM_TARGET(upload-package-source-zip # DEPENDS "${HTTRAQT_PACKAGE_DIRECTORY}/${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}.zip" # WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" # COMMAND rsync -e ssh -R --progress --protect-args "HTTraQt ${HTTRAQT_VERSION}/${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}.zip" "${HTTRAQT_SOURCEFORGE_USERNAME},k3d@frs.sourceforge.net:/home/frs/project/k/k3/k3d/HTTraQt Source/" # ) httraqt-1.4.11/distribution/source/package-source-tbz2.cpack.in0000664000175000017500000000074113042707374024675 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "TBZ2") SET(CPACK_IGNORE_FILES "${HTTRAQT_CPACK_SOURCE_IGNORE_FILES}") SET(CPACK_INSTALLED_DIRECTORIES "${HTTRAQT_CPACK_SOURCE_INSTALLED_DIRECTORIES}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") httraqt-1.4.11/distribution/source/package-source-tgz.cpack.in0000664000175000017500000000074013042707374024617 0ustar karbofoskarbofosSET(CPACK_GENERATOR "TGZ") SET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_IGNORE_FILES "${HTTRAQT_CPACK_SOURCE_IGNORE_FILES}") SET(CPACK_INSTALLED_DIRECTORIES "${HTTRAQT_CPACK_SOURCE_INSTALLED_DIRECTORIES}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_SOURCE_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") httraqt-1.4.11/distribution/posix/0000775000175000017500000000000013112123662017343 5ustar karbofoskarbofoshttraqt-1.4.11/distribution/posix/package-binary-stgz.cpack.in0000664000175000017500000000074013042707374024630 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "STGZ") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") SET(CPACK_RESOURCE_FILE_LICENSE "${HTTRAQT_CPACK_RESOURCE_FILE_LICENSE}") httraqt-1.4.11/distribution/posix/CMakeLists.txt0000664000175000017500000001037113112123147022103 0ustar karbofoskarbofosSET(CPACK_STRIP_FILES TRUE) SET(CMAKE_INSTALL_PREFIX "/usr") #MESSAGE("CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}") SET( CPACK_PACKAGE_GROUP "${HTTRAQT_CPACK_PACKAGE_GROUP}" ) SET( CPACK_PACKAGE_LICENSE "${HTTRAQT_CPACK_PACKAGE_LICENSE}" ) SET( CPACK_PACKAGE_SHLIBDEPS "${HTTRAQT_CPACK_PACKAGE_SHLIBDEPS}" ) # SET( CPACK_PACKAGE_DEPENDS "${HTTRAQT_CPACK_PACKAGE_DEPENDS}" ) INSTALL(PROGRAMS "${CURRENT_BUILD_DIR}/httraqt" DESTINATION bin COMPONENT applications) INSTALL(DIRECTORY "${PROJECT_SOURCE_DIR}/icons" DESTINATION "/usr/share/" FILES_MATCHING PATTERN "*.*") INSTALL(DIRECTORY "${PROJECT_SOURCE_DIR}/lang" DESTINATION "/usr/share/httraqt/" FILES_MATCHING PATTERN "*.*") INSTALL(DIRECTORY "${PROJECT_SOURCE_DIR}/help" DESTINATION "/usr/share/httraqt/" FILES_MATCHING PATTERN "*.*") # MESSAGE("PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}") SET( desktop "${PROJECT_SOURCE_DIR}/desktop/httraqt.desktop") INSTALL(FILES ${desktop} DESTINATION "/usr/share/applications/" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(HTTRAQT_PACKAGE_DIRECTORY "${CURRENT_BUILD_DIR}") # FILE(MAKE_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}") # MESSAGE("CMAKE_CURRENT_SOURCE_DIR posix ${CMAKE_CURRENT_SOURCE_DIR}") # MESSAGE("DIR: ${CMAKE_CURRENT_SOURCE_DIR}") # if not defined IF(NOT DEBIAN_ARCHITECTURE) execute_process( COMMAND dpkg --print-architecture OUTPUT_VARIABLE DEBIAN_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE ) #SET(DEBIAN_ARCHITECTURE i386) #dpkg --print-architecture is always i386 on intel ENDIF(NOT DEBIAN_ARCHITECTURE) IF(DEBIAN_ARCHITECTURE) MESSAGE("DEBIAN_ARCHITECTURE ${DEBIAN_ARCHITECTURE}") SET( HTTRAQT_CPACK_PACKAGE_FILE_NAME "httraqt-${HTTRAQT_VERSION}-${DEBIAN_ARCHITECTURE}" ) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-deb.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-deb.cpack) ADD_CUSTOM_TARGET(package-binary-deb WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-deb.cpack ) ENDIF() IF(NOT RPM_ARCHITECTURE) FIND_PROGRAM(RPMBUILD NAMES rpmbuild PATHS "/usr/bin") IF ( RPMBUILD ) GET_FILENAME_COMPONENT(RPMBUILD_PATH ${RPMBUILD} ABSOLUTE) MESSAGE(STATUS "Found rpmbuild : ${RPMBUILD_PATH}") SET(RPMBUILD_FOUND "YES") execute_process( COMMAND arch OUTPUT_VARIABLE RPM_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE ) ENDIF ( RPMBUILD ) ENDIF() IF(RPM_ARCHITECTURE) MESSAGE("RPM_ARCHITECTURE ${RPM_ARCHITECTURE}") SET( HTTRAQT_CPACK_PACKAGE_FILE_NAME "httraqt-${HTTRAQT_VERSION}-${RPM_ARCHITECTURE}" ) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-rpm.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-rpm.cpack) ADD_CUSTOM_TARGET(package-binary-rpm WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-rpm.cpack ) ENDIF() # Generate self-extracting tarballs CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-stgz.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-stgz.cpack) ADD_CUSTOM_TARGET(package-binary-stgz WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-stgz.cpack ) # Generate tarballs CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-tbz2.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-tbz2.cpack) ADD_CUSTOM_TARGET(package-binary-tbz2 WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-tbz2.cpack ) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/package-binary-tgz.cpack.in ${CMAKE_CURRENT_BINARY_DIR}/package-binary-tgz.cpack) ADD_CUSTOM_TARGET(package-binary-tgz WORKING_DIRECTORY "${HTTRAQT_PACKAGE_DIRECTORY}" COMMAND ${CMAKE_CPACK_COMMAND} --config ${CMAKE_CURRENT_BINARY_DIR}/package-binary-tgz.cpack ) # Note ... we intentionally don't provide upload capability for Posix packages, and leave distribution to the experts httraqt-1.4.11/distribution/posix/package-binary-tgz.cpack.in0000664000175000017500000000073713042707374024453 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "TGZ") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") SET(CPACK_RESOURCE_FILE_LICENSE "${HTTRAQT_CPACK_RESOURCE_FILE_LICENSE}") httraqt-1.4.11/distribution/posix/package-binary-rpm.cpack.in0000664000175000017500000000166613112123662024435 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "RPM") SET(CPACK_PACKAGE_MAINTAINER "${HTTRAQT_CPACK_PACKAGE_MAINTAINER}") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION_SUMMARY}") #SET(CPACK_RPM_PACKAGE_SHLIBDEPS "${HTTRAQT_CPACK_PACKAGE_SHLIBDEPS}") SET(CPACK_RPM_PACKAGE_SHLIBDEPS "${HTTRAQT_CPACK_PACKAGE_SHLIBDEPS}") SET(CPACK_RPM_PACKAGE_REQUIRES "${HTTRAQT_CPACK_PACKAGE_DEPENDS}") #MESSAGE("CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES} : ${HTTRAQT_CPACK_PACKAGE_DEPENDS}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") SET(CPACK_RESOURCE_FILE_LICENSE "${HTTRAQT_CPACK_RESOURCE_FILE_LICENSE}") httraqt-1.4.11/distribution/posix/package-binary-deb.cpack.in0000664000175000017500000000171113112123577024365 0ustar karbofoskarbofosSET(CPACK_STRIP_FILES TRUE) SET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "DEB") SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "${HTTRAQT_CPACK_PACKAGE_MAINTAINER}") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION_SUMMARY}") SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "${HTTRAQT_CPACK_PACKAGE_SHLIBDEPS}") #SET(CPACK_DEBIAN_PACKAGE_DEPENDS "${HTTRAQT_CPACK_PACKAGE_DEPENDS}") #SET(DEBIAN_PACKAGE_BUILDS_DEPENDS "cmake, libusb2-dev") #SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_PACKAGE_FILE_NAME}-${DEBIAN_ARCHITECTURE}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") SET(CPACK_RESOURCE_FILE_LICENSE "${HTTRAQT_CPACK_RESOURCE_FILE_LICENSE}") httraqt-1.4.11/distribution/posix/package-binary-tbz2.cpack.in0000664000175000017500000000074013042707374024522 0ustar karbofoskarbofosSET(CPACK_CMAKE_GENERATOR "${CMAKE_GENERATOR}") SET(CPACK_GENERATOR "TBZ2") SET(CPACK_INSTALL_CMAKE_PROJECTS "${HTTRAQT_CPACK_INSTALL_CMAKE_PROJECTS}") SET(CPACK_PACKAGE_DESCRIPTION "${HTTRAQT_CPACK_PACKAGE_DESCRIPTION}") SET(CPACK_PACKAGE_FILE_NAME "${HTTRAQT_CPACK_PACKAGE_FILE_NAME}") SET(CPACK_PACKAGE_NAME "${HTTRAQT_CPACK_PACKAGE_NAME}") SET(CPACK_PACKAGE_VERSION "${HTTRAQT_CPACK_PACKAGE_VERSION}") SET(CPACK_RESOURCE_FILE_LICENSE "${HTTRAQT_CPACK_RESOURCE_FILE_LICENSE}") httraqt-1.4.11/cmake/0000775000175000017500000000000013165753075014561 5ustar karbofoskarbofoshttraqt-1.4.11/cmake/FindPkgConfig.cmake0000664000175000017500000003611313042707374020232 0ustar karbofoskarbofos# - a pkg-config module for CMake # # Usage: # pkg_check_modules( [REQUIRED] []*) # checks for all the given modules # # pkg_search_module( [REQUIRED] []*) # checks for given modules and uses the first working one # # When the 'REQUIRED' argument was set, macros will fail with an error # when module(s) could not be found # # It sets the following variables: # PKG_CONFIG_FOUND ... true iff pkg-config works on the system # PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program # _FOUND ... set to 1 iff module(s) exist # # For the following variables two sets of values exist; first one is the # common one and has the given PREFIX. The second set contains flags # which are given out when pkgconfig was called with the '--static' # option. # _LIBRARIES ... only the libraries (w/o the '-l') # _LIBRARY_DIRS ... the paths of the libraries (w/o the '-L') # _LDFLAGS ... all required linker flags # _LDFLAGS_OTHERS ... all other linker flags # _INCLUDE_DIRS ... the '-I' preprocessor flags (w/o the '-I') # _CFLAGS ... all required cflags # _CFLAGS_OTHERS ... the other compiler flags # # = for common case # = _STATIC for static linking # # There are some special variables whose prefix depends on the count # of given modules. When there is only one module, stays # unchanged. When there are multiple modules, the prefix will be # changed to _: # _VERSION ... version of the module # _PREFIX ... prefix-directory of the module # _INCLUDEDIR ... include-dir of the module # _LIBDIR ... lib-dir of the module # # = when |MODULES| == 1, else # = _ # # A parameter can have the following formats: # {MODNAME} ... matches any version # {MODNAME}>={VERSION} ... at least version is required # {MODNAME}={VERSION} ... exactly version is required # {MODNAME}<={VERSION} ... modules must not be newer than # # Examples # pkg_check_modules (GLIB2 glib-2.0) # # pkg_check_modules (GLIB2 glib-2.0>=2.10) # requires at least version 2.10 of glib2 and defines e.g. # GLIB2_VERSION=2.10.3 # # pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0) # requires both glib2 and gtk2, and defines e.g. # FOO_glib-2.0_VERSION=2.10.3 # FOO_gtk+-2.0_VERSION=2.8.20 # # pkg_check_modules (XRENDER REQUIRED xrender) # defines e.g.: # XRENDER_LIBRARIES=Xrender;X11 # XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp # # pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) # Copyright (C) 2006 Enrico Scholz # # Redistribution and use, with or without modification, are permitted # provided that the following conditions are met: # # 1. Redistributions must retain the above copyright notice, this # list of conditions and the following disclaimer. # 2. The name of the author may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ### Common stuff #### set(PKG_CONFIG_VERSION 1) set(PKG_CONFIG_FOUND 0) find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable") mark_as_advanced(PKG_CONFIG_EXECUTABLE) if(PKG_CONFIG_EXECUTABLE) set(PKG_CONFIG_FOUND 1) endif(PKG_CONFIG_EXECUTABLE) # Unsets the given variables macro(_pkgconfig_unset var) set(${var} "" CACHE INTERNAL "") endmacro(_pkgconfig_unset) macro(_pkgconfig_set var value) set(${var} ${value} CACHE INTERNAL "") endmacro(_pkgconfig_set) # Invokes pkgconfig, cleans up the result and sets variables macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp) set(_pkgconfig_invoke_result) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist} OUTPUT_VARIABLE _pkgconfig_invoke_result RESULT_VARIABLE _pkgconfig_failed) if (_pkgconfig_failed) set(_pkgconfig_${_varname} "") _pkgconfig_unset(${_prefix}_${_varname}) else(_pkgconfig_failed) string(REGEX REPLACE "[\r\n]" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") string(REGEX REPLACE " +$" "" _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") if (NOT ${_regexp} STREQUAL "") string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") endif(NOT ${_regexp} STREQUAL "") separate_arguments(_pkgconfig_invoke_result) #message(STATUS " ${_varname} ... ${_pkgconfig_invoke_result}") set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result}) _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}") endif(_pkgconfig_failed) endmacro(_pkgconfig_invoke) # Invokes pkgconfig two times; once without '--static' and once with # '--static' macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) _pkgconfig_invoke("${_pkglist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN}) _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static ${ARGN}) endmacro(_pkgconfig_invoke_dyn) # Splits given arguments into options and a package list macro(_pkgconfig_parse_options _result _is_req) set(${_is_req} 0) foreach(_pkg ${ARGN}) if (_pkg STREQUAL "REQUIRED") set(${_is_req} 1) endif (_pkg STREQUAL "REQUIRED") endforeach(_pkg ${ARGN}) set(${_result} ${ARGN}) list(REMOVE_ITEM ${_result} "REQUIRED") endmacro(_pkgconfig_parse_options) ### macro(_pkg_check_modules_internal _is_required _is_silent _prefix) _pkgconfig_unset(${_prefix}_FOUND) _pkgconfig_unset(${_prefix}_VERSION) _pkgconfig_unset(${_prefix}_PREFIX) _pkgconfig_unset(${_prefix}_INCLUDEDIR) _pkgconfig_unset(${_prefix}_LIBDIR) _pkgconfig_unset(${_prefix}_LIBS) _pkgconfig_unset(${_prefix}_LIBS_L) _pkgconfig_unset(${_prefix}_LIBS_PATHS) _pkgconfig_unset(${_prefix}_LIBS_OTHER) _pkgconfig_unset(${_prefix}_CFLAGS) _pkgconfig_unset(${_prefix}_CFLAGS_I) _pkgconfig_unset(${_prefix}_CFLAGS_OTHER) _pkgconfig_unset(${_prefix}_STATIC_LIBDIR) _pkgconfig_unset(${_prefix}_STATIC_LIBS) _pkgconfig_unset(${_prefix}_STATIC_LIBS_L) _pkgconfig_unset(${_prefix}_STATIC_LIBS_PATHS) _pkgconfig_unset(${_prefix}_STATIC_LIBS_OTHER) _pkgconfig_unset(${_prefix}_STATIC_CFLAGS) _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_I) _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER) # create a better addressable variable of the modules and calculate its size set(_pkg_check_modules_list ${ARGN}) list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt) if(PKG_CONFIG_EXECUTABLE) # give out status message telling checked module if (NOT ${_is_silent}) if (_pkg_check_modules_cnt EQUAL 1) message(STATUS "checking for module '${_pkg_check_modules_list}'") else(_pkg_check_modules_cnt EQUAL 1) message(STATUS "checking for modules '${_pkg_check_modules_list}'") endif(_pkg_check_modules_cnt EQUAL 1) endif(NOT ${_is_silent}) set(_pkg_check_modules_packages) set(_pkg_check_modules_failed) # iterate through module list and check whether they exist and match the required version foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list}) set(_pkg_check_modules_exist_query) # check whether version is given if (_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _pkg_check_modules_pkg_op "${_pkg_check_modules_pkg}") string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _pkg_check_modules_pkg_ver "${_pkg_check_modules_pkg}") else(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") set(_pkg_check_modules_pkg_op) set(_pkg_check_modules_pkg_ver) endif(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") # handle the operands if (_pkg_check_modules_pkg_op STREQUAL ">=") list(APPEND _pkg_check_modules_exist_query --atleast-version) endif(_pkg_check_modules_pkg_op STREQUAL ">=") if (_pkg_check_modules_pkg_op STREQUAL "=") list(APPEND _pkg_check_modules_exist_query --exact-version) endif(_pkg_check_modules_pkg_op STREQUAL "=") if (_pkg_check_modules_pkg_op STREQUAL "<=") list(APPEND _pkg_check_modules_exist_query --max-version) endif(_pkg_check_modules_pkg_op STREQUAL "<=") # create the final query which is of the format: # * --atleast-version # * --exact-version # * --max-version # * --exists if (_pkg_check_modules_pkg_op) list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}") else(_pkg_check_modules_pkg_op) list(APPEND _pkg_check_modules_exist_query --exists) endif(_pkg_check_modules_pkg_op) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR) list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}") list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}") # execute the query execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query} RESULT_VARIABLE _pkgconfig_retval) # evaluate result and tell failures if (_pkgconfig_retval) if(NOT ${_is_silent}) message(STATUS " package '${_pkg_check_modules_pkg}' not found") endif(NOT ${_is_silent}) set(_pkg_check_modules_failed 1) endif(_pkgconfig_retval) endforeach(_pkg_check_modules_pkg) if(_pkg_check_modules_failed) # fail when requested if (${_is_required}) message(SEND_ERROR "A required package was not found") endif (${_is_required}) else(_pkg_check_modules_failed) # when we are here, we checked whether requested modules # exist. Now, go through them and set variables _pkgconfig_set(${_prefix}_FOUND 1) list(LENGTH _pkg_check_modules_packages pkg_count) # iterate through all modules again and set individual variables foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages}) # handle case when there is only one package required if (pkg_count EQUAL 1) set(_pkg_check_prefix "${_prefix}") else(pkg_count EQUAL 1) set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}") endif(pkg_count EQUAL 1) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir ) message(STATUS " found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}") endforeach(_pkg_check_modules_pkg) # set variables which are combined for multiple modules _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES "(^| )-l" --libs-only-l ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS "(^| )-L" --libs-only-L ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS "" --libs ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER "" --libs-only-other ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS "(^| )-I" --cflags-only-I ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other ) endif(_pkg_check_modules_failed) else(PKG_CONFIG_EXECUTABLE) if (${_is_required}) message(SEND_ERROR "pkg-config tool not found") endif (${_is_required}) endif(PKG_CONFIG_EXECUTABLE) endmacro(_pkg_check_modules_internal) ### ### User visible macros start here ### ### macro(pkg_check_modules _prefix _module0) # check cached value # if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) _pkgconfig_parse_options (_pkg_modules _pkg_is_required "${_module0}" ${ARGN}) _pkg_check_modules_internal("${_pkg_is_required}" 0 "${_prefix}" ${_pkg_modules}) # _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) # endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) endmacro(pkg_check_modules) ### macro(pkg_search_module _prefix _module0) # check cached value # if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) set(_pkg_modules_found 0) _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required "${_module0}" ${ARGN}) message(STATUS "checking for one of the modules '${_pkg_modules_alt}'") # iterate through all modules and stop at the first working one. foreach(_pkg_alt ${_pkg_modules_alt}) if(NOT _pkg_modules_found) _pkg_check_modules_internal(0 1 "${_prefix}" "${_pkg_alt}") endif(NOT _pkg_modules_found) if (${_prefix}_FOUND) set(_pkg_modules_found 1) endif(${_prefix}_FOUND) endforeach(_pkg_alt) if (NOT ${_prefix}_FOUND) if(${_pkg_is_required}) message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found") endif(${_pkg_is_required}) endif(NOT ${_prefix}_FOUND) # _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) # endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) endmacro(pkg_search_module) ### Local Variables: ### mode: cmake ### End: httraqt-1.4.11/cmake/SystemConfiguration.cmake0000664000175000017500000000132013042707374021566 0ustar karbofoskarbofos# Compiler configuration IF(WIN32) IF(MSVC) SET(HTTRAQT_COMPILER_MSVC TRUE) ELSE(MSVC) SET(HTTRAQT_COMPILER_GCC TRUE) ENDIF(MSVC) ELSE(WIN32) SET(HTTRAQT_COMPILER_GCC TRUE) ENDIF(WIN32) # Win32 API configuration IF(WIN32) SET(HTTRAQT_API_WIN32 TRUE) ENDIF(WIN32) # Darwin API configuration IF(APPLE) SET(HTTRAQT_API_DARWIN TRUE) EXECUTE_PROCESS( COMMAND sw_vers -productVersion OUTPUT_VARIABLE HTTRAQT_OSX_VERSION ) STRING(REGEX REPLACE "([0-9]*)[.]([0-9]*)[.]([0-9]*).*" "\\1" HTTRAQT_OSX_MAJOR_VERSION "${HTTRAQT_OSX_VERSION}") STRING(REGEX REPLACE "([0-9]*)[.]([0-9]*)[.]([0-9]*).*" "\\2" HTTRAQT_OSX_MINOR_VERSION "${HTTRAQT_OSX_VERSION}") ENDIF(APPLE) httraqt-1.4.11/cmake/GenerateDEF.cmake0000664000175000017500000000076713042707374017641 0ustar karbofoskarbofosMACRO(HTTRAQT_GENERATE_DEF_FILE TARGET_NAME) IF(MSVC) ADD_DEPENDENCIES(${TARGET_NAME} httraqt-gendef) GET_TARGET_PROPERTY(gendef_EXE httraqt-gendef LOCATION) ADD_CUSTOM_COMMAND(TARGET ${TARGET_NAME} PRE_LINK COMMAND ${gendef_EXE} $(IntDir)\\$(InputName).def $(TargetFileName) $(IntDir)\\*.obj) SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES LINK_FLAGS "/DEF:$(IntDir)\\$(InputName).def") ENDIF(MSVC) ENDMACRO(HTTRAQT_GENERATE_DEF_FILE) httraqt-1.4.11/cmake/FindHttrack.cmake0000664000175000017500000000277413042707374017771 0ustar karbofoskarbofosSET(HTTRAQT_HTTRACK_FOUND 0) # INCLUDE(HTTRAQTFindPkgConfig) # PKG_CHECK_MODULES(HTTRACK libhttrack2) SET ( HT_DIR "/usr/include/httrack/" ) IF(EXISTS "${HT_DIR}" AND IS_DIRECTORY "${HT_DIR}") SET ( HTTRACK_INCLUDES_DIR "${HT_DIR}" ) INCLUDE_DIRECTORIES(${HTTRACK_INCLUDES_DIR}) ELSE() SET ( HT_DIR "/usr/local/include/httrack/" ) IF(EXISTS "${HT_DIR}" AND IS_DIRECTORY "${HT_DIR}") SET ( HTTRACK_INCLUDES_DIR "${HT_DIR}" ) INCLUDE_DIRECTORIES(${HTTRACK_INCLUDES_DIR}) ENDIF() ENDIF() IF( NOT HTTRACK_INCLUDES_DIR ) MESSAGE(FATAL_ERROR "Please INSTALL the httrack, httrack-dev packages and try again") # RETURN() ELSE() SET (HTTRACK_FOUND 1) ENDIF() MESSAGE("httrack header directory found: " ${HTTRACK_INCLUDES_DIR}) FIND_LIBRARY( HTTRACK_LIBRARY NAMES httrack libhttrack.lib PATHS /usr/local/lib /usr/lib HINTS ${httrack_dirs1} ${httrack_dirs2} ${STAGING_LIBS_DIR} DOC "Path to httrack library." ) IF(NOT HTTRACK_LIBRARY) MESSAGE( FATAL_ERROR "Could not find httrack library.\n" "You may need to INSTALL a package named libhttrack-dev or similarly." ) ENDIF() IF(HTTRACK_FOUND) SET(HTTRAQT_HTTRACK_INCLUDE_DIRS ${HTTRACK_INCLUDES_DIR} ) SET(HTTRAQT_HTTRACK_LIB_DIRS ${HTTRACK_LIBRARY_DIRS} ) SET(HTTRAQT_HTTRACK_LIBS ${HTTRACK_LIBRARIES} ) SET(HTTRAQT_HTTRACK_FOUND 1) ENDIF(HTTRACK_FOUND) httraqt-1.4.11/cmake/OutOfSourceBuild.cmake0000664000175000017500000000047513042707374020761 0ustar karbofoskarbofos# Disallow in-source build STRING(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" HTTRAQT_IN_SOURCE) IF(HTTRAQT_IN_SOURCE) MESSAGE(FATAL_ERROR "HTTraQt requires an out of source build. Please create a separate build directory and run 'cmake path_to_httraqt [options]' there.") ENDIF(HTTRAQT_IN_SOURCE) httraqt-1.4.11/cmake/Dependencies.cmake0000664000175000017500000000354513042707374020153 0ustar karbofoskarbofosSET(HTTRAQT_REQUIRED_LIBRARIES) SET(HTTRAQT_OPTIONAL_LIBRARY_CONFIGURATIONS) SET(HTTRAQT_OPTIONAL_LIBRARIES) MACRO(HTTRAQT_CHECK_REQUIRED_DEPENDENCY FOUND LIBRARY URLS DESCRIPTION) LIST(APPEND HTTRAQT_REQUIRED_LIBRARIES ${LIBRARY}) IF(NOT ${FOUND}) SET(MESSAGE_TEXT "Couldn't find ${LIBRARY}, which is required to build HTTraQt.") SET(MESSAGE_TEXT "${MESSAGE_TEXT} You can obtain ${LIBRARY} from") SET(DELIMITER "") FOREACH(URL ${URLS}) SET(MESSAGE_TEXT "${MESSAGE_TEXT} ${DELIMITER} ${URL}") SET(DELIMITER "or") ENDFOREACH() SET(MESSAGE_TEXT "${MESSAGE_TEXT}.") SET(MESSAGE_TEXT "${MESSAGE_TEXT} ${DESCRIPTION}") MESSAGE(SEND_ERROR "${MESSAGE_TEXT}") ENDIF(NOT ${FOUND}) ENDMACRO(HTTRAQT_CHECK_REQUIRED_DEPENDENCY) MACRO(HTTRAQT_CHECK_OPTIONAL_DEPENDENCY CONFIG FOUND LIBRARY) LIST(APPEND HTTRAQT_OPTIONAL_LIBRARY_CONFIGURATIONS ${CONFIG}) LIST(APPEND HTTRAQT_OPTIONAL_LIBRARIES ${LIBRARY}) IF(${CONFIG}) IF(NOT ${FOUND}) MESSAGE(SEND_ERROR "Couldn't find the ${LIBRARY} library, which is required by ${CONFIG}.") ENDIF(NOT ${FOUND}) ENDIF(${CONFIG}) ENDMACRO(HTTRAQT_CHECK_OPTIONAL_DEPENDENCY) MACRO(HTTRAQT_CHECK_NGUI_DEPENDENCY CONFIG) IF(${CONFIG} AND NOT HTTRAQT_BUILD_NGUI_MODULE) MESSAGE(SEND_ERROR "HTTRAQT_BUILD_NGUI_MODULE is required by ${CONFIG}.") ENDIF(${CONFIG} AND NOT HTTRAQT_BUILD_NGUI_MODULE) ENDMACRO(HTTRAQT_CHECK_NGUI_DEPENDENCY) MACRO(HTTRAQT_CONDITIONAL_BUILD BUILD_OPTION BUILD_DIRECTORY) IF(${BUILD_OPTION}) ADD_SUBDIRECTORY(${BUILD_DIRECTORY}) ENDIF(${BUILD_OPTION}) ENDMACRO(HTTRAQT_CONDITIONAL_BUILD) MACRO(HTTRAQT_ADD_LIBRARY LIBRARY_NAME) ADD_LIBRARY(${LIBRARY_NAME} ${ARGN}) SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES VERSION "${HTTRAQT_SO_VERSION}") ENDMACRO() httraqt-1.4.11/help/0000775000175000017500000000000013154016341014413 5ustar karbofoskarbofoshttraqt-1.4.11/help/index.html0000664000175000017500000000755713154004356016431 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Documentation

httraqt-1.4.11/help/div/0000775000175000017500000000000013042707374015206 5ustar karbofoskarbofoshttraqt-1.4.11/help/div/search.sh0000664000175000017500000000274213042707374017014 0ustar karbofoskarbofos #!/bin/sh # Simple indexing test using HTTrack # A "real" script/program would use advanced search, and # use dichotomy to find the word in the index.txt file # This script is really basic and NOT optimized, and # should not be used for professional purpose :) TESTSITE="http://localhost/" # Create an index if necessary if ! test -f "index.txt"; then echo "Building the index .." rm -rf test httrack --display "$TESTSITE" -%I -O test mv test/index.txt ./ fi # Convert crlf to lf if test "`head index.txt -n 1 | tr '\r' '#' | grep -c '#'`" = "1"; then echo "Converting index to Unix LF style (not CR/LF) .." mv -f index.txt index.txt.old cat index.txt.old|tr -d '\r' > index.txt fi keyword=- while test -n "$keyword"; do printf "Enter a keyword: " read keyword if test -n "$keyword"; then FOUNDK="`grep -niE \"^$keyword\" index.txt`" if test -n "$FOUNDK"; then if ! test `echo "$FOUNDK"|wc -l` = "1"; then # Multiple matches printf "Found multiple keywords: " echo "$FOUNDK"|cut -f2 -d':'|tr '\n' ' ' echo "" echo "Use keyword$ to find only one" else # One match N=`echo "$FOUNDK"|cut -f1 -d':'` PM=`tail +$N index.txt|grep -nE "\("|head -n 1` if ! echo "$PM"|grep "ignored">/dev/null; then M=`echo $PM|cut -f1 -d':'` echo "Found in:" cat index.txt | tail "+$N" | head -n "$M" | grep -E "[0-9]* " | cut -f2 -d' ' else echo "keyword ignored (too many hits)" fi fi else echo "not found" fi fi done httraqt-1.4.11/help/plug.html0000664000175000017500000005514413154004417016262 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

HTTrack Programming page - plugging functions


You can write external functions to be plugged in the httrack library very easily. We'll see there some examples.

The httrack commandline tool allows (since the 3.30 release) to plug external functions to various callbacks defined in httrack. The 3.41 release introduces a cleaned up verion of callbacks, with two major changes:
  • Cleaned up function prototypes, with two arguments always passed (the caller carg structure, and the httrackp* object), convenient to pass an user-defined pointer (see CALLBACKARG_USERDEF(carg))
  • The httrackp* option structure can be directly accessed to plug callbacks (no need to give the callback name and function name in the commandline!)
  • The callback plug is made through the CHAIN_FUNCTION() helper, allowing to chain multiple callbacks of the same type (the callbacks MUST preserve the chain by calling ancestors)

References:
  • the httrack-library.h prototype file
    Note: the Initialization, Main functions, Options handling and Wrapper functions sections are generally the only ones to be considered.
  • the htsdefines.h prototype file, which describes callback function prototypes
  • the htsopt.h prototype file, which describes the full httrackp* structure
  • the callbacks-example*.c files given in the httrack archive
  • the htsjava.c source file (the java class plugin ; overrides 'detect' and 'parse')
  • the example given at the end of this document

Below the list of functions to be defined in the module (plugin).

module function namefunction descriptionfunction signature
hts_plug The module entry point. The opt structure can be used to plug callbacks, using the CHAIN_FUNCTION() macro helper. The argv optional argument is the one passed in the commandline as --wrapper parameter.
return value: 1 upon success, 0 upon error (the mirror will then be aborted)

Wrappers can be plugged inside hts_plug() using:
CHAIN_FUNCTION(opt, <callback name>, <our callback function name>, <our callback function optional custom pointer argument>);

Example:
CHAIN_FUNCTION(opt, check_html, process, userdef);
extern int hts_plug(httrackp *opt, const char* argv);
hts_unplug The module exit point. To free allocated resources without using global variables, use the uninit callback (see below)extern int hts_unplug(httrackp *opt);

Note that all callbacks (except init and uninit) take as first two argument:
  • the t_hts_callbackarg structure
    this structure holds the callback chain (parent callbacks defined before the current callback) pointers, and the user-defined pointer ; see CALLBACKARG_USERDEF(carg))
  • the httrackp structure
    this structure, holding all current httrack options and mirror state, can be read or mofidied

Below the list of callbacks, and associated external wrappers.
callback namecallback descriptioncallback function signature
initNote: the use the "start" callback is advised. Called during initialization.
return value: none
void mycallback(t_hts_callbackarg *carg);
uninitNote: the use os the "end" callback is advised.
Called during un-initialization
return value: none
void mycallback(t_hts_callbackarg *carg);
startCalled when the mirror starts. The opt structure passed lists all options defined for this mirror. You may modify the opt structure to fit your needs.
return value: 1 upon success, 0 upon error (the mirror will then be aborted)
int mycallback(t_hts_callbackarg *carg, httrackp* opt);
endCalled when the mirror ends
return value: 1 upon success, 0 upon error (the mirror will then be considered aborted)
int mycallback(t_hts_callbackarg *carg, httrackp* opt);
choptCalled when options are to be changed. The opt structure passed lists all options, updated to take account of recent changes
return value: 1 upon success, 0 upon error (the mirror will then be aborted)
int mycallback(t_hts_callbackarg *carg, httrackp* opt);
preprocessCalled when a document (which is an html document) is to be parsed (original, not yet modified document). The html address points to the document data address (char**), and the length address points to the lenth of this document. Both pointer values (address and size) can be modified to change the document. It is up to the callback function to reallocate the given pointer (using the hts_realloc()/hts_free() library functions), which will be free()'ed by the engine. Hence, return of static buffers is strictly forbidden, and the use of hts_strdup() in such cases is advised. The url_address and url_file are the address and URI of the file being processed
return value: 1 if the new pointers can be applied (default value)
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char** html, int* len, const char* url_address, const char* url_file);
postprocessCalled when a document (which is an html document) is parsed and transformed (links rewritten). The html address points to the document data address (char**), and the length address points to the lenth of this document. Both pointer values (address and size) can be modified to change the document. It is up to the callback function to reallocate the given pointer (using the hts_realloc()/hts_free() library functions), which will be free()'ed by the engine. Hence, return of static buffers is strictly forbidden, and the use of hts_strdup() in such cases is advised. The url_address and url_file are the address and URI of the file being processed
return value: 1 if the new pointers can be applied (default value)
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char** html, int* len, const char* url_address, const char* url_file);
check_htmlCalled when a document (which may not be an html document) is to be parsed. The html address points to the document data, of lenth len. The url_address and url_file are the address and URI of the file being processed
return value: 1 if the parsing can be processed, 0 if the file must be skipped without being parsed
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char* html, int len, const char* url_address, const char* url_file);
queryCalled when the wizard needs to ask a question. The question string contains the question for the (human) user
return value: the string answer ("" for default reply)
const char* mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* question);
query2Called when the wizard needs to ask a questionconst char* mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* question);
query3Called when the wizard needs to ask a questionconst char* mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* question);
loopCalled periodically (informational, to display statistics)
return value: 1 if the mirror can continue, 0 if the mirror must be aborted
int mycallback(t_hts_callbackarg *carg, httrackp* opt, lien_back* back, int back_max, int back_index, int lien_tot, int lien_ntot, int stat_time, hts_stat_struct* stats);
check_linkCalled when a link has to be tested. The adr and fil are the address and URI of the link being tested. The passed status value has the following meaning: 0 if the link is to be accepted by default, 1 if the link is to be refused by default, and -1 if no decision has yet been taken by the engine
return value: same meaning as the passed status value ; you may generally return -1 to let the engine take the decision by itself
int mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* adr, const char* fil, int status);
check_mimeCalled when a link download has begun, and needs to be tested against its MIME type. The adr and fil are the address and URI of the link being tested, and the mime string contains the link type being processed. The passed status value has the following meaning: 0 if the link is to be accepted by default, 1 if the link is to be refused by default, and -1 if no decision has yet been taken by the engine
return value: same meaning as the passed status value ; you may generally return -1 to let the engine take the decision by itself
int mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* adr, const char* fil, const char* mime, int status);
pauseCalled when the engine must pause. When the lockfile passed is deleted, the function can return
return value: none
void mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* lockfile);
filesaveCalled when a file is to be saved on disk
return value: none
void mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* file);
filesave2Called when a file is to be saved or checked on disk
The hostname, filename and local filename are given. Two additional flags tells if the local file is new (is_new), if the local file is to be modified (is_modified), and if the file was not updated remotely (not_updated).
(!is_new && !is_modified): the file is up-to-date, and will not be modified
(is_new && is_modified): a new file will be written (or an updated file is being written)
(!is_new && is_modified): a file is being updated (append)
(is_new && !is_modified): an empty file will be written ("do not recatch locally erased files")
not_updated: the file was not re-downloaded because it was up-to-date (no data transfered again)

return value: none
void mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* hostname, const char* filename, const char* localfile, int is_new, int is_modified, int not_updated);
linkdetectedCalled when a link has been detected
return value: 1 if the link can be analyzed, 0 if the link must not even be considered
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char* link);
linkdetected2Called when a link has been detected
return value: 1 if the link can be analyzed, 0 if the link must not even be considered
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char* link, const const char* tag_start);
xfrstatusCalled when a file has been processed (downloaded, updated, or error)
return value: must return 1
int mycallback(t_hts_callbackarg *carg, httrackp* opt, lien_back* back);
savenameCalled when a local filename has to be processed. The adr_complete and fil_complete are the address and URI of the file being saved ; the referer_adr and referer_fil are the address and URI of the referer link. The save string contains the local filename being used. You may modifiy the save string to fit your needs, up to 1024 bytes (note: filename collisions, if any, will be handled by the engine by renaming the file into file-2.ext, file-3.ext ..).
return value: must return 1
int mycallback(t_hts_callbackarg *carg, httrackp* opt, const char* adr_complete, const char* fil_complete, const char* referer_adr, const char* referer_fil, char* save);
sendheadCalled when HTTP headers are to be sent to the remote server. The buff buffer contains text headers, adr and fil the URL, and referer_adr and referer_fil the referer URL. The outgoing structure contains all information related to the current slot.
return value: 1 if the mirror can continue, 0 if the mirror must be aborted
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* outgoing);
receiveheadCalled when HTTP headers are recevived from the remote server. The buff buffer contains text headers, adr and fil the URL, and referer_adr and referer_fil the referer URL. The incoming structure contains all information related to the current slot.
return value: 1 if the mirror can continue, 0 if the mirror must be aborted
int mycallback(t_hts_callbackarg *carg, httrackp* opt, char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* incoming);
detectCalled when an unknown document is to be parsed. The str structure contains all information related to the document.
return value: 1 if the type is known and can be parsed, 0 if the document type is unknown
int mycallback(t_hts_callbackarg *carg, httrackp* opt, htsmoduleStruct* str);
parseThe str structure contains all information related to the document.
return value: 1 if the document was successfully parsed, 0 if an error occured
int mycallback(t_hts_callbackarg *carg, httrackp* opt, htsmoduleStruct* str);


Note: the optional libhttrack-plugin module (libhttrack-plugin.dll or libhttrack-plugin.so), if found in the library environment, is loaded automatically, and its hts_plug() function being called.

An example is generally more efficient than anything else, so let's write our first module, aimed to stupidely print all parsed html files:
/* system includes */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* standard httrack module includes */
#include "httrack-library.h"
#include "htsopt.h"
#include "htsdefines.h"

/* local function called as "check_html" callback */
static int process_file(t_hts_callbackarg /*the carg structure, holding various information*/*carg, /*the option settings*/httrackp *opt, 
                        /*other parameters are callback-specific*/
                        char* html, int len, const char* url_address, const char* url_file) {
  void *ourDummyArg = (void*) CALLBACKARG_USERDEF(carg);    /*optional user-defined arg*/

  /* call parent functions if multiple callbacks are chained. you can skip this part, if you don't want previous callbacks to be called. */
  if (CALLBACKARG_PREV_FUN(carg, check_html) != NULL) {
    if (!CALLBACKARG_PREV_FUN(carg, check_html)(CALLBACKARG_PREV_CARG(carg), opt,
                                                html, len, url_address, url_file)) {
        return 0;  /* abort */
      }
  }

  printf("file %s%s content: %s\n", url_address, url_file, html);
  return 1;  /* success */
}

/* local function called as "end" callback */
static int end_of_mirror(t_hts_callbackarg /*the carg structure, holding various information*/*carg, /*the option settings*/httrackp *opt) {
  void *ourDummyArg = (void*) CALLBACKARG_USERDEF(carg);    /*optional user-defined arg*/

  /* processing */
  fprintf(stderr, "That's all, folks!\n");

  /* call parent functions if multiple callbacks are chained. you can skip this part, if you don't want previous callbacks to be called. */
  if (CALLBACKARG_PREV_FUN(carg, end) != NULL) {
    /* status is ok on our side, return other callabck's status */
    return CALLBACKARG_PREV_FUN(carg, end)(CALLBACKARG_PREV_CARG(carg), opt);
  }

  return 1;  /* success */
}

/*
module entry point
the function name and prototype MUST match this prototype
*/
EXTERNAL_FUNCTION int hts_plug(httrackp *opt, const char* argv) {
  /* optional argument passed in the commandline we won't be using here */
  const char *arg = strchr(argv, ',');
  if (arg != NULL)
    arg++;

  /* plug callback functions */
  CHAIN_FUNCTION(opt, check_html, process_file, /*optional user-defined arg*/NULL);
  CHAIN_FUNCTION(opt, end, end_of_mirror, /*optional user-defined arg*/NULL);

  return 1;  /* success */
}

/*
module exit point
the function name and prototype MUST match this prototype
*/
EXTERNAL_FUNCTION int hts_unplug(httrackp *opt) {
  fprintf(stder, "Module unplugged");

  return 1;  /* success */
}

Compile this file ; for example:
gcc -O -g3 -shared -o mylibrary.so myexample.c
and plug the module using the commandline ; for example:
httrack --wrapper mylibrary http://www.example.com
or, if some parameters are desired:
httrack --wrapper mylibrary,myparameter-string http://www.example.com
(the "myparameter-string" string will be available in the 'arg' parameter passed to the hts_plug entry point)


httraqt-1.4.11/help/step9_opt7.html0000664000175000017500000000741213154004577017332 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Proxy




  • Proxy

  • You can enter manually the proxy name and port (enter the name in the first field, the port in the second field)

  • Use proxy for FTP transfers

  • The engine can use default HTTP proxy for all ftp (ftp://) transfers. Most proxies allow this, and if you are behind a firewall, this option will allow you to easily catch all ftp links. Besides, ftp transfers managed by the proxy are more reliable than the engine's default FTP client.
    This option is checked by default


  • Configure

  • Click on this button to configure the proxy.
    If the proxy needs authentication you can define the login username/password







  • Hide password

  • Use it if you do not want to display the password (hides the proxy name)





Back to Home

httraqt-1.4.11/help/filters.html0000664000175000017500000004221213154004335016752 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Filters: Advanced


See also: The FAQ

You have to know that once you have defined starts links, the default mode is to mirror these links - i.e. if one of your start page is www.someweb.com/test/index.html, all links starting with www.someweb.com/test/ will be accepted. But links directly in www.someweb.com/.. will not be accepted, however, because they are in a higher strcuture. This prevent HTTrack from mirroring the whole site. (All files in structure levels equal or lower than the primary links will be retrieved.)

But you may want to download files that are not directly in the subfolders, or on the contrary refuse files of a particular type. That is the purpose of filters.

Scan rules based on URL or extension (e.g. accept or refuse all .zip or .png files)

To accept a family of links (for example, all links with a specific name or type), you just have to add an authorization filter, like +*.png. The pattern is a plus (this one: +), followed by a pattern composed of letters and wildcards (this one: *).

To forbide a family of links, define an authorization filter, like -*.png. The pattern is a dash (this one: -), followed by a the same kind of pattern as for the authorization filter.

Example: +*.png will accept all files finished by .png
Example: -*.png will refuse all files finished by .png

Scan rules based on size (e.g. accept or refuse files bigger/smaller than a certain size)

Once a link is scheduled for download, you can still refuse it (i.e. abort the download) by checking its size to ensure that you won't reach a defined limit. Example: You may want to accept all files on the domain www.example.com, using '+www.example.com/*', including gif files inside this domain and outside (eternal images), but not take to large images, or too small ones (thumbnails)
Excluding gif images smaller than 5KB and images larger than 100KB is therefore a good option; +www.example.com +*.png -*.png*[<5] -*.png*[>100]
Important notice: size scan rules are checked after the link was scheduled for download, allowing to abort the connection.

Scan rules based on MIME types (e.g. accept or refuse all files of type audio/mp3)

Once a link is scheduled for download, you can still refuse it (i.e. abort the download) by matching its MIME type against certain patterns. Example: You may want to accept all files on the domain www.example.com, using '+www.example.com/*', and exclude all gif files, using '-*.png'. But some dynamic scripts (such as www.example.com/dynamic.php) can both generate html content, or image data content, depending on the context. Excluding this script, using the scan rule '-www.example.com/dynamic.php', is therefore not a good solution.
The only reliable way in such cases is to exclude the specific mime type 'image/gif', using the scan rule syntax:
-mime:image/gif
Important notice: MIME types scan rules are only checked against links that were scheduled for download, i.e. links already authorized by url scan rules. Hence, using '+mime:image/gif' will only be a hint to accept images that were already authorized, if previous MIME scan rules excluded them - such as in '-mime:*/* +mime:text/html +mime:image/gif'

Scan rules patterns:

1.a. Scan rules based on URL or extension


Filters are analyzed by HTTrack from the first filter to the last one. The complete URL name is compared to filters defined by the user or added automatically by HTTrack.

A scan rule has an higher priority is it is declared later - hierarchy is important:

+*.png -image*.png Will accept all gif files BUT image1.png,imageblue.png,imagery.png and so on
-image*.png +*.png Will accept all gif files, because the second pattern is prioritary (because it is defined AFTER the first one)

Note: these scan rules can be mixed with scan rules based on size (see 1.b)

We saw that patterns are composed of letters and wildcards (*), as in */image*.png


Special wild cards can be used for specific characters: (*[..])

* any characters (the most commonly used)
*[file] or *[name] any filename or name, e.g. not /,? and ; characters
*[path] any path (and filename), e.g. not ? and ; characters
*[a,z,e,r,t,y] any letters among a,z,e,r,t,y
*[a-z] any letters
*[0-9,a,z,e,r,t,y] any characters among 0..9 and a,z,e,r,t,y
*[\*] the * character
*[\\] the \ character
*[\[\]] the [ or ] character
*[] no characters must be present after


Here are some examples of filters: (that can be generated automatically using the interface)

www.thisweb.com* This will refuse/accept this web site (all links located in it will be rejected)
*.com/* This will refuse/accept all links that contains .com in them
*cgi-bin* This will refuse/accept all links that contains cgi-bin in them
www.*[path].com/*[path].zip This will refuse/accept all zip files in .com addresses
*someweb*/*.tar* This will refuse/accept all tar (or tar.gz etc.) files in hosts containing someweb
*/*somepage* This will refuse/accept all links containing somepage (but not in the address)
*.html This will refuse/accept all html files.
Warning! With this filter you will accept ALL html files, even those in other addresses. (causing a global (!) web mirror..) Use www.someweb.com/*.html to accept all html files from a web.
*.html*[] Identical to *.html, but the link must not have any supplemental characters at the end (links with parameters, like www.someweb.com/index.html?page=10, will be refused)

1.b. Scan rules based on size


Filters are analyzed by HTTrack from the first filter to the last one. The sizes are compared against scan rules defined by the user.

A scan rule has an higher priority is it is declared later - hierarchy is important.
Note: scan rules based on size can be mixed with regular URL patterns


Size patterns:

*[<NN] the file size must be smaller than NN KB
(note: this may cause broken files during the download)
*[>NN] the file size must be greater than NN KB
(note: this may cause broken files during the download)
*[<NN>MM] the file size must be smaller than NN KB and greater than MM KB
(note: this may cause broken files during the download)


Here are some examples of filters: (that can be generated automatically using the interface)

-*[<10] the file will be forbidden if its size is smaller than 10 KB
-*[>50] the file will be forbidden if its size is greater than 50 KB
-*[<10] -*[>50] the file will be forbidden if if its size is smaller than 10 KB or greater than 50 KB
+*[<80>1] the file will be accepted if if its size is smaller than 80 KB and greater than 1 KB

2. Scan rules based on MIME types


Filters are analyzed by HTTrack from the first filter to the last one. The complete MIME type is compared against scan rules defined by the user.

A scan rule has an higher priority is it is declared later - hierarchy is important
Note: scan rules based on MIME types can NOT be mixed with regular URL patterns or size patterns within the same rule, but you can use both of them in distinct ones


Here are some examples of filters: (that can be generated automatically using the interface)

-mime:application/octet-stream This will refuse all links of type 'application/octet-stream' that were already scheduled for download (i.e. the download will be aborted)
-mime:application/* This will refuse all links of type begining with 'application/' that were already scheduled for download (i.e. the download will be aborted)
-mime:application/* +mime:application/pdf This will refuse all links of type begining with 'application/' that were already scheduled for download, except for 'application/pdf' ones (i.e. all other 'application/' link download will be aborted)
-mime:video/* This will refuse all video links that were already scheduled for download (i.e. all other 'application/' link download will be aborted)
-mime:video/* -mime:audio/* This will refuse all audio and video links that were already scheduled for download (i.e. all other 'application/' link download will be aborted)
-mime:*/* +mime:text/html +mime:image/* This will refuse all links that were already scheduled for download, except html pages, and images (i.e. all other link download will be aborted). Note that this is a very unefficient way of filtering files, as aborted downloads will generate useless requests to the server. You are strongly advised to use additional URL scan rules

2. Scan rules based on URL or size, and scan rules based on MIME types interactions

You must use scan rules based on MIME types very carefully, or you will end up with an imcomplete mirror, or create an unefficient download session (generating costly and useless requests to the server)


Here are some examples of good/bad scan rules interactions:

Purpose Method Result
Download all html and images on www.example.com -*
+www.example.com/*.html
+www.example.com/*.php
+www.example.com/*.asp
+www.example.com/*.png
+www.example.com/*.jpg
+www.example.com/*.png
-mime:*/* +mime:text/html +mime:image/*
Good: efficient download
-*
+www.example.com/*
-mime:*/* +mime:text/html +mime:image/*
Bad: many aborted downloads, leading to poor performances and server load
Download only html on www.example.com, plus ZIP files -*
+www.example.com/*.html
+www.example.com/somedynamicscript.php
+www.example.com/*.zip
-mime:* +mime:text/html +mime:application/zip
Good: ZIP files will be downloaded, even those generated by 'somedynamicscript.php'
-*
+www.example.com/*.html
-mime:* +mime:text/html +mime:application/zip
Bad: ZIP files will never be scheduled for download, and hence the zip mime scan rule will never be used
Download all html, and images smaller than 100KB on www.example.com -*
+www.example.com/*.html
+www.example.com/*.php
+www.example.com/*.asp
+www.example.com/*.png*[<100]
+www.example.com/*.jpg*[<100]
+www.example.com/*.png*[<100]
-mime:*/* +mime:text/html +mime:image/*
Good: efficient download
-*
+www.example.com/**[<100]
-mime:*/* +mime:text/html +mime:image/*
Bad: many aborted downloads, leading to poor performances and server load

httraqt-1.4.11/help/shelldoc.html0000664000175000017500000000672713154004435017113 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Windows Shell Documentation


Note: WinHTTrack (Windows release of HTTrack) and WebHTTrack (Linux/Unix release of HTTrack) are very similar, but not exactly identical. You may encounter minor differences (in the display, or in various options) between these two releases. The engine behind these two release is identical.

WinHTTrack WebHTTrack

httraqt-1.4.11/help/addurl.html0000664000175000017500000000737213154004240016560 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Add a URL


  1. Enter a typical Web address

  2. Just type in your address in the field



    OR

  3. Enter a Web address with authentication

  4. Useful when you need basic authentication to watch the Web page



    OR

  5. Capture a link from your Web browser to HTTrack

  6. Use this tool only for form-based pages (pages delivered after submiting a form) that need some analysis



    Set, as explained, your Web browser proxy preferences to the values indicated : set the proxy's address, and the proxy's port, then click on the button or link as you usually do in your Web browser.
    The temporary proxy, installed by HTTrack, will then capture the link and display a confirmation page.






Back to Home

httraqt-1.4.11/help/dev.html0000664000175000017500000001001213154004312016044 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

HTTrack Programming page


HTTrack can be used as a third-party program in batch files, or as library. Depending on your needs, you may look:

Programming

Technical references

  • Cache format

  • HTTrack stores original HTML data and references to downloaded files in a cache, located in the hts-cache directory. This page describes the HTTrack cache format.


httraqt-1.4.11/help/step9_opt9.html0000664000175000017500000001103713154004613017321 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Log files, Index, Cache




  • Force to store all files in cache

  • Force to store all files in the cache, even gif files, zip files and so on..
    Without this option, the engine will only save in cache html files for updating/continue purpose.
    It can be useful, however, to keep all files in cache if you want in the future to change the site structure
    Warning! This option will appreciably inflate the cache that will become as big as the mirror itself!


  • Do not re-download locally erased files

  • This option prevents HTTrack from re-asking a file that exists locally with null size, or that has been erased by the user
    (If the user erased the file, this option will create a null-file to prevent the engine to catch the file next time)
    Useful if you are erasing progressively large files on the local mirror and do not want to reload them!


  • Create Log files

  • Create log file where informations, error and warnings about the current mirror will be saved
    If you do not generate log files, you will not be able to know what errors occured!
    It is strongly advised to leave this option checked
    Note: You can define the debug-level of the log-files. Default is "normal"


  • Make an index

  • Generate an index.html on the top of the directory. Very useful.

  • Make a word database

  • Generate an index.txt database on the top of the directory. Very useful for linguistic analysis, this feature will allow you to list all words of all mirrored pages in the current project.
    With this index file, you will be able to list which words were detected, and where.






Back to Home

httraqt-1.4.11/help/options.html0000664000175000017500000003052613154004376017007 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Options

  • Filters: how to use them

  • Here you can find informations on filters: how to accept all gif files in a mirror, for example

  • List of options

w  mirror with automatic wizard
This is the default scanning option, the engine automatically scans links according to the default options, and filters defined. It does not prompt a message when a "foreign" link is reached.

W  semi-automatic mirror with help-wizard (asks questions)
This option lets the engine ask the user if a link must be mirrored or not, when a new web has been found.

g  just get files (saved in the current directory)
This option forces the engine not to scan the files indicated - i.e. the engine only gets the files indicated.

i  continue an interrupted mirror using the cache
This option indicates to the engine that a mirror must be updated or continued.

rN  recurse get with limited link depth of N
This option sets the maximum recurse level. Default is infinite (the engine "knows" that it should not go out of current domain)

a   stay on the same address
This is the default primary scanning option, the engine does not go out of domains without permissions (filters, for example)

d   stay on the same principal domain
This option lets the engine go on all sites that exist on the same principal domain.
Example: a link located at www.someweb.com that goes to members.someweb.com will be followed.

l   stay on the same location (.com, etc.)
This option lets the engine go on all sites that exist on the same location.
Example: a link located at www.someweb.com that goes to www.anyotherweb.com will be followed.
Warning: this is a potentially dangerous option, limit the recurse depth with r option.

e   go everywhere on the web
This option lets the engine go on any sites.
Example: a link located at www.someweb.com that goes to www.anyotherweb.org will be followed.
Warning: this is a potentially dangerous option, limit the recurse depth with r option.

n   get non-html files 'near' an html file (ex: an image located outside)
This option lets the engine catch all files that have references on a page, but that exist outside the web site.
Example: List of ZIP files links on a page.

t   test all URLs (even forbidden ones)
This option lets the engine test all links that are not caught.
Example: to test broken links in a site

x   replace external html links by error pages
This option tells the engine to rewrite all links not taken into warning pages.
Example: to browse offline a site, and to warn people that they must be online if they click to external links.

sN  follow robots.txt and meta robots tags
This option sets the way the engine treats "robots.txt" files. This file is often set by webmasters to avoir cgi-bin directories, or other irrevelant pages.
Values: 
  s0  Do not take robots.txt rules
  s1  Follow rules, if compatible with internal filters
  s2  Always follow site's rules

bN  accept cookies in cookies.txt
This option activates or unactivates the cookie
  b0 do not accept cookies
  b1 accept cookies

S   stay on the same directory
This option asks the engine to stay on the same folder level.
Example: A link in /index.html that points to /sub/other.html will not be followed

D   can only go down into subdirs
This is the default option, the engine can go everywhere on the same directoy, or in lower structures

U   can only go to upper directories
This option asks the engine to stay on the same folder level or in upper structures

B   can both go up&down into the directory structure
This option lets the engine to go in any directory level

Y   mirror ALL links located in the first level pages (mirror links)
This option is activated for the links typed in the command line
Example: if you have a list of web sites in www.asitelist.com/index.html, then all these sites will be mirrored

NN  name conversion type (0 *original structure 1,2,3 html/data in one directory)
  N0 Site-structure (default)
  N1 Html in web/, images/other files in web/images/
  N2 Html in web/html, images/other in web/images
  N3 Html in web/,  images/other in web/
  N4 Html in web/, images/other in web/xxx, where xxx is the file extension (all gif will be placed onto web/gif, for example)
  N5 Images/other in web/xxx and Html in web/html

  N99 All files in web/, with random names (gadget !)

  N100 Site-structure, without www.domain.xxx/
  N101 Identical to N1 exept that "web" is replaced by the site's name
  N102 Identical to N2 exept that "web" is replaced by the site's name
  N103 Identical to N3 exept that "web" is replaced by the site's name
  N104 Identical to N4 exept that "web" is replaced by the site's name
  N105 Identical to N5 exept that "web" is replaced by the site's name
  N199 Identical to N99 exept that "web" is replaced by the site's name

  N1001 Identical to N1 exept that there is no "web" directory
  N1002 Identical to N2 exept that there is no "web" directory
  N1003 Identical to N3 exept that there is no "web" directory (option set for g option)
  N1004 Identical to N4 exept that there is no "web" directory
  N1005 Identical to N5 exept that there is no "web" directory
  N1099 Identical to N99 exept that there is no "web" directory

LN  long names
  L0 Filenames and directory names are limited to 8 characters + 3 for extension
  L1 No restrictions (default)

K   keep original links (e.g. http://www.adr/link) (K0 *relative link)
This option has only been kept for compatibility reasons

pN  priority mode:
  p0 just scan, don't save anything (for checking links)
  p1 save only html files
  p2 save only non html files
  p3 save all files
  p7 get html files before, then treat other files

cN  number of multiple connections (*c8)
Set the numer of multiple simultaneous connections

O   path for mirror/logfiles+cache (-O path_mirror[,path_cache_and_logfiles])
This option define the path for mirror and log files
Example: -P "/user/webs","/user/logs"

P   proxy use (-P proxy:port or -P user:pass@proxy:port)
This option define the proxy used in this mirror
Example: -P proxy.myhost.com:8080

F   user-agent field (-F \"user-agent name\
This option define the user-agent field
Example: -F "Mozilla/4.5 (compatible; HTTrack 1.2x; Windows 98)"

mN maximum file length for a non-html file
This option define the maximum size for non-html files
Example: -m100000

mN,N'  for non html (N) and html (N')
This option define the maximum size for non-html files and html-files
Example: -m100000,250000

MN maximum overall size that can be uploaded/scanned
This option define the maximum amount of bytes that can be downloaded
Example: -M1000000

EN maximum mirror time in seconds (60=1 minute, 3600=1 hour)
This option define the maximum time that the mirror can last
Example: -E3600

AN maximum transfer rate in bytes/seconds (1000=1kb/s max)
This option define the maximum transfer rate
Example: -A2000

GN pause transfer if N bytes reached, and wait until lock file is deleted
This option asks the engine to pause every time N bytes have been transfered, and restarts when the lock file "hts-pause.lock" is being deleted
Example: -G20000000

u check document type if unknown (cgi,asp..)
This option define the way the engine checks the file type
  u0 do not check
  u1 check but /
  u2 check always

RN number of retries, in case of timeout or non-fatal errors (*R0)
This option sets the maximum number of tries that can be processed for a file

o *generate output html file in case of error (404..) (o0 don't generate)
This option define whether the engine has to generate html output file or not if an error occured

TN timeout, number of seconds after a non-responding link is shutdown
This option define the timeout
Example: -T120

JN traffic jam control, minimum transfert rate (bytes/seconds) tolerated for a link
This option define the minimum transfer rate
Example: -J200

HN host is abandonned if: 0=never, 1=timeout, 2=slow, 3=timeout or slow
This option define whether the engine has to abandon a host if a timeout/"too slow" error occured

&P extended parsing, attempt to parse all links (even in unknown tags or Javascript)
This option activates the extended parsing, that attempt to find links in unknown Html code/javascript

j *parse Java Classes (j0 don't parse)
This option define whether the engine has to parse java files or not to catch included files

I *make an index (I0 don't make)
This option define whether the engine has to generate an index.html on the top directory

X *delete old files after update (X0 keep delete)
This option define whether the engine has to delete locally, after an update, files that have been deleted in the remote mirror, or that have been excluded

C *create/use a cache for updates and retries (C0 no cache)
This option define whether the engine has to generate a cache for retries and updates or not

k  store all files in cache (not useful if files on disk)
This option define whether the engine has to store all files in cache or not

V execute system command after each files ($0 is the filename: -V \"rm \\$0\
This option lets the engine execute a command for each file saved on disk

q  quiet mode (no questions)
Do not ask questions (for example, for confirm an option)

Q  log quiet mode (no log)
Do not generate log files

v  verbose screen mode
Log files are printed in the screen

f *log file mode
Log files are generated into two log files

z  extra infos log
Add more informations on log files

Z  debug log
Add debug informations on log files


--mirror   *make a mirror of site(s) 
--get   get the files indicated, do not seek other URLs
--mirrorlinks   test links in pages (identical to -Y)
--testlinks     test links in pages
--spider    spider site(s), to test links (reports Errors & Warnings)
--update    update a mirror, without confirmation
--skeleton  make a mirror, but gets only html files

--http10  force http/1.0 requests when possible

httraqt-1.4.11/help/httrack.css0000664000175000017500000000357213154003110016562 0ustar karbofoskarbofos body { margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px; background: #77b; } body, td { font: 0.96em/1.3em "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; } #subTitle { background: #000; color: #fff; padding: 4px; font-weight: bold; } /* Width for "#siteNavigation td" based on number of buttons Six: 16.6% */ #siteNavigation td { width: 16.6%; } #siteNavigation a { display: block; padding: 2px; text-align: center; font-weight: bold; color: #448; /* font-size: 12px; */ background-color: #99c; } #siteNavigation a:link { text-decoration: none; } #siteNavigation a:visited { text-decoration: none; } #siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; } #siteNavigation a:active { text-decoration: none; background-color: #ccc; } a:link { text-decoration: underline; color: #00f; } a:visited { text-decoration: underline; color: #000; } a:hover { text-decoration: underline; color: #c00; } a:active { text-decoration: underline; } #pageContent { clear: both; border-bottom: 6px solid #000; padding: 10px; padding-top: 20px; line-height: 1.65em; background-image: url(images/bg_rings.png); background-repeat: no-repeat; background-position: top right; } #pageContent p { margin: 0; margin-bottom: 30px; } #pageContent, #siteNavigation { background-color: #ccd; } .tableWidth { min-width: 573px; } /* ----------------------------------- */ .imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; } .imgRight { float: right; margin-left: 10px; margin-bottom: 10px; } hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; } h1 { margin: 0; font-weight: bold; font-size: 2em; } h2 { margin: 0; font-weight: bold; font-size: 1.6em; } h3 { margin: 0; font-weight: bold; font-size: 1.3em; } .blak { background-color: #000; } .hide { display: none; } httraqt-1.4.11/help/step9_opt5.html0000664000175000017500000001130713154004563017321 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Build




  • Local Structure Type

  • Lets you define the local structure of the site.
    The default is "site structure": you will get the same folder/files names and structure as the original
    You can, however, put all images in one single folder, html in another and so on..


  • DOS Names

  • Force the engine to generate DOS names (8 characters for the name, 3 for the type)

  • ISO9660 Names

  • Force the engine to generate ISO9660-compatible names for storing on medias such as CDROM or DVDROM

  • No error pages

  • Do not generate error pages (if a 404 error occured, for example)
    If a page is missing on the remote site, there will not be any warning on the local site


  • No external pages

  • Rewrite all external links (links that needs an Internet connection) so that there can be a warning page before ("Warning, you need to be online to go to this link..")
    Useful if you want to separate the local and online realm


  • Hide passwords

  • Do not include username and password for protected sites in the code, when a link will not be caught. This allow to remain the access data private.

  • Hide query strings

  • Do not include query strings for local links. Query strings (?foo=45&bar=67) are generally not necessary for local (file://) files, but query strings can be useful to show several information (example: page-4.html?index=History). However, some basic browsers may not understand that (wireless browsers, especially), and hiding query strings might be a good idea in this case.

  • Do not purge old files

  • Do not purge, after an update, the local files that no longer exist on the remote site, or that have been skipped





Back to Home

httraqt-1.4.11/help/httrack.man.html0000664000175000017500000014772413154003124017525 0ustar karbofoskarbofos httrack

httrack

NAME
SYNOPSIS
DESCRIPTION
EXAMPLES
OPTIONS
FILES
ENVIRONMENT
DIAGNOSTICS
LIMITS
BUGS
COPYRIGHT
AVAILABILITY
AUTHOR
SEE ALSO

NAME

httrack − offline browser : copy websites to a local directory

SYNOPSIS

httrack [ url ]... [ −filter ]... [ +filter ]... [ −O, −−path ] [ −%O, −−chroot ] [ −w, −−mirror ] [ −W, −−mirror−wizard ] [ −g, −−get−files ] [ −i, −−continue ] [ −Y, −−mirrorlinks ] [ −P, −−proxy ] [ −%f, −−httpproxy−ftp[=N] ] [ −%b, −−bind ] [ −rN, −−depth[=N] ] [ −%eN, −−ext−depth[=N] ] [ −mN, −−max−files[=N] ] [ −MN, −−max−size[=N] ] [ −EN, −−max−time[=N] ] [ −AN, −−max−rate[=N] ] [ −%cN, −−connection−per−second[=N] ] [ −GN, −−max−pause[=N] ] [ −%mN, −−max−mms−time[=N] ] [ −cN, −−sockets[=N] ] [ −TN, −−timeout ] [ −RN, −−retries[=N] ] [ −JN, −−min−rate[=N] ] [ −HN, −−host−control[=N] ] [ −%P, −−extended−parsing[=N] ] [ −n, −−near ] [ −t, −−test ] [ −%L, −−list ] [ −%S, −−urllist ] [ −NN, −−structure[=N] ] [ −%D, −−cached−delayed−type−check ] [ −%M, −−mime−html ] [ −LN, −−long−names[=N] ] [ −KN, −−keep−links[=N] ] [ −x, −−replace−external ] [ −%x, −−disable−passwords ] [ −%q, −−include−query−string ] [ −o, −−generate−errors ] [ −X, −−purge−old[=N] ] [ −%p, −−preserve ] [ −bN, −−cookies[=N] ] [ −u, −−check−type[=N] ] [ −j, −−parse−java[=N] ] [ −sN, −−robots[=N] ] [ −%h, −−http−10 ] [ −%k, −−keep−alive ] [ −%B, −−tolerant ] [ −%s, −−updatehack ] [ −%u, −−urlhack ] [ −%A, −−assume ] [ −@iN, −−protocol[=N] ] [ −%w, −−disable−module ] [ −F, −−user−agent ] [ −%R, −−referer ] [ −%E, −−from ] [ −%F, −−footer ] [ −%l, −−language ] [ −C, −−cache[=N] ] [ −k, −−store−all−in−cache ] [ −%n, −−do−not−recatch ] [ −%v, −−display ] [ −Q, −−do−not−log ] [ −q, −−quiet ] [ −z, −−extra−log ] [ −Z, −−debug−log ] [ −v, −−verbose ] [ −f, −−file−log ] [ −f2, −−single−log ] [ −I, −−index ] [ −%i, −−build−top−index ] [ −%I, −−search−index ] [ −pN, −−priority[=N] ] [ −S, −−stay−on−same−dir ] [ −D, −−can−go−down ] [ −U, −−can−go−up ] [ −B, −−can−go−up−and−down ] [ −a, −−stay−on−same−address ] [ −d, −−stay−on−same−domain ] [ −l, −−stay−on−same−tld ] [ −e, −−go−everywhere ] [ −%H, −−debug−headers ] [ −%!, −−disable−security−limits ] [ −V, −−userdef−cmd ] [ −%U, −−user ] [ −%W, −−callback ] [ −K, −−keep−links[=N] ] [

DESCRIPTION

httrack allows you to download a World Wide Web site from the Internet to a local directory, building recursively all directories, getting HTML, images, and other files from the server to your computer. HTTrack arranges the original site’s relative link-structure. Simply open a page of the "mirrored" website in your browser, and you can browse the site from link to link, as if you were viewing it online. HTTrack can also update an existing mirrored site, and resume interrupted downloads.

EXAMPLES

httrack www.someweb.com/bob/

mirror site www.someweb.com/bob/ and only this site

httrack www.someweb.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg
−mime:application/*

mirror the two sites together (with shared links) and accept any .jpg files on .com sites

httrack www.someweb.com/bob/bobby.html +* −r6

means get all files starting from bobby.html, with 6 link−depth, and possibility of going everywhere on the web

httrack www.someweb.com/bob/bobby.html −−spider −P
proxy.myhost.com:8080

runs the spider on www.someweb.com/bob/bobby.html using a proxy

httrack −−update

updates a mirror in the current folder

httrack

will bring you to the interactive mode

httrack −−continue

continues a mirror in the current folder

OPTIONS

General options:

−O

path for mirror/logfiles+cache (−O path mirror[,path cache and logfiles]) (−−path <param>)

−%O

chroot path to, must be r00t (−%O root path) (−−chroot <param>)

Action options:

−w

*mirror web sites (−−mirror)

−W

mirror web sites, semi−automatic (asks questions) (−−mirror−wizard)

−g

just get files (saved in the current directory) (−−get−files)

−i

continue an interrupted mirror using the cache (−−continue)

−Y

mirror ALL links located in the first level pages (mirror links) (−−mirrorlinks)

Proxy options:

−P

proxy use (−P proxy:port or −P user:pass@proxy:port) (−−proxy <param>)

−%f

*use proxy for ftp (f0 don t use) (−−httpproxy−ftp[=N])

−%b

use this local hostname to make/send requests (−%b hostname) (−−bind <param>)

Limits options:

−rN

set the mirror depth to N (* r9999) (−−depth[=N])

−%eN

set the external links depth to N (* %e0) (−−ext−depth[=N])

−mN

maximum file length for a non−html file (−−max−files[=N])

−mN,N2

maximum file length for non html (N) and html (N2)

−MN

maximum overall size that can be uploaded/scanned (−−max−size[=N])

−EN

maximum mirror time in seconds (60=1 minute, 3600=1 hour) (−−max−time[=N])

−AN

maximum transfer rate in bytes/seconds (1000=1KB/s max) (−−max−rate[=N])

−%cN

maximum number of connections/seconds (*%c10) (−−connection−per−second[=N])

−GN

pause transfer if N bytes reached, and wait until lock file is deleted (−−max−pause[=N])

−%mN

maximum mms stream download time in seconds (60=1 minute, 3600=1 hour) (−−max−mms−time[=N])

Flow control:

−cN

number of multiple connections (*c8) (−−sockets[=N])

−TN

timeout, number of seconds after a non−responding link is shutdown (−−timeout)

−RN

number of retries, in case of timeout or non−fatal errors (*R1) (−−retries[=N])

−JN

traffic jam control, minimum transfert rate (bytes/seconds) tolerated for a link (−−min−rate[=N])

−HN

host is abandonned if: 0=never, 1=timeout, 2=slow, 3=timeout or slow (−−host−control[=N])

Links options:

−%P

*extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don t use) (−−extended−parsing[=N])

−n

get non−html files near an html file (ex: an image located outside) (−−near)

−t

test all URLs (even forbidden ones) (−−test)

−%L

<file> add all URL located in this text file (one URL per line) (−−list <param>)

−%S

<file> add all scan rules located in this text file (one scan rule per line) (−−urllist <param>)

Build options:

−NN

structure type (0 *original structure, 1+: see below) (−−structure[=N])

−or

user defined structure (−N "%h%p/%n%q.%t")

−%N

delayed type check, don t make any link test but wait for files download to start instead (experimental) (%N0 don t use, %N1 use for unknown extensions, * %N2 always use)

−%D

cached delayed type check, don t wait for remote type during updates, to speedup them (%D0 wait, * %D1 don t wait) (−−cached−delayed−type−check)

−%M

generate a RFC MIME−encapsulated full−archive (.mht) (−−mime−html)

−LN

long names (L1 *long names / L0 8−3 conversion / L2 ISO9660 compatible) (−−long−names[=N])

−KN

keep original links (e.g. http://www.adr/link) (K0 *relative link, K absolute links, K4 original links, K3 absolute URI links, K5 transparent proxy link) (−−keep−links[=N])

−x

replace external html links by error pages (−−replace−external)

−%x

do not include any password for external password protected websites (%x0 include) (−−disable−passwords)

−%q

*include query string for local files (useless, for information purpose only) (%q0 don t include) (−−include−query−string)

−o

*generate output html file in case of error (404..) (o0 don t generate) (−−generate−errors)

−X

*purge old files after update (X0 keep delete) (−−purge−old[=N])

−%p

preserve html files as is (identical to −K4 −%F "" ) (−−preserve)

Spider options:

−bN

accept cookies in cookies.txt (0=do not accept,* 1=accept) (−−cookies[=N])

−u

check document type if unknown (cgi,asp..) (u0 don t check, * u1 check but /, u2 check always) (−−check−type[=N])

−j

*parse Java Classes (j0 don t parse, bitmask: |1 parse default, |2 don t parse .class |4 don t parse .js |8 don t be aggressive) (−−parse−java[=N])

−sN

follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always, 3=always (even strict rules)) (−−robots[=N])

−%h

force HTTP/1.0 requests (reduce update features, only for old servers or proxies) (−−http−10)

−%k

use keep−alive if possible, greately reducing latency for small files and test requests (%k0 don t use) (−−keep−alive)

−%B

tolerant requests (accept bogus responses on some servers, but not standard!) (−−tolerant)

−%s

update hacks: various hacks to limit re−transfers when updating (identical size, bogus response..) (−−updatehack)

−%u

url hacks: various hacks to limit duplicate URLs (strip //, www.foo.com==foo.com..) (−−urlhack)

−%A

assume that a type (cgi,asp..) is always linked with a mime type (−%A php3,cgi=text/html;dat,bin=application/x−zip) (−−assume <param>)

−can

also be used to force a specific file type: −−assume foo.cgi=text/html

−@iN

internet protocol (0=both ipv6+ipv4, 4=ipv4 only, 6=ipv6 only) (−−protocol[=N])

−%w

disable a specific external mime module (−%w htsswf −%w htsjava) (−−disable−module <param>)

Browser ID:

−F

user−agent field sent in HTTP headers (−F "user−agent name") (−−user−agent <param>)

−%R

default referer field sent in HTTP headers (−−referer <param>)

−%E

from email address sent in HTTP headers (−−from <param>)

−%F

footer string in Html code (−%F "Mirrored [from host %s [file %s [at %s]]]" (−−footer <param>)

−%l

preffered language (−%l "fr, en, jp, *" (−−language <param>)

Log, index, cache

−C

create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before) (−−cache[=N])

−k

store all files in cache (not useful if files on disk) (−−store−all−in−cache)

−%n

do not re−download locally erased files (−−do−not−recatch)

−%v

display on screen filenames downloaded (in realtime) − * %v1 short version − %v2 full animation (−−display)

−Q

no log − quiet mode (−−do−not−log)

−q

no questions − quiet mode (−−quiet)

−z

log − extra infos (−−extra−log)

−Z

log − debug (−−debug−log)

−v

log on screen (−−verbose)

−f

*log in files (−−file−log)

−f2

one single log file (−−single−log)

−I

*make an index (I0 don t make) (−−index)

−%i

make a top index for a project folder (* %i0 don t make) (−−build−top−index)

−%I

make an searchable index for this mirror (* %I0 don t make) (−−search−index)

Expert options:

−pN

priority mode: (* p3) (−−priority[=N])

−p0

just scan, don t save anything (for checking links)

−p1

save only html files

−p2

save only non html files

−*p3

save all files

−p7

get html files before, then treat other files

−S

stay on the same directory (−−stay−on−same−dir)

−D

*can only go down into subdirs (−−can−go−down)

−U

can only go to upper directories (−−can−go−up)

−B

can both go up&down into the directory structure (−−can−go−up−and−down)

−a

*stay on the same address (−−stay−on−same−address)

−d

stay on the same principal domain (−−stay−on−same−domain)

−l

stay on the same TLD (eg: .com) (−−stay−on−same−tld)

−e

go everywhere on the web (−−go−everywhere)

−%H

debug HTTP headers in logfile (−−debug−headers)

Guru options: (do NOT use if possible)

−#X

*use optimized engine (limited memory boundary checks) (−−fast−engine)

−#0

filter test (−#0 *.png www.bar.com/foo.png ) (−−debug−testfilters <param>)

−#1

simplify test (−#1 ./foo/bar/../foobar)

−#2

type test (−#2 /foo/bar.php)

−#C

cache list (−#C *.com/spider*.png (−−debug−cache <param>)

−#R

cache repair (damaged cache) (−−repair−cache)

−#d

debug parser (−−debug−parsing)

−#E

extract new.zip cache meta−data in meta.zip

−#f

always flush log files (−−advanced−flushlogs)

−#FN

maximum number of filters (−−advanced−maxfilters[=N])

−#h

version info (−−version)

−#K

scan stdin (debug) (−−debug−scanstdin)

−#L

maximum number of links (−#L1000000) (−−advanced−maxlinks)

−#p

display ugly progress information (−−advanced−progressinfo)

−#P

catch URL (−−catch−url)

−#R

old FTP routines (debug) (−−repair−cache)

−#T

generate transfer ops. log every minutes (−−debug−xfrstats)

−#u

wait time (−−advanced−wait)

−#Z

generate transfer rate statictics every minutes (−−debug−ratestats)

−#!

execute a shell command (−#! "echo hello") (−−exec <param>)

Dangerous options: (do NOT use unless you exactly know what you are doing)

−%!

bypass built−in security limits aimed to avoid bandwith abuses (bandwidth, simultaneous connections) (−−disable−security−limits)

−IMPORTANT

NOTE: DANGEROUS OPTION, ONLY SUITABLE FOR EXPERTS

−USE

IT WITH EXTREME CARE

Command−line specific options:

−V

execute system command after each files ($0 is the filename: −V "rm ") (−−userdef−cmd <param>)

−%U

run the engine with another id when called as root (−%U smith) (−−user <param>)

−%W

use an external library function as a wrapper (−%W myfoo.so[,myparameters]) (−−callback <param>)

Details: Option N

−N0

Site−structure (default)

−N1

HTML in web/, images/other files in web/images/

−N2

HTML in web/HTML, images/other in web/images

−N3

HTML in web/, images/other in web/

−N4

HTML in web/, images/other in web/xxx, where xxx is the file extension (all gif will be placed onto web/gif, for example)

−N5

Images/other in web/xxx and HTML in web/HTML

−N99

All files in web/, with random names (gadget !)

−N100

Site−structure, without www.domain.xxx/

−N101

Identical to N1 exept that "web" is replaced by the site s name

−N102

Identical to N2 exept that "web" is replaced by the site s name

−N103

Identical to N3 exept that "web" is replaced by the site s name

−N104

Identical to N4 exept that "web" is replaced by the site s name

−N105

Identical to N5 exept that "web" is replaced by the site s name

−N199

Identical to N99 exept that "web" is replaced by the site s name

−N1001

Identical to N1 exept that there is no "web" directory

−N1002

Identical to N2 exept that there is no "web" directory

−N1003

Identical to N3 exept that there is no "web" directory (option set for g option)

−N1004

Identical to N4 exept that there is no "web" directory

−N1005

Identical to N5 exept that there is no "web" directory

−N1099

Identical to N99 exept that there is no "web" directory

Details: User−defined option N
%n Name of file without file type (ex: image)
%N Name of file, including file type (ex: image.png)
%t File type (ex: gif)
%p Path [without ending /] (ex: /someimages)
%h Host name (ex: www.someweb.com)
%M URL MD5 (128 bits, 32 ascii bytes)
%Q query string MD5 (128 bits, 32 ascii bytes)
%k full query string
%r protocol name (ex: http)
%q small query string MD5 (16 bits, 4 ascii bytes)
%s? Short name version (ex: %sN)
%[param] param variable in query string
%[param:before:after:empty:notfound] advanced variable extraction

Details: User−defined option N and advanced variable extraction
%[param:before:after:empty:notfound]

−param

: parameter name

−before

: string to prepend if the parameter was found

−after

: string to append if the parameter was found

−notfound

: string replacement if the parameter could not be found

−empty

: string replacement if the parameter was empty

−all

fields, except the first one (the parameter name), can be empty

Details: Option K

−K0

foo.cgi?q=45 −> foo4B54.html?q=45 (relative URI, default)

−K

−> http://www.foobar.com/folder/foo.cgi?q=45 (absolute URL) (−−keep−links[=N])

−K3

−> /folder/foo.cgi?q=45 (absolute URI)

−K4

−> foo.cgi?q=45 (original URL)

−K5

−> http://www.foobar.com/folder/foo4B54.html?q=45 (transparent proxy URL)

Shortcuts:
−−mirror

<URLs> *make a mirror of site(s) (default)

−−get

<URLs> get the files indicated, do not seek other URLs (−qg)

−−list

<text file> add all URL located in this text file (−%L)

−−mirrorlinks

<URLs> mirror all links in 1st level pages (−Y)

−−testlinks

<URLs> test links in pages (−r1p0C0I0t)

−−spider

<URLs> spider site(s), to test links: reports Errors & Warnings (−p0C0I0t)

−−testsite

<URLs> identical to −−spider

−−skeleton

<URLs> make a mirror, but gets only html files (−p1)

−−update

update a mirror, without confirmation (−iC2)

−−continue

continue a mirror, without confirmation (−iC1)

−−catchurl

create a temporary proxy to capture an URL or a form post URL

−−clean

erase cache & log files

−−http10

force http/1.0 requests (−%h)

Details: Option %W: External callbacks prototypes
see htsdefines.h

FILES

/etc/httrack.conf

The system wide configuration file.

ENVIRONMENT

HOME

Is being used if you defined in /etc/httrack.conf the line path ~/websites/#

DIAGNOSTICS

Errors/Warnings are reported to hts−log.txt by default, or to stderr if the -v option was specified.

LIMITS

These are the principals limits of HTTrack for that moment. Note that we did not heard about any other utility that would have solved them.

- Several scripts generating complex filenames may not find them (ex: img.src=’image’+a+Mobj.dst+’.png’)

- Some java classes may not find some files on them (class included)

- Cgi-bin links may not work properly in some cases (parameters needed). To avoid them: use filters like -*cgi-bin*

BUGS

Please reports bugs to <bugs@httrack.com>. Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary.

COPYRIGHT

Copyright (C) Xavier Roche and other contributors

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 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, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

AVAILABILITY

The most recent released version of httrack can be found at: http://www.httrack.com

AUTHOR

Xavier Roche <roche@httrack.com>

SEE ALSO

The HTML documentation (available online at http://www.httrack.com/html/ ) contains more detailed information. Please also refer to the httrack FAQ (available online at http://www.httrack.com/html/faq.html )


httraqt-1.4.11/help/step3.html0000664000175000017500000000756513154004470016354 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Step 3 : Ready to start


  1. If you want, you may connect immediately or delay the mirror

  2. If you don't select anything, HTTrack will assume that you are already connected to the Internet and that you want to start the mirror action now

    • Connect to this provider

    • You can select here a specific provider to connect to when begining the mirror if you are not already connected to the Internet.

    • Disconnect when finished

    • Click on this checkbox to ask httrack to disconnect the network when mirror is finished.

    • Shutdown PC when finished

    • Click on this checkbox to ask httrack to shutdown your computer when mirror is finished.

    • On Hold

    • You can enter here the time of the mirror start. You can delay up to 24 hours a mirror using this feature.



  3. Click on the FINISH button


  4. Go to the next step...




Back to Home

httraqt-1.4.11/help/scripting.html0000664000175000017500000001420013154004426017301 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

HTTrack Programming page - scripting


We will see here several examples, written in batch script (can be adapted to almost all batch script languages) or in C.



How to get one single file

httrack --get http://localhost/


How to get one single file and pipe it to stdout

httrack --quiet --get http://localhost/ -O tmpget -V "cat \$0" | grep -iE "TITLE" rm -rf tmpget


How to search in all HTML files on a website

httrack --skeleton http://localhost/ -V "if grep -iE \"TITLE\" \"\$0\">/dev/null; then echo \"Match found at \$0\"; fi"
rm -rf tmpget

Same thing but matches only the first file:
httrack --skeleton http://localhost/ -V "if grep -iE \"TITLE\" \"\$0\">/dev/null; then echo \"Match found at \$0\"; kill -9 \$PPID; fi"
rm -rf tmpget


Indexing a website, and using the index as a search engine

httrack localhost -%I
Will generate an index.txt file, which contains all detected keywords, sorted and indexed using this format:

keyword
<tab>   number_of_hits_in_current_page_for_this_keyword   page_location
<tab>   number_of_hits_in_current_page_for_this_keyword   page_location
<tab>   number_of_hits_in_current_page_for_this_keyword   page_location
...
=total_number_of_hits_for_this_keyword
((total_number_of_hits_for_this_keyword*1000)/total_number_of_keywords)

Example:

abilities
	1 localhost/manual/mod/index-2.html
	1 localhost/manual/mod/index.html
	1 localhost/manual/mod/mod_negotiation.html
	=3
	(0)
ability
	2 localhost/manual/misc/FAQ.html
	2 localhost/manual/suexec.html
	1 localhost/manual/handler.html
	1 localhost/manual/misc/security_tips.html
	1 localhost/manual/mod/mod_rewrite.html
	1 localhost/manual/mod/mod_setenvif.html
	1 localhost/manual/multilogs.html
	1 localhost/manual/netware.html
	1 localhost/manual/new_features_1_3.html
	1 localhost/manual/windows.html
	=12
	(0)
able
	4 localhost/manual/dso.html
	4 localhost/manual/mod/core.html
	3 localhost/manual/dns-caveats.html
	3 localhost/manual/mod/mod_auth.html
	3 localhost/manual/mod/mod_rewrite.html
	3 localhost/manual/upgrading_to_1_3.html
	2 localhost/manual/misc/API.html
	2 localhost/manual/misc/FAQ.html
	2 localhost/manual/misc/windoz_keepalive.html
	2 localhost/manual/mod/mod_auth_db.html
	2 localhost/manual/mod/mod_auth_dbm.html
	1 localhost/manual/misc/descriptors.html
	1 localhost/manual/misc/fin_wait_2.html
	1 localhost/manual/misc/security_tips.html
	1 localhost/manual/mod/mod_auth_digest.html
	1 localhost/manual/mod/mod_cern_meta.html
	1 localhost/manual/mod/mod_env.html
	1 localhost/manual/mod/mod_example.html
	1 localhost/manual/mod/mod_unique_id.html
	1 localhost/manual/mod/mod_usertrack.html
	1 localhost/manual/stopping.html
	1 localhost/manual/suexec.html
	1 localhost/manual/vhosts/ip-based.html
	1 localhost/manual/windows.html
	=43
	(0)
...

Script example: search.sh


httraqt-1.4.11/help/start.html0000664000175000017500000000050013027171706016437 0ustar karbofoskarbofos HTTrack documentation HTTrack documentation httraqt-1.4.11/help/contact.html0000664000175000017500000001627113154004300016733 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Contact Us!


Please visit our website!

About this project:
Informations on this project:

This project has been developed by:
Xavier Roche (xroche at httrack dot com)
  for the main engine and Windows interface
  and maintainer for v2.0 and v3.0
Yann Philippot (yphilippot at lemel dot fr)
  for the java binary  dot class parser
David Lawrie (dalawrie at lineone dot net)
Robert Lagadec (rlagadec at yahoo dot fr)
  for checking both English & French translations
Juan Pablo Barrio Lera (University of Len)
  for Spanish translations
Rainer Klueting (rainer at klueting dot de)
Bastian Gorke (bastiang at yahoo dot com)
Rudi Ferrari (Wyando at netcologne dot de)
Marcus Gaza (MarcusGaza at t-online dot de)
  for German translations
Rudi Ferrari (Wyando at netcologne dot de)
  for Dutch translations
Lukasz Jokiel (Opole University of Technology, Lukasz dot Jokiel at po dot opole dot pl)
  for Polish translations
Rui Fernandes (CANTIC, ruiefe at mail dot malhatlantica dot pt)
Pedro T dot  Pinheiro (Universidade Nova de Lisboa-FCT, ptiago at mail dot iupi dot pt)
  for Portuguese translations
Andrei Iliev (iliev at vitaplus dot ru)
  for Russian translations
Witold Krakowski (wtkrak at netscape dot net )
  for Italian translations
Jozsef Tamas Herczeg (hdodi at freemail dot hu)
  for Hungarian translation
Paulo Neto (company at layout dot com dot br)
  for Brazilian translation
Brook Qin (brookqwr at sina dot com) 
   for simplified Chinese translation
David Hing Cheong Hung (DAVEHUNG at mtr dot com dot hk)
Addy Lin (addy1975 at pchome dot com dot tw)
   for traditional Chinese translation
Jesper Bramm (bramm at get2net dot dk)
   for Danish translation
Tnu Virma
   for Estonian translation
Staffan Strm (staffan at fam-strom dot org)
   for Swedish translation
Mehmet Akif Keolu (mak at ttnet dot net dot tr)
  for Turkish translation
Aleksandar Savic (aleks at macedonia dot eu dot org)
  for Macedonian translation
Takayoshi Nakasikiryo
  for Japanese translation
Martin Sereday (sereday at slovanet dot sk)
  for Slovak translation
Antonn Matjk (matejcik at volny dot cz)
  for Czech translation
Andrij Shevchuk (http://programy dot com dot ua)
  for Ukrainian translation
Tobias "Spug" Langhoff (spug_enigma at hotmail dot com)
  for Norwegian translation
Jadran Rudeciur (jrudec at email dot si)
  for Slovenian translation
Alin Gheorghe Miron (miron dot alin at personal dot ro)
  for Romanian translation
Michael Papadakis (mikepap at freemail dot gr)
  for Greek translation

Thanks to:
Leto Kauler (molotov at tasmail dot com)
  for the site/logos design

Special Thanks to:
Patrick Ducrot & Daniel Carr (ENSI of Caen)
  for their initial support
Fred Cohen (fc at all dot net)
  for HTTrack user's guide

Greetings to:
Christian Marillat (marillat dot christian at wanadoo dot fr)
  for autoconf compliance and  .deb package
Jean-loup Gailly from gzip dot org
  for the help provided with Zlib
Eric A dot  Young (eay at cryptsoft dot com)
  for SSL cryptographic material (OpenSSL)

Russ Freeman from gipsymedia
  for hints on DLL dynamic load
Paul DiLascia
  for helping to fix problems with CHtmlView
ISMRA/Ensi of Caen 
  for their initial support
 .. and all users that are using and supporting HTTrack!



If you want to ask any question to the authors, report bugs/problems, please first check the HTTrack Website Copier forum.
You can also contact by email, but due to the large volume of messages, it is impossible to always respond (especially for configuration help or other configuration-related questions).




This program is covered by the GNU General Public License.
HTTrack/HTTrack Website Copier is Copyright (C) 1998-2007 Xavier Roche and other contributors
httraqt-1.4.11/help/step1.html0000664000175000017500000000724613154004455016351 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Step 1 : Choose a project name and destination folder


  1. Change the destination folder if necessary

  2. It is more convenient to organize all mirrors in one directory, for example My Web Sites
    If you already have made mirrors using HTTrack, be sure that you have selected the correct folder.




  3. Select the project name:
    • Select a new project name

    • This name is, for example, the theme of the mirrored sites, for example My Friend's Site



      OR

    • Select an existing project for update/retry

    • Directly select the existing project name in the popup list



  4. Click on the NEXT button


  5. Go to the next step...




Back to Home

httraqt-1.4.11/help/step9_opt1.html0000664000175000017500000000773213154004512017316 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Links




  • Attempt to detect all links

  • Asks the engine to try to detect all links in a page, even for unknown tags or unknown javascript code. This can generate bad requests or error in pages, but may be helpful to catch all desired links
    Useful, for example, in pages with many javascript tricks


  • Get non-html files related to a link

  • This option allows you to catch all file references in captured HTML files, even external ones
    For example, if an image in an Html page has its source on another web site, this image will be captured together.


  • Test validity of all links

  • This option forces the engine to test all links in spidered pages, i.e. to check if every link is valid or not by performing a request to the server. If an error occured, it is reported to the error log-file.
    Useful to test all external links in a website


  • Get HTML files first!

  • With this option enabled, the engine will attempt to download all HTML files first, and then download other (images) files. This can speed up the parsing process, by efficiently scanning the HTML structure.





Back to Home

httraqt-1.4.11/help/faq.html0000664000175000017500000014116613154004320016053 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

F A Q



    Tips:
  • In case of troubles/problems during transfer, first check the hts-log.txt (and hts-err.txt) files to figure out what happened. These log files report all events that may be useful to detect a problem. You can also ajust the debug level of the log files in the option
  • The tutorial written by Fred Cohen is a very good document to read, to understand how to use the engine, how the command line version works, and how the window version works, too! All options are described and explained in clear language!




Very Frequently Asked Questions:

Q: HTTrack does not capture all files I want to capture!
A: This is a frequent question, generally related to the filters. BUT first check if your problem is not related to the
robots.txt website rules.

Okay, let me explain how to precisely control the capture process.

Let's take an example:

Imagine you want to capture the following site:
www.someweb.com/gallery/flowers/

HTTrack, by default, will capture all links encountered in www.someweb.com/gallery/flowers/ or in lower directories, like www.someweb.com/gallery/flowers/roses/.
It will not follow links to other websites, because this behaviour might cause to capture the Web entirely!
It will not follow links located in higher directories, too (for example, www.someweb.com/gallery/flowers/ itself) because this might cause to capture too much data.

This is the default behaviour of HTTrack, BUT, of course, if you want, you can tell HTTrack to capture other directorie(s), website(s)!..
In our example, we might want also to capture all links in www.someweb.com/gallery/trees/, and in www.someweb.com/photos/

This can easily done by using filters: go to the Option panel, select the 'Scan rules' tab, and enter this line: (you can leave a blank space between each rules, instead of entering a carriage return)
+www.someweb.com/gallery/trees/*
+www.someweb.com/photos/*


This means "accept all links begining with www.someweb.com/gallery/trees/ and www.someweb.com/photos/" - the + means "accept" and the final * means "any character will match after the previous ones". Remember the *.doc or *.zip encountered when you want to select all files from a certain type on your computer: it is almost the same here, except the begining "+"

Now, we might want to exclude all links in www.someweb.com/gallery/trees/hugetrees/, because with the previous filter, we accepted too many files. Here again, you can add a filter rule to refuse these links. Modify the previous filters to:
+www.someweb.com/gallery/trees/*
+www.someweb.com/photos/*
-www.someweb.com/gallery/trees/hugetrees/*


You have noticed the - in the begining of the third rule: this means "refuse links matching the rule" ; and the rule is "any files begining with www.someweb.com/gallery/trees/hugetrees/
Voila! With these three rules, you have precisely defined what you wanted to capture.

A more complex example?

Imagine that you want to accept all jpg files (files with .jpg type) that have "blue" in the name and located in www.someweb.com
+www.someweb.com/*blue*.jpg

More detailed information can be found here!


General questions:

Q: Is there any 'spyware' or 'adware' in this program? Can you prove that there isn't any?
A: No ads (banners), and absolutely no 'spy' features inside the program.
The best proof is the software status: all sources are released, and everybody can check them. Open source is the best protection against privacy problems - HTTrack is an open source project, free of charge and free of any spy 'features'.


Q: This software is 'free', but I bought it from an authorized reseller . What's going on?
A: HTTrack is free (free as in 'freedom') as it is covered by the GNU General Public License (GPL). You can freely download it, without paying any fees, copy it to your friends, and modify it if you respect the license. There are NO official/authorized resellers, because HTTrack is NOT a commercial product. But you can be charged for duplication fees, or any other services (example: software CDroms or shareware collections, or fees for maintenance), but you should have been informed that the software was free software/GPL, and you MUST have received a copy of the GNU General Public License. Otherwise this is dishonnest and unfair.

Q: Are there any risks of viruses with this software?
A: For the software itself: All official releases (at httrack.com) are checked against all known viruses, and the packaging process is also checked. Archives are stored on Un*x servers, not really concerned by viruses.
For files you are downloading on the WWW using HTTrack: You may encounter websites which were corrupted by viruses, and downloading data on these websites might be dangerous (as dangerous as if using a regular Browser). Always ensure that websites you are crawling are safe. (Note: remember that using an antivirus software is a good idea once you are connected to the Internet)


Q: The install is not working on Windows without administrator rights!
A: That's right. You can, however, install WinHTTrack on your own machine, and then copy your WinHTTrack folder from your Program Files folder to another machine, in a temporary directory (e.g. C:\temp\)

Q: Where can I find French/other languages documentation?
A: Windows interface is available on several languages, but not yet the documentation!

Q: Is HTTrack working on Windows Vista or Windows Seven?
A: Yes, it does

Q: Is HTTrack working on NT/2000?
A: Yes, it does

Q: What's the difference between HTTrack, WinHTTrack and WebHTTrack?
A: WinHTTrack is the Windows GUI release of HTTrack (with a native graphic shell) and WebHTTrack is the Linux/Posix release of HTTrack (with an html graphic shell)

Q: Is HTTrack Mac compatible?
A: Yes, using the original sources, or with MacPorts.

Q: Can HTTrack be compiled on all Un*x?
A: It should. The Makefile may be modified in some cases, however

Q: I use HTTrack for professional purpose. What about restrictions/license fee?
A: HTTrack is covered by the GNU General Public License (GPL). There is no restrictions using HTTrack for professional purpose, except if you develop a software which uses HTTrack components (parts of the source, or any other component). See the license.txt file for more information. See also the next question regarding copyright issues when reditributing downloaded material.

Q: Is there any license royalties for distributing a mirror made with HTTrack?
A: On the HTTrack side, no. However, sharing, publishing or reusing copyrighted material downloaded from a site requires the authorization of the copyright holders, and possibly paying royalty fees. Always ask the authorization before creating a mirror of a site, even if the site appears to be royalty-free and/or without copyright notice.

Q: Is a DLL/library version available?
A: Yes. The default distribution includes a DLL (Windows) or a .so (Un*X), used by the program

Q: Is there a GUI version available for Linux and Un*x?
A: Yes. It is called WebHTTrack. See the download section at www.httrack.com!

Troubleshooting:

Q: Some sites are captured very well, other aren't. Why?
A: There are several reasons (and solutions) for a mirror to fail. Reading the log files (ans this FAQ!) is generally a VERY good idea to figure out what occured.
There are cases, however, that can not be (yet) handled:
  • Flash sites - no full support
  • Intensive Java/Javascript sites - might be bogus/incomplete
  • Complex CGI with built-in redirect, and other tricks - very complicated to handle, and therefore might cause problems
  • Parsing problem in the HTML code (cases where the engine is fooled, for example by a false comment (<!--) which has no closing comment (-->) detected. Rare cases, but might occur. A bug report is then generally good!
Note: For some sites, setting "Force old HTTP/1.0 requests" option can be useful, as this option uses more basic requests (no HEAD request for example). This will cause a performance loss, but will increase the compatibility with some cgi-based sites.

Q: Only the first page is caught. What's wrong?
A: First, check the hts-log.txt file (and/or hts-err.txt error log file) - this can give you precious information.
The problem can be a website that redirects you to another site (for example, www.someweb.com to public.someweb.com) : in this case, use filters to accept this site
This can be, also, a problem in the HTTrack options (link depth too low, for example)


Q: With WinHTTrack, sometimes the minimize in system tray causes a crash!
A: This bug sometimes appears in the shell on some systems. If you encounter this problem, avoid minimizing the window!

Q: Are https URL working?
A: Yes, HTTrack does support (since 3.20 release) https (secure socket layer protocol) sites

Q: Are ipv6 URL working?
A: Yes, HTTrack does support (since 3.20 release) ipv6 sites, using A/AAAA entries, or direct v6 addresses (like http://[3ffe:b80:12:34:56::78]/)

Q: Files are created with strange names, like '-1.html'!
A: Check the build options (you may have selected user-defined structure with wrong parameters!)

Q: When capturing real audio/video links (.ram), I only get a shortcut!
A: Yes, but .ra/.rm associated file should be captured together - except if rtsp:// protocol is used (not supported by HTTrack yet), or if proper filters are needed

Q: Using user:password@address is not working!
A: Again, first check the hts-log.txt and hts-err.txt error log files - this can give you precious information
The site may have a different authentication scheme - form based authentication, for example. In this case, use the URL capture features of HTTrack, it might work.
Note: If your username and/or password contains a '@' character, you may have to replace all '@' occurences by '%40' so that it can work, such as in user%40domain.com:foobar@www.foo.com/auth/. You may have to do the same for all "special" characters like spaces (%20), quotes (%22)..


Q: When I use HTTrack, nothing is mirrored (no files) What's happening?
A: First, be sure that the URL typed is correct. Then, check if you need to use a proxy server (see proxy options in WinHTTrack or the -P proxy:port option in the command line program). The site you want to mirror may only accept certain browsers. You can change your "browser identity" with the Browser ID option in the OPTION box. Finally, you can have a look at the hts-log.txt (and hts-err.txt) file to see what happened.

Q: There are missing files! What's happening?
A: You may want to capture files that exist in a different folder, or in another web site. You may also want to capture files that are forbidden by default by the
robots.txt website rules. In these cases, HTTrack does not capture these links automatically, you have to tell it to do so.

  • Either use the filters.
    Example: You are downloading http://www.someweb.com/foo/ and can not get .jpg images located in http://www.someweb.com/bar/ (for example, http://www.someweb.com/bar/blue.jpg)
    Then, add the filter rule +www.someweb.com/bar/*.jpg to accept all .jpg files from this location
    You can, also, accept all files from the /bar folder with +www.someweb.com/bar/*, or only html files with +www.someweb.com/bar/*.html and so on..

  • If the problems are related to robots.txt rules, that do not let you access some folders (check in the logs if you are not sure), you may want to disable the default robots.txt rules in the options. (but only disable this option with great care, some restricted parts of the website might be huge or not downloadable)

Q: There are corrupted images/files! How to fix them?
A: First check the log files to ensure that the images do really exist remotely and are not fake html error pages renamed into .jpg ("Not found" errors, for example). Rescan the website with "Continue an interrupted download" to catch images that might be broken due to various errors (transfer timemout, for example). Then, check if the broken image/file name is present in the log (hts-log.txt) - in this case you will find there the reason why the file has not been properly caught.
If this doesn't work, delete the corrupted files (Note: to detect corrupted images, you can browse the directories with a tool like ACDSee and then delete them) and rescan the website as described before. HTTrack will be obliged to recatch the deleted files, and this time it should work, if they do really exist remotely!.


Q: FTP links are not caught! What's happening?
A: FTP files might be seen as external links, especially if they are located in outside domain. You have either to accept all external links (See the links options, -n option) or only specific files (see
filters section).
Example: You are downloading http://www.someweb.com/foo/ and can not get ftp://ftp.someweb.com files
Then, add the filter rule +ftp.someweb.com/* to accept all files from this (ftp) location

Q: I got some weird messages telling that robots.txt do not allow several files to be captured. What's going on?
A: These rules, stored in a file called robots.txt, are given by the website, to specify which links or folders should not be caught by robots and spiders - for example, /cgi-bin or large images files. They are followed by default by HTTrack, as it is advised. Therefore, you may miss some files that would have been downloaded without these rules - check in your logs if it is the case:
Info: Note: due to www.foobar.com remote robots.txt rules, links begining with these path will be forbidden: /cgi-bin/,/images/ (see in the options to disable this)
If you want to disable them, just change the corresponding option in the option list! (but only disable this option with great care, some restricted parts of the website might be huge or not downloadable)


Q: I have duplicate files! What's going on?
A: This is generally the case for top indexes (index.html and index-2.html), isn't it?
This is a common issue, but that can not be easily avoided!
For example, http://www.foobar.com/ and http://www.foobar.com/index.html might be the same pages. But if links in the website refers both to http://www.foobar.com/ and http://www.foobar.com/index.html, these two pages will be caught. And because http://www.foobar.com/ must have a name, as you may want to browse the website locally (the / would give a directory listing, NOT the index itself!), HTTrack must find one. Therefore, two index.html will be produced, one with the -2 to show that the file had to be renamed.
It might be a good idea to consider that http://www.foobar.com/ and http://www.foobar.com/index.html are the same links, to avoid duplicate files, isn't it? NO, because the top index (/) can refer to ANY filename, and if index.html is generally the default name, index.htm can be choosen, or index.php3, mydog.jpg, or anything you may imagine. (some webmasters are really crazy)

Note: In some rare cases, duplicate data files can be found when the website redirect to another file. This issue should be rare, and might be avoided using filters.


Q: I'm downloading too many files! What can I do?
A: This is often the case when you use too large a filter, for example +*.html, which asks the engine to catch all .html pages (even ones on other sites!). In this case, try to use more specific filters, like +www.someweb.com/specificfolder/*.html
If you still have too many files, use filters to avoid somes files. For example, if you have too many files from www.someweb.com/big/, use -www.someweb.com/big/* to avoid all files from this folder. Remember that the default behaviour of the engine, when mirroring http://www.someweb.com/big/index.html, is to catch everything in http://www.someweb.com/big/. Filters are your friends, use them!


Q: The engine turns crazy, getting thousands of files! What's going on?
A: This can happen if a loop occurs in some bogus website. For example, a page that refers to itself, with a timestamp in the query string (e.g. http://www.someweb.com/foo.asp?ts=2000/10/10,09:45:17:147). These are really annoying, as it is VERY difficult to detect the loop (the timestamp might be a page number). To limit the problem: set a recurse level (for example to 6), or avoid the bogus pages (use the filters)

Q: File are sometimes renamed (the type is changed)! Why?
A: By default, HTTrack tries to know the type of remote files. This is useful when links like http://www.someweb.com/foo.cgi?id=1 can be either HTML pages, images or anything else. Locally, foo.cgi will not be recognized as an html page, or as an image, by your browser. HTTrack has to rename the file as foo.html or foo.png so that it can be viewed.

Q: File are sometimes *incorrectly* renamed! Why?
A: Sometimes, some data files are seen by the remote server as html files, or images : in this case HTTrack is being fooled.. and rename the file. This can generally be avoided by using the "use HTTP/1.0 requests" option. You might also avoid this by disabling the type checking in the option panel.

Q: How do I rename all ".dat" files into ".zip" files?
A: Simply use the --assume dat=application/x-zip option

Q: I can not access several pages (access forbidden, or redirect to another location), but I can with my browser, what's going on?
A: You may need cookies! Cookies are specific data (for example, your username or password) that are sent to your browser once you have logged in certain sites so that you only have to log-in once. For example, after having entered your username in a website, you can view pages and articles, and the next time you will go to this site, you will not have to re-enter your username/password.
To "merge" your personnal cookies to an HTTrack project, just copy the cookies.txt file from your Netscape folder (or the cookies located into the Temporary Internet Files folder for IE) into your project folder (or even the HTTrack folder)


Q: Some pages can't be seen, or are displayed with errors!
A: Some pages may include javascript or java files that are not recognized. For example, generated filenames. There may be transfer problems, too (broken pipe, etc.). But most mirrors do work. We still are working to improve the mirror quality of HTTrack.

Q: Some Java applets do not work properly!
A: Java applets may not work in some cases, for example if HTTrack failed to detect all included classes or files called within the class file. Sometimes, Java applets need to be online, because remote files are directly caught. Finally, the site structure can be incompatible with the class (always try to keep the original site structure when you want to get Java classes)
If there is no way to make some classes work properly, you can exclude them with the filters. They will be available, but only online.


Q: HTTrack is taking too much time for parsing, it is very slow. What's wrong?
A: Former (before 3.04) releases of HTTrack had problems with parsing. It was really slow, and performances -especially with huge HTML files- were not really good. The engine is now optimized, and should parse very quickly all html files. For example, a 10MB HTML file should be scanned in less than 3 or 4 seconds.

Therefore, higher values mean that the engine had to wait a bit for testing several links.
  • Sometimes, links are malformed in pages. "a href="/foo"" instead of "a href="/foo/"", for example, is a common mistake. It will force the engine to make a supplemental request, and find the real /foo/ location.


  • Dynamic pages. Links with names terminated by .php3, .asp or other type which are different from the regular .html or .htm will require a supplemental request, too. HTTrack has to "know" the type (called "MIME type") of a file before forming the destination filename. Files like foo.png are "known" to be images, ".html" are obviously HTML pages - but ".php3" pages may be either dynamically generated html pages, images, data files...

    If you KNOW that ALL ".php3" and ".asp" pages are in fact HTML pages on a mirror, use the assume option:
    --assume php3=text/html,asp=text/html

    This option can be used to change the type of a file, too : the MIME type "application/x-MYTYPE" will always have the "MYTYPE" type. Therefore,
    --assume dat=application/x-zip
    will force the engine to rename all dat files into zip files


Q: HTTrack is being idle for a long time without transfering. What's happening?
A: Maybe you try to reach some very slow sites. Try a lower TimeOut value (see options, or -Txx option in the command line program). Note that you will abandon the entire site (except if the option is unchecked) if a timeout happen You can, with the Shell version, skip some slow files, too.

Q: I want to update a site, but it's taking too much time! What's happening?
A: First, HTTrack always tries to minimize the download flow by interrogating the server about the file changes. But, because HTTrack has to rescan all files from the begining to rebuild the local site structure, it can take some time. Besides, some servers are not very smart and always consider that they get newer files, forcing HTTrack to reload them, even if no changes have been made!

Q: I wanted to update a site, but after the update the site disappeared!! What's going on?
A: You may have done something wrong, but not always
  • The site has moved : the current location only shows a notification. Therefore, all other files have been deleted to show the current state of the website!
  • The connection failed: the engine could not catch the first files, and therefore deleted everything. To avoid that, using the option "do not purge old files" might be a good idea
  • You tried to add a site to the project BUT in fact deleted the former addresses.
    Example: A project contains 'www.foo.com www.bar.com' and you want to add 'www.doe.com'. Ensure that 'www.foo.com www.bar.com www.doe.com' is the new URL list, and NOT 'www.doe.com'!

Q: I am behind a firewall. What can I do?
A: You need to use a proxy, too. Ask your administrator to know the proxy server's name/port. Then, use the proxy field in HTTrack or use the -P proxy:port option in the command line program.

Q: HTTrack has crashed during a mirror, what's happening?
A: We are trying to avoid bugs and problems so that the program can be as reliable as possible. But we can not be infallible. If you occurs a bug, please check if you have the latest release of HTTrack, and send us an email with a detailed description of your problem (OS type, addresses concerned, crash description, and everything you deem to be necessary). This may help the other users too.


Q: I want to update a mirrored project, but HTTrack is retransfering all pages. What's going on?
A: First, HTTrack always rescans all local pages to reconstitute the website structure, and it can take some time. Then, it asks the server if the files that are stored locally are up-to-date. On most sites, pages are not updated frequently, and the update process is fast. But some sites have dynamically-generated pages that are considered as "newer" than the local ones.. even if they are identical! Unfortunately, there is no possibility to avoid this problem, which is strongly linked with the server abilities.

Q: I want to continue a mirrored project, but HTTrack is rescanning all pages. What's going on?
A: HTTrack has to (quickly) rescan all pages from the cache, without retransfering them, to rebuild the internal file structure. However, this process can take some time with huge sites with numerous links.

Q: HTTrack window sometimes "disappears" at then end of a mirrored project. What's going on?
A: This is a known bug in the interface. It does NOT affect the quality of the mirror, however. We are still hunting it down, but this is a smart bug..


Questions concerning a mirror:

Q: I want to mirror a Web site, but there are some files outside the domain, too. How to retrieve them?
A: If you just want to retrieve files that can be reached through links, just activate the 'get file near links' option. But if you want to retrieve html pages too, you can both use wildcards or explicit addresses ; e.g. add www.someweb.com/* to accept all files and pages from www.someweb.com.

Q: I have forgotten some URLs of files during a long mirror.. Should I redo all?
A: No, if you have kept the 'cache' files (in hts-cache), cached files will not be retransfered.

Q: I just want to retrieve all ZIP files or other files in a web site/in a page. How do I do it?
A: You can use different methods. You can use the 'get files near a link' option if files are in a foreign domain. You can use, too, a filter adress: adding +*.zip in the URL list (or in the filter list) will accept all ZIP files, even if these files are outside the address.
Example : httrack www.someweb.com/someaddress.html +*.zip will allow you to retrieve all zip files that are linked on the site.


Q: There are ZIP files in a page, but I don't want to transfer them. How do I do it?
A: Just filter them: add -*.zip in the filter list.

Q: I don't want to download ZIP files bigger than 1MB and MPG files smaller than 100KB. Is it possible?
A: You can use
filters for that ; using the syntax:
-*.zip*[>1000] -*.mpg*[<100]

Q: I don't want to load gif files.. but what may happen if I watch the page?
A: If you have filtered gif files (-*.png), links to gif files will be rebuilt so that your browser can find them on the server.

Q: I don't want to download thumbnail images.. is it possible?
A: Filters can not be used with image pixel size ; but you can filter on file size (bytes). Use advanced
filters for that ; such as:
-*.png*[<10] to exclude gif files smaller than 10KiB.


Q: I get all types of files on a web site, but I didn't select them on filters!
A: By default, HTTrack retrieves all types of files on authorized links. To avoid that, define filters like
-* +<website>/*.html +<website>/*.htm +<website>/ +*.<type wanted>
Example: httrack www.someweb.com/index.html -* +www.someweb.com/*.htm* +www.someweb.com/*.png +www.someweb.com/*.jpg

Q: When I use filters, I get too many files!
A: You might use too large a filter, for example *.html will get ALL html files identified. If you want to get all files on an address, use www.<address>/*.html.
If you want to get ONLY files defined by your filters, use something like -* +www.foo.com/*, because +www.foo.com/* will only accept selected links without forbidding other ones!
There are lots of possibilities using filters.
Example:httrack www.someweb.com +*.someweb.com/*.htm*

Q: When I use filters, I can't access another domain, but I have filtered it!
A: You may have done a mistake declaring filters, for example +www.someweb.com/* -*someweb* will not work, because -*someweb* has an upper priority (because it has been declared after +www.someweb.com)

Q: Must I add a  '+' or '-' in the filter list when I want to use filters?
A: YES. '+' is for accepting links and '-' to avoid them. If you forget it, HTTrack will consider that you want to accept a filter if there is a wild card in the syntax - e.g. +<filter> is identical to <filter> if <filter> contains a wild card (*) (else it will be considered as a normal link to mirror)


Q: I want to find file(s) in a web-site. How do I do it?
A: You can use the filters: forbid all files (add a -* in the filter list) and accept only html files and the file(s) you want to retrieve (BUT do not forget to add +<website>*.html in the filter list, or pages will not be scanned! Add the name of files you want with a */ before ; i.e. if you want to retrieve file.zip, add */file.zip)
Example:httrack www.someweb.com +www.someweb.com/*.htm* +thefileiwant.zip

Q: I want to download ftp files/ftp site. How do I do it?
A: First, HTTrack is not the best tool to download many ftp files. Its ftp engine is basic (even if reget are possible) and if your purpose is to download a complete site, use a specific client.
You can download ftp files just by typing the URL, such as ftp://ftp.somesite.com/pub/files/file010.zip and list ftp directories like ftp://ftp.somesite.com/pub/files/
.
Note: For the filters, use something like +ftp.somesite.com/*

Q: How can I retrieve .asp or .cgi sources instead of .html result?
A: You can't! For security reasons, web servers do not allow that.

Q: How can I remove these annoying <!-- Mirrored from... --> from html files?
A: Use the footer option (-%F, or see the WinHTTrack options)

Q: Do I have to select between ascii/binary transfer mode?
A: No, http files are always transfered as binary files. Ftp files, too (even if ascii mode could be selected)

Q: Can HTTrack perform form-based authentication?
A: Yes. See the URL capture abilities (--catchurl for command-line release, or in the WinHTTrack interface)

Q: Can I redirect downloads to tar/zip archive?
A: Yes. See the shell system command option (-V option for command-line release)

Q: Can I use username/password authentication on a site?
A: Yes. Use user:password@your_url (example: http://foo:bar@www.someweb.com/private/mybox.html)

Q: Can I use username/password authentication for a proxy?
A: Yes. Use user:password@your_proxy_name as your proxy name (example: smith:foo@proxy.mycorp.com)

Q: Can HTTrack generates HP-UX or ISO9660 compatible files?
A: Yes. See the build options (-N, or see the WinHTTrack options)

Q: If there any SOCKS support?
A: Not yet!

Q: What's this hts-cache directory? Can I remove it?
A: NO if you want to update the site, because this directory is used by HTTrack for this purpose. If you remove it, options and URLs will not be available for updating the site

Q: What is the meaning of the Links scanned: 12/34 (+5) line in WinHTTrack/WebHTTrack?
A: 12 is the number of links scanned and stored, 34 the total number of links detected to be parsed, and 5 the number of files downloaded in background. In this example, 17 links were downloaded out of a (temporary) total of 34 links.

Q: Can I start a mirror from my bookmarks?
A: Yes. Drag&Drop your bookmark.html file to the WinHTTrack window (or use file://filename for command-line release) and select bookmark mirroring (mirror all links in pages, -Y) or bookmark testing (--testlinks)

Q: Can I convert a local website (file:// links) to a standard website?
A: Yes. Just start from the top index (example: file://C:\foopages\index.html) and mirror the local website. HTTrack will convert all file:// links to relative ones.

Q: Can I copy a project to another folder - Will the mirror work?
A: Yes. There is no absolute links, all links are relative. You can copy a project to another drive/computer/OS, and browse is without installing anything.

Q: Can I copy a project to another computer/system? Can I then update it ?
A: Absolutely! You can keep your HTTrack favorite folder (C:\My Web Sites) in your local hard disk, copy it for a friend, and possibly update it, and then bring it back!
You can copy individual folders (projects), too: exchange your favorite websites with your friends, or send an old version of a site to someone who has a faster connection, and ask him to update it!

Note: Export (Windows <-> Linux)
The file and cache structure is compatible between Linux/Windows, but you may have to do some changes, like the path
Windows -> Linux/Unix
Copy (in binary mode) the entire folder and then to update it, enter into it and do a
httrack --update -O ./

Note: You can then safely replace the existing folder (under Windows) with this one, because the Linux/Unix version did not change any options
Note: If you often switch between Windows/Linux with the same project, it might be a good idea to edit the hts-cache/doit.log file and delete old "-O" entries, because each time you do a httrack --update -O ./ an entry is added, causing the command line to be long
Linux/Unix -> Windows
Copy (in binary mode) the entire folder in your favorite Web mirror folder. Then, select this project, AND retype ALL URLs AND redefine all options as if you were creating a new project. This is necessary because the profile (winprofile.ini) has not be created with the Linux/Unix version. But do not be afraid, WinHTTrack will use cached files to update the project!


Q: How can I grab email addresses in web pages?
A: You can not. HTTrack has not be designed to be an email grabber, like many other (bad) products.


Other problems:

Q: My problerm is not listed!
A: Feel free to
contact us!


httraqt-1.4.11/help/step9_opt8.html0000664000175000017500000001022013154004604017311 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Browser ID




  • Browser "Identity"

  • Enter here the name of the engine, as it will be seen by Web-servers
    For example, entering "Mozilla/4.5 (compatible; MSIE 4.01; Windows 98)" will disguise HTTrack into a standard MSIE4 browser
    This field is for statistical purpose, and you can enter whatever you want, a browser name that does not exist or even your grandma's name
    However, beware that several sites may deliver a different content whether the browser is called "Netscape" or "Explorer".. some elitist ones will even refuse to deliver anything depending on the browser name. This case is rare, fortunately.


  • HTML Footer

  • Enter here the optionnal text that will be included as a comment in each HTML file to make archiving easier
    The string entered is generally an HTML comment (<!-- HTML comment -->) with optionnal %s, which will be transformed into a specific string information:
    %s #1 : host name (for example, www.someweb.com)
    %s #2 : file name (for example, /index.html)
    %s #3 : date of the mirror
    Example: <!-- Page mirrored from %s, file %s. Archive date: %s -->
    Note: You can select (none), in this case no comments will be added to the pages. However, this is NOT advised as you may want to know in the future where the page has been taken, when/why..






Back to Home

httraqt-1.4.11/help/library.html0000664000175000017500000000557213154004364016760 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

HTTrack Programming page - using the library


All library prototypes are available in the httrack-library.h file.
You may also want to check the httrack.c and httrack.h files to get an example of use of this library.



httraqt-1.4.11/help/cmddoc.html0000664000175000017500000000706013154004263016535 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Command-Line Documentation


The command-line version
  • Command line Options

  • List of all powerful command line options

  • How to use httrack command-line version:
    • Open a shell window


    • Type in httrack (or the complete path to the httrack executable)

    • httrack

    • Add the URLs, separated by a blank space

    • httrack www.someweb.com/foo/

    • If you need, add some options (see the option list)

    • httrack www.someweb.com/foo/ -O "/webs" -N4 -P proxy.myhost.com:3128

    • Launch the command line, and wait until the mirror is finishing

    • You can (especially on the Unix release) press ^C to stop the mirror or put httrack in background

httraqt-1.4.11/help/cache.html0000664000175000017500000002173513154004250016350 0ustar karbofoskarbofos HTTrack Website Copier - Cache format specification
HTTrack Website Copier
Open Source offline browser

Cache format specification


For updating purpose, HTTrack stores original (untouched) HTML data, references to downloaded files, and other meta-data (especially parts of the HTTP headers) in a cache, located in the hts-cache directory. Because local html pages are always modified to "fit" the local filesystem structure, and because meta-data such as the last-Modified date and Etag can not be stored with the associated files, the cache is absolutely mandatory for reprocessing (update/continue) phases.

The (new) cache.zip format

The 3.31 release of HTTrack introduces a new cache format, more extensible and efficient than the previous one (ndx/dat format). The main advantages of this cache are:
  • One single file for a complete website cache archive
  • Standard ZIP format, that can be easily reused on most platforms and languages
  • Compressed data with the efficient and opened zlib format
The cache is made of ZIP files entries ; with one ZIP file entry per fetched URL (successfully or not - errors are also stored).
For each entry:
  • The ZIP file name is the original URL [see notes below]
  • The ZIP file contents, if available, is the original (compressed, using the deflate algorythm) data
  • The ZIP file extra field (in the local file header) contains a list of meta-fields, very similar to the HTTP headers fields. See also RFC.

  • The ZIP file timestamp follows the "Last-Modified-Since" field given for this URL, if any
Example of cache file:
$ unzip -l hts-cache/new.zip
Archive:  hts-cache/new.zip
HTTrack Website Copier/3.31-ALPHA-4 mirror complete in 3 seconds : 5 links scanned, 
3 files written (16109 bytes overall) [17690 bytes received at 5896 bytes/sec]
(1 errors, 0 warnings, 0 messages)
  Length     Date   Time    Name
 --------    ----   ----    ----
       94  07-18-03 08:59   http://www.httrack.com/robots.txt
     9866  01-17-04 01:09   http://www.httrack.com/html/cache.html
        0  05-11-03 13:31   http://www.httrack.com/html/images/bg_rings.png
      207  01-19-04 05:49   http://www.httrack.com/html/fade.png
        0  05-11-03 13:31   http://www.httrack.com/html/images/header_title_4.png
 --------                   -------
    10167                   5 files
Example of cache file meta-data:
HTTP/1.1 200 OK
X-In-Cache: 1
X-StatusCode: 200
X-StatusMessage: OK
X-Size: 94
Content-Type: text/plain
Last-Modified: Fri, 18 Jul 2003 08:59:11 GMT
Etag: "40ebb5-5e-3f17b6df"
X-Addr: www.httrack.com
X-Fil: /robots.txt
There are also specific issues regarding this format:
  • The data in the central directory (such as CD extra field, and CD comments) are not used
  • The ZIP archive is allowed to contains more than 2^16 files (65535) ; in such case the total number of entries in the 32-bit central directory is 65536 (0xffff), but the presence of the 64-bit central directory is not mandatory
  • The ZIP archive is allowed to contains more than 2^32 bytes (4GiB) ; in such case the 64-bit central directory must be present (not currently supported)

Meta-data stored in the "extra field" of the local file headers
The extra field is composed of text data, and this text data is composed of distinct lines of headers. The end of text, or a double CR/LF, mark the end of this zone. This method allows to optionally store original HTTP headers just after the "meta-data" headers for informational use.

The status line (the first headers line)
Status-Line = HTTP-Version SP Status-Code SP X-Reason-Phrase CRLF

Other lines:

Specific fields:
  • X-In-Cache

  • Indicates if the data are present (value=1) in the cache (that is, as ZIP data), or in an external file (value=0). This field MUST be the first field.
  • X-StatusCode

  • The modified (by httrack) status code after processing. 304 error codes ("Not modified"), for example, are transformed into "200" codes after processing.
  • X-StatusMessage

  • The modified (by httrack) status message.
  • X-Size

  • The stored (either in cache, or in an external file) data size.
  • X-Charset

  • The original charset.
  • X-Addr

  • The original URL address part.
  • X-Fil

  • The original URL path part.
  • X-Save

  • The local filename, depending on user's "build structure" preferences.

Standard (RFC 2616) "useful" fields:
  • Content-Type
  • Last-Modified
  • Etag
  • Location
  • Content-Disposition

Specific fields in "BNF-like" grammar:
X-In-Cache          = "X-In-Cache" ":" 1*DIGIT
X-StatusCode        = "X-StatusCode" ":" 1*DIGIT
X-StatusMessage     = "X-StatusMessage" ":" *<TEXT, excluding CR, LF>
X-Size              = "X-Size" ":" 1*DIGIT
X-Charset           = "X-Charset" ":" value
X-Addr              = "X-Addr" ":" scheme ":" "//" authority
X-Fil               = "X-Fil" ":" rel_path
X-Save              = "X-Save" ":" rel_path
RFC standard fields:
Content-Type        = "Content-Type" ":" media-type
Last-Modified       = "Last-Modified" ":" HTTP-date
Etag                = "ETag" ":" entity-tag
Location            = "Location" ":" absoluteURI
Content-Disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm )

And, for your information,
X-Reason-Phrase     = *<TEXT, with a maximum of 32 characters, and excluding CR, LF>
Note: Because the URLs may have an unexpected format, especially with double "/" inside, and other reserved characters ("?", "&" ..), various ZIP uncompressors can potentially have troubles accessing or decompressing the data. Libraries should generally handle this peculiar format, however.

httraqt-1.4.11/help/abuse.html0000664000175000017500000004625413154004227016413 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

For HTTrack users:


For webmasters having problems with bandwidth abuse / other abuses related to HTTrack:



Advice & what not to do

Please follow these common sense rules to avoid any network abuse


  • Do not overload the websites!

  • Downloading a site can overload it, if you have a fast pipe, or if you capture too many simultaneous cgi (dynamically generated pages).
    • Do not download too large websites: use filters
    • Do not use too many simultaneous connections
    • Use bandwidth limits
    • Use connection limits
    • Use size limits
    • Use time limits
    • Only disable robots.txt rules with great care
    • Try not to download during working hours
    • Check your mirror transfer rate/size
    • For large mirrors, first ask the webmaster of the site

  • Ensure that you can copy the website
    • Are the pages copyrighted?
    • Can you copy them only for private purpose?
    • Do not make online mirrors unless you are authorized to do so

  • Do not overload your network
    • Is your (corporate, private..) network connected through dialup ISP?
    • Is your network bandwidth limited (and expensive)?
    • Are you slowing down the traffic?

  • Do not steal private information
    • Do not grab emails
    • Do not grab private information


Abuse FAQ for webmasters

How to limit network abuse
HTTrack Website Copier FAQ (updated - DRAFT)


Q: How to block offline browsers, like HTTrack?

A: This is a complex question, let's study it

First, there are several different reasons for that
Why do you want to block offline browsers? :

  1. Because a large part of your bandwidth is used by some users, who are slowing down the rest
  2. Because of copyright questions (you do not want people to copy parts of your website)
  3. Because of privacy (you do not want email grabbers to steal all your user's emails)


  1. Bandwidth abuse:

    Many Webmasters are concerned about bandwidth abuse, even if this problem is caused by a minority of people. Offline browsers tools, like HTTrack, can be used in a WRONG way, and therefore are sometimes considered as a potential danger.
    But before thinking that all offline browsers are BAD, consider this: students, teachers, IT consultants, websurfers and many people who like your website, may want to copy parts of it, for their work, their studies, to teach or demonstrate to people during class school or shows. They might do that because they are connected through expensive modem connection, or because they would like to consult pages while travelling, or archive sites that may be removed one day, make some data mining, comiling information ("if only I could find this website I saw one day..").
    There are many good reasons to mirror websites, and this helps many good people.
    As a webmaster, you might be interested to use such tools, too: test broken links, move a website to another location, control which external links are put on your website for legal/content control, test the webserver response and performances, index it..

    Anyway, bandwidth abuse can be a problem. If your site is regularly "clobbered" by evil downloaders, you have
    various solutions. You have radical solutions, and intermediate solutions. I strongly recomment not to use
    radical solutions, because of the previous remarks (good people often mirror websites).

    In general, for all solutions,
    the good thing: it will limit the bandwidth abuse
    the bad thing: depending on the solution, it will be either a small constraint, or a fatal nuisance (you'll get 0 visitors)
    or, to be extreme: if you unplug the wire, there will be no bandwidth abuse

    1. Inform people, explain why ("please do not clobber the bandwidth")
      Good: Will work with good people. Many good people just don't KNOW that they can slow down a network.
      Bad: Will **only** work with good people
      How to do: Obvious - place a note, a warning, an article, a draw, a poeme or whatever you want

    2. Use "robots.txt" file
      Good: Easy to setup
      Bad: Easy to override
      How to do: Create a robots.txt file on top dir, with proper parameters
      Example:
          User-agent: *

          Disallow: /bigfolder

    3. Ban registered offline-browsers User-agents
      Good: Easy to setup
      Bad: Radical, and easy to override
      How to do: Filter the "User-agent" HTTP header field

    4. Limit the bandwidth per IP (or by folders)
      Good: Efficient
      Bad: Multiple users behind proxies will be slow down, not really easy to setup
      How to do: Depends on webserver. Might be done with low-level IP rules (QoS)

    5. Priorize small files, against large files
      Good: Efficient if large files are the cause of abuse
      Bad: Not always efficient
      How to do: Depends on the webserver

    6. Ban abuser IPs
      Good: Immediate solution
      Bad: Annoying to do, useless for dynamic IPs, and not very user friendly
      How to do: Either ban IP's on the firewall, or on the webserver (see ACLs)

    7. Limit abusers IPs
      Good: Intermediate and immediate solution
      Bad: Annoying to do, useless for dynamic IPs, and annoying to maintain..
      How to do: Use routine QoS (fair queuing), or webserver options

    8. Use technical tricks (like javascript) to hide URLs
      Good: Efficient
      Bad: The most efficient tricks will also cause your website to he heavy, and not user-friendly (and therefore less attractive, even for surfing users). Remember: clients or visitors might want to consult offline your website. Advanced users will also be still able to note the URLs and catch them. Will not work on non-javascript browsers. It will not work if the user clicks 50 times and put downloads in background with a standard browser
      How to do: Most offline browsers (I would say all, but let's say most) are unable to "understand" javascript/java properly. Reason: very tricky to handle!
      Example:
      You can replace:
          <a href="bigfile.zip">Foo</a>
      by:
          <script language="javascript">
          <!--
          document.write('<a h' + 're' + 'f="');
          document.write('bigfile' + '.' + 'zip">');
          // -->
          </script>
          Foo
          </a>

      You can also use java-based applets. I would say that it is the "best of the horrors". A big, fat, slow, bogus java applet. Avoid!

    9. Use technical tricks to lag offline browsers
      Good: Efficient
      Bad: Can be avoided by advanced users, annoying to maintain, AND potentially worst that the illness (cgi's are often taking some CPU usage). . It will not work if the user clicks 50 times and put downloads in background with a standard browser
      How to do: Create fake empty links that point to cgi's, with long delays
      Example: Use things like <ahref="slow.cgi?p=12786549"><nothing></a> (example in php:)
          <?php
          for($i=0;$i<10;$i++) {
              sleep(6);
              echo " ";
          }
          ?>

    10. Use technical tricks to temporarily ban IPs
      Good: Efficient
      Bad: Radical (your site will only be available online for all users), not easy to setup
      How to to: Create fake links with "killing" targets
      Example: Use things like <a href="killme.cgi"><nothing></a> (again an example in php:)
      <?php
      	// Add IP.
      	add_temp_firewall_rule($REMOTE_ADDR,"30s");
      ?>
      function add_temp_firewall_rule($addr) {
      	// The chain chhttp is flushed in a cron job to avoid ipchains overflow
          system("/usr/bin/sudo -u root /sbin/ipchains -I 1 chhttp -p tcp -s ".$addr." --dport 80 -j REJECT");
          syslog("user rejected due to too many copy attemps : ".$addr);
      }
      
      
      
      
      

  2. Copyright issues

    You do not want people to "steal" your website, or even copy parts of it. First, stealing a website does not
    require to have an offline browser. Second, direct (and credited) copy is sometimes better than disguised
    plagiarism. Besides, several previous remarks are also interesting here: the more protected your website will be,
    the potentially less attractive it will also be. There is no perfect solution, too. A webmaster asked me one day
    to give him a solution to prevent any website copy. Not only for offline browsers, but also against "save as",
    cut and paste, print.. and print screen. I replied that is was not possible, especially for the print screen - and
    that another potential threat was the evil photographer. Maybe with a "this document will self-destruct in 5 seconds.."
    or by shooting users after consulting the document.
    More seriously, once a document is being placed on a website, there will always be the risks of copy (or plagiarism)

    To limit the risk, previous a- and h- solutions, in "bandwidth abuse" section, can be used


  3. Privacy

    Might be related to section 2.
    But the greatest risk is maybe email grabbers.

    1. A solution can be to use javascript to hide emails.
      Good: Efficient
      Bad: Non-javascript browsers will not have the "clickable" link
      How to do: Use javascript to build mailto: links
      Example:
          <script language="javascript">
          <!--
          function FOS(host,nom,info) {
            var s;
            if (info == "") info=nom+"@"+host;
            s="mail";
            document.write("<a href='"+s+"to:"+nom+"@"+host+"'>"+info+"</a>");
          }
          FOS('mycompany.com','smith?subject=Hi, John','Click here to email me!')
          // -->
          </script>
          <noscript>
          smith at mycompany dot com
          </noscript>

    2. Another one is to create images of emails
      Good: Efficient, does not require javascript
      Bad: There is still the problem of the link (mailto:), images are bigger than text, and it can cause problems for blind people (a good solution is use an ALT attribute with the email written like "smith at mycompany dot com")
      How to do: Not so obvious of you do not want to create images by yourself
      Example: (php, Unix)
      <?php
      /*
      Email contact displayer
      Usage: email.php3?id=<4 bytes of user's md5>
      The <4 bytes of user's md5> can be calculated using the 2nd script (see below)
      Example: http://yourhost/email.php3?id=91ff1a48
      */
      $domain="mycompany.com";
      $size=12;

      /* Find the user in the system database */
      if (!$id)
        exit;
      unset($email);
      unset($name);
      unset($pwd);
      unset($apwd);
      $email="";
      $name="";
      $fp=@fopen("/etc/passwd","r");
      if ($fp) {
        $pwd=@fread($fp,filesize("/etc/passwd"));
        @fclose($fp);
      }
      $apwd=split("\n",$pwd);
      foreach($apwd as $line) {
        $fld=split(":",$line);
        if (substr(md5($fld[0]),0,8) == $id) {
          $email=$fld[0]."@".$domain;
          $nm=substr($fld[4],0,strpos($fld[4],","));
          $name=$email;
          if ($nm)
            $name="\"".$nm."\" <".$email.">";
        }
      }
      if (!$name)
        exit;

      /* Create and show the image */
      Header ("Content-type: image/gif");
      $im = imagecreate ($size*strlen($name), $size*1.5);
      $black = ImageColorAllocate ($im, 255, 255, 255);
      $white = ImageColorAllocate ($im, 0,0,0);
      ImageTTFText($im, $size, 0, 0, $size , $white, "/usr/share/enlightenment/E-docs/aircut3.ttf",$name);
      ImageGif ($im);
      ImageDestroy ($im);
      ?>

      The script to find the id:

      #!/bin/sh

      # small script for email.php3
      echo "Enter login:"
      read login
      echo "The URL is:"
      printf "http://yourhost/email.php3?id="
      printf $login|md5sum|cut -c1-8
      echo

    3. You can also create temporary email aliases, each week, for all users
      Good: Efficient, and you can give your real email in your reply-to address
      Bad: Temporary emails
      How to do: Not so hard todo
      Example: (script & php, Unix)
      #!/bin/sh
      #
      # Anonymous random aliases for all users
      # changed each week, to avoid spam problems
      # on websites
      # (to put into /etc/cron.weekly/)

      # Each alias is regenerated each week, and valid for 2 weeks

      # prefix for all users
      # must not be the prefix of another alias!
      USER_PREFIX="user-"

      # valid for 2 weeks
      ALIAS_VALID=2

      # random string
      SECRET="my secret string `hostname -f`"

      # build
      grep -vE "^$USER_PREFIX" /etc/aliases > /etc/aliases.new
      for i in `cut -f1 -d':' /etc/passwd`; do
        if test `id -u $i` -ge 500; then
          off=0
          while test "$off" -lt $ALIAS_VALID; do
            THISWEEK="`date +'%Y'` $[`date +'%U'`-$off]"
            SECRET="`echo \"$SECRET $i $THISWEEK\" | md5sum | cut -c1-4`"
            FIRST=`echo $i | cut -c1-3`
            NAME="$USER_PREFIX$FIRST$SECRET"
            echo "$NAME : $i" >> /etc/aliases.new
            #
            off=$[$off+1]
          done
        fi
      done

      # move file
      mv -f /etc/aliases /etc/aliases.old
      mv -f /etc/aliases.new /etc/aliases

      # update aliases
      newaliases

      And then, put the email address in your pages through:

      <a href="mailto:<?php
          $user="smith";
          $alias=exec("grep ".$user." /etc/aliases | cut -f1 -d' ' | head -n1");
          print $alias;
      ?>@mycompany.com>>

httraqt-1.4.11/help/plug_330.html0000664000175000017500000004141113154004412016632 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

HTTrack Programming page - plugging functions
releases 3.30 to 3.40 (not beyond)


You can write external functions to be plugged in the httrack library very easily. We'll see there some examples.

The httrack commandline tool allows (since the 3.30 release) to plug external functions to various callbacks defined in httrack.
See also: the httrack-library.h prototype file, and the callbacks-example.c given in the httrack archive.

Example: httrack --wrapper check-html=callback:process_file ..
With the callback.so (or callback.dll) module defined as below:
int process_file(char* html, int len, char* url_adresse, char* url_fichier) {
  printf("now parsing %s%s..\n", url_adresse, url_fichier);
  strcpy(currentURLBeingParsed, url_adresse);
  strcat(currentURLBeingParsed, url_fichier);
  return 1;  /* success */
}
Below the list of callbacks, and associated external wrappers:
typedef void (* t_hts_htmlcheck_filesave2)();
"callback name"callback descriptioncallback function signature
"init"Note: deprecated, should not be used anymore (unsafe callback) - see "start" callback or wrapper_init() module function below this table.Called during initialization ; use of htswrap_add (see httrack-library.h) is permitted inside this function to setup other callbacks.
return value: none
void (* myfunction)(void);
"free"Note: deprecated, should not be used anymore (unsafe callback) - see "end" callback or wrapper_exit() module function below this table.
Called during un-initialization
return value: none
void (* myfunction)(void);
"start"Called when the mirror starts. The opt structure passed lists all options defined for this mirror. You may modify the opt structure to fit your needs. Besides, use of htswrap_add (see httrack-library.h) is permitted inside this function to setup other callbacks.
return value: 1 upon success, 0 upon error (the mirror will then be aborted)
int (* myfunction)(httrackp* opt);
"end"Called when the mirror ends
return value: 1 upon success, 0 upon error (the mirror will then be considered aborted)
int (* myfunction)(void);
"change-options"Called when options are to be changed. The opt structure passed lists all options, updated to take account of recent changes
return value: 1 upon success, 0 upon error (the mirror will then be aborted)
int (* myfunction)(httrackp* opt);
"check-html"Called when a document (which may not be an html document) is to be parsed. The html address points to the document data, of lenth len. The url_adresse and url_fichier are the address and URI of the file being processed
return value: 1 if the parsing can be processed, 0 if the file must be skipped without being parsed
int (* myfunction)(char* html,int len,char* url_adresse,char* url_fichier);
"preprocess-html"Called when a document (which is an html document) is to be parsed (original, not yet modified document). The html address points to the document data address (char**), and the length address points to the lenth of this document. Both pointer values (address and size) can be modified to change the document. It is up to the callback function to reallocate the given pointer (using standard C library realloc()/free() functions), which will be free()'ed by the engine. Hence, return of static buffers is strictly forbidden, and the use of strdup() in such cases is advised. The url_adresse and url_fichier are the address and URI of the file being processed
return value: 1 if the new pointers can be applied (default value)
int (* myfunction)(char** html,int* len,char* url_adresse,char* url_fichier);
"postprocess-html"Called when a document (which is an html document) is parsed and transformed (links rewritten). The html address points to the document data address (char**), and the length address points to the lenth of this document. Both pointer values (address and size) can be modified to change the document. It is up to the callback function to reallocate the given pointer (using standard C library realloc()/free() functions), which will be free()'ed by the engine. Hence, return of static buffers is strictly forbidden, and the use of strdup() in such cases is advised. The url_adresse and url_fichier are the address and URI of the file being processed
return value: 1 if the new pointers can be applied (default value)
int (* myfunction)(char** html,int* len,char* url_adresse,char* url_fichier);
"query"Called when the wizard needs to ask a question. The question string contains the question for the (human) user
return value: the string answer ("" for default reply)
char* (* myfunction)(char* question);
"query2"Called when the wizard needs to ask a questionchar* (* myfunction)(char* question);
"query3"Called when the wizard needs to ask a questionchar* (* myfunction)(char* question);
"loop"Called periodically (informational, to display statistics)
return value: 1 if the mirror can continue, 0 if the mirror must be aborted
int (* myfunction)(lien_back* back,int back_max,int back_index,int lien_tot,int lien_ntot,int stat_time,hts_stat_struct* stats);
"check-link"Called when a link has to be tested. The adr and fil are the address and URI of the link being tested. The passed status value has the following meaning: 0 if the link is to be accepted by default, 1 if the link is to be refused by default, and -1 if no decision has yet been taken by the engine
return value: same meaning as the passed status value ; you may generally return -1 to let the engine take the decision by itself
int (* myfunction)(char* adr,char* fil,int status);
"check-mime"Called when a link download has begun, and needs to be tested against its MIME type. The adr and fil are the address and URI of the link being tested, and the mime string contains the link type being processed. The passed status value has the following meaning: 0 if the link is to be accepted by default, 1 if the link is to be refused by default, and -1 if no decision has yet been taken by the engine
return value: same meaning as the passed status value ; you may generally return -1 to let the engine take the decision by itself
int (* myfunction)(char* adr,char* fil,char* mime,int status);
"pause"Called when the engine must pause. When the lockfile passed is deleted, the function can return
return value: none
void (* myfunction)(char* lockfile);
"save-file"Called when a file is to be saved on disk
return value: none
void (* myfunction)(char* file);
"save-file2"Called when a file is to be saved or checked on disk
The hostname, filename and local filename are given. Two additional flags tells if the file is new (is_new) and is the file is to be modified (is_modified).
(!is_new && !is_modified): the file is up-to-date, and will not be modified
(is_new && is_modified): a new file will be written (or an updated file is being written)
(!is_new && is_modified): a file is being updated (append)
(is_new && !is_modified): an empty file will be written ("do not recatch locally erased files")
return value: none
void (* myfunction)(char* hostname,char* filename,char* localfile,int is_new,int is_modified);
"link-detected"Called when a link has been detected
return value: 1 if the link can be analyzed, 0 if the link must not even be considered
int (* myfunction)(char* link);
"transfer-status"Called when a file has been processed (downloaded, updated, or error)
return value: must return 1
int (* myfunction)(lien_back* back);
"save-name"Called when a local filename has to be processed. The adr_complete and fil_complete are the address and URI of the file being saved ; the referer_adr and referer_fil are the address and URI of the referer link. The save string contains the local filename being used. You may modifiy the save string to fit your needs, up to 1024 bytes (note: filename collisions, if any, will be handled by the engine by renaming the file into file-2.ext, file-3.ext ..).
return value: must return 1
int (* myfunction)(char* adr_complete,char* fil_complete,char* referer_adr,char* referer_fil,char* save);
"send-header"Called when HTTP headers are to be sent to the remote server. The buff buffer contains text headers, adr and fil the URL, and referer_adr and referer_fil the referer URL. The outgoing structure contains all information related to the current slot.
return value: 1 if the mirror can continue, 0 if the mirror must be aborted
int (* myfunction)(char* buff, char* adr, char* fil, char* referer_adr, char* referer_fil, htsblk* outgoing);
"receive-header"Called when HTTP headers are recevived from the remote server. The buff buffer contains text headers, adr and fil the URL, and referer_adr and referer_fil the referer URL. The incoming structure contains all information related to the current slot.
return value: 1 if the mirror can continue, 0 if the mirror must be aborted
int (* myfunction)(char* buff, char* adr, char* fil, char* referer_adr, char* referer_fil, htsblk* incoming);


Below additional function names that can be defined inside the module (DLL/.so):
"module function name"function description
int function-name_init(char *args);Called when a function named function-name is extracted from the current module (same as wrapper_init). The optional args provides additional commandline parameters. Returns 1 upon success, 0 if the function should not be extracted.
int wrapper_init(char *fname, char *args);Called when a function named fname is extracted from the current module. The optional args provides additional commandline parameters. Besides, use of htswrap_add (see httrack-library.h) is permitted inside this function to setup other callbacks. Returns 1 upon success, 0 if the function should not be extracted.
int wrapper_exit(void);Called when the module is unloaded. The function should return 1 (but the result is ignored).


Below additional function names that can be defined inside the optional libhttrack-plugin module (libhttrack-plugin.dll or libhttrack-plugin.so) searched inside common library path:
"module function name"function description
void plugin_init(void);Called if the module (named libhttrack-plugin.(so|dll)) is found in the library path. Use of htswrap_add (see httrack-library.h) is permitted inside this function to setup other callbacks.




httraqt-1.4.11/help/step4.html0000664000175000017500000000607313154004475016353 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Step 4 : Wait!


  1. Wait until the mirror is finishing

  2. You can cancel at any time the mirror, or cancel files currently downloaded for any reasons (file too big, for example)
    Options can be changed during the mirror: maximum number of connections, limits...



  3. Go to the next step...




Back to Home

httraqt-1.4.11/help/step9_opt2.html0000664000175000017500000001352313154004536017320 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Limits




  • Maximum mirror depth

  • Define how deep will the engine seek in the site A depth of 3 means that you will catch all pages you have indicated, plus all that can be accessed clicking twice on any link
    Note: This option is not filled by default, so the depth is infinite. But because the engine will stay on the site you indicated, only the desired sites will be mirrored, and not all the web!


  • Maximum external depth

  • Define how deep will the engine seek in external sites, or on addresses that were forbidden.
    Normally, HTTrack will not go on external sites by default (except if authorized by filters), and will avoid addresses forbidden by filters. You can override this behaviour, and tell the engine to catch N levels of "external" sites.
    Note: Use this option with great care, as it is overriding all other options (filters and default engine limiter)
    Note: This option is not filled by default, so the depth is equal to zero.


  • Maximum size of an HTML file

  • Define the biggest Html file the engine is allowed to catch.
    This option allows you to avoid big files if you do not want to download them.


  • Max size of a non-HTML file

  • Define the biggest non-html file (image, ZIP file..) the engine is allowed to catch.
    This option allows you to avoid big files if you do not want to download them.


  • Site size limit

  • This option limits the total amount of bytes that can be downloaded in the current mirror

  • Pause after downloading..

  • This option lets the engine do a pause every time it has retrieved a specific amount of bytes
    Useful if you are mirroring a site bigger than the available space: you can then backup and erase the downloaded files during the pause


  • Max time overall

  • This option limits the total amount of time that can be spent on the current mirror

  • Max transfer rate

  • This option limits the transfer rate on the current mirror
    Useful if you do not want HTTrack to monopolize the bandwidth!


  • Max connections / seconds

  • This option limits the number of connections per second for the current mirror. This number can be a floating number (such as 0.1 == 1 connection per 10 seconds)
    Useful to limit server load.
    The default is 10, but you can disable it with a value of 0 - THIS IS NOT ADVISED UNLESS YOU KNOW WHAT YOU ARE DOING (risks of server overload)


  • Maximum number of links

  • Maximum number of links that can be analyzed, that is, either downloaded, or not downloaded. Do not set a too low limit for that, because once the limit is reached, the engine will stop immediately.
    Do not set a too high limit, too, because it will take some memory.. 100,000 links (default) is generally enough.






Back to Home

httraqt-1.4.11/help/fcguide.html0000664000175000017500000031214113154004326016711 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Httrack Users Guide (3.10)

By Fred Cohen

Background and Introduction

I started using httrack in mid-2000 and found it to be an excellent tool for imaging web sites. Various words are used to describe this process - from imaging to mirroring to snaking and so on. I will be using a variety of these words in my description.

I have used many such tools over the years, have performed many manual and semi-automatic operations of similar sorts, and written partial programs to do similar functions, but - at least for now - httrack seems to me to be the best option for this function.

The only problem I encountered when using httrack was that it is so rich with features that I could never really figure out precisely the right thing to do at any given point. I was using recepies rather than knowledge to get the job done - and I was pestering the authors for those recepies. After a few days of very helpful assistance from the authors I volenteered to write a users manual for httrack - and here it is. I hope it gets the job done.


Basics

Httrack is a program that gets information from the Internet, looks for pointers to other information, gets that information, and so forth. If you ask it to, and have enough disk space, it will try to make a copy of the whole Internet on your computer. While this may be the answer to Dilbert's boss when he asks to get a printout of the Internet for some legal document, for most of us, we want to get copies of just the right part of the Internet, and have them nicely organized for our use. This is where httrack does a great job. Here's a simple example:


httrack "http://www.all.net/" -O "/tmp/www.all.net" "+*.all.net/*" -v

In this example, we ask httrack to start the Universal Resource Locator (URL) http://www.all.net/ and store the results under the directory /tmp/www.all.net (the -O stands for "output to") while not going beyond the bounds of all the files in the www.all.net domain and printing out any error messages along the way (-v means verbose). This is the most common way that I use httrack. Please note that this particular command might take you a while - and run you out of disk space.

This sort of a mirror image is not an identical copy of the original web site - in some ways it's better such as for local use - while in other ways it may be problematic - such as for legal use. This default mirroring method changes the URLs within the web site so that the references are made relative to the location the copy is stored in. This makes it very useful for navigating through the web site on your local machine with a web browser since most things will work as you would expect them to work. In this example, URLs that point outside of the www.all.net domain space will still point there, and if you encounter one, the web browser will try to get the data from that location.

For each of the issues discussed here - and many more - httrack has options to allow you to make different choices and get different results. This is one of the great things about httrack - and one of the the real major problems with using it without the knowledge of all that it can do. If you want to know all the things httrack can do, you might try typing:


httrack --help

Unfortunately, while this outputs a though list of options, it is somewhat less helpful it might be for those who don't know what the options all mean and haven't used them before. On the other hand, this is most useful for those who already know how to use the program but don't remember some obscure option that they haven't used for some time.

The rest of this manual is dedicated to detailing what you find in the help message and providing examples - lots and lots of examples... Here is what you get (page by page - use to move to the next page in the real program) if you type 'httrack --help':

>httrack --help
 HTTrack version 3.03BETAo4 (compiled Jul  1 2001)
	usage: ./httrack ] [-]
	with options listed below: (* is the default value)

General options:
  O  path for mirror/logfiles+cache (-O path_mirror[,path_cache_and_logfiles]) (--path )
 %O  top path if no path defined (-O path_mirror[,path_cache_and_logfiles])

Action options:
  w *mirror web sites (--mirror)
  W  mirror web sites, semi-automatic (asks questions) (--mirror-wizard)
  g  just get files (saved in the current directory) (--get-files)
  i  continue an interrupted mirror using the cache
  Y   mirror ALL links located in the first level pages (mirror links) (--mirrorlinks)

Proxy options:
  P  proxy use (-P proxy:port or -P user:pass@proxy:port) (--proxy )
 %f *use proxy for ftp (f0 don't use) (--httpproxy-ftp[=N])

Limits options:
  rN set the mirror depth to N (* r9999) (--depth[=N])
 %eN set the external links depth to N (* %e0) (--ext-depth[=N])
  mN maximum file length for a non-html file (--max-files[=N])
  mN,N'                  for non html (N) and html (N')
  MN maximum overall size that can be uploaded/scanned (--max-size[=N])
  EN maximum mirror time in seconds (60=1 minute, 3600=1 hour) (--max-time[=N])
  AN maximum transfer rate in bytes/seconds (1000=1kb/s max) (--max-rate[=N])
 %cN maximum number of connections/seconds (*%c10)
  GN pause transfer if N bytes reached, and wait until lock file is deleted (--max-pause[=N])

Flow control:
  cN number of multiple connections (*c8) (--sockets[=N])
  TN timeout, number of seconds after a non-responding link is shutdown (--timeout)
  RN number of retries, in case of timeout or non-fatal errors (*R1) (--retries[=N])
  JN traffic jam control, minimum transfert rate (bytes/seconds) tolerated for a link (--min-rate[=N])
  HN host is abandonned if: 0=never, 1=timeout, 2=slow, 3=timeout or slow (--host-control[=N])

Links options:
 %P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use) (--extended-parsing[=N])
  n  get non-html files 'near' an html file (ex: an image located outside) (--near)
  t  test all URLs (even forbidden ones) (--test)
 %L )

Build options:
  NN structure type (0 *original structure, 1+: see below) (--structure[=N])
     or user defined structure (-N "%h%p/%n%q.%t")
  LN long names (L1 *long names / L0 8-3 conversion) (--long-names[=N])
  KN keep original links (e.g. http://www.adr/link) (K0 *relative link, K absolute links, K3 absolute URI links) (--keep-links[=N])
  x  replace external html links by error pages (--replace-external)
 %x  do not include any password for external password protected websites (%x0 include) (--no-passwords)
 %q *include query string for local files (useless, for information purpose only) (%q0 don't include) (--include-query-string)
  o *generate output html file in case of error (404..) (o0 don't generate) (--generate-errors)
  X *purge old files after update (X0 keep delete) (--purge-old[=N])

Spider options:
  bN accept cookies in cookies.txt (0=do not accept,* 1=accept) (--cookies[=N])
  u  check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always) (--check-type[=N])
  j *parse Java Classes (j0 don't parse) (--parse-java[=N])
  sN follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always) (--robots[=N])
 %h  force HTTP/1.0 requests (reduce update features, only for old servers or proxies) (--http-10)
 %B  tolerant requests (accept bogus responses on some servers, but not standard!) (--tolerant)
 %s  update hacks: various hacks to limit re-transfers when updating (identical size, bogus response..) (--updatehack)
 %A  assume that a type (cgi,asp..) is always linked with a mime type (-%A php3=text/html) (--assume )

Browser ID:
  F  user-agent field (-F "user-agent name") (--user-agent )
 %F  footer string in Html code (-%F "Mirrored [from host %s [file %s [at %s]]]" (--footer )
 %l  preffered language (-%l "fr, en, jp, *" (--language )

Log, index, cache
  C  create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before) (--cache[=N])
  k  store all files in cache (not useful if files on disk) (--store-all-in-cache)
 %n  do not re-download locally erased files (--do-not-recatch)
 %v  display on screen filenames downloaded (in realtime) (--display)
  Q  no log - quiet mode (--do-not-log)
  q  no questions - quiet mode (--quiet)
  z  log - extra infos (--extra-log)
  Z  log - debug (--debug-log)
  v  log on screen (--verbose)
  f *log in files (--file-log)
  f2 one single log file (--single-log)
  I *make an index (I0 don't make) (--index)
 %I  make an searchable index for this mirror (* %I0 don't make) (--search-index)

Expert options:
  pN priority mode: (* p3) (--priority[=N])
      0 just scan, don't save anything (for checking links)
      1 save only html files
      2 save only non html files
     *3 save all files
      7 get html files before, then treat other files
  S  stay on the same directory
  D *can only go down into subdirs
  U  can only go to upper directories
  B  can both go up&down into the directory structure
  a *stay on the same address
  d  stay on the same principal domain
  l  stay on the same TLD (eg: .com)
  e  go everywhere on the web
 %H  debug HTTP headers in logfile (--debug-headers)

Guru options: (do NOT use)
 #0  Filter test (-#0 '*.png' 'www.bar.com/foo.png')
 #f  Always flush log files
 #FN Maximum number of filters
 #h  Version info
 #K  Scan stdin (debug)
 #L  Maximum number of links (-#L1000000)
 #p  Display ugly progress information
 #P  Catch URL
 #R  Old FTP routines (debug)
 #T  Generate transfer ops. log every minutes
 #u  Wait time
 #Z  Generate transfer rate statictics every minutes
 #!  Execute a shell command (-#! "echo hello")

Command-line specific options:
  V execute system command after each files ($0 is the filename: -V "rm \$0") (--userdef-cmd )
 %U run the engine with another id when called as root (-%U smith) (--user )

Details: Option N
  N0 Site-structure (default)
  N1 HTML in web/, images/other files in web/images/
  N2 HTML in web/HTML, images/other in web/images
  N3 HTML in web/,  images/other in web/
  N4 HTML in web/, images/other in web/xxx, where xxx is the file extension
(all gif will be placed onto web/gif, for example) N5 Images/other in web/xxx and HTML in web/HTML N99 All files in web/, with random names (gadget !) N100 Site-structure, without www.domain.xxx/ N101 Identical to N1 exept that "web" is replaced by the site's name N102 Identical to N2 exept that "web" is replaced by the site's name N103 Identical to N3 exept that "web" is replaced by the site's name N104 Identical to N4 exept that "web" is replaced by the site's name N105 Identical to N5 exept that "web" is replaced by the site's name N199 Identical to N99 exept that "web" is replaced by the site's name N1001 Identical to N1 exept that there is no "web" directory N1002 Identical to N2 exept that there is no "web" directory N1003 Identical to N3 exept that there is no "web" directory (option set for g option) N1004 Identical to N4 exept that there is no "web" directory N1005 Identical to N5 exept that there is no "web" directory N1099 Identical to N99 exept that there is no "web" directory Details: User-defined option N %n Name of file without file type (ex: image) (--do-not-recatch) %N Name of file, including file type (ex: image.png) %t File type (ex: gif) %p Path [without ending /] (ex: /someimages) %h Host name (ex: www.someweb.com) (--http-10) %M URL MD5 (128 bits, 32 ascii bytes) %Q query string MD5 (128 bits, 32 ascii bytes) %q small query string MD5 (16 bits, 4 ascii bytes) (--include-query-string) %s? Short name version (ex: %sN) %[param] param variable in query string Shortcuts: --mirror

For many of you, the manual is now complete, but for the rest of us, I will now go through this listing one item at a time with examples... I will be here a while...


Syntax

httrack  [-option] [+] [-] 

The syntax of httrack is quite simple. You specify the URLs you wish to start the process from (), any options you might want to add ([-option], any filters specifying places you should ([+]) and should not ([-]) go, and end the command line by pressing . Httrack then goes off and does your bidding. For example:


httrack www.all.net/bob/

This will use the 'defaults' (those selections from the help page marked with '*' in the listing above) to image the web site. Specifically, the defauls are:

  w *mirror web sites
 %f *use proxy for ftp (f0 don't use)
  cN number of multiple connections (*c8)
  RN number of retries, in case of timeout or non-fatal errors (*R1)
 %P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use)
  NN  name conversion type (0 *original structure, 1+: see below)
  LN  long names (L1 *long names / L0 8-3 conversion)
  K   keep original links (e.g. http://www.adr/link) (K0 *relative link)
  o *generate output html file in case of error (404..) (o0 don't generate)
  X *purge old files after update (X0 keep delete)
  bN  accept cookies in cookies.txt (0=do not accept,* 1=accept)
  u check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always)
  j *parse Java Classes (j0 don't parse)
  sN  follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always)
  C  create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before)
  f *log file mode
  I *make an index (I0 don't make)
  pN priority mode: (* p3)  *3 save all files
  D  *can only go down into subdirs
  a  *stay on the same address
  --mirror       *make a mirror of site(s) (default)

Here's what all of that means:

      w *mirror web sites 

    Automatically go though each URL you download and look for links to other URLs inside it, dowloading them as well.

     %f *use proxy for ftp (f0 don't use) 

    If there are and links to ftp URLs (URLs using the file transfer protocol (FTP) rather than the hypertext transfer protocol HTTP), go through an ftp proxy server to get them.

      cN number of multiple connections (*c8) 

    Use up to 8 simultaneous downloads so that at any gioven time, up to 8 URLs may be underway.

      RN number of retries, in case of timeout or non-fatal errors (*R1) 

    Retry once if anything goes wrong with a download.

     %P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use) 

    Try to parse all URLs - even if they are in Javascript, Java, tags of unknown types, or anywhere else the program can find things.

      NN  name conversion type (0 *original structure, 1+: see below) 

    Use the original directory and file structure of the web site in your mirror image of the site.

      LN  long names (L1 *long names / L0 8-3 conversion) 

    If filenames do not follow the old DOS conventions, store them with the same names used on the web site.

      K   keep original links (e.g. http://www.adr/link) (K0 *relative link) 

    Use relative rather than the original links so that URLs within this web site are adjusted to point to the files in the mirror.

      o *generate output html file in case of error (404..) (o0 don't generate) 

    IF there are errors in downloading, create a file that indicates that the URL was not found. This makes browsing go a lot smoother.

      X *purge old files after update (X0 keep delete) 

    Files not found on the web site that were previously there get deleted so that you have an accurate snapshot of the site as it is today - losing historical data.

      bN  accept cookies in cookies.txt (0=do not accept,* 1=accept) 

    Accept all cokkies sent to you and return them if requested. This is required for many sites to function. These cookies are only kept relative to the specific site, so you don't have to worry about your browser retaining them.

      u check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always) 

    This causes different document types to be analyzed differently.

      j *parse Java Classes (j0 don't parse) 

    This causes Java class files to be parsed looking for URLs.

      sN  follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always) 

    This tells the program to follow the wishes of the site owner with respect to limiting where robots like this one search.

      C  create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before) 

    If you are downloading a site you have a previous copy of, supplemental parameters are transmitted to the server, for example the 'If-Modified-Since:' field will be used to see if files are newer than the last copy you have. If they are newer, they will be downloaded, otherwise, they will not.

      f *log file mode 

    This retains a detailed log of any important events that took place.

      I *make an index (I0 don't make) 

    This makes a top-level index.html file so that if you image a set of sites, you can have one place to start reviewing the set of sites.

      pN priority mode: (* p3)  *3 save all files 

    This will cause all downloaded files to be saved.

      D  *can only go down into subdirs 

    This prevents the program from going to higher level directories than the initial subdirectory, but allows lower-level subdirectories of the starting directory to be investigated.

      a  *stay on the same address 

    This indicates that only the web site(s) where the search started are to be collected. Other sites they point to are not to be imaged.

      --mirror       *make a mirror of site(s) (default) 

    This indicates that the program should try to make a copy of the site as well as it can.

Now that's a lot of options for the default - but of course there are a lot more options to go. For the most part, the rest of the options represent variations on these themes. For example, instead of saving all files, we might only want to save html files, or instead of 8 simultaneous sessions, we might want only 4.

If we wanted to make one of these changes, we would specify the option on the command line. For example:


httrack www.all.net/bob/ -c4 -B

This would restrict httrack to only use 4 siumultaneous sessions but allow it to go up the directory structure (for example to www.all.net/joe/) as well as down it (for example to www.all.net/bob/deeper/).

You can add a lot of options to a command line!


A Thorough Going Over

Now that you have an introduction, it's time for a more though coverage. This is where I go through each of the options and describe it in detail with examples... Actually, I won't quite do that. But I will get close.

Options tend to come in groups. Each group tends to be interrelated, so it's easier and more useful to go through them a group at a time with some baseline project in mind. In my case, the project is to collect all of the information on the Internet about some given subject. We will assume that, through a previous process, I have gotten a list of URLs of interest to me. Typically there will be hundreds of these URLs, and they will be a mixed bag of sites that are full of desired information, pages with lists of pointers to other sites, URLs of portions of a web site that are of interest (like Bob's home pages and subdirectories), and so forth. Let us say that for today we are looking for the definitive colleciton of Internet information on shoe sizes from around the world.


General Options


General options:
  O  path for mirror/logfiles+cache (-O path_mirror[,path_cache_and_logfiles])

For this project, I will want to keep all of the information I gather in one place, so I will specify that output area of the project as /tmp/shoesizes by adding '-O /tmp/shoesizes' to every command line I use.. for example:


httrack http://www.shoesizes.com -O /tmp/shoesizes

The action options tell httrack how to operate at the larger level.


Action Options


Action options:
  w *mirror web sites
  W  mirror web sites, semi-automatic (asks questions)
  g  just get files (saved in the current directory)
  i  continue an interrupted mirror using the cache
  Y   mirror ALL links located in the first level pages (mirror links)

If I want httrack to ask me questions - such as what options to use, what sites to mirror, etc. I can tell it to ask these questions as follows:


httrack http://www.shoesizes.com -O /tmp/shoesizes -W


I can also do:

httrack
OR
httrack -W
OR
httrack -w

The '-W' options asks whether the or not a site has to be mirrored, while the '-w' option does not ask this question but asks the remainder of the questions required to mirror the site.

The -g option allows you to get the files exactly as they are and store them in the currant directory. This is handy for a relatively small collection of information where organization isn't important. With this option, the html files will not even be parsed to look for other URLs. This option is useful for getting isolated files (e.g., httrack -g www.mydrivers.com/drivers/windrv32.exe).

If I start a collection process and it fails for ome reason or another - such as me interrupting it because I am running out of disk space - or a network outage - then I can restart the process by using the -i option:

httrack http://www.shoesizes.com -O /tmp/shoesizes -i 

Finally, I can mirror all links in the first level pages of the URLs I specify. A good example of where to use whis would be in a case where I have a page that points to a lot of other sites and I want to get the initial information on those sites before mirroring them:

httrack http://www.shoesizes.com/othersites.html -O /tmp/shoesizes -Y 

Proxy Options

Many users use a proxy for many of their functions. This is a key component in many firewalls, but it is also commonly used for anonymizing access and for exploiting higher speed communications at a remote server.

Proxy options:
  P  proxy use (-P proxy:port or -P user:pass@proxy:port)
 %f *use proxy for ftp (f0 don't use)

If you are using a standard proxy that doesn't require a user ID and password, you would do something like this:

httrack http://www.shoesizes.com -O /tmp/shoesizes -P proxy.www.all.net:8080 

In this case, we have asusmed that proxy.www.all.net is the host that does the proxy service and that it uses port 8080 for this service. In some cases you will have to ask your network or firewall administrator for these details, however, in most cases they should be the same as the options used in your web browser.

In some cases, a user ID and password are required for the proxy server. This is common in corporate environments where only authorized users may access the Internet.

httrack http://www.shoesizes.com -O /tmp/shoesizes -P fc:password@proxy.www.all.net:8080 

In this case, the user ID 'fc' and the password 'password' are used on proxy.www.all.net port 8080. Again, your network or firewall administrator can be most helpful in addressing the specifics for your environment.

FTP normally operates through a proxy server, but for systems that have direct connections to the Internet, the following option should help:

httrack ftp://ftp.shoesizes.com -O /tmp/shoesizes -%f0 

Limits Options


Limits options:
  rN set the mirror depth to N
  mN maximum file length for a non-html file
  mN,N'                  for non html (N) and html (N')
  MN maximum overall size that can be uploaded/scanned
  EN maximum mirror time in seconds (60=1 minute, 3600=1 hour)
  AN maximum transfer rate in bytes/seconds (1000=1kb/s max)
  GN pause transfer if N bytes reached, and wait until lock file is deleted
  %eN set the external links depth to N (* %e0) (--ext-depth[=N])
  %cN maximum number of connections/seconds (*%c10)

Setting limits provides the means by which you can avoid running out of disk space, CPU time, and so forth. This may be particularly helpful for those who accidentally try to image the whole Internet.


httrack http://www.shoesizes.com -O /tmp/shoesizes -r50

In this example, we limit the directlry depth to 50 levels deep. As a general rule, web sites don't go much deeper than 20 levels or so, and if you think about it, if there are only 2 subdirectories per directory level, a directory structure 50 deep would have about 10 trillion directories. Of course many sites have a small number of files many levels deep in a directory structure for various reasons. In some cases, a symbolic link will cause an infinite recursion of directory levels as well, so placing a limit may be advisable.


httrack http://www.shoesizes.com -O /tmp/shoesizes -m50000000

This example sets the maximum file length for non-HTML files to 50 megabytes. This is not an unusual length for things like tar files, and in some cases - for example when there are images of CD-ROMs to fetch from sites, you might want a limit more like 750 megabytes.


httrack http://www.shoesizes.com -O /tmp/shoesizes -m50000000,100000

In this example, we have set a limit for html files as well - at 100,000 bytes. HTML files are rarely larger than this, however, in some cases larger sizes may be needed.


httrack http://www.shoesizes.com -O /tmp/shoesizes -M1000000000

This option sets the maximum total size - in bytes - that can be uploaded from a site - in this case to 1 gigabyte. Depending on how much disk space you have, such an option may be worthwhile.


httrack http://www.shoesizes.com -O /tmp/shoesizes -E3600

This sets the maximum runtime for the download process. Of course depending on the speed of your connection it may take longer or shorter runtimes to get the same job done, and network traffic is also a factor. 3600 seconds corresponds to one hour.


httrack http://www.shoesizes.com -O /tmp/shoesizes A100000000

This option specifies the largest number of bytes per second that should be used for transfers. For example, you might want to go slow for some servers that are heavily loaded in the middle of the day, or to download slowly so that the servers at the other end are less likely to identify you as mirroring their site. The setting above limits my bandwidth to 100 million bytes per second - slow I know, but I wouldn't want to stress the rest of the Internet.


httrack http://www.shoesizes.com -O /tmp/shoesizes -G100000000

In this case, the G option is used to 'pause' a download after the first gigabyte is downloaded pending manual removal of the lockfile. This is handy of you want to download some portion of the data, move it to secondary storage, and then continue - or if you want to only download overnight and want to stop before daylight and continue the next evening. You could even combine this option with a cron job to remove the lock file so that the job automatically restarts at 7PM every night and gets another gigabyte.


httrack http://www.shoesizes.com -O /tmp/shoesizes %e5

In this case, httrack will only go to depth 5 for external links, thus not imaging the entire web, but only yhose links within 5 links of these web pages.

Also note that the interaction of these options may cause unintended consequences. For example, limiting bandwidth and download time conspire to limit the total amount of data that can be downloaded.


Flow Control Options


Flow control:
  cN number of multiple connections (*c8)
  %cN maximum number of connections/seconds (*%c10)
  TN timeout, number of seconds after a non-responding link is shutdown
  RN number of retries, in case of timeout or non-fatal errors (*R1)
  JN traffic jam control, minimum transfert rate (bytes/seconds) tolerated for a link
  HN host is abandonned if: 0=never, 1=timeout, 2=slow, 3=timeout or slow


This example allows up to 128 simultaneous downloads. Note that this is likely to crash remote web servers - or at least fail to download many of the files - because of limits on the number of simultaneous sessions at many sites. At busy times of day, you might want to lower this to 1 or 2, especially at sites that limit the number of simultaneous users. Otherwise you will not get all of the downloads.


httrack http://www.shoesizes.com -O /tmp/shoesizes -c128

Many operating systems have a limit of 64 file handles, including internet connections and all other files that can be opened. Therefore, in many cases, more that 48 connections might cause a "socket error" because the OS can not handle that many sockets. This is also true for many servers. As an example, a test with 48 sockets on a cgi-based web server (Pentium 166,80Meg RAM) overloaded the machine and stopped other services from running correctly. Some servers will ban users that try to brutally download the website. 8 sockets is generally good, but when I'm getting large files (e.g., from a a site with large graphical images) 1 or 2 sockets is a better selection. Here are some other figures from one sample set of runs:

    Tests: on a 10/100Mbps network, 30MB website, 99 files (70 images (some are
    little, other are big (few MB)), 23 HTML)
    With 8 sockets: 1,24MB/s
    With 48 sockets: 1,30MB/s
    With 128 sockets: 0,93MB/s
    

The timeout option causes downloads to time out after a non-response from a download attempt. 30 seconds is pretty reasonable for many sites. You might want to increase the number of retries as well so that you try again and again after such timeouts.


httrack http://www.shoesizes.com -O /tmp/shoesizes -%c20

This limits the number of connections per second. It is similar to the above option but allows the pace to be controlled rather than the simultanaety. It is particulsrly useful for long-term pulls at low rates that allow little impact on remote infrastructure. The default is 10 connections per second.


httrack http://www.shoesizes.com -O /tmp/shoesizes -T30

This example increases the number of retries to 5. This means that if a download fails 5 times, httrack will give up on it. For relatively unreliable sites - or for busy times of day, this number should be higher.


httrack http://www.shoesizes.com -O /tmp/shoesizes -R5

This is an interesting option. It says that in a traffic jam - where downloads are excessively slow - we might decide to back off the download. In this case, we have limited downloads to stop bothering once we reach 10 bytes per second.


httrack http://www.shoesizes.com -O /tmp/shoesizes -J10

These three options will cause the download from a host to be abandoned if (respectively) (0) never, (1) a timeout is reached, (2) slow traffic is detected, (or) (3) a timeout is reached OR slow traffic is detected.


httrack http://www.shoesizes.com -O /tmp/shoesizes -H0
httrack http://www.shoesizes.com -O /tmp/shoesizes -H1
httrack http://www.shoesizes.com -O /tmp/shoesizes -H2
httrack http://www.shoesizes.com -O /tmp/shoesizes -H3

Of course these options can be combined to provide a powerful set of criteria for when to continue a download and when to give it up, how hard to push other sites. and how much to stress infrastructures.


Link Following Options


Links options:
 %P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use)
  n   get non-html files 'near' an html file (ex: an image located outside)
  t   test all URLs (even forbidden ones)
 %L  add all URL located in this text file (one URL per line)

The links options allow you to control what links are followed and what links are not as well as to provide long lists of links to investigate. Any setting other than the default for this option forces the engine to use less reliable and more complex parsing. 'Dirty' parsing means that links like 'xsgfd syaze="foo.png"' will cause HTTrack to download foo.png, even if HTTrack don't know what the "xsgfd syaze=" tag actually means! This option is powerful because some links might otherwise be missed, but it can cause errors in HTML or javascript.

This will direct the program to NOT search Javascript for unknown tag fields (e.g., it will find things like foo.location="bar.html"; but will not find things like bar="foo.png";). While I have never had a reason to use this, some users may decide that they want to be more conservative in their searches. As a note, javascript imported files (.js) are not currently searched for URLs.


httrack http://www.shoesizes.com -O /tmp/shoesizes '%P0'

Now here is a classic bit of cleaverness that 'does the right thing' for some cases. In this instance, we are asking httrack to get images - like gif and jpeg files that are used by a web page in its display, even though we would not normally get them. For example, if we were only getting a portion of a web site (e.g., everything under the 'bob directory') we might want to get graphics from the rest of the web sote - or the rest of the web - that are used in those pages as well so that our mirror will look right.


httrack http://www.shoesizes.com -O /tmp/shoesizes -n

Here, we limit the collection to bob's area of the server - except that we get images and other such things that are used by bob in his area of the server.


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -n

This option 'tests' all links - even those forbidden (by the robot exclusion protocol) - by using the 'HEAD' protocol to test for the presence of a file.


httrack http://www.shoesizes.com/ -O /tmp/shoesizes -t

In this case, we use a file to list the URLs we wish to mirror. This is particularly useful when we have a lot to do and don't want to tirelessly type in URLs on command line after command line. It's also useful - for example - if you update a set of mirrored sites evey evening. You can set up a command like this to run automatically from your cron file.


httrack -%L linkfile -O /tmp/shoesizes

This will update the mirror of your list of sites whenever it is run.


httrack -%L linkfile -O /tmp/shoesizes -B --update

The link file is also useful for things like this example where, after a binary image of a hard disk was analyzed (image) URLs found on that disk were collected by httrack:


strings image | grep "http://" > list;
httrack -%L list -O /tmp/shoesizes

Mirror Build Options


Build options:
  NN  name conversion type (0 *original structure, 1+: see below)
  N   user defined structure (-N "%h%p/%n%q.%t")
  LN  long names (L1 *long names / L0 8-3 conversion)
  K   keep original links (e.g. http://www.adr/link) (K0 *relative link)
  x   replace external html links by error pages
  o *generate output html file in case of error (404..) (o0 don't generate)
  X *purge old files after update (X0 keep delete)
  %x  do not include any password for external password protected websites (%x0 include) (--no-passwords)
  %q *include query string for local files (information only) (%q0 don't include) (--include-query-string)

The user can define naming conventions for building the mirror of a site by using these options. For example, to retain the original structure, the default is used. This only modifies the structure to the extent that select characters (e.g., ~, :, <, >, \, and @) are replaced by _ in all pathnames.


httrack http://www.shoesizes.com -O /tmp/shoesizes -N0

OR


httrack http://www.shoesizes.com -O /tmp/shoesizes

In either case, the mirror will build with the same directory hierarchy and name structure as the original site. For cases when you want to define your own structure, you use a string like this:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -N "%h%p/%n.%t"

In this case, %h, %p, $n, and %t stand for the href element (e.g., http://www.shoesizes.com or ftp://ftp.shoesizes.com), %p stands for the pathname (e.g., /bob/), %n stands for the name of the file, and %t stands for type (file extension). The full list of these options follows:

    %n      Name of file without file type (ex: image)
    %N      Name of file, including file type (ex: image.png)
    %t      File type (ex: gif)
    %p      Path [without ending /] (ex: /someimages)
    %h      Host name (ex: www.all.net)
    %M      URL MD5 (128 bits, 32 ascii bytes)
    %Q      query string MD5 (128 bits, 32 ascii bytes)
    %q      small query string MD5 (16 bits, 4 ascii bytes)
    %s?     Short name version (ex: %sN)
    

Other 'N' options include:

    
    Details: Option N
      N0 Site-structure (default)
      N1 HTML in web/, images/other files in web/images/
      N2 HTML in web/HTML, images/other in web/images
      N3 HTML in web/,  images/other in web/
      N4 HTML in web/, images/other in web/xxx, where xxx is the file extension
    (all gif will be placed onto web/gif, for example) N5 Images/other in web/xxx and HTML in web/HTML N99 All files in web/, with random names (gadget !) N100 Site-structure, without www.domain.xxx/ N101 Identical to N1 exept that "web" is replaced by the site's name N102 Identical to N2 exept that "web" is replaced by the site's name N103 Identical to N3 exept that "web" is replaced by the site's name N104 Identical to N4 exept that "web" is replaced by the site's name N105 Identical to N5 exept that "web" is replaced by the site's name N199 Identical to N99 exept that "web" is replaced by the site's name N1001 Identical to N1 exept that there is no "web" directory N1002 Identical to N2 exept that there is no "web" directory N1003 Identical to N3 exept that there is no "web" directory (option set for g option) N1004 Identical to N4 exept that there is no "web" directory N1005 Identical to N5 exept that there is no "web" directory N1099 Identical to N99 exept that there is no "web" directory

Long names are normally used (the -L0 option) but if you are imaging to a DOS file system or want accessibility from older versions of DOS and Windows, you can use the -L1 option to generate these filename sizes.


httrack http://www.shoesizes.com -O /tmp/shoesizes -L1

With the 'K' option, you can keep the original links in files. While this is less useful in being able to view a web site froim the mirrored copy, it is vitally important if you want an accurate copy of exactly what was on the web site in the first place. In a forensic image, for example, you might want to use this option to prevent the program from modifying the data as it is collected.


httrack http://www.shoesizes.com -O /tmp/shoesizes -K

In this case, instead of leaving external links (URLs that point to sites not being mirrored) in the pages, these links are replaced by pages that leave messages indicating that they could not be found. This is useful for local mirrors not on the Internet or mirrors that are on the Internet but that are not supposed to lead users to external sites. A really good use for this is that 'bugging' devices placed in web pages to track who is using them and from where will be deactivated byt his process.


httrack http://www.shoesizes.com -O /tmp/shoesizes -x

This option prevents the generation of '404' error files to replace files that were not found even though there were URLs pointing to them. It is useful for saving space as well as eliminating unnecessary files in operations where a working web site is not the desired result.


httrack http://www.shoesizes.com -O /tmp/shoesizes -o0

This option prevents the authoatic purging of files from the mirror site that were not found in the original web site after an 'update' is done. If you want to retain old data and old names for files that were renamed, this option should be used. If you want an up-to-date reflection of the current web site, you should not use this option.


httrack http://www.shoesizes.com -O /tmp/shoesizes -X0

These options can be combined as desired to produce a wide range of different arrangements, from collections of only graphical files stored in a graphics area, to files identified by their MD5 checksums only, all stored in the same directory.


httrack http://www.shoesizes.com -O /tmp/shoesizes %x0 include

This will not include passwords for web sites. If you mirror http://smith_john:foobar@www.privatefoo.com/smith/, and exclude using filters some links, these links will be by default rewritten with password data. For example, "bar.html" will be renamed into http://smith_john:foobar@www.privatefoo.com/smith/bar.html This can be a problem if you don't want to disclose the username/password! The %x option tell the engine not to include username/password data in rewritten URLs.


httrack http://www.shoesizes.com -O /tmp/shoesizes %q

This option is not very useful, because parameters are useless, as pages are not dynamic anymore when mirrored. But some javascript code may use the query string, and it can give useful information. For example: catalog4FB8.html?page=computer-science is clearer than catalog4FB8.html Therefore, this option is activated by default.


Spider Options

These options provide for automation with regard to the remote server. For example, some sites require that cookies be accepted and sent back in order to allow access.


Spider options:
 bN  accept cookies in cookies.txt (0=do not accept,* 1=accept)
 u   check document type if unknown (cgi,asp..) (u0 don't check, * u1 check but /, u2 check always)
 j   *parse Java Classes (j0 don't parse)
 sN  follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always)
 %h  force HTTP/1.0 requests (reduce update features, only for old servers or proxies)
 %B  tolerant requests (accept bogus responses on some servers, but not standard!)
 %s  update hacks: various hacks to limit re-transfers when updating
 %A  assume that a type (cgi,asp..) is always linked with a mime type (-%A php3=text/html) (--assume )

By default, cookies are universally accepted and returned. This makes for more effective collection of data, but allows the site to be identified with its collection of data more easily. To disable cookies, use this option:


httrack http://www.shoesizes.com -O /tmp/shoesizes -b0

Some documents have known extension types (e.g., html), while others have unknown types (e.g., iuh87Zs) and others may have misleading types (e.g., an html file with a 'gif' file extension. These options provide for (0) not checking file types, (1) checking all file types except directories, and (2) checking all file types including directories. Choose from these options:


httrack http://www.shoesizes.com -O /tmp/shoesizes -u0
httrack http://www.shoesizes.com -O /tmp/shoesizes -u1
httrack http://www.shoesizes.com -O /tmp/shoesizes -u2

Meta tags or 'robots.txt' files on a web site are used to indicate what files should and should not be visited by automatic programs when collectiong data. The polite and prudent move for normal data collection (and the default) is to follow this indication:


httrack http://www.shoesizes.com -O /tmp/shoesizes -s2

This follows the robots protocol and meta-tags EXCEPT in cases where the filters disagree with the robots protocols or meta-tags.


httrack http://www.shoesizes.com -O /tmp/shoesizes -s1

In this next case, we ignore meta-tags and robots.txt files completely and just take whatever we can get from the site. The danger of this includes the fact that automated programs - like games or search engines may generate an unlimited number of nearly identical or identical outputs that will put us in an infinite loop collecting useless data under different names. The benefit is that we will get all the data there is to get.


httrack http://www.shoesizes.com -O /tmp/shoesizes -s0

This next option uses strict HTTP/1.0 protocol. This means the program will use HTTP/1.0 headers (as in RFC1945.TXT) and NOT extended 1.1 features described in RFC2616.TXT. For example, reget (complete a partially downloaded file) is a HTTP/1.1 feature. The Etag feature is also a HTTP/1.1 feature (Etag is a special identifier that allow to easily detect file changes).


httrack http://www.shoesizes.com -O /tmp/shoesizes -%h

Some servers give responses not strictly within the requirements of the official http protocol. These 'Bogus' responses can be accepted by using this option. For example, when requesting foo.png (5132 bytes), the server can, optionally, add:

Content-length: 5132

This helps the client by allowing it to reserve a block of memory, instead of collecting each byte and re-reserving memory each time data is being received. But some servers are bogus, and send a wrong filesize. When HTtrack detects the end of file (connection broken), there are three cases:

    1- The connection has been closed by the server, and we have received all data (we have received the number of bytes incicated by the server). This is fine because we have successfully received the file.

    2- The connection has been closed by the server, BUT the filesize received is different from the server's headers: the connection has been suddenly closed, due to network problems, so we reget the file

    3- The connetion has been closed by the server, the filesize received is different from the server's headers, BUT the file is complete, because the server gave us a WRONG information! In this case, we use the bogus server option:


httrack http://www.shoesizes.com -O /tmp/shoesizes -%B

These options can be combined for the particular needs of the situaiton and are often adapted as a result of site-specific experiences.


httrack http://www.shoesizes.com -O /tmp/shoesizes -%s

This is a collection of "tricks" which are not really "RFC compliant" but which can save bandwidth by trying not to retransfer data in several cases.


httrack http://www.shoesizes.com -O /tmp/shoesizes -%A asp=text/html

The most important new feature for some people, maybe. This option tells the engine that if a link is en countered, with a specific type (.cgi, .asp, or .php3 for example), it MUST assume that this link has always the same MIME type, for example the "text/html" MIME type. This is VERY important to speed up many mirrors.

We have done tests on big HTML files (approx. 150 MB, 150,000,000 bytes!) with 100,000 links inside. Such files are being parsed in approx. 20 seconds on my own PC by the latest optimized releases of HTTra ck. But these tests have been done with links of known types, that is, html, gif, and so on.. If you have, say, 10,000 links of unknown type, such as ".asp", this will cause the engine to test ALL t hese files, and this will SLOOOOW down the parser. In this example, the parser will take hours, instead of 20 seconds! In this case, it would be great to tell HTTrack: ".asp pages are in fact HTML pages" This is possible, using: -%A asp=text/html

The -%A option can be replaced by the alias --assume asp=text/html which is MUCH more clear. You can use multiple definitions, separed by ",", or use multiple options. Therefore, these two lines are identical:

--assume asp=text/html --assume php3=text/html --assume cgi=image/gif
--assume asp=text/html,php3=text/html,cgi=image/gif

The MIME type is the standard well known "MIME" type. Here are the most important ones:

text/html       Html files, parsed by HTTrack
image/gif       GIF files
image/jpeg      Jpeg files
image/png       PNG files

There is also a collection of "non standard" MIME types. Example:

application/x-foo       Files with "foo" type

Therefore, you can give to all files terminated by ".mp3" the MIME type: application/x-mp3

This allow you to rename files on a mirror. If you KNOW that all "dat" files are in fact "zip" files ren amed into "dat", you can tell httrack:

--assume dat=application/x-zip

You can also "name" a file type, with its original MIME type, if this type is not known by HTTrack. This will avoid a test when the link will be reached:

--assume foo=application/foobar

In this case, HTTrack won't check the type, because it has learned that "foo" is a known type, or MIME type "application/foobar". Therefore, it will let untouched the "foo" type.

A last remark, you can use complex definitions like:

--assume asp=text/html,php3=text/html,cgi=image/gif,dat=application/x-zip,mpg=application/x-mp3,application/foobar

..and save it on your .httrackrc file:

set assume asp=text/html,php3=text/html,cgi=image/gif,dat=application/x-zip,mpg=application/x-mp3,application/foobar

Browser Options

Browsers commonly leave footprints in web servers - as web servers leave footprints in the browser.


Browser ID:
  F  user-agent field (-F "user-agent name")
 %F  footer string in Html code (-%F "Mirrored [from host %s [file %s [at %s]]]"
 %l  preffered language (-%l "fr, en, jp, *" (--language )

The user-agent field is used by browsers to determine what kind of browser you are using as well as other information - such as your system type and operating system version. The 'User Agent' field can be set to indicate whatever is desired to the server. In this case, we are claiming to be a netscape browser (version 1.0) running a non-exitent Solaris operating system version on a Sun Sparcstation.


httrack http://www.shoesizes.com -O /tmp/shoesizes -F "Mozilla 1.0, Sparc, Solaris 23.54.34"

On the other side, we may wish to mark each page collected with footer information so that we can see from the page where it was collected from, when, and under what name it was stored.


httrack http://www.shoesizes.com -O /tmp/shoesizes -%F "Mirrored [from host %s [file %s [at %s]]]"

This makes a modified copy of the file that may be useful in future identification. While it is not 'pure' in some senses, it may (or may not) be considered siilar to a camera that adds time and date stamps from a legal perspective.


httrack http://www.shoesizes.com -O /tmp/shoesizes -%l "fr, en, jp, *"

"I prefer to have pages with french language, then english, then japanese, then any other language"


Log, Cache, and Index Options

A lot of options are available for log files, indexing of sites, and cached results:


Log, index, cache
  C  create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before)
  k  store all files in cache (not useful if files on disk)
 %n  do not re-download locally erased files
  Q  log quiet mode (no log)
  q  quiet mode (no questions)
  z  extra infos log
  Z  debug log
  v  verbose screen mode
  %v display on screen filenames downloaded (in realtime) (--display)
  f  log file mode
  f2 one single log file (--single-log)
  I  *make an index (I0 don't make)
  %I make an searchable index for this mirror (* %I0 don't make) (--search-index)

A cache memory area is used for updates and retries to make the process far more efficient than it would otherwise be. You can choose to (0) go without a cache, (1) do not check remotly if the file has been updated or not, just load the cache content, or (2) see what works best and use it (the default). Here is the no cache example.


httrack http://www.shoesizes.com -O /tmp/shoesizes -C0

The cache can be used to store all files - if desired - but if files are being stored on disk anyway (the normal process for a mirroring operation), this is not helpful.


httrack http://www.shoesizes.com -O /tmp/shoesizes -k

In some cases, a file from a mirror site is erased locally. For example, if a file contains inappropriate content, it may be erased from the mirror site but remain on the remote site. This option allows you to leave deleted files permanently deleted when you do a site update.


httrack http://www.shoesizes.com -O /tmp/shoesizes -update '%n'

If no log is desired, the following option should be added.


httrack http://www.shoesizes.com -O /tmp/shoesizes -Q

If no questions should be asked of the user (in a mode that would otherwise ask questions), the following option should be added.


httrack http://www.shoesizes.com -O /tmp/shoesizes -q

By adding these options, you get (-z) extra log information or (-Z) debugging information, and (-v) verbose screen output.


httrack http://www.shoesizes.com -O /tmp/shoesizes -z -Z -v

Multiple log files can be created, but by default, this option is used to put all logs into a single log file.


httrack http://www.shoesizes.com -O /tmp/shoesizes -f2

Finally, an index is normally made of the sites mirrored (a pointer to the first page found from each specified URL) in an index.html file in the project directory. This can be prevented through the use of this option:


httrack http://www.shoesizes.com -O /tmp/shoesizes -I0

httrack http://www.shoesizes.com -O /tmp/shoesizes %v

Animated information when using consol-based version, example:

17/95: localhost/manual/handler.html (6387 bytes) - OK

httrack http://www.shoesizes.com -O /tmp/shoesizes f2

Do not split error and information log (hts-log.txt and hts-err.txt) - use only one file (hts-log.txt)


httrack http://www.shoesizes.com -O /tmp/shoesizes -%I linux.localdomain

Still in testing, this option asks the engine to generate an index.txt, useable by third-party programs or scripts, to index all words contained in html files. The above example will produce index.txt:

..
abridged
        1 linux/manual/misc/API.html
        =1
        (0)
absence
        3 linux/manual/mod/core.html
        2 linux/manual/mod/mod_imap.html
        1 linux/manual/misc/nopgp.html
        1 linux/manual/mod/mod_proxy.html
        1 linux/manual/new_features_1_3.html
        =8
        (0)
absolute
        3 linux/manual/mod/mod_auth_digest.html
        1 linux/manual/mod/mod_so.html
        =4
        (0)
..

Expert User Options

For expert users, the following options provide further options.


Expert options:
  pN priority mode: (* p3)
      0 just scan, don't save anything (for checking links)
      1 save only html files
      2 save only non html files
     *3 save all files
      7 get html files before, then treat other files
  S   stay on the same directory
  D  *can only go down into subdirs
  U   can only go to upper directories
  B   can both go up&down into the directory structure
  a  *stay on the same address
  d   stay on the same principal domain
  l   stay on the same location (.com, etc.)
  e   go everywhere on the web
 %H  debug HTTP headers in logfile

One interesting application allows the mirror utility to check for valid and invalid links on a site. This is commonly used in site tests to look for missing pages or other html errors. I often run such programs against my web sites to verify that nothing is missing.


httrack http://www.shoesizes.com -O /tmp/shoesizes -p0

To check for valid links outside of a site, the '-t' option can be used:


httrack http://www.shoesizes.com -O /tmp/shoesizes -t

These options can be combined, for example, to provide a service that checks sites for validity of links and reports back a list of missing files and statistics.

Other options allow the retention of select files - for example - (1) only html files, (2) only non-html files, (3) all files, and (7) get all html files first, then get other files. This last option provides a fast way to get the web pointers so that, for example, a time limited collection process will tend to get the most important content first.

In many cases, we only want the files froma given directory. In this case, we specify this option:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -S

This option allows the mirror to go only into subdirectories of the initial directory on the remote host. You might want to combine it with the -n option to get all non-html files linked from the pages you find.


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -D -n

If you only want to work your way up the directory structure from the specified URL (don't ask me why you might want to do this), the following command line is for you:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -U

If you want to go both up and down the directory structure (i.e., anywhere on on this site that the requested page leads you to), this option will be best:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -B

The default is to remain on the same IP address - or host name. This option specifes this explicitly:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -a

If you want to restrict yourself only to the same principal domain (e.g., include sites liks ftp.shoesizes.com), you would use this option.


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -d

To restrict yourself to the same major portion of the Internet (e.g., .com, .net, .edu, etc.) try this option:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -l

Finally, if you want to mirror the whole Internet - at least every place on the internet that is ever led to - either directly or indirectly - from the starting point, use this one... Please note that this will almost always run you out of resources unless you use other options - like limiting the depth of search.


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -e

Last but not least, you can include debugging informaiton on all headers from a collection process by using this option:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -'%H'

The options S, D, U, B, a, d, l, and e can be replaces with filter options approximately as follows:


S     -www.foo.com/* +www.foo.com/bar/*[file]
D     (default)
U     +www.foo.com/bar/* -www.foo.com/*[name]/*
B     +www.foo.com/bar/*
a     (default)
d     +*[name].foo.com/*
l     +*[name].com/*
e     +* (this is crazy unless a depth limit is used!)

Guru Options - DO NOT USE!!!

This is a new section, for all "not very well documented options". You can use them, in fact, do not believe what is written above!

 #0  Filter test (-#0 '*.png' 'www.bar.com/foo.png')

To test the filter system. Example:

$ httrack -#0 'www.*.com/*foo*bar.png' 'www.mysite.com/test/foo4bar.png'
www.mysite.com/test/foo4bar.png does match www.*.com/*foo*bar.png
 #f  Always flush log files

Useful if you want the hts-log.txt file to be flushed regularly (not buffered)

 #FN Maximum number of filters

Use if if you want to use more than the maximum default number of filters, that is, 500 filters: -#F2000 for 2,000 filters

 #h  Version info

Informations on the version number

 #K  Scan stdin (debug)

Not useful (debug only)

 #L  Maximum number of links (-#L1000000)

Use if if you want to use more than the maximum default number of links, that is, 100,000 links: -#L2000000 for 2,000,000 links

 #p  Display ugly progress information

Self-explanatory :) I will have to improve this one

 #P  Catch URL

"Catch URL" feature, allows to setup a temporary proxy to capture complex URLs, often linked with POST action (when using form based authentication)

 #R  Old FTP routines (debug)

Debug..

 #T  Generate transfer ops. log every minutes

Generate a log file with transfer statistics

 #u  Wait time

"On hold" option, in seconds

 #Z  Generate transfer rate statictics every minutes

Generate a log file with transfer statistics

 #!  Execute a shell command (-#! "echo hello")

Debug..


Command-line Specific Options


Command-line specific options:
  V execute system command after each files ($0 is the filename: -V "rm \$0") (--userdef-cmd )

This option is very nice for a wide array of actions that might be based on file details. For example, a simple log of all files collected could be generated by using:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -V "/bin/echo \$0"
 %U run the engine with another id when called as root (-%U smith) (--user )

Change the UID of the owner when running as r00t

  Details: User-defined option N
    %[param] param variable in query string

This new option is important: you can include query-string content when forming the destination filename!

Example: you are mirroring a huge website, with many pages named as:
www.foo.com/catalog.php3?page=engineering
www.foo.com/catalog.php3?page=biology
www.foo.com/catalog.php3?page=computing
..

Then you can use the -N option:

httrack www.foo.com -N "%h%p/%n%[page].%t"

If found, the "page" parameter will be included after the filename, and the URLs above will be saved as:

/home/mywebsites/foo/www.foo.com/catalogengineering.php3
/home/mywebsites/foo/www.foo.com/catalogbiology.php3
/home/mywebsites/foo/www.foo.com/catalogcomputing.php3
...

Shortcuts

These options provide shortcust to combinations of other options that are commonly used.


Shortcuts:
--mirror       *make a mirror of site(s) (default)
--get           get the files indicated, do not seek other URLs (-qg)
--list     add all URL located in this text file (-%L)
--mirrorlinks   mirror all links in 1st level pages (-Y)
--testlinks     test links in pages (-r1p0C0I0t)
--spider        spider site(s), to test links: reports Errors & Warnings (-p0C0I0t)
--testsite      identical to --spider
--skeleton      make a mirror, but gets only html files (-p1)
--update              update a mirror, without confirmation (-iC2)
--continue            continue a mirror, without confirmation (-iC1)
--catchurl            create a temporary proxy to capture an URL or a form post URL
--clean               erase cache & log files
--http10              force http/1.0 requests (-%h)

Mirror is the default behavior. It is detailed earlier.

get simply gets the files specified on the command line.

The list option is useful for including a list of sites to collect data from.

The mirrorlinks option is ideal for using the result of a previous search (like a list of pages found in a web search or somebody's URL collection) to guide the collection of data. With additional options (such as depth 1) it can be used to collect all of the pages linked to a given page without going further. Here is an example:


httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes --mirrorlinks -e -r1

Testing links in pages is useful for automating the verification that a link from a file is not pointing to a non-existent page.

The spider option does a site test automatically and returns errors for broken links.

The skeleton option makes a mirror of html files only.

The update option updates a site to match a remote mirror.

The continue option continues a previously terminated mirroring activity. This is useful for all sorts of mirror failures.

The catchurl option is a small application designed to catch difficult pages, like sites protected via formulas. You can see at http://httrack.free.fr/HelpHtml/addurl.html a Windows description of this application. The purpose is to create a temporary proxy, that will catch the user request to a page, and then store this request to continue the mirror. For example,

    1. browse www.foo.com/bar/ until you have a page with a form
    2. fill this form to enter the site BUT do not click "submit"
    3. start the --catchurl application
    4. change your browser proxy settings according to the --catchurl application
    5. click on "submit" on your browser
    6. HTTrack has now captured this click and has stored it
    7. restore your proxy settings
    8. (click back in your browser)
    

The clean option erases cache and log files.

The http10 option forces http/1.0 requests (the same as -%h).


Filters

Filters are normally placed at the end of the command line, but can be intermixed with other command line options if desired, except that if they are placed between (for example) the '-O' and the pathname, your results may be different than you might otherwise predict. There are two sorts of filters, filters that indicate what to include (+) and filters that indicate what to exclude (-).

Starting with the initially specified URLs, the default operation mode is to mirror starting from these URLs downward into the directory structure of the host (i.e. if one of your starting pagees was www.all.net/test/a.html, all links starting with www.all.net/test/ will be collected but links in www.all.net/anything-else will not be collected, because they are in a higher directory strcuture level. This prevents HTTrack from mirroring the whole site. If you may want to download files are in other parts of the site or pf particular types - or to not download files in a particular part of the site or of a particular type, you can use filters to specify more precisely what to collect and what not to collect.

The syntax for filters is similar to Unix regular expressions. A simple filter can be made by using characters from the URL with '*' as a wildcard for 0 or more characters - with the last filter rule having the highest precendence. An initial '+' indicates URLs to include and an initial '-' indicated URLs to not include. For example:


'-*' '+*jpg'

would only get files ending in the 'jpg' extension, while:


'-*jpg'

would not get any files ending in the jpg extension. You can add more filter lines to restrict or expand the scope as desired. The last rule is checked first, and so on - so that the rules are in reverse priority order. Here's an example:
+*.png -image*.png Will accept all gif files BUT image1.png,imageblue.png,imagery.png and so on
-image*.png +*.png Will accept all gif files, because the second pattern is prioritary (because it is defined AFTER the first one)

The full syntax for filters follows:
* any characters (the most commonly used)
*[file] or *[name] any filename or name, e.g. not /,? and ; characters
*[path] any path (and filename), e.g. not ? and ; characters
*[a,z,e,r,t,y] any letters among a,z,e,r,t,y
*[a-z] any letters
*[0-9,a,z,e,r,t,y] any characters among 0..9 and a,z,e,r,t,y
*[] no characters must be present after
*[< NN] size less than NN Kbytes
*[> PP] size more than PP Kbytes
*[< NN > PP] size less than NN Kbytes and more than PP Kbytes

Here are some examples of filters: (that can be generated automatically using the interface)
-www.all.net* This will refuse/accept this web site (all links located in it will be rejected)
+*.com/* This will accept all links that contains .com in them
-*cgi-bin* This will refuse all links that contains cgi-bin in them
+*.com/*[path].zip This will accept all zip files in .com addresses
-*someweb*/*.tar* This will refuse all tar (or tar.gz etc.) files in hosts containing someweb
+*/*somepage* This will accept all links containing somepage (but not in the address)
-*.html This will refuse all html files from anywhere in the world.
+*.html*[] Accept *.html, but the link must not have any supplemental characters at the end
(e.g., links with parameters, like www.all.net/index.html?page=10 will not match this filter)
-*.png*[> 5] -*.zip +*.zip*[< 10] refuse all gif files smaller than 5KB, exlude all zip files, EXCEPT zip files smaller than 10KB


User Authentication Protocols

Smoe servers require user ID and password information in order to gain access. In this example, the user ID smith with password foobar is accessing www.all.net/private/index.html


httrack smith:foobar@www.all.net/private/index.html

For more advanced forms of authentication, such as those involving forms and cookies of various sorts, an emerging capability is being provided through th URL capture features (--catchurl). This feature don't work all of the time.


.httrackrc

A file called '.httrackrc' can be placed in the current directory, or if not found there, in the home directory, to include command line options. These options are included whenever httrack is run. A sample .httrack follows:

    
     set sockets 8
     set retries 4
     index on
     set useragent "Mozilla [en] (foo)"
     set proxy proxy:8080
    

But the syntax is not strict, you can use any of these:

    
     set sockets 8
     set sockets=8
     sockets=8
     sockets 8
    

.httrackrc is sought in the following sequence with the first occurence used:

  • in the dirctory indicated by -O option (.httrackrc)
  • in the current directory (.httrackrc)
  • in the user's home directory (.httrackrc)
  • in /etc/httrack.conf (named httrack.conf to be "standard")

An example .httrackrc looks like:

    
    set sockets=8
    set index on
    retries=2
    allow *.png
    deny ad.doubleclick.net/*
    

Each line is composed of an option name and a parameter. The "set" token can be used, but is not mandatory (it is ignored, in fact). The "=" is also optionnal, and is replaced by a space internally. The "on" and "off" are the same as "1" and "0" respectively. Therefore, the example .httrackrc above is equivalent to:

    
    sockets=8
    index=1
    retries=2
    allow=*.png
    deny=ad.doubleclick.net/*
    

Because the "=" seems to (wrongly) imply a variable assignment (the option can be defined more than once to define more than one filter) the following .httrackrc:

    
    allow *.png
    allow *.jpg
    

looks better for a human than:

    
    allow=*.png
    allow=*.jpg
    

Here's a example run with the example .httrackrc file:

    
    $ httrack ghost
    $ cat hts-cache/doit.log
    -c8 -C1 -R2 +*.png -ad.doubleclick.net/* ghost
    

The "-c8 -C1 -R2 +*.png -ad.doubleclick.net/*" was added by the .httrackrc


Release Notes

Some things change between releases. Here are some recent changes in httrack that may affect some of these options:

Options S,D,U,B, and a,d,l,e are default behaviours of HTTrack. they were the only options in old versions (1.0). With the introduction of filters, their roles are now limited, because filters can override them.

Note for the -N option: "%h%p/%n%q.%t" will be now be used if possible. In normal cases, when a file does not have any parameters (www.foo.com/bar.png) the %q option does not add anything, so there are no differences in file names. But when parameters are present (for example, www.foo.com/bar.cgi?FileCollection=133.png), the additionnal query string (in this case, FileCollection=133.png) will be "hashed" and added to the filename. For example:

'www.all.net/bar.cgi?FileCollection=133.png'

will be named

'/tmp/mysite/bar4F2E.png'

The additionnal 4 letters/digits are VERY useful in cases where there are a substantial number of identical files:


www.all.net/bar.cgi?FileCollection=133.png
www.all.net/bar.cgi?FileCollection=rose.png
www.all.net/bar.cgi?FileCollection=plant4.png
www.all.net/bar.cgi?FileCollection=silver.png
and so on...

In these cases, there is a small probability of a hash collision forlarge numbers of files.


Some More Examples

Here are some examples of special purpose httrack command lines that might be useful for your situation.

This is a 'forensic' dump of a web site - intended to collect all URLs reachable from the initial point and at that particular site. It is intended to make no changes whatsoever to the image. It also prints out an MD5 checksum of each file imaged so that the image can be verified later to detect and changes after imaging. It uses 5 retries to be more certain than normal of getting the files, never abandons its efforts, keeps original links, does not generate error files, ignores site restrictions for robots, logs as much as it can, stays in the principal domain, places debugging headers in the log file,


httrack "www.website.com/" -O "/tmp/www.website.com" -R5H0Ko0s0zZd %H -V "md5 \$0" "+*.website.com/*" 

Here's an example of a site where I pulled a set of data related to some subject. In this case, I only wanted the relevant subdirectory, all external links were to remain the same, a verbose listing of URLs was to be printed, and I wanted files near (n) and below (D) the original directory. Five retries just makes sure I don't miss anything.


httrack "http://www.somesite.com/~library/thing/thingmain.htm" -O /tmp/thing -R5s0zZvDn

This listing is, of course, rather verbose. To reduce the noise, you might want to do something more like this:


httrack "http://www.somesite.com/~library/thing/thingmain.htm" -O /tmp/thing -R5s0zvDn

A still quieter version - without any debugging information but with a list of files loaded looks like this:


httrack "http://www.somesite.com/~library/thing/thingmain.htm" -O /tmp/thing -R5s0vDn

For the strong silent type, this might be still better:


httrack "http://www.somesite.com/~library/thing/thingmain.htm" -O /tmp/thing -R5s0qDn

General questions:

Q: The install is not working on NT without administrator rights!

A: That's right. You can, however, install WinHTTrack on your own machine, and then copy your WinHTTrack folder from your Program Files folder to another machine, in a temporary directory (e.g. C:\temp\)

Q: Where can I find French/other languages documentation?

A: Windows interface is available on several languages, but not yet the documentation!

Q: Is HTTrack working on NT/2000?

A: Yes, it should

Q: What's the difference between HTTrack and WinHTTrack?

A: WinHTTrack is the Windows release of HTTrack (with a graphic shell)

Q: Is HTTrack Mac compatible?

A: No, because of a lack of time. But sources are available

Q: Can HTTrack be compiled on all Un*x?

A: It should. The Makefile may be modified in some cases, however

Q: I use HTTrack for professional purpose. What about restrictions/license fee?

A: There is no restrictions using HTTrack for professional purpose, except if you want to sell a product including HTTrack components (parts of the source, or any other component). See the license.txt file for more informations

Q: Is a DLL/library version available?

A: Not yet. But, again, sources are available (see license.txt for distribution infos)

Q: Is there a X11/KDE shell available for Linux and Un*x?

A: No. Unfortunately, we do not have enough time for that - if you want to help us, please write one!


Troubleshooting:

Q: Only the first page is caught. What's wrong?
A: First, check the hts-err.txt error log file - this can give you precious informations.

The problem can be a website that redirects you to another site (for example, www.all.net to public.www.all.net) : in this case, use filters to accept this site

This can be, also, a problem in the HTTrack options (link depth too low, for example)

Q: With WinHTTrack, sometimes the minimize in system tray causes a crash!

A: This bug sometimes appears in the shell on some systems. If you encounter this problem, avoid minimizing the window!

Q: URLs with https:// are not working!
A: HTTrack does not support https (secure socket layer protocol), only http protocol

Q: Files are created with strange names, like '-1.html'!

A: Check the build options (you may have selected user-defined structure with wrong parameters!)

Q: When capturing real audio links (.ra), I only get a shortcut!

A: Yes. The audio/video realtime streaming capture is not yet supported

Q: Using user:password@address is not working!

A: Again, first check the hts-err.txt error log file - this can give you precious informations

The site may have a different authentication scheme (form based authentication, for example)

Q: When I use HTTrack, nothing is mirrored (no files) What's happening?

A: First, be sure that the URL typed is correct. Then, check if you need to use a proxy server (see proxy options in WinHTTrack or the -P proxy:port option in the command line program). The site you want to mirror may only accept certain browsers. You can change your "browser identity" with the Browser ID option in the OPTION box. Finally, you can have a look at the hts-err.txt (and hts-log.txt) file to see what happened.

Q: There are missing files! What's happening?

A: You may want to capture files that are in a different folder, or in another web site. In this case, HTTrack does not capture them automatically, you have to ask it to do. For that, use the filters.

Example: You are downloading http://www.all.net/foo/ and can not get .jpg images located in http://www.all.net/bar/ (for example, http://www.all.net/bar/blue.jpg)

Then, add the filter rule +www.all.net/bar/*.jpg to accept all .jpg files from this location

You can, also, accept all files from the /bar folder with +www.all.net/bar/*, or only html files with +www.all.net/bar/*.html and so on..

Q: I'm downloading too many files! What can I do?

A: This is often the case when you use too large filters, for example +*.html, which asks the engine to catch all .html pages (even ones on other sites!). In this case, try to use more specific filters, like +www.all.net/specificfolder/*.html

If you still have too many files, use filters to avoid somes files. For example, if you have too many files from www.all.net/big/, use -www.all.net/big/* to avoid all files from this folder.

Q: File types are sometimes changed! Why?

A: By default, HTTrack tries to know the type of remote files. This is useful when links like http://www.all.net/foo.cgi?id=1 can be either HTML pages, images or anything else. Locally, foo.cgi will not be recognized as an html page, or as an image, by your browser. HTTrack has to rename the file as foo.html or foo.png so that it can be viewed.

Sometimes, however, some data files are seen by the remote server as html files, or images : in this case HTTrack is being fooled.. and rename the file. You can avoid this by disabling the type checking in the option panel.

Q: I can not access to several pages (access forbidden, or redirect to another location), but I can with my browser, what's going on?

A: You may need cookies! Cookies are specific datas (for example, your username or password) that are sent to your browser once you have logged in certain sites so that you only have to log-in once. For example, after having entered your username in a website, you can view pages and articles, and the next time you will go to this site, you will not have to re-enter your username/password.

To "merge" your personnal cookies to an HTTrack project, just copy the cookies.txt file from your Netscape folder (or the cookies located into the Temporary Internet Files folder for IE) into your project folder (or even the HTTrack folder)

Q: Some pages can't be seen, or are displayed with errors!

A: Some pages may include javascript or java files that are not recognized. For example, generated filenames. There may be transfer problems, too (broken pipe, etc.). But most mirrors do work. We still are working to improve the mirror quality of HTTrack.

Q: Some Java applets do not work properly!

A: Java applets may not work in some cases, for example if HTTrack failed to detect all included classes or files called within the class file. Sometimes, Java applets need to be online, because remote files are directly caught. Finally, the site structure can be incompatible with the class (always try to keep the original site structure when you want to get Java classes)

If there is no way to make some classes work properly, you can exclude them with the filters. They will be available, but only online.

Q: HTTrack is being idle for a long time without transfering. What's happening?

A: Maybe you try to reach some very slow sites. Try a lower TimeOut value (see options, or -Txx option in the command line program). Note that you will abandon the entire site (except if the option is unchecked) if a timeout happen You can, with the Shell version, skip some slow files, too.

Q: I want to update a site, but it's taking too much time! What's happening?

A: First, HTTrack always tries to minimize the download flow by interrogating the server about the file changes. But, because HTTrack has to rescan all files from the begining to rebuild the local site structure, it can takes some time. Besides, some servers are not very smart and always consider that they get newer files, forcing HTTrack to reload them, even if no changes have been made!

Q: I am behind a firewall. What can I do?

A: You need to use a proxy, too. Ask your administrator to know the proxy server's name/port. Then, use the proxy field in HTTrack or use the -P proxy:port option in the command line program.

Q: HTTrack has crashed during a mirror, what's happening?

A: We are trying to avoid bugs and problems so that the program can be as reliable as possible. But we can not be infallible. If you occurs a bug, please check if you have the latest release of HTTrack, and send us an email with a detailed description of your problem (OS type, addresses concerned, crash description, and everything you deem to be necessary). This may help the other users too.

Q: I want to update a mirrored project, but HTTrack is retransfering all pages. What's going on?

A: First, HTTrack always rescan all local pages to reconstitute the website structure, and it can take some time. Then, it asks the server if the files that are stored locally are up-to-date. On most sites, pages are not updated frequently, and the update process is fast. But some sites have dynamically-generated pages that are considered as "newer" than the local ones.. even if there are identical! Unfortunately, there is no possibility to avoid this problem, which is strongly linked with the server abilities.


Questions concerning a mirror:

Q: I want to mirror a Web site, but there are some files outside the domain, too. How to retrieve them?

A: If you just want to retrieve files that can be reached through links, just activate the 'get file near links' option. But if you want to retrieve html pages too, you can both use wildcards or explicit addresses ; e.g. add www.all.net/* to accept all files and pages from www.all.net.

Q: I have forgotten some URLs of files during a long mirror.. Should I redo all?

A: No, if you have kept the 'cache' files (in hts-cache), cached files will not be retransfered.

Q: I just want to retrieve all ZIP files or other files in a web site/in a page. How do I do it?

A: You can use different methods. You can use the 'get files near a link' option if files are in a foreign domain. You can use, too, a filter adress: adding +*.zip in the URL list (or in the filter list) will accept all ZIP files, even if these files are outside the address.

Example : httrack www.all.net/someaddress.html +*.zip will allow you to retrieve all zip files that are linked on the site.

Q: There are ZIP files in a page, but I don't want to transfer them. How do I do it?

A: Just filter them: add -*.zip in the filter list.

Q: I don't want to load gif files.. but what may happen if I watch the page?

A: If you have filtered gif files (-*.png), links to gif files will be rebuild so that your browser can find them on the server.

Q: I get all types of files on a web site, but I didn't select them on filters!

A: By default, HTTrack retrieves all types of files on authorized links. To avoid that, define filters like

-* +<website>/*.html +<website>/*.htm +<website>/ +*.<type wanted>

Example: httrack www.all.net/index.html -* +www.all.net/*.htm* +www.all.net/*.png +www.all.net/*.jpg

Q: When I use filters, I get too many files!

A: You are using too large a filter, for example *.html will get ALL html files identified. If you want to get all files on an address, use www.<address>/*.html. There are lots of possibilities using filters.

Example:httrack www.all.net +*.www.all.net/*.htm*

Q: When I use filters, I can't access another domain, but I have filtered it!

A: You may have done a mistake declaring filters, for example +www.all.net/* -*all* will not work, because -*all* has an upper priority (because it has been declared after +www.all.net)

Q: Must I add a  '+' or '-' in the filter list when I want to use filters?

A: YES. '+' is for accepting links and '-' to avoid them. If you forget it, HTTrack will consider that you want to accept a filter if there is a wild card in the syntax - e.g. +<filter> if identical to <filter> if <filter> contains a wild card (*) (else it will be considered as a normal link to mirror)

Q: I want to find file(s) in a web-site. How do I do it?

A: You can use the filters: forbid all files (add a -* in the filter list) and accept only html files and the file(s) you want to retrieve (BUT do not forget to add +<website>*.html in the filter list, or pages will not be scanned! Add the name of files you want with a */ before ; i.e. if you want to retrieve file.zip, add */file.zip)

Example:httrack www.all.net +www.all.net/*.htm* +thefileiwant.zip

Q: I want to download ftp files/ftp site. How to do?

A: First, HTTrack is not the best tool to download many ftp files. Its ftp engine is basic (even if reget are possible) and if your purpose is to download a complete site, use a specific client.

You can download ftp files just by typing the URL, such as ftp://ftp.www.all.net/pub/files/file010.zip and list ftp directories like ftp://ftp.www.all.net/pub/files/ .

Note: For the filters, use something like +ftp://ftp.www.all.net/*

Q: How can I retrieve .asp or .cgi sources instead of .html result?

A: You can't! For security reasons, web servers do not allow that.

Q: How can I remove these annoying <!-- Mirrored from... --> from html files?

A: Use the footer option (-&F, or see the WinHTTrack options)

Q: Do I have to select between ascii/binary transfer mode?

A: No, http files are always transfered as binary files. Ftp files, too (even if ascii mode could be selected)

Q: Can HTTrack perform form-based authentication?

A: Yes. See the URL capture abilities (--catchurl for command-line release, or in the WinHTTrack interface)

Q: Can I redirect downloads to tar/zip archive?

A: Yes. See the shell system command option (-V option for command-line release)

Q: Can I use username/password authentication on a site?

A: Yes. Use user:password@your_url (example: http://foo:bar@www.all.net/private/mybox.html)

Q: Can I use username/password authentication for a proxy?

A: Yes. Use user:password@your_proxy_name as your proxy name (example: smith:foo@proxy.mycorp.com)

Q: Can HTTrack generates HP-UX or ISO9660 compatible files?

A: Yes. See the build options (-N, or see the WinHTTrack options)

Q: If there any SOCKS support?

A: Not yet!

Q: What's this hts-cache directory? Can I remove it?

A: NO if you want to update the site, because this directory is used by HTTrack for this purpose. If you remove it, options and URLs will not be available for updating the site

Q: Can I start a mirror from my bookmarks?

A: Yes. Drag&Drop your bookmark.html file to the WinHTTrack window (or use file://filename for command-line release) and select bookmark mirroring (mirror all links in pages, -Y) or bookmark testing (--testlinks)

Q: I am getting a "pipe broken" error and the mirror stops, what should I do?

A: Chances are this is a result of downloading too many pages at a time. Remote servers may not allow or be able to handle too many sessions, or your system may be unable to provide the necessary resources. Try redusing this number - for example using the -c2 options for only 2 simultaneous sesions.

httraqt-1.4.11/help/step9_opt11.html0000664000175000017500000001134213154004530017367 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : MIME Types






  • MIME Types

  • An important new feature for some people. This panel tells the engine that if a link is encountered, with a specific type (.cgi, .asp, or .php3 for example), it MUST assume that this link has always the same MIME type, for example the "text/html" MIME type. This is VERY important to speed up many mirrors. Some big HTML files which have many links of unknown type embedded, such as ".asp", cause the engine to test all links, and this slows down the parser.

    In this case, you can tell HTTrack: ".asp pages are in fact HTML pages"
    This is possible, using:

    File type: asp MIME identity: text/html

    You can declare multiple definitions, or declare multiple types separed by ",", like in:
    File type: asp,php,php3 MIME identity: text/html

    Most important MIME types are:
    text/htmlHtml files, parsed by HTTrack
    image/gifGIF files
    image/jpegJpeg files
    image/pngPNG files
    application/x-zip.zip files
    application/x-mp3.mp3 files
    application/x-foo.foo files
    application/octet-streamUnknown files

    You can rename files on a mirror. If you KNOW that all "dat" files are in fact "zip" files renamed into "dat", you can tell httrack:
    File type: dat MIME identity: application/x-zip

    You can also "name" a file type, with its original MIME type, if this type is not known by HTTrack. This will avoid a test when the link will be reached:
    File type: foo MIME identity: application/octet-stream

    In this case, HTTrack won't check the type, because it has learned that "foo" is a known type, or MIME type "application/octet-stream". Therefore, it will let untouched the "foo" type.






Back to Home

httraqt-1.4.11/help/step9_opt10.html0000664000175000017500000000770613154004521017377 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Expert Options




    Advice: leave these options to default values!

  • Use a cache for updates

  • This option MUST be set if you want to update the site later, or if you want to have the opportunity to continue a crashed mirror
    Disable it only if you want to save few kilobytes, but, err, again, it is not advised to disable this option!


  • Primary filter (scan mode)

  • Which files must be saved?
    You can choose Html and/or Non-Html, or none (this last option is automatically set for scanning)


  • Travel mode

  • Set the default spidering direction
    The default is to catch all files in the same level and lower levels, which is the most logical


  • Global travel mode

  • Set the default global spidering direction
    The default is to stay on the same address if no specific authorization has been delivered


  • Activate debug mode

  • Enables some extra debug informations, like headers debugging and some interface informations (for debugging purpose only)





Back to Home

httraqt-1.4.11/help/step9_opt6.html0000664000175000017500000001073513154004571017325 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Spider




  • Accept cookies

  • Accept cookies generated by the remote server
    If you do not accept cookies, some "session-generated" pages will not be retrieved


  • Check document type

  • Define when the engine has to check document type
    The engine must know the document type, to rewrite the file types. For example, if a link called /cgi-bin/gen_image.cgi generates a gif image, the generated file will not be called "gen_image.cgi" but "gen_image.png"
    Avoid "never", because the local mirror could be bogus


  • Parse java files

  • Must the engine parse .java files (java classes) to seek included filenames?
    It is checked by default


  • Spider

  • Must the engine follow remote robots.txt rules when they exist?
    The default is "follow"


  • Update hack

  • Attempt to limit transfers by wrapping known bogus responses from servers. For example, pages with same size will be considered as "up to date", even if the timestamp seems different. This can be useful for many dynamically generated pages, but this can also cause not-updated pages in rare cases.

  • Tolerant requests

  • Tolerate wrong file size, and make requests compliant with old servers
    It is unchecked by default, because this option can cause files to become bogus


  • Force old HTTP/1.0 requests

  • This option forces the engine to use HTTP/1.0 requests, and avoid HEAD requests.
    Useful for some sites with old server versions, or with many dynamically generated pages.






Back to Home

httraqt-1.4.11/help/overview.html0000664000175000017500000000675713154004403017162 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Overview


Please visit our website!


WinHTTrack snapshot

HTTrack HTTrack is an easy-to-use offline browser utility. It allows you to download a World Wide website from the Internet to a local directory, building recursively all directories, getting html, images, and other files from the server to your computer. HTTrack arranges the original site's relative link-structure. Simply open a page of the "mirrored" website in your browser, and you can browse the site from link to link, as if you were viewing it online. HTTrack can also update an existing mirrored site, and resume interrupted downloads. HTTrack is fully configurable, and has an integrated help system.

httraqt-1.4.11/help/step5.html0000664000175000017500000000566613154004505016355 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Step 5 : Check the result


  1. Check log files

  2. You may check the error log file, which could contain useful information if errors have occurred


  3. See the troubleshooting page




Back to Home

httraqt-1.4.11/help/step9.html0000664000175000017500000000736013154004204016346 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel


  • Click on one of the option tab below to have more informations

  • Each option tab is described, including remarks and examples

Back to Home

httraqt-1.4.11/help/step9_opt3.html0000664000175000017500000001005313154004544017313 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Flow Control




  • Number of connections

  • Define the number of simultaneous connections that can be initiated by the engine.
    It is recommended to limit this number to 1 or 2 if you are mirroring big files on a site, more on standard sites (8 is recommended, up to 42 if it is supported by the system)


  • TimeOut

  • Define what time the engine has to wait if no response if given by a server.
    120 seconds is recommended (less of fast pipes, more if you connection is sloppy)
    You can optionally skip all links from a host that has generated a timeout. Warning: is this checkbox is selected, a timeout will eliminate all links from the origin server


  • Retries

  • Number of retries if a non-fatal error occured (timeout, for example)
    Note that this will not solve fatal errors such as "Not Found" pages and so on!


  • Min Transfer Rate

  • Minimum transfer rate tolerated on a site. If the transfer rate if slower that the defined value, then the link is skipped
    You can optionally skip all links from a host that has generated a "too slow" error. Warning: is this checkbox is selected, a "too slow" errors will eliminate all links from the origin server






Back to Home

httraqt-1.4.11/help/images/0000775000175000017500000000000013154016400015654 5ustar karbofoskarbofoshttraqt-1.4.11/help/images/screenshot_01b.jpg0000664000175000017500000002043113027171706021207 0ustar karbofoskarbofosJFIF``C 2!=,.$2I@LKG@FEPZsbPUmVEFdemw{N`}s~|C;!!;|SFS||||||||||||||||||||||||||||||||||||||||||||||||||," }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?nB26߽J/VS=}NW8 v3& & 9TV6zJ/2I=CG+t͂Fd_t?8?Ÿ_(mr(Z{?G-?𣕀ϛG >ip|޿ _NeZx(`7Qz)lQO(`>,0{b*B2VnR'lg(arj6ˁY:b淅ţd*P+ _h#yXRnƓV}]U%}O]QE@Rn|{Q]lŸ1r*}_Zl+#YIqo/md"ٰ?I$ڌvQn\5pJw6TEM:JH<@0=5g 'qVL:)"ۤ١I3p:},@f=2ke] W-R7ApOV4ĖTk~2lQ2>JlƐqax H Bļ!Ao+£2W>\ }h*q,U[?8\q Z" 9sG0tdzΖ6 3dy>#Ƕb(]>Tw= .`4# 3tOjT)QEQEQEc KFH*Ώx!s7k~oՕ&ju%}]#QEաk-bF m^\lh<81b ;kNO$eWLX*3M#\ ۛ2=sT0ћwa{.Ds0^1??E5A}P1fHx,zzSRGO켃JSP ??@3v ÞMOf7wI7g.xϯh)z>/ jq8x?şFB}Z a21O?Z7uĠo>untہj?o|Q쯮`H]72hP!'jG{!5z-YTG4 `s\zOm\h^<9Ϲ4j$ƤߊCHʠ¥!ES֟/YZ}/BjE٫+XtM\7/ѿ[75o(ΛͿjٷXO (aE 9SQ'6L{S)UI8$':Heu=RV$+TG}IPH'?>gW{SrH֤3mVRp=hPJ= E(j*w qH (ڝ@Š(GpppqpTʠg!n®1~hv}FF*LJZAҖ (7j??V/Yz}/Bj橸~>ERѿE](`YٷY:o~6b CAHmޡ''%S(zO4H (}+GNW;9ϰ_*hUٌ'a1)MfmH͕?0=k)o."eKlJ62us~]IRHy + y?ZТ9^"9  ؖlgQ[kK[YJT\mUkQ@ÆqZ*HJ ^O֦p3i֪-(?<ְW]D2n zZ`ViTz9ҖtV (7j??V/Y|Bj橸z>*>E[d *o+X NͿG6  CCɤE$$^39 3# ԁ%!scΜgӚ>.@Hg_ҕԈ%I_Q'Z(8&sj.R X!Td3KR E19`e R2QpEIkE}?܋?E?܋?QN$]Q}ZLE E0INȤ2`IECh}M1QPoSK-P1H0J(}#(jg̞c- )kl )kO}f_>W5ii~o՛&j.u-}]AEUgMfUm˺nj<MXIoc'9RIKLzӼʃnWjp09ARL. V[MDH*hKӜJ}nEJf%( ,snyMZ?4jGB:w$m1y`, lV\n]qyV>HoOϝۏ*D3Cgg<_Zj ggOs.MݸqЗRew|~jnڿ4}YFp"2VG?bex(sU[ TmwURsNOAzqOJn8`SC~ԴRQE`RSږq4qO^@ 9dSV$kP8Ð>Lghҗ!P~eȠ RVąQL Zߛ5f KO}f_>S5sThusFfn΢QE0,i1ZCN&b`gHu+ 1UF'r̝9ݜKf+C( /ryڣdTUPp"b8nN*J9e(bq)MlKKr}>h0(O:t*!^P3EEZߓ~OꋁV徕~O:#rT\ *t?ޓ:I}Sc UG?>\ UG?>h_`T-$.QL((|t)klHQE5sThwsFuKwsFuo(ΛͿ4aXzo~6b>QE(QEQEQEQEQEQEQEQETW?ZԵP*((JZAҖVąQL Zߛ5gꠛOաUL?W5MƋ7?toQT?toQV(,lް}G7??1[zoUSqQY ((((((((*+-RW?Z(QE`QEQEs- K]+bB(?_5^E٪?W5MƋ7?toQT_?toj*;!QT7??1[zoUo+jA rFw\74(k4}pvf_΋0.QTA:,ES_Ώ `\}tEEVXcfGMT>4߷E( ?`\Ե@/Kr$^X QEPQ@Q@KH:RJؐ)kO}f:tMW7j.5sThusFfn΢QE0,lpe9Vc֨ilӒT' c7I"2>j|t 9j: r.GQľNzuo%ڣyzyBE?>crM^%| ݷ?֓C5>k>Zϼ?!?:] ?[ϼ?+-҉<7G(dxG-U(8 3+k(%| |~gFZ%| GJ pB jA$,%J0zqV"*PHh*GjJI)P@Pd{zT[֍H AҖ~襮(?_j /T5O_OSq}]U-}]UvB ( :o~6b$ugYo~6bP 5=Ɗٰg93̃ٺNg]3.X#?۴Im"8k;6  8Ǯ}=e,Y Ww9>ژ9`} H(G=) cK nrx8H1$&q;{UZ`g-!J9=ct$i)4ij},?TPmZ-@?zI۞21ɎI[LmsJ-'{cҤ.Q^dHP:e蔬jKEES*QKE0i3R@oJ0} Ou/''ס?ңd( q>ҬG*p#+~eG\?Κw~襤)klHQEU S>5_E٫?UtM\7-ѿERѿE[d *o+Up,3.or7 EW-Aa4:(zOG?'oG:3&3ZBڀk6 SSCj#X\}EX##J[QUa9_`;+ΥS֐>Ag\쩬k?@w9G+*GZJKjOm4PƹO+Uf+Uf#:(zONU޹/+UfzO9`xtD"neP 4[(`ZE٫?UtMV i#.Qک,|I;Nr0~W5Mƍ[iL8QsQ YJ0N,ݻPNJ;q qg9A{ښ B3S&o@sQ RGwZ&fT'Tpzg0hrɞA[&ve.2T=piNj-RYy;cޒ=fN%%(GabOq)qר͗y'Ror'$ܟGaaN6_俘Ai4Ai4{F/?^z)?eK OO|ߴ= f˜K\O?~/'Gi4{F"̗xK61l~#hߴ= 6Pr"P}r)?$<*_OO|~#h,Dd>X~"~/'Gi4{F#:l`Ĥ{I/Oҥߴ????Əh>q>q} 'GAg4{FQS ? = ( )d?ƏH,??Əh~q} >q} w$ܟG$ܟGaaaa; ?O| ?O|0߰pBc8} w$ܟH ǰXۺP1\fl]&IQJq拍NmZT0T6= -"vVrl#u|9{赻8Sj9>k'WԡFdSo>w?httraqt-1.4.11/help/images/header_title_4.png0000664000175000017500000000443213154002661021245 0ustar karbofoskarbofosPNG  IHDR=!gAMA a cHRMz&u0`:pQ<BPLTE>Y>YP1tRNS@fbKGDHtIME  4pIDATx[( Q$l# $MLZBdYN9gw㔛8u .yLtxX|7w /%-/<.n\'.¯8bx2=v!_23.a|FС+hGP.JD@|2\)/=9_ ^Mp?PMm_؎tNoB3w :et]9/߁Г|NG]f1ňICSȾhҌ8U=*F+&"=/,mxV۰zA Wt#Ϧp$ەXH +zB^)HSCDʄ<|ȃH_ջ+p4VBO(A$~&"YBNS^O M'( &*DžʃވX'(hS ^]5D K@ᗐ=(@roB'AmuUNkh£3'9Sjz061yH^@'yA!cfvFWă82^ծ|wA.akL@/cl8w|H #ozٷp-8L,fSCjuXV=+ '&^ %Yuehhd4yKZCJ <ʒ6`U iDQӾnu+>qH}]u<;pr\DSEI#/ $XǫWn2R#{4bzg/FDޥyWG8X9e\c^t.MN+"杳w9?C ΖW)os2ôGZ/ WF, 0K-2Z+wZ"zzx8z@EĠ2q-\5{2w؍~C#e Cu/u]/p`3(?& ~w-⹆=IяiOauJz ݁)kI'Z@g-g:gCX+XG~g'>b͟C-yxeNv!AKE@=Mɻgr)Pе\\pqJ-z _58] \ju 㹺GCʃgZӤGLiSRC Whs$ENk0ȶ{{,Gb̐hX\&SU Va=JˑC ,Pݔh=N#y+/G Ny)|Ѽ㉞>/!d0LBC qtEXtcommentCreated with GIMP@%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/images/screenshot_01.jpg0000664000175000017500000001363613027171706021056 0ustar karbofoskarbofosJFIFddDuckyAdobed##""'"!!"''.030.'>>AA>>AAAAAAAAAAAAAAA!!1!!$!!1>-''''->8;333;8AA>>AAAAAAAAAAAAAAAAA," !1AQS"2RsaqB„E#T3rCc$%R!Q1Aa2 ?뚹[2̬N)iApFa˽c:^bTaH zX[+Y0l}KVZjwң\G.KkTYfv2hh-0+_GXض'سZ&̱-o %xLgOyWsjO1׶>[~s#dh:aa]OiakJZD!ΤJ'%x1;l?s &o"s"wEhޞ/NH}/DXc=qczbp`&JنVOf XM0>cs[;ބ0\ fBg,Ϻk %hK bxNZ0KX o 4*i9-y񽷏̤7ø/ڧԟ/ڧym w2ޙ;z |-I|-N[t ?w2Yr|j Sj TH0Aswqs) ;vq(vġg S vrmIJ3ͳ[i-LJp9m 'g,g{gq) oj%ġg Sm-NKt JC9ڞ%ġg Sm-NKt Df;CIJ3YWq(vģg S vAm gm-LZ=p9- 'iWݲ+핻m-LZ=w%A-b^R-;LZ=wOWAlhR 7 JGSѝu>FُU[+_Rpirjyi_ %ŅƥgyJhp:ѳJѝ \ 5ybe!/:A[)`q >HkfX.]ᓃ|E_z 櫜,1a =,i;<8,֬V;ՅZklHC}zՇ&3DE؄ZeJ f3S`|i tZhfkM!7`ٳdgu]Yƥ`-[C͝& ;SDguɃGfy0ho2`ٳe4A ;6w[̘4vlMC͝& ;SDguɃGfy0ho2`ٳe4A ;6w[̘4vlMC͝& ;SDguɃGfy0ho2+Q/Kԭ*soϖ wğYhJetcҚܵ7-tW|x31++5.RG-#.?1R.ߊط90FݧBi}GKlz.>u_4"}JDME%/f詪s4HWmB =gGoVPM7`H1Q$D@\x>[$jZk;2FXL"ʪvWDtTE]7[4u+6zo6) !MD= Mٿ1R !cj*抴C[8c􂰈*H'8M\c$9h@um(6͸J\p(6".NR*g[ -{b&qAg9h6 ֫(s\0ZǎLrZڹ]5#,VjU3T"#:)3cR*4:@5lmo W66ŽV|ʭ?tr7Vjq4tAc#uomy[+A I+Hje`e7rHs#htcq*FxG9Xn#YSuMNYQ|<˟~YT zaW)grTiM`{4w _K4 bEj4ݼ_N5%g t|7X/l&-tU K t iW]bor >[$jQ5Ja4 F K[Q\.vU&դJ*KK2jne0 ܀pcK)zF[*B \pWUݍN?7cSXfA'񂛩sVI-Н7cSOє-VP&=kmFТֆր'@ݍN?7cSXd ƭ(M:7OQNjw}z))))QݍN -rS6FӠ9pIh`֗11rޠ""" *soYU:F;FMRռwl\J)?{4Hk MK]gAZnPQ{{Zmض7MŲ`6 Y6&ˡM eLR&uoTi)Q. +lkG F-&Ԕa]cmDD}|9 .~QRFS2ElZqkc3S,5 8T҃+ \`*]pr301V#1AΑ\~mZݝ˶qwfWYBpB Rω(&׵D#U%MX/#G2LehpF#~+h1Kf lq ! &$(S76of_o XvR]@RJZ`yn *u}+X6Z.$D]`UoZ U>N" """ ""PM7e$XoN _& BٌAQk5KըA1*x֘֕1&3OҢ3v?Zb?ZT\viVyg> 1 c:E./P% .Mdq?€}ueV|:[3 ϯG!]}|9 H԰C +E\:/9E1"ʶXD}k&}U'iS[:f؁az oE]j?,.3@0Aewgk\\`3` e10M,"ǤXAz|$]M\jϥN|kV1_v'oO~~ SRd]jGn|$]M\Al39uhʀ5*;3u7FHeP\|yTlkl%[z9+:Jb= j€}ueV|:[3 ϯG!]}|9 Hԉ ʳp,JC"=H@P%nm,j G(0YrJC"=H@Pe"=H@Pe"=H@PW~Z3Ү)[ K@R#sߺo+>;'oJ^"=AsM:mfK3N8y7–W"=H@PW~鿥ɃK@R#(겳U*2H R Dz( Dz(}ueV|:[3 ϯG!]}|9 HԈ*""" ""Έu,(Ԁ Y?jUMq'\.Xǡ1-qZjRU) F7iS4A 5٭6iƂA$I-bp g,@"G`ֶ" !SfL0).!r[)ǥ:rh $p˞ƶb] mƼKI-n6+21DAx1͌".T'i"mʴkENm'6k@L\I U6ԧJQ)}1\A XPKmYTPQN-[㙌/J)0RPMa1-$)*soYU:ﺿ@*{3" """ .~QWAs_-B5""ʈ VUo7΃?+ﺿ@-  or\xH" """ """ """ """ """ ""?Օ[Mn ⧻?+H""" "">[t?y()#R",}ueV|:[3 B  ϯG!]]|9 HԈ*""" """ """ """ """ """ *soYU: n$8k;_NiXAv4בDgkIyAv4בDgkI5QI5QI5QI5QI5QI5QI5QI5QI5QI5QI5QI5Q `Xf?ɉ0ӥyDTzj5@m;'t4-*ZItaoIyA,lbxbU G#<:Xzchttraqt-1.4.11/help/images/header_title_4_orig.png0000664000175000017500000000331213154002661022261 0ustar karbofoskarbofosPNG  IHDR!<QgAMA a cHRMz&u0`:pQ<-PLTEkk??_UU{{``JJovv ++A-44N/VtRNS@fbKGDa oFFs1tIME  4p vpAg" qcIDATX헽k#Gg%kmCH].7"9Pݒgke Kq(MA܄Ԅ@2!RPH)"E~^{\M;;7oFWR,yHzQi%ǂc/9lq8$7*%M Iw=烗^ZԵr` kCjb~0oe`A,:P l˟]\;=>AiSsU~zLUQHrc(x[ `, ѥ_EjjxB/)E+us1;* %bdp*Mdq|"AGz`5P[vid. |~a+Vp%L SjFߕ%{DN@m=mvK-qK~FWj%%?e'96gQ5أdr6NI Cl0be5-Cb`_8H8r<=A}Ws^mWsS>{TR$8 45h38 gXkp*Mѫ mhIx)s갔NS.ÈfwUB1S~c*Z|IrE%i+Q" #ec8>%G0<\88 1a-ۄ^H=krDcI;I>׵ֿj2n[J5aŎ9M\ɡm(wiTpn) &?}>YRuֻ9ǾpxQ3i{*19yW U]㸐y\q =jc,/ nvi8\c /Ǻn_8ߏ9(sUHfJylAu :l(%^|+:΅=$c,Ѳ58m315_ͱi_n[Y,[효ViO.+_I5+(je$4f[{jz'7yBcvAOndV߈gpTȱrr4J"V%ڗь_Ydk}}qQ+'RCs{#>vesq*^28*",?ƞR Z rޔZc{VQ눒6TV؅Mqxq'k[X(?ECɱr|AEÂ^!NFɃ=~VQlQjm5sE^`|xڎ.Xww}jyCSpG- %tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/images/bg_rings.png0000664000175000017500000001102613154002661020160 0ustar karbofoskarbofosPNG  IHDRnQgAMA a cHRMz&u0`:pQ<PLTE׾ӹнUdbbKGDHtIME  4pIDATxb۶E[S edZxHٻ)r*wu >`Ax2yꩧzꩧzꩧj6_/sx} z=jֹz0pZ3~;?=A_5Ns*X+|Hꣶf2"/Cu?l q[^KB%-% / Z7*h܋a}X3'-қv5Z~#g0e9薁V(_링 AүgNgfb3zF߿"ҳ"cz&GnTݎb,`JЪ LxE_]`ؒoT vnO"Ի7~>P2SЙ_- C ]zA_rN4h&=+.ȝ+/9g|`ښ1%ktźmT̃w_~S d &+~J^[%uƓ=xS ?~ .ϼNK:[А/ow>,iMD}x'65Tox zֵ~A(D|dq@:okz {mӱҹHI1}gC+\g-m(3? Fzwi/B++A(~?.>I?Lw.;_> t䨫 3:;:p}r? cb;E.ZЩ\&Z!tdșIud;ۭaX"՝BĵG9{5J󑯓_侞[m7ÍX+w?ۧ, 5,lw _AfUtrsUq Hs~Oa-7{zJ$7ϔ׋|5i?\~sDΝ2 >/gui;㇉iyVRp6~g+zzll+Dcv殒Sל {[0vND!_Ys0{:k㶨蓓Klr6 \u|艧X9|}XnGAx`yg$vα})ݱ(0o$Lno9яٺ}{C{#fW{j9A!"`ߝly՝IwpZQ}ʰNܪcF)en?spJ!EO_Ob!)^3NMc!_KO: ;Ob!/]3w?<ðBg߾ZpS{#6vhͨ&&pu'FSQmfĆn-# vKT #+G/M٧wones#럺/J=ك6tGgo[wE3d{ gPeGV2wz{M)ݣGVq;Ԧfo٧m ٧;} ׅwT{~mmtQbص e'Ͻ1#wp|`Ab~$v.ba}$vc`v(N>S{iZz:\(:`v'N|A'-͜/:؝>{ȥމX#>ϥމX䚢؛\h֦b7wUKY3k=M+eórNndfI0v{9E:f-Ұgo.Fgi]DY-r.F {d'X'=TGvC jiXZ&ҰgV\{ ;FBX5Nv-Z,ʜ><4cQ ;iJ5SuX5b3e:;8ّQ, 6k{(<ثT8y(#i e(BQAb{Ң4x2y>ְ~O3"U9_TC7i([ux0;ԪNbԚ:4MQASNʚ}Zݗ'}x''r kzk򀙂EeZLrA^<%X}>rR]UG ߃)=F7}V]9EU$Kr<i@)ߥ;eF ͦO[PI,uW5Ǧ |G_>kͬʳYѦߣͨ/Aqqeگ+srg(?>{,;s,m6:mS0v9N Ǝܫ1;%͚ +<6^7dG/i^}7dGOp}c' 9abCf'fz}eSGQX`'9Ns|o_ ;1'=4j;%1(>@LHw_7R<_F=4d=Xvb;wmCjYᑁf'y/^x'N*ϡO`yQ/0z ;qT j+wd>og<;1ꥎ@Wef& ?x?ѵ%@uT{5ȿ\'F}?b:EpxIg8ㆧGO1V#1|C[* tښ+r3<Э-9 5.)%1G[=X}ic31砧`%}<8>018.#x6]s;kFjkXc |J7gZ֜kk"<3=;z9?"zs_Tӊ麲,wTл>l6i'Sav9vj;o-J/]!E-W8\oӝo5cuȷʿ\=š YCP~f T?8rT_\G>iw=/[wO!SO=SOY!7%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/step2.html0000664000175000017500000001150213154004462016336 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Step 2 : Fill the addresses


  1. Select an action

  2. The default action is Download web sites



    • Download web site(s)

    • Will transfert the desired sites with default options
    • Download web site(s) + questions

    • Will transfert the desired sites with default options, and ask questions if any links are considered as potentially downloadable
    • Get individual files

    • Will only get the desired files you specify (for example, ZIP files), but will not spider through HTML files
    • Download all sites in pages (multiple mirror)

    • Will download all sites that appears in the site(s) selected. If you drag&drop your boormark file, this option lets you mirror all your favorite sites
    • Test links in pages (bookmark test)

    • Will test all links indicated. Useful to check a bookmark file
    • * Continue interrupted download

    • Use this option if a download has been interrupted (user interruption,crash..)
    • * Update existing download

    • Use this option to update an existing project. The engine will recheck the complete structure, checking each downloaded file for any updates on the web site


  3. Enter the site's addresses

  4. You can click on the Add a URL button to add each address, or just type them in the box



  5. You may define options by clicking on the Set options button

  6. You can define filters or download parameters in the option panel


  7. You may also add a URL by clicking on the Add a URL button

  8. This option lets you define additional parameters (login/password) for the URL, or capture a complex URL from your browser


  9. Click on the NEXT button


  10. Go to the next step...




Back to Home

httraqt-1.4.11/help/img/0000775000175000017500000000000013154016420015165 5ustar karbofoskarbofoshttraqt-1.4.11/help/img/snap9_d6.png0000664000175000017500000001300413154001451017312 0ustar karbofoskarbofosPNG  IHDRF~URgAMA a cHRMz&u0`:pQ<PLTEνޥk!!)19BJRZcks{{11BJcc1Μc1{11RR111c111Μc11c11cc1c11cczbKGDHtIME  4pDIDATx c6@A$&ؽv?k-Hdp f2c/g4PU*Q2R)GM:F~bNNv:ks?[O.dK?庲3Nv&ӵEMqڙOEpvolvDs?ӝY'z_)Ya[qb|,'01\)N%<-l;?(>KI3 }rUi˫gn~\s(i H#KV8d)fg!y89jI"킂$܀gE$ExF:_EfɑZg! Pr!>Ϯ9Gka3O4+ 5nC7'؏OΦO̢i(',_ QӞ8BN(x<;:q֣K03i=z:H KvImbindD]3F]>{ '0Б4N tJiHvKp2:Ѵu}ȅ~t=SG=PNƣu Z[۞q0v?RW@܀]zΧF,3#xuY^<ܧ`R(t6œQOEOy?)d 7&G<ƳxHNH>3*'QGvmDG]s4jY=z`՜i֏ڨO^:`.%IxG\z.ԢmQuHBW %QР7b(d1 h[ԵD1o}6X{~>ɋGG#ѦmKRȌ?Y7 8Jh(݉?w .9w . 5#Ji\GFp@-U손庎׌fy^2B-I$-gF4n /?Q{McQ:sD=j{(fFiufSfR(=س*C8 )um #nz!םFGu8Q!.bO'w峗7Qss2"Se.Gy?R1L0&#hGDa W!7+ \ Ê/3T;?%In5|(s骺P_-iK;q(ON55Olѝ‚+'GIr?Wh7Jʀ 8˺y* ]R nQD[<^Лȏ{~,ItiKQ|-]A &^\x>M* a<WT,f7!3š0 3H5|A%HJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJTJDMds&KffVcjyݼu$TFV;S?~^.%:m"j2xׇ{ɀmQxQׄ؀o{ y>Vrԥ-=3ihFЗ[QUԶ&}۰~d3N޻6 HE۵Ȃ'ݚ㒬VJWxj͌ wVDC\G4\n jxtVvH4M7{n]uhDS;)}imQCOѲ671UN16ns\uSPs0RQ/UH&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJTGUNԨ2|GVQT} BL&qDCW#^Nd#!PtcpLOXe Z*jĠН(lw'CԸ{gLiV8}aX1 ԕhE-Qu  V|x@DJG8!%r|(n8d%(æb`w(]Ѻ }1[Ww_;h'*fDeQwmK_Xc¤ -Do⌕޴E!CZԌB*K{2:5X觭Tߵd}h0<g?ďaUm&%*MJT4)Qi:0l:Q6-׌ hhlϟyQ2}0)=PJt$}i{R;"E#*JJ$j66^FΕ.>k>N^7ϲ 0Q(FćگYjj!zl%544ah;S!4&uf֝:Q/FËpP'ZG}_G/F7tnK?|s]#25{%ڮ  QzFhft8DMm;UQ`uUT}TգC{T, /}!U ^JT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MkӌM$6< Pkr:n$PJT\`]X: #0ÊOKa(>TV=jZg<~h>Rx_F.ԑ|$""}Z{~(]% W*h͕LFy,_iԧ]D_NDӇٓ(\.n=oDbI^XzӁh]?ZhޏV=k\Ֆϸ+nUJGnv"hZG-.5֨^"{&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4~8n}ݼ6ݽg?GG_.o]~ >GV O O O O ɣsFcǿ`ԙvj>D{uX O O O O O Oɣ> >SaU4)QiRҤDIJ&%*MJT4)QiRҤDIJUo)&7hOQ%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_k.png0000664000175000017500000000410513154001451017235 0ustar karbofoskarbofosPNG  IHDRy}"gAMA a cHRMz&u0`:pQ<PLTEνkA*bKGDHtIME  4p3IDATxr*Fü L`݀3ˌ_Ӆ6ς93h SHbڮÍol,>NJ|.7}u n#5>o`FTӌMҘoI}M{V9,-/Diϟv6']> ,8fv84?GE{cɻӋ o$;.v=.,h;vs8wHEEXTEXTEXTEXTEXTEXTE,;bu =|[Im7F՛ˍ֖E7qsӺ%N1yFdY);ơݵh_s(gJgWYtvvs;V{[u5pXZ5,|(-}j"=XTEXTEXTc9-~b[І7Ot,Th,_|l8wx?oq}X|[=N_*~xMZ&bzcz_fWwT/Ǚۇد _`SOeo/ϗi0~Ċbij}zڟإ> !~yoc1W1ҧ)h)QW|XgOy,|Lhu;Zͽm 7st?_Y]3{bzцvqq|1-~q\|b>.ڢSE! ߜ8wj12{q_0}vYz۱ӕ XlⒽY|iowieі?*X\XXwQZ|x(oxMo6TݧfqZK'X{!EXTEXTEd[$3&XyJ+HfLaq}Xfư7X\כ9,̘b1>3fƊz>3lf7׋X"E,bqɌ ,.s(oشGfLa2XTEXTEXT@fE2c%g$12c XlX-`[GV`kka 5+JxLX*0n+ zh085114+**҄4)n+iԵj LcJȅګB1\΍aBFnjWCZ;uc\7YXɥR/r[7j[ꬱIenòqRgRW-ugޜ ^}.p/yɥS>y4/ظh>twKT[(1iQP0>cX{̥~ Ʉ7a^:P,Yi uwOYoc:r>`=5?.ta:xc4m CGfԅep1q qjpXl$$# JE#?F4mvעdHqQ&Cd΃Tsl-;7z;E=๕}0!GJ\ucg?y>qQ[:ih12-NZӮsKr3׿P0d-5ou9r|4nm.sdph;^(c6cc~yChG 3 =aFrUcٍe8l1LQO !>5m`2LJb̗}[@'F PH%7^کјu9o\76sno,0ZjZk٢8a瑨}ͳ#@ 0+-M>l)ݻfm11_8Ec\!gƐEaH~'k͉l_l^rk*1noovʁlA޿U.Eݷ*3jln(ͷ={nP2h\zr]]RT=i,/} R1^7旌1H52rЧK V48rcqU08 ;(e583m ӨFm~QF&6(72Z(Թ=eUucnƱ*ԏC1σJX *-u5?oO!ÙZڴ?:wR7ƶn,tVcuvל'/7әt[g- 3]Bk`wƱmeXqOq#څkOh< 4B#4Bc@|[_`]5> hFhFhh~Fhh~^f_̓иFOj繼kùA=»7Hbt-<=1a{̡vi^-ۋ= j;,Fym| V(ʛs^ƫ4#HmzRZjH 5y#4}m4gk}1h}1h|и P('4ީUq#/xܸ [hD}[񏾽eOc{ƿ}T=hL_QH#k|E˯Ckщck|Ds>4ck|$7N?ڋFܯEGը{߁FUQiSt dp=#SHq>j/[M4++QٛkFxmFJLy >֓X$opY+Ⅵ[v8mT8MHqEc0%(ESJRjS siu SV9o[S:X]5DRb$kpAپ4#WH>}()koɹl:r`Y6 ~n{qk>s=DV_%3E)zvAL5zq^bA)c։eyť:GfԆ׍dQP4+)ixF͍3SoknywO,yOrc5ǵF?AYj\NTmk7|QzgPWYYH˺qP纱zF_l̦nl4qRK*`cE26nun׶,o˖c:%5!YWO-uGԿrӼ(Φ̋ѕF/H ~R6 G]z4#9M= g5먡n8tOEؑ"&McS8c[G%_j>@da|^cuюY擾 }:D;d Bؠ|qѾ e)IG !>J5w͹Cy z{B[7#h6̪^FaEF> E:iDE\jQƙy &Gb5,74_vF+VnYoQ7p~*Z8\Ic.1'1xbEc5BQѥŅF-(Zn6#Z" /56QW7O1D^5JKF-u=ҨnPYQ>pzy2Xu'l?q]$︜ىNvq v%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_d2.png0000664000175000017500000001312013154001451017305 0ustar karbofoskarbofosPNG  IHDRF~URgAMA a cHRMz&u0`:pQ<PLTEνޥk!!)19BJRZcks{{11BJcc1Μc1{11RR111c111Μc11c11cc1c11ccbAbKGDHtIME  4pIDATx c:BJ.-3w,yo-ٖҖ6 t!Ǒe^O%MrAE돔jDOi&7s4)9uQMaK$L5]Ia86M~ILar3j7?Zs 4|hq&C0MZϪ f7y1<8)'Ͽ9[qh@~g~[=%MQwYCnpM4VģhI/e[C&Dw^ŘˢY94- < P t >Ps<~, Q7شވ.y"-D~~o?W?#r. tW*Dux>Vq?xuyrԔ>N.=u&(2esrjѥ%Ԥ_L}Ũ;ṿ@AEz,y^) S3-Du?b~:B;R$d:41hRwŭ}; 8+`OwWiBYc:4:Nh}tmoIK&Y;!(s2)EEۛeF)Ncb a#]`;oΘ]yYr2#$jqʼnWG>GtWFC :H.+\m.ṣgiԦ1uM-)|.M-4C jD"`vS%G Qw1Ǯs\JbͷoTKuG]$: )nQ7TFB-QG!Bn0ԓ`Q &kXbf5#(.`mug,1J} jJ4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4tg}v얽ʯmsjIeoj>|1H ^VmQn߫hvǬmDm ^A;qGm<-;%ǮrԵtYpN4R"j{^G_ y> 'Ǯ-D{YGkFXpXb\M5fF;MDcD45]B} ${^imj?mPZty %9l@}۳=E h~ %*M; J⥪{؋4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDTNUqQ'DJP?yD%S"DIJ&%*MJT1.' J[yb@-QuPl=QT׷ TJԼ Lˣ5M% Q̖D+ Cj+fSY'v*JVZ Y3'+6:|D.>NOg\z)˥qՒ_V놏F Ioͼ j gA,(6,}nM2>xX+>ʘpy>h$qh c0b2lmVq1b_5!;v2!.ED0'\5O\+c ݂[ ;%>GAwERih8{֘06i"I{@Ԥ &|@L8iM~jM+r݂GC#+P[?)0܎&m;*ʣs]JTJytߤU&8|P=*MQiRJ0nh~Mާ@GYdxݽFTDIң4Kj4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJ&%*MJT4)QiRҤDIJSI',up. D?޳C:8%~ΥzC&4GI=*MQ[imx~u~WzֽZ jIbn-_X8r[ikzG0p3l}ͫ`.[<}@oƭzbң _~lP[;ֻpU$ٯ/[ӓxBR-$I9)o᧝zN|%}ϧ27Kr⶘J(nq0a$ݮPMkV|oXh˩*GݮJҧUIw[UER3$'9% iu%otOcR{|Jϭhm>6pjr3iJ-M:UPWٳ3$!9&UN˯ٺs)<^mT[IRn$q$e綜q8^J2$ .Hmm*$?5p]rĹ軤e7Kݐs,isR^$ɭI2$ݑ䗒i{K+Z^'力\;I²z<9}F}5~ns%ѵBMNz.~Sl`^HRI I$)$@HRI *KJ{~<s핍-%-\;gd_d;ӵ7Crɦ*( Xb N]Cn$8pCߛuqi(KeB!DYi)'II+E5Tqz8=(Ieb2 ԧ0_O1g%i&Ux I$@HRP]Ra$2@W7~{EnJt[,$S8vN'ik6$wL"UtUcEhxEqx X35+$ IqA<_'IVȴe8oyQh6Yqqt|pd#SNS3bhfKҞ$WH:]-nkm1$.E%\qsMvf=>qV $A`$dG'fH= ] $@HRP]t/yTOkwL}Iq' ֛=d"M#{Hҽ!fI I׺$gP<"B ~$D'Mwa˒ @|?I3\҂|)ސ4IFNwJ{Mo/)'eIFneIa1"7,=$9OG\q<)-H#rLZ YT[J*HRI I$)$@HRI I$)$`1KPUR6ԔB@HRI I$)$@HRI I$)$@ʒf]~]f IB\z)equb/75q*6`ccI{,Ȓ$+VYROlm[Litgq!j.$k6mZ&ZI]ci&mۧPM+,(xGIf0iX@!'H3Ռ2*'Cg|KI^]1wu%=HRI IAuI-w[ fy3%qBck>]y)gX$H$H$H$H$H$H$H$H$H*`EbŔTT> a%@}gpk?[#$)$@HRtI <|*͏O4j7J@HRI I$)$@HRI I$)#vmo$mi.u݈/c8Tu<5I%D?gw4ޔw4K8|zgxc9)&$I=O4`gExaI2-83;̃ $Zl(YF- EͻlHh)OL1"f D60͒ڹ%ɛ;.6y%IE-crAreq㐿*ͪr ΅+󫊤~62kSŝuM7ΤH[2HRwJfer*VYҔLK[EUI I$)$@HRI I$)$Osɒ?(׾jSAid/hmڂH5$k IoL9$)RI$GPIi~oLyUzYfg=4IZ1SFaI!$Jr$ܕD]6#I>IrBJ#IjL%)c^%z}$vQ:<-L;b9v,qrHrIF>%,iD$$_zWҮT']1ޕd"'[I{SZ23Rq_qv+^,qz$1吤H9$)RvI{gI}m߆-p%k ~-%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_f.png0000664000175000017500000000465013154001451017235 0ustar karbofoskarbofosPNG  IHDRy}"gAMA a cHRMz&u0`:pQ<PLTEνkgebKGDHtIME  4pIDATx nH2 Xg%5 8 `/?6;q>ѴR8@{_:r{rq^?WL}J2xDb胸NP_z {sio(/f)ݝ Y^c_-.m^i+j!⻹:hw)C\~r ,yf"4'qv@9.N+xΏ/s/ooG]7d7X߿oyyZWH񶝿)Y0-nvyLeS )ʲ'6M?qHщ?8-r8ʽKJK><-]KTԉXS^KvjwDJۙP‡(.QGw~ h{RKf7b3|))CK19+&ˣZrSiڶwmh8or!t[xm5p MVI1QSGV-:c|]r1x)v˖m_P[%E-u9څ/2Kb\j4F]Rn)uF/qbN1bH@?Y)E;N싷/bpZ)[[} J)MO M?9l!ŔCv%)z)n37WOϴ=<`v JEm42Z!ƚQqZN8_"X(mق-nޅ8dbwiJԭ-XCܱce,?L鿨/մ!1T/GP,W(Š~ןAHc;+}ў8NE-fSF|uz~R迸H[MU/Eq:FA9SO$M4kZ'cMBIM7 1߰rˈSsR#ա/)oRljpy祘zW0Rt[וImԖV᤽I&?־Suq9[m;~b[~nkrWҵ8LQ;igM=Lj/5/ʆQA[}qWlCԫr;ؾw\\3]RŦv]uF5LߚvHIP)q_\S"lK]="'/-dנRɄFaaM_{R|ިu`]ZBVR/[=ŦPڽQAm2VtaH/jb^Ǻb^~ۥf[rF_jo\_}2:_]fjf9xe_ z-zmvu³PG}8JQXGp_t&w+5̈X4r[':Gَ:uIrkF<,#Ko3^}o4HKx&G4%1k?9zpNf^(&q'@K˩doz^!Տ0"t_;JF)VY6Ɠ|˙R9+ NT26˗յRLJ-ʃ*BS26bC%8Z㐮|}эRz+c].:Q^r_\v9:υuyhKEYiQܹJƾfT Ep^w\v87jƖP\0N)r[k[b|x xZpgl&Dz~n^k@RSbt*˝j5EIGDQS#Ue5Rt9\UR=T5bl.EWUegMQ{-E[*;i)~SUvKst>zGUeuC_])O^ /ϟ͍%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/addurl3.png0000664000175000017500000001265113154001450017233 0ustar karbofoskarbofosPNG  IHDR-"gAMA a cHRMz&u0`:pQ<PLTEε99ƵJJBGɈbKGDatIME  4pIDATx͓ͽa*PSNasshi*NQn$tKB6LM׷/~cYK^f&\uv-nӪa|w^f% \"\Y-X/Efv0)-'t' N>FN>T]BZP.JjL< _Q_k:_elU YͫEmǽ^X˓cޫI/V,P (y>g_֯p/{%`\ziwKԷ>>8I_M1o66zs8ׯbz~ѯ媓_K'vea2tѤErz+yaa}df6li\ZtG1jfɐ˚nUkr7ɅpVε ^b7aZښZ/_['^|<"*(h6;tQs ˏbk+Sn鰖lE8(_Eyf;QjLac ⭙oV˿^%zNO|UO 군Y!YGW/F(L/d~mT~JᏑMU|ֿ+֯6㘹y֬M2Jf5*e&5Sn^X}" +/z^SiuhʔVt6GG]g:#ΩRBD֦&EPUy&;c;Բj < ­h'p5p-)'?ßã?Yc֝` <(< /܈IgmaGV?Iu8 avB;헨q;x80GU{tKG86_G b?7[bY{~1vTƛla5 UINߥVlIQJbѠJ5fTԑUlBI}WӥF!xҏ*Ӈhj6>d#dwȗ2+=:ׁu*m$CD/Wןp׃_.N*Q_/|Jby>_feÜrIp[sybIt>&P0/@'dv[h+| _Szk`nJVɸo{,_r(pgC!Xm<)BoWUh C!#C_鼘,/ʮoPEnv)0T?39`]bKeCWҝɗ< 5/C%"ljg%0ڤJ)+&_KdXuK`2f,7&Ɨe (NC0 c$r.|=ɏOsޥj8xz|̗> ԩ"?zǗi)FF'miH~E'c#_ZO}n ^eN9TgWW^X~j >QO+y[uknė_RވÄVdޟ\lMMS\׃_g_´c.n$M:K5_`K_E]PZJoLluV4:g | AU;_ tpORWM)82Mz Kȼ|^yibA,BA!A6#K% v_r%"b5ލoRXA[5$*NTUVIh{< BP΋p<߇P^MrF|}4el8x;51T;Fj ~/ֽ7n//1KLK{ C{qDxY,0sxi >.;gWE9ԧ $ \ҹjKAڡFvэKڎekT3Ѧ# Nc0Mxjck$⋺RK0N ['uxMO%íkQ} rML^"?S{/|0Q%CjlaӁ^KVIیjNm1_(_:b/!_׵ץ|u˾ _SZ@z}؅|'$_^. .J)fWɯ[5/4>.䫓^3`rQM7.`"u ](/‘I{_/si",xՕ/?l0'q͋AVEe|= e˸<`"X~Q!{e0tUzН_8?]R?c%m.㫇WC/-;:|IeP..N|).}>_]I1_.)R6| ڞVyT_ﳒlp _zozRqH`꽷9S=W|ukWނy5>e|B\T~/R i !_1 t2$/)zW$W?_BxDH e߅/l3sQ:~w L.`c{eJ_Dax|2|.E'_/Ao<=_#uS<ŕ_xuڎ󅇥L֍&QOWvT4F̭[vU}׵ƣk1obΑ+w6_ku׷ʑ__|}){Ŭ|A\+_^~-Fϵds+]TI UO#?#;n۵,/r3hMӟgO/`|n7q?MQs^fehJ6 Gmvn ɢ2S >0-xe! )Ogh^=LG^ƒnYt*fr 4,I)ݩ*Gk2AT~ r3^E+q@yul$ԇv!B*WdU%O+2VS\l;\晚ب7_X=l Χ[(moەQrAk[5ӶeW~ӊC=S.k<ŷ^uك7XK}ϡ.^}a6Wn`;/;ƃ}z˗K9ӭF|U"_M|==:׃_W_GzJ^|]|׃+ك#z=zu%{uD__/! %F׹W0!_g~:{u5΋A,[(ܚ/99;a_u$qO#5v eG_?46hQ D~y1nW{ WKaflJKğy`coavؖbt:$ mX{O] #fX'Of[qѸLܴ:_CYk#lZ|54 &H?dfJޭr6d^1x#_l^HS5%}gu޴:H` ?9/O]`j""xzc]p8oj\*UW5_I/d-N%apHSy*8e_Ld h!_&LLtWu1F!W~vE"֖m>f23}W5VmtSSk)ifN4Ǟx~ͥ>kAJ- u\+;_ӡx8_E/Oϳ{_oϳC<=|k 3R~u֫^TS Kq&8X ޽E5l>?O Lj _:GlE5ٯV嗹МM^C^49UݜT?dU/%dr?lu$5Ƿmb]2?Ewk:8O9cR|YЛWlq9E%)`L\%!nٟbD&t8[W´5. K0;⯌%)~tZOC S_|g|NCOKqjR Db޼HQ_USbIN<$kYLK)ךc [)SPEEƜblaҢCjSӜ5@𱤗&dQS !N_oLAǛa'i)vRbWR?H>]]HrM} 1^Ebэ҉eRqBޞSף>䨱fat)|cTctAnKM1њh~]]<ֽ`b/̓loCr{N'A(v!Ǹ/_}}Wgc o9s cH˧xxAS|OtaER<'E31RtzNm-Q[Gq)GMVKs&nbJْmk)=)물Z%LMu;?R֜Sn%wkk=[-ڬR<:Ǡ 'h]|s-ϣm^v.z.g)ӒV&|Fv9N60eځL08.JiS$6R-Z5&ڢma9RlŋK%Yl׶SSK9sR]hw-_u/7c})3F?'~(XhxYUI%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap1_a.png0000664000175000017500000001302613154001450017214 0ustar karbofoskarbofosPNG  IHDRgAMA a cHRMz&u0`:pQ<0PLTEνïνʵRo-TP{Yd\DݠbKGDf |dtIME  4pIDATxoLgnv[g-BNU[%҅lL.5./"u]RT5 + ehdLNvUV+@{U0=x<63I."•!9J(CC.(Huڨ;ysԥ(CC\v 2fFAccpc`P@P4(d:QYa733:vtKG*}*gMG' 7guP5< 7ǖ톢Xp7#8*0}|q (t~Νsol Yg(6WQ>:;}03 lDlu}c}/7! W'z!j0:βѴ-Cm?.}CNXl PxBD.&36:ɇcQhtvqӌH0"'lPG i@?FjӜ8L:y|8#l0c\`30w b6prCCLgeAs@m z:_0} RwDŽsƤt(ue}:L|eClB 9Fȭεb{:ӚQ^wjfLl I3NT$`l#8oj{0`eulr,e6YΐFc{06\F!- y$-/ -`~vN(#~48G4 69fZ bV:L?l[Wp~]8F u8}@cCmt:LgSS1?L\Dp Ўϊ͹G ~2˳\|[+cWn~}m+c8B^`(aQpZŒcQՇ *0s*JhWnGK߱`6žP>(nGdBCXPa}>T005 J, vp3<*.bL 'Hc0,Q/)&-:l3h=WXNrV (J3A(b#MwǼBAfe)qk&C!:F>^PbU UwMKbɫ\ ns/lfm%f"K;U$n@;4sePjAl ("` ?UkNP&یJ dlM`w ~o(J 5uU(n6W) vQ+U.Du 6~pCjN62;o45l>:<`bz?@ )>pفhlV Vfط6'Dm,ɫ(j_y iV4R+H](܀^?BPv: WL%/rp=rjg[I[ MlS$IpΩMRRp^+-kOj{=PJ?";"!eKdR2YL-%eKdR2nW ]/,#=[-B iSÌ*աs@6փ>m\N݊N`WI^*pr@[߾,IG$I`Jm;o_$milƶD3Km&%Rr/MBKKS?ųՖojeݏU_PK{OEdl32y%0; "C%]޳Μ9ӖNv[}{K|,'߯/y?ɽꏖ^1gۘĻ@ +W;&UA@ h[2~4:'_|߾N[?zdxܘ[I{ Y轿}48ۀ=ZDn;zBH;ClkqzqgZqʫuJZӱc+Ş vY)j2rDe#4IOޜ{^`^ G>f=rb_uw_vi7}Q|l 5&ǕF0DLpTv;P~_i/@g#K[ BY!OyZdz݌ڙؿ`~_Y7?j$^_TkˀvM75Ox~v0pі0SR0L@[Lɛ) 5+!zo9:V[yz̝nza ^`4_uߝOK{s|u<f,mϧO-iۻc}3y9y>}W \!vϜ']m[Dg!;NakհDg֙6љolkkNakڌ2yQ홖S΀G)4/'ThL*U%d V$q+ J%1 [$D[AJK~V+XILIT3y{iVrjKK4;}L72`F (*fh ƬK W@E>Oӆ R׊PBu* XGz ?V(~z<0NEO=mNOUW'/άʻMǛfgA~{Fѻ0 sׯvpvMm$[?`=FP}\\# rek~_-l~nM}_ڠllҟ'odlkTblJ'yr|*ÊT`O*td(ݓ.F)%?sZdxITɋ[xR9}]L SeU$L}Tp7]~ <2b(O2y']ƴ < r*?,3y] W~wvA]ޙ`qWܕ'⮜Oy y+O]sPc;7q\ ,r-\<+Wyn1mެSŵWX.EĶbjvtuf R.ĝ!m`'Q3QR&"\Sv/ʲPDcej ~N2ۧDKC |]mNo*)<0.x2;SHNŴ~~hW8^N~DmC20̱g| G;ÿ].W.(#hKKA0:F[D&?4m&G) ۡeɵu:e~=3R7BE3f ȮuzVF ]Ub뭪4/mq\RyymiY ̧5]`Rpg'@kDIkTpOl};g%W$ceŚzbvj]J욖hl4PR2[֙\Y|tS߫W|&T!kWlGlВ"@~ ©12y7҉)]/ n h vJGe'ׁ09 0& ‘9 ϺOBo";ށs蓳Oﯢ-Q)mqK6M@[\&ZKHh=*wϮZ8'іϮgW=\2yZa2yYgWə\R-gr)і3h˙\JL.%r&m9KɥD[R-gr)і3h˙\JL.%r&m9KɥD[R-gr)і3h˙\JL.%r&m9KɥD[R-gr)і3h˙<^Kci%sgv6Z陼$t_IOY{7gM`],BYcHRxk2y뤾ZJ1%)<sw^'ow)G/q. ۢ\1OYٱzzp^C{{R 1͂:b~+1n#Śb2^1R387u0ba([Yѹ]u=.Op[SY:ˁX־rY{7bn<=0/~WڰXr|/?z˓tn/SHݢnc)VTʘSJ R'z+ OKiEmT 964l{U&EvRơ*0rT MSLS%-J[9PU^3qiWm7JqL%eybc1:rN,78CxB'gt]~.)c񝮋 91 =t4Fv|2xcG\_}O_MbZm:W?woJK;|-W~M0ixbQ[ۧX|^8`ZoI'RLoNr7\!݉Rn!žiTg孽sHKqnJ1OÆcCt0W)0mNW ŰHn&Ŝ>m:9ͼ/Ob>:}wmwm"b]nI'=uqtObwf]b?:b|sH-}Mq~rv3on} py?(˭5kbNNƤ(E)TxUwypw={Yރ/>i0|Y6jKmf[My.FLi;-VLOHy˓Rc-_U0/H':tGŒb)]Lm|YbjzZR,>ʺR/:tnIj)(wfh~~T8:mo|;RL/J˳ҕG׷y;>Յyh^0x~8T2RҚՅ= ţna_0mvmś.'O8cihnyO'R\/0v}8wGRt]QGWm8ѥjЮrY{7E?(?%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap1_b.png0000664000175000017500000001444113154001450017217 0ustar karbofoskarbofosPNG  IHDR &gAMA a cHRMz&u0`:pQ<0PLTEƭ+)ƵȵCf~zn+_&: _Hb. "QM bIE6q0XEK@T{L'K_6Bh%-3;o~7`hO`o8ڎz@0`Z&''n SSuPV#~U53[`>Ep@U kkJx w_E:U3X.j?xKf*  S"0_Þ f9{8% z2_;9ek?8tMv'^()73fC- rU` V r.n%[L5ȭ8 af67'Us_Քg139rDe8y.$_ddyW/?"1I3KWTƳ/M؎>e4ٺ2 g3CIjhmp!Y j23&jrb~~%8~fSgfgfS+W.>Ou}OhMJ{B򉉩]eYcM_] |As4j%OpU'*]p'ǀ,s_%9'\\##`VMZk/釙kExR;MwT䗦3 |2N~+'}Kse.\꛸t#zvl83wx|ZdP.47s5kFC- r:\dWpFW)W\vQ\~+g]&s~m*iͬ#>?`80~j:9l3Qĺ77rhs 9/Yðt8S"xӵ1c2_:Y|.rUҵԳu]TWg0 k2y)!f[xp28Ta{me>\v54S<6OڨŸ]MSUSYy2=â("+^5FtdyfG?s[]뗠ؒ +Kv$X}ʶPj ̗AŢ*l ss8ʷsYH=62vFZG9)izbfnU!E `j Tŵډʵ ~eÅ+TS} '"^\"Id)gDxv=%R%\Z9J87#/2ۅG˰n :Y6>saY--ґs+maD\vїj]/95uPDIHjY$>G"DԼjQJdBfǚ:(pn6J/qҳ9YF2s@CFٍ7쐌y" FI   yduzqCCЅp  ^d9d 2nSғ6;5C?'r^^Ͳ!l&@ˣR녜Jvs$8{ 2ffoKg2jv܀qn@H&I@ 3?bA6ȰvĩvO׉#_ ϱ7̬LB˰t&z|K/kVa:KZ":S&Fq"l#\vT6Hط!:"D/٧` F\3庍j+p*Pҝ{>z<\Uc;WxyGT;YVTzv\ S֑1+;CJ:>}MiUw+qn&Ju~P?VDCTjv U ϝE8Xglkdz08Tfg}BrGA}#y[z`7A*xdpk/OG| dȃ+j4TG)YLfoGT1`}SKqkؽ)b"ű}nmwpk'bHʟ({& =#Zro\^$8X{){Ɣtylpu?GzdLX]jlg~7`InMKRU^@-›GK_mҟջ"Wbh"S <:ҽ\G?BȬo@PSbʆ=mPmwjFdG7 vGneeg~nHzϜ=0aw9_H;e6e;x4bT}P"RPv4*9%Kr8B=m@ !h{3. @l+A:!cڹW٨VF缨.%,ˌ4f.l/)GllݿvT__[W)/7s} eS[bʹ0Ε[7715_{gW"'>{ml0}޶'z|rWnɉؠrwq+c ??L{CQ~m^7bzP鋪i`w|Shfnaoߋ >sv-x+~/AhÖ]&rGe 7FZVuzƖR۱dnS,Qi[A;YVN7dZ`]ˈk̫`COe,iMƻxRᛯcw=śiyW/b7> {=]nIy ~8h[^t7ۊ-*\db}K1Xrr~̶0CY~>a5vw烊.wYU*[OcOl7|+,jck}Q2e%ߤwg-D|.>Ģ5F>M+psxmMs puM9`]}ꇝ~e\U 3/)-ܯdyvݤ8SU̹Ӷ½H]W1!"@lg*Q 6[ 7Iیm ?oVۻ\SomzkU~w(7~ZYaLrwj~릕979$|\* ?IQ2 O^l9*Y{A$p >WgRu|0B#+2.a$wn%&]J^ y[2ݩ+xŞC^ElwxF/oW#fVݡ7q^q^9oSwMoo#ؾgr+!PG\j{"pEX#Rf#*vQ̧Vabl1LQ(+]͐#% 5Yn`%Ɍy#}7^0`ًF`vznYo/[ ]2ܭ!?+\YqM2 8a%G.1u, 4NDUFJs ')S4)^<+ !}J{3qH)JgX) ty K F(=?I|W .; {<$%?<Cyr!dC _!0p~6z}=ak"ȳD'NVB vfϹW.::LBͱ~}Y$լR+$ Ejzs-%|( K`vt#<󪮷y)nSFJZyO{:Z[3 j"9i^ԃ=RQ}~~ޘ޺R1?o^u?GU|V~wb{gDUU,( ]2rttY| ڦ7t';)pp\#99輚.tᖠjT׵yMn5ybg[?5jʳ|W;?eάy|ojϑCNf穥'KrXgjqFEi)x0g5/H8WK4@}ru jg~ܤ@RBIӄD]VJXoQő1q1c)͙OkMhN;K++,VBө15!>oծo|j%zZzeFhő,BpV0uvGΪw,cTQS/Y;4S4*!eߛ&b을CTJA C/_3h[gIH*gO+q鑺j2C]ӡ:QTgU{ɢ l}+u5įs)RݛR U/9I.>|j#O3kqY4eJb ]H—)q:ؔE !͙7S9O-S Cm}k} :Z֧^5$3-AT؛W>^pjCމLU'"NB2!t:RS霓G3P LyKQEޒ.Zlb]ɄJ@˥!2)q,㪤uuk6ߖ}L}>uLKgʭoNtXj:c˾%.اg:Z˧6.ӡL/WJJiBuN摌i[{JRɦLNfiT\"7ֽ!^˔c&>˧逇2.:ҧU.V TGO@7S c? >'?{>2\o>Ҵ^!%5̦R+ {j諸ަ4{K9>t15(n:}OGQc kF4TY> |(ӡDOu$;C!cF t@s/޶Zʟ?!̵\w`֧i>u>^آiMtڃQ f|F2u>>m0j5v|'IpPƞ]R&2%ѹwȧ-=/-|Z/.2S T {}auwC2k)ϬΣ!C6u.]ਦw&;i!P-c劗sD)V+6Ue~4^%l95gu$v{[o)u8_ l08K̈ltu/x|z4@>}{&#T6IDz|wtvXfSA|B*H [ZXOc|۽}#^4NR%L6=|q\r]^Ҁ۽ uDm|X3I:i|)cّ6It1n8<_*m9LN9#3d|m|hm %x>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9'P7@j ;Lu8::LuHS%S}Ȕ+Fa`-޳k9L{)pqK| \U uJ67a~K _Ô@7 =|\ʫJϴ+6l.<~Lk_ 5T21[?D@ظ}2%*G|_;845}S𫘆o_!Fj}BoiikO2i3oi-/;Fwzk=t M1-jL_4{5FRսezk[Խ!J7 S{LJ)C=*wZ͗qK$ߕ ߻6ɼ1~S}bzߊ(0'0'0'0'0է7'Po~|ro~|`.L{#I`ka*ߩkr? LԘp*`e|mߚ)5(⯇&3M\L49I L]3VD6>:y/iwϦDv|sH})SO.=BSqPӎL2`Ye*k$0>k[ꞃɘO$L=ի76$ίe ^`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O-f 4wY慷Aӆ]bp+ qOzZOÒ-M7|('i[gZ!ՉiӤFӃkLCjG>פ>Xޠyŭn}`e L LI֝&1rd?mb=SpI\cd3٦LWhOLLwޠ^&AhW-m5ET|p V_4kLtR^nZ$]|qPU55od N/gZ?t ת7L'^6^YNL_3U<x\5^wkBoPTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTN*Ӊ)TS}O L L L L L L L L's?|_2{PLwۓҍtOp[}a nO}a nO}a nO}a nO}aɧ c;!;K{LMbNztOM'S Scڵ/dZvsFM5\r?IsvS^` # SAz ^엺15^N>5mLӻ~#S>Okk Vub}p|{QLTnC`5߻w)|=)|=)|=)|=)|=)|=Ow2NӞCzS}S}S}S}S}S}S}S}S}S}S}S}S}S}rLwڧL9>sy%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap1_c.png0000664000175000017500000003751413154001450017226 0ustar karbofoskarbofosPNG  IHDR .gAMA a cHRMz&u0`:pQ<0PLTEƵ㳫ʵRn¸2okekbƹʿ<bKGDf |dtIME  4p>IDATx}]\Gv^׈2"l6$3 kڐ p2Tw22‡8b0VEfA&@Mz4,zEh_5!eF SY |ߩ3 poSuN}n4~)7l7.?~ _5v{gsvؾ.\^>Ǯ9/}ŦßyfR}ot/X^޹Hm>}UIʫJn<>ק(覟=b%unMnuE[l|a0/[Cr3t)ssGW2a\t~W:o1i=V^g _gKxm6-K狆yF46>jsGnS]L?{vg~rgE൪d/WEbEgUgꅡ-.vB#Z_?5տ궎o ;szsgΤΝֳg~r)5R=-t_ci<֨H<١~Y,sTr :4͹[iK_gg/|_.Rnoʚ([~ZP >mG}Ξ&kv Pr oգݹRUwMQs/&~=dg? /~ ?! "_'öbFz-Tk)oHqq3..7w^JE./Rx 6/~L_XUd6sy^h9~,qijh.$KgSII ?9YH.$Na;C4l8cpH2y [1>j-%vgTNJϦ1#~%w 7kUJ6hcZAgFum`赨-Y~{齚U}*NyAqKd_uN~OϬuV/.KgjR>;~ K*Kiۄa:P=cHy+=SsKGkݘkgꡭZ>#P`VCp =ւoIO򀳟?../W[-oQ~.lrwʖI[y~w.j_ySúͥFU 6mrsNSiSU Mo!Zn/޶߃})nI?yK >dNQ3۔g]H^C޲QgW<0NcrsyVIۙNg>[Wo9KNhdo|X|pƤkI>.ȇ')'"M .@7|rky#=Pj}Dh冽[s!h`_ĥY4z{Hn2&O-nʗ*adͶ'rv<6|$q7om|k|O;PڃS綊 JE-7iG8T.ẗ́-J} =\6ӎ ]d8f&-mL {?> [|TlG#(I_KrPIώsT]mؾcǏWͤnƞ?~t~P3S4..!ߴt.4Y.deEQt=<| oāty& YEl@js]~?5΁&6gޜ^|ynwreMV:XLJ>sdiDѬgr,*-!{K+QV8<`qodtZ{ Q hUe։eIR.7w7єݥnoyrgz3W^t:iF\-.CZDba#!*XeXY) +"8i7y Yڙ b Dl9I&_mVM@ԁWg75ݞ}2mf lo{Uc8J8k2Q]-_e""zAb #hT"^3@ U]FƱ 4) Y/DO|v7f{L .fmjy(u$5X\àȲJoFAnE AL^'se8skh\ƳXNM 3~ޓ3Y HK*̀y!Nh@!嶁k&hQ\p~\8AC?FF(p4y)gOލ^mJS}s尼{sOg9.>7Y{ɎQP3 zgae#!qW9XwQZFj lt Hh)p >%G7eoJS0&*P)hv*VjTZj3Ď7bJ n$vաFG tX"9E h~ /*q-*DCNeY' Rd&k;/Q-_pdR@\ N-c0#,F"ю#R` S[,߰SD+;6}TА^",g?NlH$fUWXnV-7XRJOZrutdyhDag8X-+`` ^HM8)8QRؒuy#Q5Ntٌ6iT=wJ/#&E>1h1FPe6)^Bm00@b7~@9ʱ.lq·GTP)2qyeȪnIH=Täf: ۵UGc$CSL6WyۿuG}ux0fvu$eX k`psL79fMWlsBԑo=ix#SIρ,+ӟyQzs`nN;{̴Jz$~8pEQ]_|37w3{Ov{Do̓Ǘ&U0ix#!qaYB9Nmwfgɞwm?gc{恕&xlph7ΘKqRh؝w|Y5f7ɛӝWe҈ѩ|< u~Mj^R=WOPON$ˬ7SWRa'~0>91 Au$XO-Ni>Zuui\뭻mˢUcoҐn'Kj.mL`|ȫhyT%3~~%œaz`_yߓ9%'"혋}<*t ̃Bʾ(Ҭ!.YN=z$~;b)m63AzfI`_39lD#mr?0.}4ĵp0cJ6M鰬Eu\.f¸Jَ9W<"w]:?cq}0?Ix7b`^= " (<؈AԊԈEFn%cq3?`@mԅXJJ r#|~r;| 贍:9ۂrI"E,G [؁Ί|T5;tس\8c(nM+7;k^@e%\LNOS'gS!ÁF#1*ZLC.:J?pD,n; +{dȖ[Yn;_ c. MGuꐻW\5  KIԠL>xgIW!cJuŨ!\LBܦ&zYQ3u6Nu\Al˔Ũ,d0lsž:m{A I!mr * HZu8@ ;"lS;?uR|lXYCSgE2b gj/y;IpT/T՞y@ eΌ#)NAx.u@9+B8  '8 u_ %M6b1\&aEVfp:ŎZ䵱,h0 $] c2q8J0cÑr"@;~xz^HNݥ/{!t~.ƫ14{z9SU7,N},=?=$wө=s|;IqvluZ=ퟯ90f5wҭ>G3x.wo7>ުEտ971Eљ:/:VkB W-%o"^q^>ZZK̲0FtE _lÁS! p1PqGpX5Y14~;* DSo~_9M7WaR$* 25+b0Mh- aJ!&t\<{ee ]`YHUdicp GP cŲr KԞ.UJ"aUF<Գ{{!ƑbE!+גXw.6?:GP7m!>*? ~VFh4K'岪/y{wt2!8!XPyX <5aړHf.J*SC;nXyZ3(U6ՙIǕa/+fWhYg}$3ώ'$׹~ߒ0#}ul./>-=lVe lTnrgj@Ըp=/G\ YYLPD23GG`Jg[d` Ӿjܙiɣ ׎1"AT9nyxh;NB|n׌İȇ50ʣ80AO"X!BZ|i0 ," F3gU5\L@s' K}"?_WI_6j}:Ę6E6j`  `H#T \ :す'o:uߋPi&Lx&$2k"EDט%n R@R8WD$PX)Pi&S\bi*NUP(y$}s& GN]2jJ h3t| `Z!3t[-Xې*9d tN:m*yee|Y)JҊxBPaj嫳.h@ djQ@1d=Qw=8(,BP>^= Gzv)*$-hSxd!%ε2$ԗeEA dK+6WhhnQ,i*kq)ӗw94Dgֻ(qبA;eQ)8|@ :Wrvoż0`42FC_VEP޽Lkm B{"w^;WF/~ 5C-D`b_xƪHTc{ӗoap{GfPXmtiѺ̜Fr( CRJ` uv(ɭL&H E(`z Tj_u}a }S/̸>8fxנm:oR%DLqUGaH]`vr^)Pq2+Ԑʁ° y.k+3_X)RV~ T()`%.J(Eq܋P={|{e=PzsiށMVUZ'A[ᑖ4{B3$w_9N#Nܻ%9CVQ}_܉Ou}{jG;{.<(TǏjv'o6 FΏת~hmX`'] l#69/K_J4Տ_K7>m-#7F_h=K 1PHV)?%" _k@dݺ 7_G}\}="Yqf!eU(o'҂Wk`MR6:::1$½啺KzՓL<Xܚ_JKba#~y1,51QkCVpP\{f4LgĚzk(fh /wDuH_V[rz3 )@VPKfNKTs:)4J7`T % ݐ^[٘i L"?0q],AkQL cΒQj`D5E'&m48{SObn"IQMrX[rlt@y@ga)m>4gѼLyti>9 S? CFz4,E9!KѤ.buX΍Տ %  q) 1 2Ujuk8ucizMu~4^KN cz:tkGgWW,˴IxRMQQv][qر(z_Q+$7aHr9ASFD35Ж( J4CEh~bK$פS[G $BJkdulɸ8W磚0nݺ_,ϘUwn⁩n_ϟB]d=c 4"t RE!*ZmYy q]e/Z, pcbg4j>?vN/n,Oo6vJgKiW۽٫iϖ` Ի'G _ yh qHɑMGWS#cDeX. X3i-Wy4 v-Ucc/K7^+#UC'is.6UoV]uI.hSX0^ SjAuA{Ecot4`6,1n~Lx R7yu$7!JYpEs jEℷJ+Cp c-sL( "},-{c:SN"+\4Ai2?H}FE!e~IYd"H-CX%@ j M X2kznܷ2HIҾwEe̽FIHsNv!uA0xAFpiIH%BGeo%^C씵f<FRiԫ*uo{z.+UJœtߋtZtenN>BS&,e54}H]34) U \f9oc,s4h/6cFԜj{g-N˝jL.EAN4Xk"}RxmZK"_KnTg;8=u`կ/u}&e%˽53{=Y^>oFY?X+gN-N^XzS?m]Z-~M\_=Y60 1`|dղH'c!16%0ūket:]h&6ۍ8ҙ+M?t?y@ڟgM{1a_lNL>M6+O5]M7|?N.5tg,%3=A@SE:CXaY{M)algq>Ͷx'`,Vwtbj=Qo6Wo I{vžJ #/6{t{{_?{/^dl!*gbRp&+gYNDƵqND_cu7 ^LRKʊoJx OMņX9Ҏ <<fWV&{1$4|.Ex˹ki `lcjJ=ؙ=!a,$ѝrӞڛlӛ޹Q{ڴWμs{3|fs[oYJ[}N֕gqo~k?$ ~Kq+ CZNjcziE'y20P8'Û++v׏-7N^uե}'N\}bޙɰtr:I>oyl^^qO,O?c3{;WNxaP/2?W.]ٛ=x9}L%,8t$xX}%Q x>ϑe#g!WODUe*۫J;erPR ]<36PD`y'!l|"m~ړabp卒UƘ|Za݄ ," "XE:|u. |!I67/_j \H/z F剞D/<#-&aDnr<,ܨս ٨ڣ/vuvK5p٫Xŏ2sP>,AS܅ۡ:D94u&AÒ7S:]ǹ fHp⌎`5bte7~wUd`@ #iu7Z +@a@XxL;eGHF~bL5+QrZ%v] / 0Jc89Z! A$g,T촱\ k^ ]B.bj$|a0nݔ(ĴX+kdX\H\U&0{c20IJN u"GZ$wZ}Ѕ:SqWOW7:^jpʾҫ P=ԙi5OHΥt4fv,2Xt,ǢNca2&FXMbaY/>SNJY29=kz4K>_'$ Q]{!EʢDaD6LoXYMz HR..9}y43)=+x֗h˶kF c=uUF9ZãfQJYDR^ŇAK%e&0Ϗ Lꆢe Mer c[ \q-$4''O[p!gk8Ɯ晋ujzehZiTgYd6B&92ghV-sx8:n5lN&Δ6+E2fĊ+M:NQj*!/&Nb$ \) Y,fFhaT^ k,:"{!nLPSKvdͤҔiZ7\:w!SBDD5?DjS):%jX(@}$Td\W^!e+l0^%%m`Ci6BLҒVEDu2rD@<-wHVh"p& f+`|XMUF9h%0,ޒ| -z_l a)SrU(+aՒG@bRz7Xnjz.r ~$%c[v4yQ.OKg+N8[h6u L6@Sg8J! E @l-p(yIhTL;ۊßvcpI?fLme DCGCGh`Q їyr;AM[;X\3gRy{ &ie0\rxA CSFE0V?3j !rH8s2 Ƹ2$ő8U#ϠML]x4lһ[B-uvwJhYu6"CUixmCUBVu8a³:qx|+:8B|f'I]JByF\N(l*Way ֔l&4UP`Bqk:bX0C}t=ЇuZnY PA0 X o!р|[KV bS N8ab8J+Y2U*E^Kr *$4؅guتNjRmіs:[c%[uro> >L&Ɓ,(bDk}u!!`-E%A~͌% AuXc!*$^xRp ]`_2tu8DqA*H &HO l cĪ?%W#&FJxΩת ReDqjoy;Կ>iGּǼ &P}jԝw޽sߩS|3J/Z# qNz;5ujT:)2y_.3^SMݽsR'%eD/{ݬ%3MkFlm֕Fn^c+tG5RwA{(N?"~-q@DuCqH~/Rʎ]HT CrHݽ}2$k6*ӏ챒·!Ua5;$Lv\0XϪZʶ0T|L~>Z.+SoOUXL\\Ɏ:6>*HTG4W2#=LJi55jMo%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap2_a.png0000664000175000017500000007076413154001450017231 0ustar karbofoskarbofosPNG  IHDRyetgAMA a cHRMz&u0`:pQ<PLTEνενƵ9BJJRRZcckckss{!!)1)19BJBZRk1BZkvJ{ckR9ZR֔ƵƵƵkgZ{sokc{-))RJJ{sk))!RJBZRR11)νƽƽƭJB9νssk!))ZZRƵƵRRJ{{kJJBccZsog111JBB{Ƶ)!!{s !!!s{{sBBB{Ƶs!!!sZ!sRcZNZNARJ1ƌsB=9<1*{{{RRRZZZsssޭνkkkRB1obF{kRJJJ{{k!!9!!!!1!!!!))-{{c{{B{{VuuR9))RR99!Bdd޽ֽƽ罽{{޵c)!νkcZB凜k{Zs2bKGDHtIME  4pnIDATx{`y'z, ۲lيӗBZCQȲ]IJu7{>v @")QhäVbI (ɔdQi+Nn-$(Iބپiݽ6{zӦnsf8g^HP`f<Μ9sw~9 6R̫VY]_ˢ/HP"D"]׷ۋ$;YY~LNܩ[џ2ߩ9ZŖRVw5B0Iltu:6lav.Vʏ{=ʴ<[~{{e={{] ݰ1kmEB)qt1k0 ]~FR~lE Y9X_'aFAapqz@7jStMӴy7oMm ;n!.tBo~x÷kr2LtQ+#8?r6Zܸ;Y -w~ε0߹-ky][\;`c]Zaآl[t}w ~zؼ[ 4g7q߽S}>zhip>1Xge>"qO2_[#ۈ{` ckN w|1HIݧq~HY> XE}vX)3ݤ 7Dlܡt kSm#`m;kܱNZtFaHQn]kQ$.=(Q`ݧ[a+eOy"m|mU O݀Y֟qf{zý qã q1܄7 '8u8p'_=(1Q15{!a*Q2=P 4ko󃛀DQM sq|xq @-aJ3.QZnCcl,GPC)Te:uN張FرOTgwn`pE# Xzc{xGA(l4m1z@মzp(5~Jc|۷ic{z;Jy d-'D}UHo3C [mV9io3!ş(SYL~W*)Y|ZDy ѕ|| :mSPޥ(m8[Jzwݺ;(6"ce;R>jW"{7ܫ [\ݏ(Rz = 㓞6LiSHEnh^Ԫ;Bhj=hx [BSl}11=YY?TDm̈N'n)`U5c!Kg{Dg3=RT䝰<>=(Q <5U2q#=Q}- \:MӰeCλQG!pAzC{Q&qgwT)㐞A2{p'L66²77ڹsÍԦhdr63il6Fn}6dpÈm۽%ݏm\xپe"Q|Tj{TRā˖;K]Lw'1R4=%>=V6lU]L%%Լ]8D{zmzU˻OOx v vW 1I# y扽h|'w~_=6E2L'K_/nC{세w|1=sg?:$/5lpK(3:D1=Y3q73{J[橸SfRےUYζ5y: #ݕG EϻS!<r0Ty-Z zyaa?(O50jX*{[xr(e:zfާ} ~*Tֳ`iVyB4|2sc 5²qG)b42ks>ٰ۩D|!Ol.MτsO);̜1MoX1z4 s*S"#YTcv,ȡxezʻڒ?w<5o6GE5m6hޣzeO]ɮe= P{W0دs;vOm~{z';~\?ӰO};ÿXp?5({'=o6m[1e!U~]I͓¿0XE=+Bj{wJźPxF^o@ >dQ l`-V =kƆFBmi}PcMhw1v[8Vzw]^xxp  >liK'- +E6UĴR/RA- 7U%!Tʪŕh'WҲT]Tr4(CjY㔊@˷1R!,C$@;}R F)k(1s\XdV'J5%={P25M$Z C}C.AsH  x;A2> G0dC*F I'7Bg=7}zggT, ph́Lb(pNA V xP7 ]25:7h3lB>Mue+QZdC[_*қ5#1%.j*|ʃ{o΋ĐiK2jds0.ŋl)=l`x&N2$΅ C6p˓k?;+AeSk,QZj,ZW_oK5x4MK+5~ UK8g'p[k(y /w:%Fe#k,ݬ~z9S~5t=-ۚϐ|`>F:zny M+ę3d=|^'ƓY7PY*K9X65Tq =Z^,Pq`w"#ݧ.nq~ͅ W.;o &2}" KJ‹tKMMIEz5Ô /;޴ O mruFw1(sŮ(˝{ALYxbG<"W26IH6PdD,mTC;Dsz=WCZt[&"^ E,|L v5i&/bW,}޾e`+ ]V,a`vkG LZbH0!p^ypj"@KC#zd伀tyr^ F-'wV+ JǷH2ᐂMֻw#zk_{y*muzl.Hi=Fb}("AWJ=TkkeZ[JBܶq-Tp!Tqa/pm+W#ai۷/\ +š P9y*y|*9|D>|䶀:"`7lu8$A9;wJv`Ion ɱGpmcp٧N2ȹ{k\1al:BS&\32dN ǔb{rj Fwt[@0F$-x\ع{L/uj; i<#n+.\-+624CœAax_]CJg$k6m]wã9y>-Gv4yfH8WbW@߾{/{y624CՓ؅UkJfٽl`Ğ37qpŮ(=}ΕZ$k-UI}"!X^f/3WWa78DA8W8b׽sŶ:Hwi87a[ ;q+x%~.ݛ|s ߰D7?r <.dpAV u ñj$IVWZ;ڒj7*u919}xtGtW Vo;C~.Jiv\)׼I7tAYEJd]WZO܀zוF"e$9Roal), "Zjw j j(}T12e#?]yAK\0?5JfȺt )Оî)S`̙TpIz8-=fג}*„eoԠ]cծtJnU,KMٳdLnqlY-bNIڳXYIƒDzUE*j0Xxz+'k" GsܻX,*a .{ c[/c95.$2ԿMٴj< sH)'vp"ω.ōJ"رlLFSIs 9AoH8"S_s[E |T\ps$='FT#z&{84|[xN9x^5| ^>˕C&(~Tѫqlc0'B6Z |grwL{'3qbs\[tft{< @4$>6ꓠN\ۍہ5 ȿ[ 'MD}x`g(T@[6oK>H-wX@wlV\ jdsjy6Ѡ-[ .BgcŘR6շصLTs_cv[܋sMыQ>kzEsWy,'s >w&}⠇l5b=f|WZuspY3=FDXW"pmޝγY|8Fs87]#+"jղ8|8O-3o-ÞĎJɿB^w1t>'yo"o_y?MߡOn#kӔAvf%qq\ƱAޚիVYfթ&;MgqqxqwC:6\Od€͈甕ZAx3f7z~j!?A;a$X6 .5%̏ JG_9J[kߖyP/ncz~*[K}oPx.~oZghEc#珥);?l|y.ZghEZq(z~-?zpJ[ja uypk]m"T/?6#qU Lnm@]GN__1 nkUʪu5Sp{^~ja7Ձ2k]M"T)?v lzU0x@P[z]ޓo0dg|8ǡ cQhkk]{#m$ uʼG9y ꗓ-yT,p %> y묜tg?ߠZ^-jLw[VA"8Ÿm$>6u[)?;q9Og0<e ԍnTşƔ=[kbQc-yXS+5J=j}dGujG7SU=^͆jϯS-jy+HU \:Jgv^ $Ou< Ɓ,ЍjMW++?>npxuZESe=pMH<:u],SRKvuZyYL=,s[,g2s|Ϣy<!U?p%`~gasP~L ƁjȹRU"?.V3ۦ_M~m% qx5鰳<&ϝ\LIf L9u JKXoYC9ߗ`DH)}vs/܂s[*eRӺc\;]q4uh=$λ}g Rw+(>Ԟ X=2eTzE<Xa=/!5}QrDbD; Y`(9G "My; h\re Dzy`XJl!2lW^h'z@~!/@R$90Ak=yxY:2>o{gYL38n|I)/ GeuZ'$i 2(uKA@\ K%_ACEȷJBx{tJ0At+6xO]O5EM]ދg/8Kdk$vFg{SO\kFSǥpI7HvϐXD؍CCKk\wo%/ཻ \짢p=g[pݛxZIjKݔjjt0=7Rx7Sכ G/&AҴ? f+WSmM-Ft7I7>{{E1/ܟ~% ϠC 0 l_K@iI}1fTjI]#}ؕԡ(%r'c*$ B01~6LG9~(_vw4z$w9wȥVDL8XU|+{'yʞOAK=o_lGA/w]kg_y_ xb[⊜lJ$hkg Җu-%K]gq%;/ƻf$b|@|I*H:}%6E(yx7uϴ@Y Cݸ6}OGqAD7 C %qb`t4ԱD5T9\MKFq;Q:i9 ؠ\'A<H @:`KP@BXbixR9R~T( 8Kӳ#9$X,m$ pDÏ%4{޴7c~^C.]?z r;diG8481!_@ =Tk4o!^Zܫ=@ڕ4D9(kn<k^2#hA"K2-QJ?pJ848':D-zc&%Ien&D(r3=V,_chuF8ƊbJៗ}v0'5'D)QP%DXhJ$5٥VϢt7I귙K^˒<y0ǢN1K;r Y*fh9~>giaFTi ]!6;Gδpfq([u/QCy7U*ҎVAbacoNO6GK| @geP~>t&,) n*(r}ɫ15VS+sF<RgN>0&oPy۷dDӇgJX6|Vg ȦpPBn!vR -ѵQ;1R>dAūNP qx%Ʌrӳ.cKY{%qnZbL(i(jIr(SJ=H *z,mo LX\*W' R&4p왵*1ΓipRπo󪞅ӝgp4܃E uJWչ*<^XB~>v[*m%&m,ZϞl(3NX|d|B]*|}U4=ɦ(3L堄[3#zwL'*n:<+^UM_Qj/pXD8Q֮ _7Lh{*gy6 'Y~ \1nX5Cda[-E38*\홣VHNfw 'JS>b.:Wy.{ꇀ \tHrsŵχgK糰?:^nZxGE+|~#pyUֶŀ"{sWI= r.x Zv *8Wl|j(O׫]W18\Վa.l5A$ ZuX2mVW=V x-+^\W UUK\O~}Xn-ZxdnVWM= Y2_[{YQ13j*pm ci׎gp_+ ŪyjpxBÃ-W 0*8W\,l+t=y\d)pkb?+\"y0qmaI]-<xNz278,frXBW ,یCqhNZ!u1\-<3=uP\l=ϳR9h/C*/1TKݢOY+KݒGu77\Yz58DH=E$p h2nKy+5vl֣Z׀&㎤ëw(.wTXTWK)Qn9;e9Wj@ϻ ,崈=jHf kBϻ Q W X]\=ϳϠ|/j;pjD]-X~ZnC>kb@ 7flx>ɔ)'(֖W,jv{"@՜Go%mOn#1+|jR9%t~wP kݱn\Zr.J*٬6IzCn>TB߀zV1%ʟWu RY5`GJ<~'喖cot_ޖVB-dw>ʃO#M h)JkRy2i>K־ў7[ɡݩxrȆX#>m&#SoR|s&yˡH Vvgqڱz^r(y-MrBh?@HYr+\HlDp%]-3sPhwrLӳ +\La4lrԸc%9q x=? y 7iP'24zkYms4"MʇKdl6\χ,_. @L(4ͅ əp17aQy3Y8?qCő" ȣi*BnqxqGk׎<k*]kI ԍw-K'?0$qHϢUp3GrLf<d2ӹѱ"x<3>BS](<'&!\ U9@d(_8}HGT΅!5<NWvy\-:i6DE+hKrξӽ!E\Br\-Ϋ"o"]$ ƆB,JD*Q{ c"59f4hI2TPOMd@ /MƎ <}1<i'rVc</)~mq^(\(Ɲ,ж-زB!Kc jێPiC\?6*΢p?fhROޠšy}Tj6R<\sZ8m 2r_r+UȦNmj3A\-e"!B 0 뢧XM8eiHY *jUaS3{=Kҩ"yj^U\\ߠwt՚kV2ЭNlÄy_TlWwAk D).:%?X)rab\%;m??H\\\ڄ>dB:?áۈK.80g.S WK?? ?Ƕh|q?O7} 't}\?Q~~Pӟ׮/ز﫪z_۷qr_ÎOXf> ?>A.5O? }aVv|cQLJ~vD t]=m:ed⼪zj E{w?ljضIwpdw8 X;wo'[} }ſ>xlR='JʽN]q*'jٟj{~]Clē_ {]{܋>l= зk7 ?>wݽK͏jx/߻k>ؽ?n_j@~G:DE\OWKjp|zƧy0<ۿyD܇Bx|ۯ_jl|fWg?%?k`('?ԣ o.ǍY!WK؈<@])4RϡGzz.SO2StǞ_O?9 Ԁr=!ތUƧ[X}\-] fa|?dRWND ~145;6pd g赩y8VXXޜotyqQ7rz6[J=oQ uuo8όG"Åٙqth|dff84=U!Spn' Bd6S-oiZ8ͱ{y63S"oQ63DǒQJ8o>Y~UZW5D:F!aJ"gqbx:s#s\Z@>7>!14kfYZci p.gCYHáDj`=^|7YijA=f|7;!+b3$7v3rmt ޫrU3{Ujă›8zǦM׮a|ytnSCr]MC˱Ut5և7K˗kijj"8$5E)6jˬ_ jyqU{QNNa#1I/jܣĽHp+P'!rqui(GNZg n'oqJiðJ;$$՟&hTn葥wQ(_ߗYܑho#ɳm=;4ﻘh>ƅkDnjm-qMv l&@"!ibPR蚛+R)&Eay3? t[ɕ?A)e |EH"@7Ha HLctPCF_`6HhJ' Yo31N1FK&&sm%Z*L{FHjM5R8Iu (i{:N#M!ҟjҒtShV>'&ci󚘴ul|gsON1꧛ciWdiLH^ ̃O^rkl>}ZEZ"=$uq#~HC׺;ұk}$ :~.pڵ2aAz4$&u!}˺EK̀51@/٠o|2yhbye"7ɀhGKBlX:=;[4vr^:z4zG0*\wXn?-עі~r ,y+F [xn(Z‘ fo J"Hh|6."̯7\sBq>+iHZwYsGϫD+& m6fh5X5 FxR$Ѿ7p^}vt:v=\sJxc=fzH@m1K-d_3{&1#B! CB6]k(mMڤUxZ j1AnLC*Y; i+|;#Jih(r:S!QekzPZƐ7̆&g27h8"Ϥm"o,.DF^Rm5>m%A\N ^F(IOgF́Eon)'%=/LQC}?Ep^&YfSK!;!DJFJU? ie:3%ۊ(mIH(SA'g Bsbf8>YZ,T& )N MOMn8ӳŹZP_Vkd<wNp#]˯n1YK@Îk|@c ϠZ(q3yvl٥ƐOm+5Rae2qݲh$ uOe8U[,a*?O(p9ߖ5T=V~!&G*+y'lj'| [uӗyS-|] a]F7gta|n/\q "odlll: /<ׅS#c a!NQ.K8pB'BlLt~l~ H=t(s|,3 ,>Kkz 8әsL(=1_2yS*J-8i6g' Ó6ܰҮR{ `PPTx9S!{#%@ܑ b<ޖ}H5Dl(1foRM&ƍG0~Iq2Ʉ"ٛfA~a|yy/S &JmB6.jc) 7&0M퐒D6;^P^qǔwi7/aH; MO=KјBԅh ?nA剼p@ec1/)vZLț)spGD1dA5Q攸Ea@f"pR8)e+L" otMg sJgMO ~Ay[ ̃/|>aÛ FBBl>:+LfGpMnPZ.kfqڇaOa$T,a!Ges#a .K!)* gBB1\~$2qfXD.?xEm aVG73v~dbf1yi2yv|,Ga&Kx}dP70Ra[ N"dJ׏M";6O-x-!BwuL!o^ea: p.<0BX™I~ulñUBf"t{2;ˎgx=,#T1Xf#8\6di>X9OeN~ױ~k\ĈRE֏!ÊNS8ʹݢ 9m=KgaVWtSYz28z^}O~o^:t=89NNNF"!?OhDSXJk+rпc9y28V̀ՙ N}mƑВY Z1]y18yXzќy Df.26esfoEg3X$ /&rCN.<8''GB 9fȃm[ImS -Eg33c|$NȒs[=,C)Cެ~ xli?166FKk-ހCy]yCp*Eͫߍ,hc^K6y< =OfN6!D^Y(P{n| eyܨyUtMdf )!ڇH߶b0+CSp13<<7ɐW̌+ E\&&'fp$3΂<<7^`gF'#F4C{" &/]2?Ψy˕󀻊 Gp;6q$0#R:Cjp$RTR ~ + FRZ$\XMCs,HQI^^r08yXQz^Ŧ>- aVWLLmY0+KϫOl;x=/L# }VAlNy=⤹}L~֧!Frc3ZFxME`qkMTXzP>g<,[W20+Cϻy#?vSAp olxx)8ge~d: edG""gcc0/Ggryf E`֐r\ UQS9/34Hdt!47;3Pτ#g(űH17ӯt$_(^ }_b6)s#|xjzlŮ=籶<*mmk󘃺wۣoua^!v-m-$w]| ~?߉ԗ]58ǖU\E*>?y;w`< zX[ʛ|/0)dɓWQ0Um)p/Ï/\oJW4>bzՉekGضsdžFO-A\0!D {N3D}6]%W᭝zD@R!m͇]WzYTz H%w'oCSRǴ*W߯}+rqtڔ[ ޶-y'3'I}V?z ᛝ )ѿOG 5zjۺT8u(GkO>z_|(ޯ_W_yPSA7_?VIzOM@-y*" (>ҪcGi{ PS('ّ {_~&Np@p򽶶ۆ.]6XjxmUvW@dה'wIϣ]+VKW/\ nWCN?nSN_]x68v[th5.<; [ۮ=O泞Jٞ՜;]z *2nz-/у0U;d:34G"A҈b!qEz䚉l|~Ԉb6k$?]Asl /\#Dd/$ul7M=2|zU#ծ4v[?zdt0u{kDeZ4O7GXSUh zd>˔jsؽ%#9>y_xd; G.v{d3j)˟q-%vdgH^3{/p9*=۠\<;papUX5W]8aZ<xnwtt^頮=+()d¹mPYz]-i Ik !dxq8qW|]FOYC CӧT(۹9 j5`tDڨԕ)* P<Y: C"5-voi{Cn$'뭹̬ Ϗ?Wi_\󿘾G.)rW_;|H'._)P@B3$WKbk+?_y5GP ԥp_O ^y-O] ^K}bV#mhM< *σ*.U\ lUHwEkkYJj[G*RCϫa<_ J5EY{Ne˧  8j&voi@6y=Ą~j_UȅZKbW۩,'vOO'ϗyu>{?c$2MJ/YKbv sWDFlY"ʳB \1[sŎ>ß$ܻZbow\UX֕uciy1ݺZjFMUϘi𒯇{V}VĺΜџs`/ w;  Y*6 /np/X3o۬:׭߽pQJ:\FsE`? ;$KʆgGt4S=7=tG۸0)]պsT؟zG8FI|$_r{o; 8DmDcA܆I8L.9*uԴ~%4]#iplG0 c~Cl}L4jz.lS\^;E *K`<ӓJS[4w?'R3'Nx+u`<́}p8#7;&Hc=4EMNo泧Hh4E "׆8A]",N=' ,c9-I[N ^/h#;@vH6Fzト$v5|cTk鞡@uD{-$}R_[{!=x\0@`ENZd~Pۤ[^Lu Cʡ=%Y8qYNwB* "'%.Dgdz O弳X 9o ېhr[3QxW=U؟GJ_lQj^.#`pwY+hO&+ڳw ƠɶHRb3[;#Q)x.>uDHb O~7@ڵX+gVa@qR૸صضӾTT$=t3FZbGyy=UHomy~_Ĩyv-Pހ+Œpj *'vi_醴@>Bȵ#pR.nH7`3!Iۭg 쒻qOeWčul)ym-pS;l:TǶuKSSӿ<{&E nAQHWĉ hح?F7-%!{l9{]mBZK|>jwn(qIi#)=ϕQa0S3Gk?hMbkۺFgxjmzUpϳקn#'D\~ ׶@)64Pʬ<ڞ{U؟gA:En%r)GN?S n(Qo㼔 ë<,E9\G犳\꼲5)Om8/\tr.Onӷ߂g A/O:WV{WC]ڵ*o|f{, qAB\"૸?υu\jvJ_5/3 jT3 ]TAcr8JrJPP>)ze"okV+^]-iBJO2aV-JFD..]X:#tKn݆z` ßgNqxs8" WLQJ%C@d)-KAIN9F װ܀FZ\VԹNԖ?ODXeT-odm N L"@@6uwzyܘe0aaGpb[I'R@նqG49#u|⬆sOO۠&yܘe0?1aO ̷sŘHV"EqԦ?G79,] SXe:WܩXqcQnVHp8x<,$v϶;ƣ=ǛlL,dÙuZR'jK*Ͽ^UKySo}ӟg?ۿK_?o_ԟ|/yַowλM~~ﯾ?z0={_5vxD8qER7j<7՜W.w(`k%²)NUiMg篧J}ܑz ]s.W/T/ sz)yrKᓧNbz z)^[9pꥅcSsIzsxsT/3xqzvj8Kzq'H.ˋK8=55kuj$ڪR+ΠQsrwOi*ƽēU*Q#dy%ڮщi\?\OrO&J =M4U8yqtu[s)*/ONf*FaMui:yshYtʼ4 5DTjJ,ܴ$սpݩ(ݭ};ouwp55Ss6U.LHP8iCUs8]R+/SyW'ApZu ֙OF :5O#B/R5j^D#k)\**G?pʏ>.PoþTeFQW;r2}blX5Ws%|S+ц^ˤ>z=Uh稓:̍OzKwhǷA6דDef:zbzb~plɰ:/2Kyz…:wZm3UhSp19j*¾iQYh?ԫ5NdNwHrR}kW (45ZTFW}z8+A G+TճDQN'PZ Ցi-c+ԣ৷!0.!!֠ғRZM3 Ou4Uk_MSz^B՘T:U$N6^_/>rǩ,Y4wB}lt:(Jj$^㱳սk{F]EUS;:/z2$J)u4zT+'Sۿ?9rQӻM/)5߮RX?ӡM?:WbpjkW,5Dk7 OjRJPQD5fP۬U"UT'i>8e詧؟81PT]ZK5DmjXOOj*W{;J-՞듕Sܵ8Mg3=+ujST}*UZJD?3U>,Ef9&:jYVS[[ߺQij#/ӣJԖrSVvy>j5dSEzjSTH+Xb.c)6OB jSA&#V\KϨqLIjtWߨWFD}\Q5IKTjc45 d5k.Նԛ6SU~C4SϯDjRME2[c> 0 q6Z,T?Skgs-vPD6@Y->y'Rmj}qXs*驵ZO5Bu|Zk ne1ѽD~ @&?}rG22?cqTM?W\*Ǫ=+yQ2`lA)_}[6?5 JVUO%z=5͡?f8Uaʨ\ O饯䵋Tg1USj[Ee=.ڨ_k)Տz8Puq?>oroT1H0j\4SӺZP=5MS_u2NeST;OU7H1ω45ө^2V\/0 XNϊ|js1oG!*7zY~G:GSC`ORrj#U4B6j*oTYQ]R9zz⵭\/ֳTOݷ2IQ^Y nz%T㧡%U~pJK/&'(ďS?3UWrQ*[b8UNT}yj6GMy!zV@jVTIuaMKMGR?jz*?v_ =ߌcUg{TA~JZQa8/J/ITufS(uTћt*RՑq:z&\`yt=5橭PEuES+秩V2j_Q5R1~/VS[K͢ݘSJwJc޿<K+TTj8ʈRs0Lfv޿Va*$Vv@QTZ,5s*M.jT2hMK:C=?LfT19KCvUTgbʏ׵bP9p?#: x0(ulAUoځ0o${dziխ˖*z(*8ڨ}z秧t*gATcEU,l?i|)rU*'z9?p(UzJ8٩[,~OM'_jD8B-Obubu4 l*U=* c_%*T2O]0G?M&j>*xj1Yy3OL0ԖS/;)5UpMUD5;@0RK1A9jr7r*TGi^OǨ#TejdŁ*n65;_UxsL5TͰY#sa2EG%y`NӒΧ-lrS`i}nr%odJ}6ն}lC),oKcas[6yR0=P^<5~Yim۪rzjh9!{x S%^q۸1JF7})ayJJԶVmRS{R+}\qUxt-+ LmOK.a5jv¨5ע8x2mQ^}B}nKU*_<6nj՛WQ.a&K}vS`[ԔޝD8IS=ޒJ't4ewO[Ҕ5)2R7k:6i7+n$JmUHwԍo@&+/6.5\:6IRGVVjh^;:l*1K+u$;Ѕjƻ;ӼK+mYTC\aپ(*J o_Y,&,mVXS/`_UKEے2{WlscذOҘQnVXSϿ0YM.#e՚1fgQCnQS֤d3wKܑRmO-QH[Ԕ5K1]7yє9>?{t}7Aߟ3)6ܖVE *-HyeJTXR䩰)OOJx*lx*<tSAm#x*l䩠<t**<6 <tx*O੠@x*<tTsT<t@ :SAx*9* :И>-T2RՃM胜QF{j59J]YRƕG\7(u>ۯTO'OMtm,T?*MOJ@S[輟-t=m^|׼l;NdvQ|VҽşU ]BݸnO}мOUkEYIDG׮ԅBE~TgP|V<5vjT`YmUwŰʼ溋l-ͭ'+wWK؎ZTCJCWFJ%=H-RByTcj}ͦY֫>>uҺ<+Q"XuQ3Zl;QjY;x*̦O4#O?CӃRTn ޥ v|eopј}O੠sTpSA䩠<t4Q}OT :` t ZᩰVS[r E\7*VжJgtc9*ǾZj5!]]hvaJm$َQB7O!OtOT :@x*<tTsT<t@ :SAx*9* : O੠<tOT :` tSAx*O0G:SA䩠<t੠T :SAQTЁTjE KRT,AQSAT :` tSAx*O0G:SA䩠<t੠T :SAQTy*O੠@x*<tTsT<t@ :SAx*9* : O੠<tOT :` tSAx*O0G:SA䩠<t੠T :SAQTy*O੠@x*<tTsT<t@ :SAx*9* : O੠<tOT :` tSAx*O0G:SA䩠<t੠T :SAQTy*O੠@x*<tTsT<t@ :SAx*9* :JSaciS*  :ȕl&x*<tTsT<t@ :SAx*QTy*O੠@x*<tTsT<t@ :SAx*9* : O੠<tOT :` tSAx*O0G:SA䩠<t੠T :SAQTy*O੠@x*<tTsT<t@ :SAx*9* : O੠<tOT :` tR+TXT?9* : O੠<tOT :` tSAx*O0G:ht y*<tgSAQSA<t@:` tSAx*O0G:SA䩠<t੠T :SAQTy*O੠@x*<tTsT<t@ :SAx*9*I : OTsTVO}Q(0JXP* 6<tRA(tRATTtY}TR^Q3w6H1Z)*}vln&*U}}w=c'Gmlq>ns~?}:[5yMXvRA;_SA;E#O l<*R,iF#%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap2_b.png0000664000175000017500000006443313154001450017226 0ustar karbofoskarbofosPNG  IHDRJlgAMA a cHRMz&u0`:pQ<PLTEνƽ9BJRRZcckkss{!!)1)19BJJZRck1BBZcR{kƽ9sZs΄ƽ֭scJΌƭƵƵεƵs{skc{sssckkcRJB{skZZRJJB911ƽ))!ννƭZRJRRJƵƵƽ{ccZRJJkcZ111{JBB{{k!!cZR)))11){BB9!!!ZRR1))ssk91){{sƵs)!!991ν{!!B91scJcZBkcJcRBkZBkkZB99!999ƽJB9sBBBRRRJJJsssޔZZZ{{{焄{ZkcB{cZJ9ZR9{c{kJccckkkskRRJ9ޥsk{祔kkRJ1քsRZRBƽRRBJB191!!kcR%3AbKGDHtIME  4peNIDATxcי'x vKyۘؾ'iwg2N{d33Uu,, Jx\;|%cƆd:c2cClOz 8=M2NzaϣNy|TՕֽuyN:w~|T]*Se*4iɕ2xBT\yԩL'ҙ[L'ҙX[|+!ht;#O mL'$?mrfY<݁/_]w]_M~ɗ~8vqE@=wω?z 1Dain;7-}1/Q w+n+0d=J/!kx,6c,ED4iupM6FMh.l?}/[ٳF@isf/_9#,l΢G9?+EK+:9?8ˏݗ_Yts6K(M$s"'0 CWܼD@qbTNH&-ЉTJz JCӨ架(qLb0 (JC4: K3#$o(if(.0RzDYԺa0D}ĸQBDh9JH0'4|xl#J0/(}чȟM}yX+_}G9_WsWd.G$4@3Xr_r٢r&NXD6pAELjΏTѶ,竤$@ӨQJ Rd^X qbI2pf|D6=ܴq-f&AX@[%QF11R&IKS^"X"PzlcrO&GQ=lٲ~Sr5s+39w)}pmNmB~r){o?W i.a=pB+nn܄>&t Q4BŤk%Q-@fdZnYJ>8րvp[~rҭ!tY,8&(!Qg& q&>%1bbn$bɧy.w7wJ3q]|;.#Nm2ߧ2W_p_Y?(8|)W؆a|3}|}UmK'-Odyt7^<2–ㅙޫm|OOs!̎(po+_GRGӀS#Cs5oƒ.fXBynKED[a `<~bL1̷p~O;6A~ /-B!;d8馏tyrfOwD{K aPP!+쌶x I t xXOWCnC.w|$\>%y =yRǩR(ՍsF)Xg\|!v}q)qtM9|~J]U6Aj`d"qxG9T95?+j~GZDB X]G"}/Qȷ/AB4T>TB6XܓC ~5;}%RiO dmT]#C4d1Meͳ xiP&kHVאuAxfvhlyn|O~BP0@(/|'&^R p}RRW{x6TqckC(ظC]qG^A1R~Ƽ}O|Qun^,cw悀 Fgi6]Ɛtʹ%S`IR*W=onkiͳMц6烚M/עM/l!Y#|qK/닛^Y=6Q3eeDZШKJ VTgv N˘UU-agv;)0c)}}})~G_$0ȹ==>Єa(.=SS&q$^jh`v1z}S'4TM *wbE3Pf^ p}$j$QYajN[̈l$h{8p&:;VcԌ^iBx~Yh~sb@kAͽ/נfs'vJ/7/bMa hSS.e%.%T CRƠ1isoWXu Bk:a% %J]k~ܶjrN5Xt^Gs Dy}2HQK ;IΝ ?5fva; qU_ &Ȝj\K/dEz^2w׃l/VƘw> IP]!WzuDn*;ȸ!f7ixIv0RhV( /A6D*tΔIT;*ȓ ra⽍ tۦN"/e%6ntyI~1tC)ma~3C$Y5 AM&dJq*+?/trQvFVޒvIQr"Y`#h1??CE?Bߓja=#sl"Y`#h1JᠬhKnItck 16pg 0%.C4).~{lH0yrM$رo5 vڃGU6!Z!O~{yY+>R R]ߗ\ӌz^a ~k=Af]V񹝘]d6s ݯ$ťF`j DbgؒJn5^ru Kh%WOaGW"񅂵0/sn{b~% yRix)Mz=/+䳠?p9Å_UDp5h.ߑ-&LhaGW_J+n 9_Q.R'66kQJ(⅄3YMTvP. a<xK&HJz;TfĒ9_}hYq,~%N Lw$ &(k vd~%/  T%l8uwhaGWN:5\Rq{N9-_ ,b)E 629Å-_)NE.hh:ھkwZaWa]6Dɮi֠:|5гjcYT0!Jm<-_nm[Uׄ KO/5**K،R򨦚bE=ExaWj&?  Pa} O AA}^P(6z>Ӕ/Ta%ND'#k&iV>yD-q~^B޺W׻֮UnY[mwmvv;m\jh> ȣ5[~áj)i$f%j 1]ۉlYu})lQj2cGNuJ2^PϪZT==g {m݆:> j>>+=T< %Eg}${Q@cOOİf`nY' Xΰ㓧r|'ݹ?>yLa%*92u}u4ZCv[NtRu yb=u=WABm_翹?P"ewJTWWYR5K}>֍o;Km|͝9vΝ:?BJco^=y$=VzEfԹb1Pn Zw 4Lj%"DS:ۭy'4`$X6.ÆP"O rIWzk&B/_llaT_[]XX]_^VX~uӈWI jH:ݝ;!ìA| ⳨HЋQDxljGT쏆xR}B0 Bda˰X=jRf0uR`kr{o*Ft+ #U 8Dꝏeǰԯt +H+)+\= Jo~WL=ȆKcf䅓2$ bRWra&\*. tcy+;+t}&y+s_+ɶ4đ^Ͱy}%p2K \K6K\8^`Hwa]6ȀP@Q%CjS7a^Na3g 7b_jLxIR_ I+M>ʼ-+4Jah%'k/o<]Pᥱ s78U߶4b^Bx"l&$km R:/o Kc6V2X6d@Rf}SK; > /qLZ Zz,7 oU؆͢=J7/#@J%]F-l&3#i~wwF;,%J *4ah%.ғ%KG-l&g5xR37^S_( [>[/iduUNY\S7K(^}^ɯd3Qh 6./eKW9J|fJ>8n yi꥛'eV:fRU /YlhW({vp2hzƵiIf(H/ݨt=&^Qɯbaަ$\҄RrLH^ ވziRFV$ ͋eK/MPe+S\ )\)$^xz ͤɇ$ç*{Xx k *TT^%VoCqpMK iJeku=Aq=̤2ybI%Z<_ ?UBzRd-L9z&Um 1|ݴ4:H>8Ln܊^0VBҕpLD^­Hnſ4x)VrR&H(ad 7X !^r[[<ͥlј}hH>8rTޞwD6hoH?#OQ)̤JO܂=O-0\ނp*Ӆ kkޯyq.!R͍¾ yqjhJqIWh3ʔM?'=SԚZ/.K1 "kr!OtkH 7+9t9kxkkso|f;UۏDnb;CT؎sL w)o3nڝPF9+_uQm}}ظj0XSīME&,S+&c @G s=g4.^40@Ċ0+\?!PsLy  [ TUu?8FZ麶ޕdEo1zDb.9uԅ lN32.N.]_o$B)l68Yg%?M &_)Eͽ?#Kv. O17,J `wKsgΝ];{6g)nz,1UvW`( Sr\|dG}^o$@i JFf|O3Ъ!o7o/MC>lK&Qƥg/>|2dߥP| gٱx}["E !}D̥K{^>Ͽð#r!_:X"iPZ٭.}! 5Q.}.]":z˄8sd/._'}~2>(!qvZB){\]?vv P~jvg5cUzc&4JĠƌt;ة;N9qCG}BC'sJ_?r KGN?0UVj[4)kBIJ@ N5,q#K46z(I}҂n·P:rя0(P|/$k8}㣹3V0(>sa|8wbCieb KSʇǘeJT,]me+!`I>I>r1܂;1\بQ-҉3ǎ=~;J~~J@ ]Zqıěn+zI3ظҤP2g@\I]ԵBIJib,! MOZ0Jä }~O ._^A/\L|9ש{ ϻxK^qwK_qC$Q,7VJ\\R1֍;`';9~vw+: ~I!~BQl98s,*Cq3,\!GzJ„бJ~JJA)9=g(?T}!+R13iBLCTrۿ;'>2@#JDN2pVrLpK6),wd$i!K*JiJm~j;oLNBiDF~ia+u"6]7ia6diAG-@]x`QUR Ld&#lMjN07`ѧrwQ (RLu( њ@1%r͢.JCe7ܓ~珟}1 *53VJg3Vہ ,I9.JwoFAvٻ(THB0LZI ohe"f2lX|7/`9ݎ Ut@+^:' 5]۱p}|#/(K^'^|KULZEi"xB@j|kv~mc 3ߞfJ@V Nk)uʧhZz:LT`9 )!ƌz30ml%ڎY(|W*߻(utb(D"L˿F5PЂ%h R Wn1f?hPHxbk{VJ|W*߻(UîFB&kZɮ)ƙkN| BVJ__:t`yj@1FoSa%$@/ U*z%Ly6dRVr^&q}!+ 뵢z# J ޘc\KF4>8|j8LiG0p^H+cc3"yWU=pp`-^}%,yxCN̔jwcKF/CƜvdpPVJ }h8M{"ڛoϯkIv=\{ƸLZ 86^RJ)FS3(Q0N!*2F9q*ήvfr CiH;~2.Uc}Ve YZ 1 Tbpp'.4/4,5M} =U YWbq,|%+TԼV2(ȸc'VP?->t\9+º5*) Z@]hS-Ν" <>}l&1^?0ppGaJJvMVJy-ȤdaKvcoL;5pZy\V qTz1*bަ}?4v\pQvl[󶟭@NGA^/9h%b|~ڍ!u6Mz%GJ #TTO Ѫ&)X׬[ . /GTRE&R>ڞ:?'=]]uax-wu>{h0Z{p#X ]]>*lb4Z %i.Jǡ4 z2>ZQ%Rjl*"uw^6hwY+Y[te+lYV?ӍX(Sa߿$(  }(2> kb:Ϡc) `KJjGP+>b-. y+%i^ ݽFɑX! S;. ]+E.hPG5WSVzٰe? ik.wqbWP^㮊8QsjƆNd QoV)^*mvGIJe$AtcML&|=f%mnk^0 6mnkQ 4ڠw (m<kͯ~W^b{kzT Z`os^nmͽuutzl0^¬ڇT;r﹈2ze@&hVa#HN$^T:lMDQ`MzJ ɜEtx).>J P=#1RYzjwI 6%lRєɾkdaj8ft9Z'1wQI2ҵ"x~\u<!l2[`MBm4ecr,2i}p,ɤN|L(6 Skre` PMgX؛9&8pq%R; p%^F[" 򆴡h C09qblP-%,ܔnN=t-Rs c2:^ܼy/e}M-O::L]O`^ -h|-csޗLm/ E%}pNǎ?s>ׂ&. <}a>q'774i ?RԤx?{`"K+j'W C~UR։9{os^]s%JGPp;wıs(e0+o?znٰd>s=F <;˝>O_|…sx86CO'/;~4; GO=x;s>ƪ$.|ąss/;1V\8TR CiIH=:v`ù\w.wh~p؉ӹϏ;y'xpo?B=rs/;Fmp1w*gI0Cy?F΀D+-8 ;zWx̉O]SV>K sW;a CçO^:u㇆/9r0s/;v'q|x!~8(ex;9V:q Ξ>y?LI|~CҡCG ps_?r9 J9%  CQ |b(:ϫ@)?׾ϒVJћ;usVy܅g@4G>*;OtJgT(Hs!*P*ao?l]#K#-Pᙈc0drGs??X Px+'b 1r$^gɟ|LU@b^({\//'Vyx& s8>~;ӝDžs^LJY\u ),g *P:]r:OLLN]KznԽݟ_Rsmg-i;s띂 7aVq(dIz9W2O_jdH<2*XO\JYɅՒ,j&F\e)ƒw2eR,atk%|e.w2e($j%6<`Q>-)t75);K탫Lnb8d[ S -2Mj,'kRI:M 2)2MJ,<[g(II9 +MX+l U+>4 S(o78@~єD+'j\e<ւSĶ4+P\\p1ǫUD$.qx\2 Z ؂Kp3jJ :]-Wnwh}pi~)ZwNWC܂%ݨdX'/Q(+}p7J0EzCJJ\eF\816$VS42+j ߭U&J LV'vZ,9JM3O\vEۭ8(Wnu\\@89w 4*]6SȭӕhۭY9 m+}p7$<[~AwQ^lL'>Tc:Rw*}p+mx9JM3 CҌ6(os>f2> I:1_郻i&ӹnJPNS!Ø4\W>ccJEY郻)&_ke0_郻iGWo4"80 ,Wn)Ja Ε=ڊj2=1J>sRF +)L-J܍:M Փ"h[p>bbӤQ`%Fo Jv<\郻!5N o9__7{B[;7aLnA& Br@(/UXi"NokaNvcram[^ %ntG@i"Np/ =.X ,6p#@i"Nq""jPOJDUD_7 1GoaibQD8O C=Y+yEgbkuϺ7o F!-8mIҎhJOP0YGC@ȣ,DYI~D_ YI`! ]ׅ:Wp:PFx @i`҄+©X`-N9b^`E,?K<"]ԈxWCVjR4d l4tZ;G,armksvܤ]sts^vUɈkr(e+P9x䘯 6<õHsJh\ XZ3R+r&"w`Vrm秠%q-Km-%=*\M}_Z%4_ Ym [pq[]x*jHvkt'mtl#[_S[4 vUPn(gzrsגcNBi]\Hcd"f/eJڀئF( :ަҕ 2>UVoG')1RdʂĻNwU|'=ғeLpj4!G()'wA)'O VRVnФKhɷMg- J<ʺ%=`<)#)ͼd6HKY0 WkPHyn'J OGŻ"3kuage aRLx_|W"AGR>4d|.G-s 3\}isˉKʧn.\b0f2q@XWrth~K%Bԁ Oe3.y_%JN9KN8D9}:bzq>N'+'.'+-kxذFC.(%ݹfhL QYRxc^9N"tHor/l.%mP3fp0KuTđDX,-vB2Q-RyFzT:2\1 \џ5Gn8oⷜբ&\-P3G5d|ibQ^i.W+*@ )fZh${ 76BP$˘ LJJ`F'Z&8E'Sײ15H,XSjEo:Gs 3ٸT 57nHLLՁⴵ̄kNҀ~}4RxI^h%`Ow3bKJ`%e;VЂx%$QLjFxXlOX!5Ϡ\͗VD[kl_v dAK("X1Ki+ͼ</ԯzKi+ɺ%Rݦ n"d'>Li<^*%%> H+)ho`-aWi -Bʅ'J]L#%M㍘ R0j6dl`A;qfwV^yW?&),nV_T SuZ ơ5pg%O^SzIjJOldY5])$-: I!/gHS20J+YQIϙ7^26 R+6o׿o_ ]\0$OuNK'JFWRV`YJC5%%R1 KI"?vT ajq-m=o&rh%FCvς%#)%r}n}I-w"7Cx6-]xZE`KWjCMn;qr ).z'J8 Z!AX֯FM|?@jGhH{)K ^WPƇoV{Wd,PWМ2ĤrL$UV?Y>8< y:k%¶@&eR8johtl~ ЖԵ7]kZ0f%ep$lڲ6۷AX4&`$-.N0N{q&mqۘĆҔ#*C]YKsJUQGfvWc8S>vv }fٸ?OR6pa N?>oDRJ~y|W{_yj.[}䷷v|bfvG4mW^4*-nV+=Ԃ6d6pJCv7&aR&onvjx;~ﶶdc;Ay*fXNlVd78 @$a%gw{߯X܇:юImتMk!s\l7opBۧP`k%fXZyL6{c8"LvG:\h#2'nݯD1yif.6|X0GlyS0ܼI.)8:űb5x1Y(WvMZ)MV)dݯDj飐 yc2n˵ u4)ՆR})( L#Z&؆%(\2X,>&VҖsM=' JDsc>/c'nT&*AAdJ(O`΅V"Jv3u"+7m4zm=hdP橉%qX/^>3Uj9d%.HFXJtCT>N'}!o%CwZJǍ z)^߄x ~>x@/[.m>r .xP/?{!]-=/U,mov\_ߏwvjbmum/j@A Y/+4^  {* zIMve<1h^I D0 <`K)&.=% & CXLD@Qx%^/) M6]d%)Z륄8W-"%k|l'HFdd+RWZG1zI5e_^2A͖.R t%Gz&ڤZvR3S/lZom?{onv6Ѧ/hOރ<)AmXӌo1jhܛG/jͽ;QSMCkzz7PǭjQϩjn^إٸqI-.)>O /JSp?pV)E_\+9ۚ{܉:JrW,5ή<^wq1gqD MUATj?܃+v|U5}KF4G@~u8/>zE[ u?C;;fTSCއCxG/)ĩ:Y.` .XI憥`BRXJP E(6pD+iq>ٯ佾qCJC Һm7~ PN +s>+lhԨi»`C)ywq~CnĀ.]h=YAJa?zih.-A)鈕Āν) {?U{]k<|AI1 -C+5`t{ [kڕuh0EE+(_[ۉdF0+Q3TW/Ka๋@=taDX#PB.aʯmԴf@q)x!" 4s&Gm D9ƢLh(%Fn&؝z݄y|? {65jd M}GMƋ^_و@^Xi/foyt5[Ap&߁|OTr3XI."Y1GQz}rսJs,<{|ec/6{5;+e[6Ъ)7WzvzuQJ@NcVMx5E>[U7ЪFwӛ(rī]EvXVD. ':s+ji|q'ZcqŧQ5]#O4+vƜ:#'h%st[切\R'{.E}7zLm޾;Ȕ6ŅNj%MR5G ]fD.~¤y(QpqKX;{d#Ă$V =cjyOJ $H^J/7`'`;rwWzLH♊J*4}dЍX+!Qj+U+9u7B!g"?߭tR|caB( 9fzXWVc(Gξz,{0J*4tk |p3]Q`>Qk*Ezu +rޥ E8+9'yCV`k T\lx?`Z;=Vr(||ٯ8ZЍt_*;$gAHS^5M m D+9 db^cGo;{5'ҁ~w`C\XT& M<"${P~+NJ60%$k2dj295M:,nSd;E U* pV2LR1`XrK ˠ#B٭"!vۯ3u `[)Y&d;E-dz;i-8j;u3>DvCEEo A66F-8RhبWsCt!؍fRR`3lJOi~%?PR֋]? _]$jQFl8ş B*W 6c% Tp5 ڋd8Rj̬-4 $BOVJ#%MZ*vGLsy31..ZDCf RIrƋ ڣYoI1jTfVWeѷH/S$5^2QA~9ѿ8F=^5:>M] kxBi1j~tRJ^B(dJK+O]1ȚJ8:¿ @ 8,v؂2HiC5s$)$%sfgknĒfRd'HDȺ;A`;k /ܯRjl9oCTTv\: CWPJ5]ׅSoP PJڞN-&,%ItN0;!.u2T䪜PCeh4 -`B2O 0E/%I;Ɨ Bw ͚zJ'+;tꡆ,Kz;^w5Xm %V`:mgj֍{{f[t)*$Kɼ)*(BUdSd%)ޛgڭUZkv #&;/KP2 2h[ ((W3ܤg󟂗 Hz))ƱUkɃP&*k:WK0hy5OU憔%K,lG))AR6Cpp6o[졥v TLp*6QUBƇir)9àzbl cW-*[͓iɥ*8bd-a&A&odx|7]BVKI`t+i'15;Xk'`GT+8JP_Қ(rPJ=Mk.sC͋Ks`eŒdR/ea˼H%9ߝ^F}d^zQ{ەv g(`'U8%Fz!̆Œ7΀jeq[p jDmꑱwRK_P1g6d+iLBHDꎍ0-$OKU_fy3}Ǝ_IwF/e@'6Ao[qZZRaCFrjEeyүy? R)C~f)m}q`Inhɰ(ɦQF- fޯ$rA+;0r%賄"ӻ:L< Ȓ& ^JscW_IBLtC R"WizhG`B izd,A7>¡1+Ad,*ac @F{$<'B'`(`KxƘ$ c i`^hrjiQKb3K 1+]c퐎S)\xJ"_hUPFƥ2B)ƙ&cb!̯dPMniKAK 3iᥴJ3}beĴ%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap5_a.png0000664000175000017500000002200713154001451017220 0ustar karbofoskarbofosPNG  IHDRqm,gAMA a cHRMz&u0`:pQ<0PLTEνï# ϦʵK)jĻ^`XzLibKGDf |dtIME  4p"IDATx}]Fbfz C֘/V-H۔z<wH=@>OƦ=B =bA&A|&YwDIjf>Ǫb+"xR?u vý=pay#xsѝ7=GS 6d͜mw_iw 8=>&#JY%|2ZE;b:8fx>Iwhe#oyp|tx D͇DŽAJ1Y:Yz&OU̲Hͣ% 6L)Ԟ(VBZ:?`E$lR%zclqڄ:Q&[tVf{_?aq>؞>xGzs&NF-TWl7jKu7TmBR:VOնh ĦRTLN,]AXER>Wn5՟~g:c\gL)g}.˴k+ub]Wݳ56R&ھ:AzKhP^P/cl:7 @aQۥzmU*eow_9~E~ v!K[^b[Lvm~1G3L##Ց㡫;#XpxLYZUHt>߭߻ާDq?zB;Oi>{ӏ뇧?=Wg}7O(LF<0{Zud(TF xL;GCGLأ7 +aUr BU[OK;<{o^rVe ñ/]uẊC ёr"шUV{ɑP>e_?oQO^{dLdat];Rx.`eu{o%l2p/SUp>t- 8fJ&C]2c1(mk#Z}ϮVQ~Cx=eJ{t5ۻD?|zV:X&Z޻w޷y=*r\ٌ.\`;ray\@Vզv^?>=]v_G>{kJ>%ڧ>UWȲ2Z `*f٪Ã`jT*70r7gaK DQ Nt̐ȑVj>ZrwowPvʹ;N^\Zw To{T$+@'0esXEV⼲w_^؛ޟ;ZeYyKLwRz-V08p]u֠bX.Z{zl cɷt3SzdXaZ%ڔ䭼bu\1:Ϭ`:*\.T9HG sCJ`bwlwFYx͇ǯ<|!;zo>eќ yhGUtf2㧿3hl$ YxL2vcjg*lfdüt}OV/޽KpHIb^.bq$5 6 %рV%v\!8 g"tڰWskЁs-d{Oإ"z(pn7t m_`G8ّsv5zXq# dpnwxɭ~-U :53E 0tflm?sYxC=;4m,}N2I ֬AHY[J~Y5dՁU:el)a2I%!.V[ShCk2n)rXG[CVZˁN4bmVӆ4 P,PT$BMs]6pi 'gVD'۬"Y9=)MClz޺dYD)(beDSkt YN(@ohj}\Ĝb_32V6ժ4%ܢjJRѵU!hKOk ipN ^ZÆbfGVI@6-YzNbX*ZP4'ɖd^iBv9V/ԭ0HVb-Xs}޵Rx&mjHAZCO6buK0. |qk)[ɟzd?~L\j:} 9&N6b%*jQ)͗>X%nF5]ܿ8[\4&k9V*g;g5pZ2ଆ\WkʠS<, p~N=hH &Ye1}Rt1-j߇x8f]BoSm [d;p,)V|JznL'VXύ)VV$kLf6"?ƫ V0 Fr.C_b=|Vʱ8f"?+9y cV>+ VՐX徺h5C˜ը }u)p_ W dju2Rn WBY2Β"G_5چIKyNԜTAl_p[mW{l1?*oGZ#&X YILU/%[rAH՝RO{~f'k V_%XW[Wz & boأ_ B1W JiiM*V1@i!eQrΨb O+bɯڬnXFe2Vf` . a djP_%vr'#(:D,*X$j"F_M ͮʞH"rJȰ}"N*m)ӊ뫜dCs9,hm4ɝ-"?(`4vݢˊ"B]b$1BJ3bA|'@H; f W,@'dԫ0)qW*[>JS2la(Ɩ T!MX]nen 6|W̚HkCbToaUB!ZF!JuRVd %eZ-Ӽz}N.RU v)U)8BJFq}`j IW53nWU2*ay %*]-lŨjP Z5Y@UZoM6 |)IJ{ 0)*JAKU96 |슰A|U"B 7w=h bՌB%LUJk d9!>M&N@j@RU:!7\ Pc:Uj*e!^9 U ^zh!H,lbœ6wAZ HvIGvo\/P}@ +7[~J8HA&؀e7ƱjUgz Xp 7ENox"}0uzqXyQ6H8]0"?׋9YY1-V1AzN NdvidЙ`b=WH00ݜ=D EƣR5s Ӛ ]oѥd.)$YPܕz30* A,P 5b րJi+ґXm%rYWX.tGMMiW5wZvYj7ʸ(6b Dה\[ڱ$کAQ|9UA+s,`l6m5x+?'l%?iM!DmTi-I =՘5x+cU3SmoEk%C,o[4E~k _@Ie]Iz^蒠Z۬{NFM P qeUJ4 ڕkz@ P#@=yhi6`϶6-nډ Hc}m0s嶏Q wsRq]rUpNyG+A]Հ'>b]I־g_kXWӯ58ך5p؋5^/ b =,qkaXC|K{X)ְoOya,F% h<-wW=w+ڛ81Ҋظb VuլP0mjި(NdKi*H;1Ҫظb HTdB$2:jPCP2Z&- }N$4EFҚYf[4a.Kff2kHvlYgky\@1 -5P3B-AiUUR[| nuAA@avp5S5֓vcy2ض-'dltJZJ.m`HP"U^+DoQՀoaA{hmNR-o6iہobbRR)@ lLbnrUKvvfh;rKXn\-T{ h2VLĭo+x-@}A"3a Bt! 774l%kˬ ߒS(ɎHSη;zPVJz@?Uªݧ*K&9 %pnlU𺑡`YRmfDTYglɄU"y! UYke U=+e,A(U精ڶ,Blױ,!!!:A@*[&aUV-SbGR&ƖXZEH1"nvv,s*4lI!-K%|5-Nr6ɸ)8-$uNHVdCH _%׺QInɊ# !5M$ZvP+ėzl̀&ٓbCӀT2&Fb*9K8 w7@FaA@ohaa.v'Vȶ=Th7!vӥ+ W{tArVsZ_'ӳ MmŰp:mJWv6{63 a4{þ.=.jIeGml=BJz )xl?緻 j)˙_Un"jDX>,px~$__ypY$_b_b [qXcV\}+.@X=k ,5wK%]bŲpavV\~XnۯrNcEϱraϱr+kϱr+khZ=okUVk[V!>ckskϱSj\U38b(_5Ejza+^|=z+k) ؈B}56bW\;F./Nkz]>buz |2%ɹb$(9\WX/^/^"_]FQ..gWX/^^U_=qe}uWW/X^f^_T6zp}|2e dR*ե}5 p_ W/UKj^ W0}5 p_@V.ajzr_] W0}Y徺a}u)p_ W dR*ե}5 p_ W/UKj^ W0}5 p_@V.ajzr_] W0}Y徺a}u)՗V#SK +0ZwO6jV*V3Q!UUՅ:@kYenIWXz^_M0m d/45':wY_Uq*[.g*LkPiՄf՗yWR^ZB0'J*]1vY1pv~Un$rsZZSj nn@1)ң8W媖aShBSS ªa#_W$nplD`V6 SH[7?r:$wFY6 *"ΥՏt"W+An(0}"楝Ik'e#־J- H= Dl"J(onU&i%~[Wyzw`8I*zEK'5W+z _?ƺlŴzv=@b''VWߩ$X=̯(jE}u" VbTnjʹ,9շjjd#chu%\Xc?NWmp.U.օx*kpL'b 9y\tOܘb=7\V~7GŨ`%X ~ ʪO=-/|Uj~?}oxꬆr^7ŭM;'sˆY_ҷ譀@FKl}٦}VINĥ%|_GU?VӸm"tb櫧OOs}`׾gZ"*oVRj,dgӭ4tQ7 KSNF* URTC ^;=@zʍ̺nXV'ȐV7XnřUپJ@L3Po:I|uB|bj*z`% *n:*8sWU[$ƲeJ0G Lw LVrP6Qz ,Yɩ]fr86:pQ!־QzhK4\3-8&38֯WUC8v:c0?;yQMo3+ qZmڮLc%]d#c'j(4bȯРSS; N9SB؈IvVN3>'QnDIr;}\gI b= O` bO|_?bOs!b=G~uIA3dV1<1'^w\s\ƒU.V_"Bԧ"Yq_b= sF}hWsF}hWsF}hWsꬢ>+9X#?9y #E1ҿBg%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/addurl5.png0000664000175000017500000001651313154001450017236 0ustar karbofoskarbofosPNG  IHDR^P YgAMA a cHRMz&u0`:pQ<PLTEε)!!RRssk3l4bKGDatIME  4p0IDATx]׆r%Vѫ[1 ۷l{I@lL!Q  oص8B|>b~d;oof RH>+䷰Qw[anP_KB4ŀvQ6f)/7Vpqzk6IF 67Uq3~"$$x9`rH6ZY$[b~߳ }5 nJQ 8aI?X]~WgucB.Dt~EpD.i Xě^<}΍cpt9U2M KnSa9V&fΆ*`ԩV1n,07*)|qP3>8;d zt[ P vn M=uvrcOaNdOҵ'ʼnu/ ?ua::]wVu>D;HڇH@]Tt[B Ƽ9Sǂ3LfNy^/vH´T:YoG6ZvVtGzst 8PǞڽ]S0 iۙpbFM{DRl7ӨGQYbxIez[ö6IؿB;:b\a6uy5ù)6KC4.3G ݑuXG7ocs;ޖ^;kG۱~[7Ӵ߆ , "]g}/Tg•=𚲦rHWVJHѭ]!Ldm`ՁXY}KĭcG_8]7@~ Czj`<4X=DF_Pu.o[@Զi Z"i6G{Kb1hy7u;G˘ c2Ӆ4cMG~提S>1j|w)&eƍQ3Mh`Q1%k̇+4#hRX8 .FonBxMBh&ᵮE)DG0 $*K8S{~e䳔O׉4yK_=LMpe]"jq|~1Vk.T Lr+YS"CyI&ILj!*%MYy0џ qІ xm`R?IQAe"8ɫ8~K@~Nz+O!  R29)G*~C֟3D:`_*(1㥴?C^)r`?a-LxԴ4Aܡ s )-LԕW6\VUv)5ZTq{Gmt=4MyZjPQyƣǡ1+fGåxl@E&KD]/v'Z[?^oF?"ݷa[nL{5:uM粔ɉX{eաHQTK}t8%E} ˂#@[.~v3R+{_ >tSd8{Njns baŅΎ3->E{qk7~^0_}Sm5ɟ"~$?/@6$~[Z~TVoMsvƅÁ 8f~|o֛R4_Fvr> Em_xpI{ fm?M.gQ68Ds<&:?%B o\4f_Ļl]u~~S~gRS "%SK+D2ءAJ7I2JwktYV좁0mP]Ҡ\$u!}:7ɏy b?$@A:~A`J6v f^|@mpX](e$)‚rh֜xjx{otI.}[{C}ooi߃:8` &=u1ޠ,(AZ r˲2 A/)__KzDx"\1"k>#ޖ»Ew08J'A/ fhWwzI~ckL~}BԛI$Si^7+k< dޘi[~{w%{|:p%s;S~#A="SƇS9c(~෤ůlvU+>/Bhz|7z.=^ߙmo F=~>Lj??/3=xtvV>7#Τ4,' Lp8mnB@ w`;"/$\УFv Rh,T S<,Y~߸{0mpungm pAooƽ_lg[-ZE8T:^Ww*"Md$ )Ԓ1 vm ;ζNѷCgI^)w)U}|t''`G=ư'O~zWxpތ6/4JЌ:^]sM v%{V1u;ma$YV>/hn;#{oDYNiA0;FJx鋔m+ώ3G0y`?KoMUtc%[6$Gٖk[*=-i-`47Nk~q{M}BV[ڭW딁]鯀 E\:: ny+B3^lY)~KFw)?IjoojHJ^oڽˠ}R? ޘ;R? Ej>xsn% ‚& icO/C@Os>J*791X-:E\c~M&!Vޅ~;NЧXY ǽC7F-BЇ,y/É~?~8op~o[[Ϫ[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~7 q Wg*,eN."Ͼo|7o;uvsDѹn.|,NB1/ qȊڃiyLnBk6Tp) z,H n ЃF6Bc_A j,[W[ؚm~VD%l'KB(c Fݵ*ëԊ>z$**¶- šwa +7ܣ*zK 9x6 \Nxc>x[P&VM}hwkOK"qCN #>(۫ o_RFO%R,hN,HQq*"q5?o/:b6ˍ$ @:&%(cDš.ZP'ٳb~PvwP+*X(Jl@a!%xBx q$ ""8X+hqeKcH"O]1(kT_PW0U7/UD}ﯿ=Tj~+~?qEI5$M)~/X x?~KL`^K|0z2ὂ#_cuK| G/?JW~45~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z~[Z_7/~77W׫BqKԯ1?|q9ZB$&WG\\9x5ɳ`7DY3&K&3 :.LotIu_K{1wί;B&<wff XP3={%\3H_3!w7lU!kS\> Y @0jbm'2i \m4^үm|cB(Ը_Y %Kcn2] ;Qk0aᥞ1i$#jJ~UkQ\l/ɝ^ Vcwپq u3MJd,|C&\rf[n[Cao=Mĺc-&!a]רy܉2q\_9k=?to6k$Ns> n uS|0x6߶v bv&Bb1w\1Sҧ1q5puf`J26|9-6hs 1;|&H$7T)]w&_ dۏR_gkxe;1Я%:xΛ #[Z&lɉaC4EƗ]/ $xtj%l͟j_ֿ =3~ǁ]ůݘܟ9{wd>?~L248⾅?~8mp6lגfe˅t~uOXɗoC4yCiuԁ3#ggv#6Fg4f#1lXXr܅?v9!KtM&LȲ6F[WGJɎ ~u,uS/`(J2C 'oLfj;TņnI u[ɲR Xe,Ij*=7hI U]r+gl,IIEH&\׼j`@C 58py <9QXg_7|=}?vzA[3> HX1J/ǻ Qݓ,+)Jb@{U|^_~'ܑz/#J*2udo+>8v%C|$ z}A mQdC(G1\Fs?߿h>w` SQ=3H&!]̠S5p_wwTxg/Ӹ;F}yQ_Jic}w?Ar}A??=^rnѾ{W /hv@lIwE)F>rv Koxr˷zMw" wok] |u+S+W՗/;7|þ/\@;z0Wv}r@Ƿ=bwߧ= y[O[`|2{;p%Boo%`o=2p|r_{迍:5zŧwywzC.˛^K0QC{lO_d]q,<=={} A/W_ ,˿wu]`#n_Aם? Vpaw3VConGv*9W_`t=/|W9ߓ{]y{}zew 8vl8ַ{g/ g7pFp,߹9p/a \RG*pOO-Gg{9Pi? S/CeO'+9˧柯;O?W|eDoPN"mJR +@Ҫ>o_V[S?&y-C Ds Ofi*9xeMwgb?kD'-+cdf35ϹmD2&$3Ք5Ta<"@iVLuLrȑrȖW,O ˹o-֦HKvY$m͂iݲ(BtBh(e̒USC9*ëEKG f]"УRn ]ݲUemWڦڈ&ZKa@땚K6Ep,1Co$u]"jfj\խ|i&V<6X[ukZt68JiL650c62w1:]}ƭ f:&E<-.E-0][>=QO]b.*tҮ.:͛" pT00B |OJA β[ølAuh e $j Ͳf* T(2:K()0'>$\Lf MFC|95 !-qW2XD̗~1O5UQEdXqDdIڴ:;*ي1%,}A hDz2agfm,ga !EG#&.$@.Vց*y\ zN(bc"BHMז%o:x],_B\,ьKa .YN;̨:/#\" 2+՜RC$m>qЅ'o>qU-+-CIn,qMJgJ $@Z~Us 4|5]nq^\OPA1[#UA+^ARo_!xcv1/;wτ7_6=d]ķ^>l6*N(>ecݔ.A\fY)6레r~ lWjԋdWm1m 4uQȨϳgP-] jC4\M#]SO-_ Gm^d ?}E^tվZW7gya 4sV'x!6.OD%\ t՛Ywj6!y=SjE}?2> y.5ޮ?yݑ[ոɲA˲qG7_>y^֚n%2 F2ށRpLMh4Bw5{zVXI)peH -Ţ 35JUlP"Tld,ڠzp_Zmt ,c4MaڅGVK޷7{h\C aOU K8h9 ̴깯Nܻ)n=tm<0fZs:S=5m.XjL[,PAz`&i¡Y`0gBn O\m2U h~ d`Bh+7@i&ʹHhZYӈUQMPNbKczfaΦNS^0^{uج%Rt@$>H`'fuup]D;G* 0[zY aP5(\}v;M]~_ 5  0V2׭ ;hn%[Q"}q] M4};`C=$]?hak2tqP5 幚_jx?_ّENϱw7ߊ̗%= rmѿ}"ykоh{k(}n7"\6֛ ');G0֭.4\;zg*|XD2h}-P¬{hDf)@V'\PGϊ#o'BKA=jYbo7,Pp])KW\ .X!K-XYV jֺ-c~)L#>~ [p@ 2Ÿ':4]]-6l߱8{AWO93'Z;Ow3EfbI˹C_j ucɧلj/&v9Hp_zR/L`zD=z@Cdl~uXk?Yϡo' ={>~Dr?ȌWyG>7#Ɂ]|U*VR-ߌia#Ñ|{Qo~Bs֬evlVi+U$|fl7iJݥ/^}Rǐ˹l)fӴYY뛖J`ލfx˫FY%OU4^ ;D|BO݀ N JO?߻cNq2+ӿ|;o~Ƀ yp_)3DʵWыo!X{{9@i4.R*k AZs?jO}>r轂 9sSF? Ϳ̵pi܀~MQ:%{2'K|u§R=y%HAϗ=B:O> 1O\ujvqzAg?1~PyZٕ^wkl"P'ν$3S߻xB/Eߋv}$i},K˻lmzY^ǮX.;o+Prk,Y#[X<|'=@3;n 6lPY ?Ɉ`w~@>Ɂn yH, Bzwފ#n&{Ǧ6ɂ"{>H |ć1пF+i/y=w e@cY>ߗsr?5\sG?t;c*Ŷo*Idc{{#4=xz8h=ӺImBL2zwɘ̘A3 2qQ;eHiq9ǵ9^[)Ewc0 KeQ Koq;)3IyX[wzc]eX*kA=7]"IJ<7XV.$4DhmE+ŗq~HQYebKIC`|v+bV7L'ւyk9]TLhm0dB[,<轧&I{nh&K:Oyfi>]%^ڔ-oE3&l~7#MϽ- C͜o`e=@zzZEįOo>5Qq2½ [lfJ ihz.=I ",㙗01-ґP貪Y%{zӓķ)29A΁׽/()F $u o%w_R]3vYs`86Ui+ ?_9wr?5\sG*SU>?_9wr?5\sG*SU>?%Dlj:IqXOJi1џL$Ii>^%~D1t5vǧg=?)h~~HY!׿KOJM2J%Ӿ-*:KEҳwꃮ4"T֢12ιJo 5ԻXLr-d.l#g8!jȥ I5,w!K^Υ3SbRzD5D4C_-?/j5ΥTs.%Zb{>׺tF6uV8Kݽi:IJ^gS[9{>Rf7,y}རq %ӆ(#?9D.7bBؽAx,k.)'{9& RO4Cri!6Z:%]9 6F٤Z9Z1^߁%BHIj:Vsxk^ɥ./kGO2>I)ڒ0K/IS\ɔx&RGCRx H!NėG-H)\ꐖΤW+zMT iߵ`:cˮ%إgݜBRx&̉GI+Mz%j4:^F-r QHdRQ!e-z{'3鸁)G^B+ސK[Eʁ?ȥ` rCD1˥ΥtiG#$P%M4"aB+0{q\41 4ynu@Ǿ{4GIy4iيh"*ޖ۪-7).=M\**^iKm&by4D(AbSj n0`8 }P ջͭU?Er.vK}A=މo43kӴyT15W|(s:h9xj̱<$<4>mG7*kyT?xyqt*9[ 2`[\ y6Bw* FMAL 0SkD !dyVʊWR:+^>Li34ƁL^>-5\}(y߆Ge^N%km&] ":::::::::::::::::5"5eӍm^fVܫ5|ݼtRmK2nMH h%R?EWy{n |{#/i5a/!:_rF<URK>}gqF>/mH5ӆwK{*ILRCnݚU&^4=_#<2G^4eH^HM!6j{k\I4#R#YRY鏧1EiCś~_SEۮM5q<;# UM !ڿp&FTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Б(U !-!y@TcOT1 ! U'H+ l !]QHJ2 y]-g5a1%qv#ϳ;^OW7 G={l@R<#- ߰39bDhmx\* -Al"OZoxlE]"%*"5EEP; ݂45}K_v?Ei]2osiІLʥeLșEZ5-{GҥZ\C.=$E i^&b$Z[&E"ot r ]GW H״aSUݣPʟ[JHw%,% .e= m7y>pJ:::::}L:q)>GhfR}SRuRuRT#=K( RURԎ]fGT -kKu!}̑oH_wD| HT^ }j5޴?'ȥk#-|&Uo7.*W"OLNiI.ީ^21@zzyy&=BR/m5 i'*^Hj# AK:|{|L{xX7":/ U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' U' UOͲMBr+o' Uߨ+*jÏ${<Ւ\Z4xV~h^8sˎďFg?I[GZ>'3Iu { r\m-m5$I]= A[ HiH+ĨSR-;(~-7F;jrbd7ٮL7h7HHֆ&^&1PW&HEȐ/ CHӢHn3w" ^-ߚDH$ȗkjHM߈z^~-"ms}oUW&OE-%hZeH}]+j$j8Ҵ`ϣ x7&4 H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H Hթ 'dv5nߵ'Q_xZH}OH'ppppp\0jױhg6RSAڈKZOttKztDj۹KSS^K_V_RqRti v&.[=ҚH\L\ͻԄ"2zG="A*@ H{%Gm9l]jڐwkf5捌K5riBm:2eo5*bZG[ x+ Sxw7-R=]k;HSt.ݵ40Kw!L]k{H)\km-$\kʍK9nX˥~M/l߇zgH7.PvÛj H=ח :,fD@z`6KA Hi S =L># U' U' U' U' U' U' U' U'tg]7K |䮓%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_g2.png0000664000175000017500000001271313154001451017317 0ustar karbofoskarbofosPNG  IHDR]VgAMA a cHRMz&u0`:pQ<PLTEνޥk!!)19BJRZcks{{11BJcc1Μc1{11RR111c111Μc11c11cc1c11cczbKGDHtIME  4p IDATx CH)VQLϮ3;==6Unխ I49yG0@"38:zs>d5PxNdL<9ѰFr,ٹJU$NvtNvv RNv"t';s9Yj&9Ln)u[ndLwq3k.v`rUE:)Px**Xa2 r5ňf?9 "a<p{&R$ O~2)? KfBBx4paWK;O/K7]SX\V3ynfdq`A@Ц< wAQ$#}S,_ -'&W Z84N3D(\8T]<8;GƄCbAY kK&6,o\]Z( Nj (I,!<&' }νkOJ0f3~V|1~]APl.tFQ8(NCFB1yaAGRLD4a مBb%6\hM*E Ŕ^ t`hdVAdKVYqfM4t4Ö%sh<\pa5'2_d%%;G'%y0y_ N?C2\8q}.d2o!4= ?K,&!hpQ3m<v'ˤj&YhG+Zq* ER u @#LF3U؀rCap%K߳KM< 'E1P)he \'>TVO߸5c#q[.ݭ312$u$?o(խ!ʚL>3|;#䠳 asbDレLbk]4dh3NbÆHO@)`< ,Mβ^FMCt?]Qp@$'9 gy?C@`2'W5JK'4㚹Xqz\yv=PF'zsZa\ú 6)6KMA{I1 .\C49ӯF33F 3"VWn> 8~"j{1GjrF (ӥi43XfpNVy0 MۛY^dy1iuUh\_>Skk@b=c)je*GjqJ~Q3dq&\! 'f?pG÷b̞ 9l#{f,uJq{I5MN8Ӡ<:lфC2-dciQqwgt[G_i KG%>hµI@#3NGimĒYp %r:n–Ƀhw]$'ɸHIjɰI(Y}02uф]֬P+*MV"ɨ7.gM?OK؉gLc #j41l(4M0pQ&:&{DhJ?=#igg2E(X+9Y7YqPcB遆l~p&ĚhrE'Iu2IhH?}Qnt5QSF\kޜQ>{Q7tq{(<5iH¨ 14gJiW"ϸ ԻB[:ϸXR wu.h2qJBc4BQS 2TӂkII1gπ@ d@@ d@@ d@@ d@@ d@@ d@@ d@@ d@cH׻'@=%@GL=Td4> cM3I7S ?[>o^ HM"p!~<9nI gW`翥?+h7z .Bu3saWHΗծ}5}њT22A(% 8*d T2oWb^<Ä& hS ˚_ڱ<ԑ>Mhy&i@с3b&ϨMQhU7Qaҵ;&m*=<πt3 ]M]U! QgtY sڛ&PC F 2 ] 2 ] 2 ] 2 ] 2 ] 2 ] 2 ] 2 ] 2 ] 2 ] UiG.ʼy.k- %tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap4_a.png0000664000175000017500000005337513154001450017232 0ustar karbofoskarbofosPNG  IHDRogAMA a cHRMz&u0`:pQ<0PLTEνʵ ⳦νJ&njs`]QybKGDHtIME  4pUIDATx}h+/UzJ/ǥzy~p;L=̃o~xyUnǩz6Z!- % v ;;GC-+̇7A?c ߡo<|f:Eֽv2Sn3I|!v:|wg;o:n["1>d%Ȁ̆$ lLJwaDz$L*@O;w }trtW>r?3?{L;l [d/`˥ģsnZΰ1ۮem3 Lc daǖ"է\.GXb->[st9:zmlKW?epf&Df۝[8cؑtz9n[_eՌ4д_> {g⮯iEXq$UMsR8:3 ~7:xkg{w[wn;nʏw??nm|Iѐޑ#&ik,bomn@o8V"է"zb4G7;;{ɽw~Ulŏί㷷[[o?~wo~u;?'ajb1%Fؚ6^RZJaU#ǡ3s]?~l6I}׷̈lqlNvwRܲE34ǁ!\ԢKF5$"ѢX h k? +~W?kl{>*"Mc+/n2-2)f43jϤmZҐ֠cO 1ڦH3Yj~L#(eDȬXZ-q7Gև Jo?boz^2lh| _V0_J sCϊq뾽,93ickz^uStҸQhtv1bh;}qK@%`F nܵoػˬmv\:u!sŎ]y=xl6t&췜= EJzXrqA2b4e&j^=@jA8LFR)Ju|HўiE{-ͳJzHJ\98w_lE%b$Vp9f<X؊7ƅboƇ9a|9~? _,{] l}˹=`Os?|[9_?kk[+8~0r|p*/? S+9dsgu_ sqގlN-AV\ecˊW eGqv9:c+Bv+ފrњLb4 x7wt [QV5_[QV# 1VA#we<8J:#HGgz(+wyCt]PT.]5ʋ']%E1[QXqt3L_\QiRZMח.Pey%x@S^|D6],obxm,i_Nl/XhUk&3tVɷ W^zg1DoG!ˋM\a%]h'6PZLxN՞`5-1l(SR\^[^$xxE\O7XʋWA;õ$.ן1dyh])ҫU%H%+bD+b/ÖETd 8b.X .NS?ׂ .BpOrl.gg'u˝l+Y.uzWb{LN,B0 &y^8A Ц7lkX|ZmuPEV \_81NQ@ ~18 _3ڋ)) S"?[_`Q~G!EL‰E.pQ$ʛ]^|ND<o(tFy*/XQ)= %я~;s.>[Q+ƽP$w쟴~Qg#J_K_EJ?wQEN-~!S$Fg(J}*/>Q-~|>Me.=[C>B>s:go bhj(RUx [ߥP#%6 bA%v&6\GpĝAaO>X(ƕN}ҳCwADJ+R7bً$Nh`ۄ#ޒX)؊^F3E&duJY%I|bU@h-Qk [Q,b+=)b!>^KF;x4FqAPuUDհG7֯+BS9)Py|lhB@1$ցh.'{\7:13)?i튙( 7V./HܗF j}pύc.8F.G~tUj㕓ͪԝ!:bH1+J ^Tè(t!eI=D*#|P?SaQz\+V^͂IeI4hJ!hX[P+P3`DEŸJHaUM5,/Bo.ouM.e"bl-%Ltf؊B;0^H^>,GB}>Qrدt*#;m[|BFZq*A.T$8/B8w Uz:_dc NÖIn'E[\d ϭ: V"wrhFuAUZQ│ W^{@١ R!Gx8xZQ&ID@rTLHJ+Z9SDBih.m N6{6w4l=+гZ!]Gotge!0Uw?@׳ I;8Ѷ[>kB=c.y$xq"[1Έ/ފqQ!ˋ5 .Vb4׽O`e£|+͞0hk)S繲teBpePE8Baq‹KRU?>\X4C_*xY 'E*b E`\UxǶx! kU9^{:e8̰43Kcw&q~6b˭o8^D1狗6LEaŘᯤK~T|.x 1^c{:~b|x/b|G93E75o|&Ӗo!/Z$np]X%9&VĪEw54Ҋtqu H)|V=]Vj-w:m"G(q-Ņ;d[(-^3FYZg򳾟gML\$^` BJ8*^Ne(:./ZZDN=;yᏁSG DhSn@-ʣ}E<"F>Yɳ !bt@x!T.&//~G ?l`=ԻKt؊Cbd/XْcݭK;$m__`Z~ʋ`kQ' dj"dN{EҿSZxdiJFNrJ>9- kő]Q_#[K#~Z_< R+3Bt=V hvN2-i\xR>FSZ m= [iȨ`Cn9HVƤn,b\;HET쪉㘒Pv9q"Q#I6Z H1YO^=,ƏygޅԢ7]"T1/r˪BwOa.$ N|! IC,+c:w%JJWҡ"TN奅"IE 8iUg-ZRDO+E$gK PdnIVD7Y‰ӚIi_o{ k.EU*evyYP磝ЃEd)ޟg4Xn+"X\Ǣ"S_i ay12+Oq:!=ځE Ix*^L|auU*'jĊ@:hj'p#s;̊h7Ec"|'&js{%ई턵̧>[̬'T_؊Xb;E{E`-4o(:x /]flEh[Oy3Ü8]8KpWʝ^μ)LDbl)4r;g^:MuV8FWrOr{ ;>)%VsH,rr~YI-qZ#]D%\ҁQ3+8]^9Hۿ~RS^*Bb7Hc$ԓ(E‡!1 y^Zs=ɓ=nd.[h^sd9_B1A9bhY68k1+t OiA|& ѼfYk#qS|ި4ԧmJ$GcfȩA2ef%Gnňr>R_nJ;E#7k_|Ř/(V @:3>3@֪S;H]EJivѡw}׍ dmyR/@<9֟: 3gO| 䋓Ai$憎4S͈_!Hf .dЦgl΃JO"A _ [^$|1E 5NO_AaMx"1hE`E2/ĵ~J=!HmefzG>a L-B!ˋ_PS}rК/|EIJ_n^x{DEAjte,WK4em+ڵxbEC_1^V9"v |׻ta:*€/R'6[HxExoLYsR J\b-2/L)_l)~O5⋊ k-hBAkaZ|Q~Emtz?~M{Pb{8]X`ZEL.X=U@|'NJ2{TD9]^<^V!Z|QB/m|gʔ*J:a.!O\ uUXxt0eMQVirф/JS~Sv$= _؛:I:gC/V _$G"aꡘJΪ}/;~(Kiȴ0/9\$i'>2鳏9ڱd=^HgOh%4݌0ITT$?{S|{zE/^:/L-ݱ៴#k\L_Mb/'gېc'di=/Ů/Iٖ m&в+ !羳"EURT(SE8,-n1bpch&1, ٙY2 ɗb(0݆>4`촃SL g%F3 kdg8#1ᄈ 0ot|q8scŘ}w [Gb=ìbKe|%FHBԚSb.EH"]v1yo96Vq59ހ/Bxm|1ԕ&mi%(gE1(-ob>(F_+aEa|n$'@to(_d|E@b/*:勇Q'CЭkA;#j~s w((軟}Z|1=R) TH% _ň/6l^/~y AT*xiWzxľѼ|,6|8mbC~^XR`-/dy)âd|7b{%eEnq_4"a:/s(ID$EVH+A/Š1բɮE0I&19/vH"K|\>[ 狋u Nu5X']zx oy'0씖^5k l T`E/~LE:_$|bEJi +&z|b]گFUZZ.]A]#|eY:e9S ]O/RO//NQ"6BQuV2aNxbB;UKNŲέ~$vVڥ&9B~sR o7t/. _ [!|V w.O{p8ʲ⤈7LK9@)Z] &G9S0 H)2dr=I!dy;B2粣E\vI~:Dϥ11kl8Ecv 6*ۇHz;w |^|і_}ƹmpd|?V8&C1_%e/N.zU$F\vrߤg kmҹ;XbuvvP۾֏hz1:=b>vx;ODWNўNl ň>8Qo)_ l`!(+mxK?6.#9mmzUHRφf I}&?WUDY+ZC?R?zLX|,_/Fh.G3P.EQX2bjJJkT=e1r=x1իYE/|1FHbYe|Q˂Ln_?NUq XT'%Fcc!||\T2!ውvY|\$uTy1*N FEhE#G/R!rE/]B`ь/BR{̯+F<4uq<$V4cj}XѮE|/Y_EN6_|RSvh֏Y?5,bFX#>bQy|.؊eo~,1R-8h/!|q94z!Q/A|91'y<$rUfuUޏ*#IM#~2*]"}$N0Y)"AiYd}A$BjL"A0 0KD3|vkz$I(ɡ3>Op*#göA6v`/ mc97$hmR˸&ua_{ի qć=krޜ3; &/ֵòq\VS%P|Q%U_dI_sEıU/1]?i Fn9v8/qƮ$_)FFs( i\@Pm$ዣlh+KѐVx$ϱ9a^h߹ |F1.ËSݟ/ bL7KD[YX'9 #F;ۃfQvxVH|+>;_̺BmǚC}Pw FsY}F;c 0:q"#IGf/*3/멎"hmVZf4lA=6TXMk҂$5P-?c4}{>9tGf/N[b_Iܐ])!+LC|PBwP6uo `YW{aC>Ɏ m4О #{fV$|=m|Q_tGYY%5{__\z6ŵ _ kЋrF5FO"5AY-I爗Pr8Xhj}' c]h3"p|[Wy2UVi+vN}1c8geY#uy+HV굘׊(qi WjEhܯ+8F33Z1>E_5jN/rńhêXka8>XyGWڣ:|IKJc+[hIgO ed.+19o /V|qh;|xn*`5W.vqKO3E)t^ jjZ|oL㋐d ydrD3-=@-ϴyr`[%Wdw~jpŗ|"_=_ծ2O~H"rݗs %dݧtcxuA f8DK>/v9r3/(PaÈsv#tZ gf^3#xbo8BZE)_| CY֏b<9`_>Em|,ۘ$2& ڐQk֐m d|\=C~dҢa2(0+~zwbJ΂/`-%ŸnEaoCu_T.^b^6Q]RX&1-}Y'O_l&/שy\Ō?_N _*y!%Px5qtimEH(bm˕!|QRiˁ/HSk_#x/Ex,]9.m/{ƚ_4m#i֮E/~6"B֏.E*'3X( v9.a:5$B}x]f(FHM7xhŬ}ʛM.1CR?z;䋇]=vz+ _,""YN{ 0hiqpc-".]D"a'"l9׏zgRX_];|Oz'qlbh!JM7ƣOqoCgXȓѭz-/@LV:TaE0"߅'@QJ#~;5_̚|'bDVE;_\3Y)+ER'gWbF(y !m 3#m h|X_~|}/@+VF+3B<ҤVy>H##c?AyNNq%H"o_(_x5jmMkJfS4bTyd֥'t0nO.htCg!WC([::勐$ґn~-[kZxI^5K3~!]Rz @ePb̾Kⷆ_nnII%bk}( 4h ,HjWyx&t30Fw\ _ECSOAG<=NjA+__&F,=1VaV% F&!FhVo! tB/cdb DύSϿś),_|`D-IYcu iV`h G'=1Qu8k/^"j# GyH./=MIYCGAf^pJAbV|Q+Fђ4Ov/J^.9X2Pb/=-[+hQl]cw( [Qj&W}Dޣ$Nm|MQk/FEdH)t.-_L-\N?_G)_w!XOIҏ4b=b#br1#t㈗*I3p;!4]xg9EG6-Rx$YީE/z/sS=_[\h//P_KFG% Ii̕bpzXPXD'xw| N5]8 ]媬B&ɺ@.`c|(Xô8:]/FU.+勗z3B/u1X!pFbx%&-:r5RSz.d?>ۣ3\_4.'kt.ٺZ-$d^wqpPJ. HO%}DG_b8qဴX͌/"lJa~t8iTQM!-%q\ Y@6 z\(^,U"Sz0s2.wU(W)uVsO_zOQ?z""iq0#871l.rS8ikEzy}qU^;ዚl*.0l_>wh]hN1Cc HvUO>8]}lwPX$ 9t_tOm7I #f0y2=J ?Š0xx`>?;HWFPbtubt, cEo : T$$dܺRzIh1 _OG_m_×_k1fGx},zwl_|q3k_t'2~3| BxCB1XGt9zR?Z|ho4]BM̽\G/2kdJL =nkKb e-x~9/tOH{/t/MhOq^MQH}|Y|O%1m@H8]b5囒.vO7HPҫn y~֏/?/Zi!#ԯaF/:E|1P(=/JJQeU:bIKWiNm'6V xMPUnyD .r \VD~4$wyuj+˄/*+Iw6mH|~4rBb{6%c/>:ދp?QΫZO%"XVr#\b]b_t9Kc\^w~duN _VO6gŞ"Ӆad #z}p; ك5~M-B׋m[bHGfP_K7!QLg,#ce\/V`y gQq?aY|g/v]u\IO<OimGh%"PI: cHˌGg=FhQph"ˣ}J:8EO/%V\v4mrء|Q/%E'&_\Rpy]V{clXD5]V?]ҡB>?_{wYG;K%N1Be %-7?uZO֒egzlŚ/C^2 .ڀˋ.׏$~g5_AOs`4]Ră~v,+l_O&( $@Fc)%}@!_58pULD^$aaLX8m8+,e(_|{bw_s("ɣ}]xX dΖʻ^c&tJm:A$I\__kvȨ"cΪn")u280Uڶ0ə^?#`37w||#(#9X!\G9#=w<>{{AOo21׏Fxt3ý@_}9h1j8M$Fn8^쓼ܱd;p+<ׯ(8 a(mxL1a9*2*@_/ڴN8J{a`~KRϱ=-d>rZ*ǂ7@|&ܻ˛ab8&I4#~^=" m׿l1:Ȋ!]E%ǧWB׊QིzI/"Y|kFB/B" ғ$zBU e4=mmU!R ^H _$Gj}RSZcj+JʪX4r oB7\B(xjE2J.Oi{ i䍼,ikF[UUE>AĤbIK0_}~v %SdnI9PZQ5bOE;䚋/W_lۦ"//tB뽵ڢT_O=rr˗< ]gIR=8K8ubx+#ðy8^h\^ x?(PNg%]ZGB޿?_׏Zh>!/ŌЦ%'~t %|\ʷV^!N'( *]$n^rxXWy1+?8=H>ZZ_;udAI7cŞ"텛EbE⡘X T\&,@|SJk\q0Šˀ/RH9=ڧPq1bT]PBظl@DG7R&_/ iO͘T(B.cAB7֔Do#h6pn/r$QEcV"|/*=ҿ$ pEyM7PWVh? x"({_u|qE斕ڊx{1HE/a|_<4/H˗ԛsRMJV^GEȘQ/|D _4ZKu\kSXKʾF./Vy :ErbBy:]!G L3EiK6:MҿaY7o2ӃԲ⺶] c:Wef }8nC\e3&Fۯ.bHÖ!]FrblR0/Έut1^/_&}Ęu)bh֭Af-r%+I2#֕^hh r5r kmK^Bg|-us+MEcտa5jĺiVɈ0jEVͬf_߶᧰"]ow/XwTc4x(m%ͨp6f]"~ Fk"Y_*9%\ۨ-(ǔ|c>!i)0F/!_c?n%c 2NJ/ȺEu~֡PԼʆL _T.S2'•SzX}Ch\NZd˫BAo]cf:/vJ++h\ DXS"ם4G3Xe/_̿ac/]W7n:KPHNY\RgX;q2 sOFoA1Ii/A(IkGJ┐FyXh/Z@b=_dvbYYJ7x\l=Q(Z0H$`L+}b4,X SOZ^7dssq/JBr/ _G䋴obH(2* ͸]"iiyQyBh<}_4ch LJyޅdJSNSL-+}*j=sq/-Űڌ/ꦦm6m x 1>."^jO+ҍk8qP$k]n9SVd%jEYH;>ADQu~g2-2qϺ'KtV ,{MbPؗj1tPXFx(kX5rXzQfQܯjjV(ׄ* RzmA1۱j5uvP.je5U9T/s|ZEX94wy%I :˖ϊIcY?:1iҗxߪDɌ&i񤼑M/RIUX2)$Z<"b5 NX;wo7*U'_tVocNU3"d'6q.=iDDS[ /RFWGy؊b\%a;rX}6U;ڼ 49tt~=ǹҁa|׏{M&Q3&nTS7IEdx-`cwHk,@Ily8_|e_ ź' #'d֦Y>Z}w_,OF[,o{0ӋяN0_ Ϻ'iZ!.-o+N#F_+Jxr=.$ԔEHb Q_s_ )_S:B|(] @+DوקLO|_ |1u3x":&Zޭ$_T|Ůb/k 4uSX4k)0%cR8-8˽\ٗ/6i{ulEя/RI0QK8|gE|؝ލ;/;d| 0E٤[|1oJn@3 C#/Z!MLV`5՟cԅ@ /̺ ,;9f-koÛy%LhvGˆ<*M:30s/߇pQutrYw Xw`]˝bXx0eDEǝXq<:ݾ?1pw} u'ʛ.Ơs .Βux1Fb.Μu\/1zXhs>ob0Ӝϛϥ v2~vVcq*vt0,9^C@I#7xfE"v g(Kͣb =d^:Y\I)źͷv`'׃o,> Zq0 F0 k˺o$Zt06LE k˺oZ06LE7 k˺oZ06LE kяu߆úoØZe3-P?9L4GT%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_d7.png0000664000175000017500000001310013154001451017310 0ustar karbofoskarbofosPNG  IHDRFIQgAMA a cHRMz&u0`:pQ<PLTEνޥk!!)19BJRZcks{{11BJcc1Μc1{11RR111c111Μc11c11cc1c11cczbKGDHtIME  4pIDATx흋c6ƭdȃ<An{?,Hd0gcCF8TJLU,g`cSU:񓝹~bNNv:o ?]KO.d+?庶3Nv&ӍDqۙOEMpvdrDS?5ӽYs@P)YiXq bx,0AN%<+lG;?0>+J30}vuj痫in8OBH47i/ a٠u o(nFINH.4Ռ "@Io"PwLbLs`D-yڠ #ӳ::idI6WԞ̢ԣ_˵dYXܠ(q1y.֠s™N=ՙX=8. qFşKۢjCBpyI8MӐ.PmXڋcjM-x^rώK @mrcb=ۀj ֤tBbхCSnSה"T=G|ZSzCmEj.10'.*Z$wʓˋ,U RgҙCjL嗙K[s-yB==ҺFvϳuwn642KQGdwDmO]k|z9JiIKM(76\7,=w]QihKo1B:{iGymr:eKE-ҿ7Hu RwcpHЦFOQm̻CA"d֢5E(djw/1?r-kKmbDĦ!Z.=r}ꡆtA]hJRuA M7߀RȌ-Z'b>׺t6uV8KVg)ŰfGΞOFIe@c)WЏƴw1cg1iK!卝vS:ܨx}ԅt =bRO4Aqi!ֶ5utkqlj:jfXC6@Ljgsj87K0.ue}"3"s n]_҂MG+7XxgS|@gާ--}u@D7܀K x\ѥUu q7כyqZtpBC>#Z.x}龽Bmhх)äeIXAL2Pl/xH[Iy}s:*/ °4 NX W5W~ycJ]4e=S#\ŢbVS_ΧvGxƋd.R_k"x"ېH :9wxT@ d~tQ_S(60&#gLJa /!AʫR]RÂNXHZBYQԤ"H7Ckx9w^(4 a4:gbGlz8Gwqy~)0SnKRmJIE'y$B!ygK!-jiKH 05?#1@Ɯ'.xI[ C11K֘214vdBg%hRjk$u.`1 VʀQ=Q@%[ *ARHI"'E*NT8)RqRHI"'E*NT8)RqRTDj҃ml/m[Sλ+.ǖeE5z r)=J&E7q} |?xMKBGАg} j гpL4CjS i|T5I_6ٌUH+LR[AדGnMŠIVEW+?qbHtXEf;:H{ז~zt8H}C Rպ ݋WEKAP]O:|;|=k!ȋ;x>MlW"U8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NTg[I~x@-˕긥|C)RqZUpQJYDrJ67=hI[ZnЯ? PmM]?) eq4HHwHM/t$.mK+E]--5pn*jÂ`'(Jn'R-+X:#NT84f`Z5ɪLxm4ɠҍwM.J+$VX۟fUGg]B}󵏈"-o$ )VxXϏ!P` Ċ>\XD #0P嫋a8(ekMyoe;"߶"?`&;y:na=%1&[Uƛ}ϖgStVY7!JGHOF{~Dz~0*QU!Lio!C;m5Rҁu9a-RW7AJB7H=n5`FF~غ oirHBZzɝ"%;_Դg"?ːS<]Wr DT8)Rq4iΓ&g>TVkԴs@~iR2yF/T|$r2}ω~(]%eg*hiNGylbiѝH_nHӻ'8}R8${, 5D^$O,=4y}Fڰ-BUDmi4呵e4eTU~iGըސn.Eڷ"}DM5u#1HI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"'E*NT8)RqRHI"㣭O'Azt|yx{B.}c Rui'HեiOKӞ ]B_?toov:Htz9E w>\j^+>!lRlU]vi0{ .lY=4`OHҦ5cڿKMx+4 +R 7bH V)d+vV#%L{tiC7+K&[eWi/e hnm)eOȗ eY׌7ӚH;exZ=Rd5޷Su[kkHԥo 5Gfm Vեo- u}5K9г ,xK~CfH%y;~~_ȴR(6%RHHI"'E*NT8)RqRHI"'E*NT,xRMFUor]%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_g.png0000664000175000017500000000222413154001451017231 0ustar karbofoskarbofosPNG  IHDRt egAMA a cHRMz&u0`:pQ<PLTEνkgebKGDHtIME  4pIDATx r:PmVy:ME?&/s24rkz6煡:c=϶[Ү|E[[c.>]cH)q}8nj10.dc<<;|O86<8Nwu*/Cgw:\c^bb1'c)옆t(ß8/~c\\cϙ[C=Ƙ_Eq 3ƺRc<4Nس}؎)|nLYgG1ȡ~N)WP+s]`9Yb{c{0Uq(}OW4KԳ>R.<Թ͊$U>=.(~$"3vǘ[BʭtB:RJ3j=lW79\]ck˓mgSimS6e1NZjSKe*S) i9mT.޷v<4o %qBycfl^y?rh uZӔn֢imyJ7YnƘIQ+c7˧DictZ+c|M- '1c- =hǑu1<997;nsc՞>7dJ]ޱ˙Tn(cQ:mcJ<~9\=|FF9bKGDHtIME  4p IDATx훿s6Wf&7ҩu.u $Jn9503)2i\e4W{b)B8xK4䦩vlcͳWՎlͳ}y#lr96#fspl1/EnVz3`[qt[ۺ(I(>#TZ gaJ̆P ueViYS4v TP}.Rjx u.( ayrZ-vCא:m`:(Mqx$@6SdD}!LS"j9T4tT3WT 5~R+a%K̠oOGǶW,Enw$ ; _p|_N؉+z`:#T+2].Z(PDb2$i'BRb JT.K'/~/qEx۫63! T!uFTgJVy (5JcNVOPjg! RF<{P%<*:ݣ_Z!"]LM'bHg)ZtTUJ*@*#%U!I@JEsvP~TDSR+)U-S#*OHK K3.)WĊz% 0?=:#UI2N?k[{ԫ{ =5.c*XUieH50\:Bl᱘ǘ.1uy EVnd!9A {HT'#xnAЀzyp #tr TVUT#*p EJ t:?S@?SH eV%T+| %J>TSJ%N˜eJc"1L]gGݖeSJ?!* CN!5QBzmTSt?d*UI TUVo7^WſJ4S1Q=B%TTT5 "Lչ+Uj4S懘ڗTeR!@Ϩ6P!,ΪjTI%=T**׉*PkչVT"ZŧZS*V~LgTͤ*'XrFuC}= b=f'U&TcuJrO 7VMU攪әj􌊠ua5M*~wZNqWԚJrooR7LeԨ7a[B* *NQ wt;_?AUk*4)DlW "U_`^E֪umՐT!Q%#f@q[Pg~"gsTſFTRELUAdn;wgyҊyT_~Ҫ~+SI΢LKR EDjfZpb#U%'kꟿiGGE;VZR XUjJ-`U*UxVC}4hh1u,7<&ԐKbw}:ґgz< N_/6͟pjUB=8P4S%VVc*|3dYo5Ѷ#Mt?5ix8L^A,w4-|Yl쁏k)3!mo_Z̊~1AS XT^)l\SKfG&zk1K>T XK"P*aD48܉Ըgq=M+~xkEE\ Q!b_bAy1gC"4,È0J^@ .P;vR^{8K.6Eԕ)I ."Pb U^¬o)҅sjOW*WȻ͸*){BMTu\^*}ES1Q1xPQwbjN,T*CUюj^A!rP~.*YYMPfdRge_RG@?p15AghJMUqBMNR;VsMwZҐp ,zXQM+huu;1݆!4x=3R{  4ɚhBC+N'RCPkRc;IA>RPDCM)wuHciͬ`pJvb (U]2J Jߥ𔪖®5i #SP*!`sS[RsݘJPcVSaT %NL -^Fn\@L+vov1-,)i>$ fhz(ORLW쯶YB阪rAuTcW޺R55O$eb?Ơu*3Z͟H(Ue37Gr8T:+5S*:&bcr*ˌ'bTj棕ʽ>Jmc̘jT*X#DT`:jsJ5ˆ"S2 oqO;T33/gc_TǾSJJ}Gu~9JJ}5⑳ɦzf 1Z+Zj J-`R+XUj1US XUj1US XUj1US XUj1US XUj1US XUj1U0ST-%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/backblue.png0000664000175000017500000001547013154001450017447 0ustar karbofoskarbofosPNG  IHDRU>gAMA a cHRMz&u0`:pQ<bKGDTtIME  4p@IDATx]?kmKۺk Adц4OF9eϼƃdCqgX[7=:[Z+"1Ɯq{ח/a@¦1 !Ѭ/`H2H^D h?oM ޱfkMHmJ$6j"@E$DAE,myZaD̯Yk'6^D`2!$ ΋_V}7k6v%/IȠl{Me L#Ib4oN{q/7^ox(^RU =2@}iB{ Yq]+(}懠ϸ=v񇝝f&ܾF'j<kóóg#to^^!Ni;=JqWe'aDχQQ޶s9hř0rCF8mX^p6Gȏ \ш֎iILSOe~_~z- {L&`F O..U)%jyT(D@t}4|{Ig^^;j흓""w]fX4%qtڌ\YjIg( hP]ϓ#n. ŝɸ_٭q/9TYkT9^Mn ݛw*7Rw5Cf/g duFgT.;RU-Ǹ$@YvtQ*]t8"ID:`xg.Ngu&9xl_*U@@SM4u6+K5L tC['X(p'bz}a@"W]?Q3d> 2ƺx%ViV pm]ȒlxwU?gUWq1{dIÚ׮#cMegV8&0bJ0 hҎJZֈf`1^>Qȿc22LoEqn,[_%̕ \1bsm:ko~}ð֍͙՝v<9#dtHx]KZU9X:c ֲ~ucݾGnk5ux" za(n-S1(Gה5ijU#Kwl?7.9:zGiW#PGOIqsdS" m߶>vDYJRꗞ~GiQ莌?h>YSp`\_V@ۺ癓Z(A0k- ~ 8ש::X>8Or_qBs:@ ;xDzP/*IoL_S&*^U@~_q_*^nvZDLyzn$ hc_jtւCku[uKo+O̭ňJUH"Տ :0I 8~$F+lTJZSln} m,BLFU?}Agpϩ\7VWogg7Kk__c=a|78ɓH0gl6E'"cd^XjFΰD/ڳ+ Qy!6Ohn*bV{#jdCfk~md?Q9$ы LizFQͤĥ2 I ?~C#ؘ 3̂# ޷Z0l YQ j<-NT_H~i2=2]܍>!wb Qפּel2F-tXdm<՚˳@vwy&X'aL]E"&cC' ]}1nk}(d:쏻"Ѽbᡐyܡ1?$ܰ \MF>dT ק%:{=œQ 5eD(վ)kw5kf|im_[#._rSysnU-Uu3j'訪YUvNxE \P%"3I fJJ í_ K'"܀Z7ҧ8cW_~[Zo?a-8ֲW/_'y;[' \8ϼnxV2XZG"ߎL \yu_O4kqj<Ʃʼn,Vk-^wyu:Zo:8a>y4/ɜ͹`ɼ:L\opX\:|8u; KuEwQ>F,69 MA% e ΑYR0U0#^E+(Csg EvS:]ۆSũ0}d tk ˕Uūy Jo&d{ | xv:G[*֎L"?nvy7~Tͫsv]ky%OKą]aj Ӡ;n5*=%$53Y1Fډ ,lyk̴FC3'ƑKmz7 X5 UNsE{(:ShƩ@Kĸƺس!TLӋZg4 2exGJ9qAU}O<EK3^üj'_d|TC04%z zݑQ8w;بk.3{f_FCc0f(Gq1JpSy\+6:Lj8To^#H"վ 3} ťfu 2}\3G杯=s,fv^jɓ 4#d1"Ro;f 'DĐǎ-cߑ!=&GO.AF!݃Q޴#"(w&{Xw"mwY׬0Qcd;Ϊ% Qa閣 wrw>a6Y)ɄvTe{^.w}dQ -GXxnos<DZVz[x^߱|yrhaI:8v X u︝o7ȵ:GL٧ƣW"g4 ߌ"U_;5c$E~nu_dX >a|?z[,z.5Vovm[ˇXpη_gހ)=K|.)ѧz D3)ܪ_4f]kR䆣BDf~ΐ\՟tv7d}ͮW%=bk_#N=;yQ[wujsY5zK!r6>ݲʸ,{߉rU79V (yIF Ҭ {%Se ncla5𓗠Mݓf{쎌.uScj.Cv]"v,[QU>D4ŕk{CH;DSrf[j{N$V XSD k8cؚٯDݡ&ʂ%tUujI?VzG(FRBLl^P|MOXL^^=9^D&bLC­(| gkؚۙ~CE]mh#cĩ<S>,2=vWڂH=[f qy1f`~\<%?5 1kxғn]bb{FkN-7kD_;S!p<+½D,%p/J~M]O gMs'[|MdJgJӋ}Ze)e53fJdfx$d 9W^xϐ"Xۏ6˸jK~\Szu# xao*Lo)MJ^맻RD\>WN܅|O\eo]PHx]R~LZױJц{IBysuS.mKMoa^3+.f×U[[FC7D/$V{>!ݓ]ss[Vzy>NUhm-bw=OC.ݔSLV-m>o]gSyi HpnRq=26=u 5Y)Fmw+\3Yrt}Yhmӌ ?>I+< "es/ U;=/%=vچgѾ%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/httrack.png0000664000175000017500000001073513154001450017336 0ustar karbofoskarbofosPNG  IHDRotgAMA a cHRMz&u0`:pQ<ZPLTE̙̙̙̙̙f̙ff3ffffffff33ffffffff3f̙ff3f33f3ff33BtRNS@fbKGDHtIME  4p vpAguq}^IDATx\r۸IN6 _f'Txmxi.)bfi5ί^/\4|y4^'ۑ?M.cE85#A 񿿝 a2W|dtr EXa^V#>Oܻq ߚM܉Z_ ?G9w^kg10vlhyH,3y{5sۂ c '=V4 `S"!9p!*ͶY3xPޱ?Y(@!C7XcD:1 k'^ (. T95H .{B-ZY5.İ>LHS΄+<W )n{bb=`#N~R$J]q!6^EB<1&6nk3 WO('A8rv,MWf!'zA(êqhJ H-E|ku?HZ;~e. +r%9#aYY\0,&D^"Q4EJ񹁈}R ޞ$@l+CqWwۑYpd`clQ̈́ R{ AM@hqHB瑌ÏǾI&$F,} ~g}7"bVl_+-kR,7rG.ЩCW1!hupqĉ$*nsdUmY3[4Fb-.$lW/DBS#&8"=Jr4HeL/\'?D&Ee;iWgNB1mHTGeuQf'GAJt|!D|r*%tR'bKs*59FEb|lcbj$n~Ek Gl&9kc{3[ /(Wy#=yD'օ%TuDtb[] Є?0!8LY!V;DJ/PWw(MLn Q%q \6"(yEЂGAK-N80Q[S )JuT=dH@[MM Ql#D*.g9Na>#a ani1D nc;t" LǹɃ8F|H @t;0XW_'0&HOmy aoB@Iؔ/<%Ð$u59D{VⴚshGe3085~eçEgNG#x&c렁+a,8S[tI(<ɱ%a:Z6t^9[OG:RPO1 =DŽ z RwRVX@oF4y&gÿk1Q,]&VDfmsǓ^'Fj lYda& Ҵ>=,º3wcb,X߾eVA"q¹;8zG 5/=j[1t +Ŗ/B.{Pd_3p FݚPL1QIi,31ⵦDO9m8V194 EGcjDO' ;B3+Fj[̦qxd{:AV381)r-cH~4Yl3 iq.H8͹!l9` R-X"!Fzwdt]&lS=_~%)d : \%#&H٣ qLwV-M;Hؘ-'װe,:Y7Zp:Aci^ K5}@\S产rkWMYa=Y^K,` & ŵ\#qu]&]%l3bh],rV~8= @I⽟˫ʴxxkȠ/RM,b?ڤc,^Bj'J'tFcQKNg0TV)z)I jJ^w+iB<I[FAv~ HjO:ld %b]ZJNPX^):a;̕t,cbGQW {!Nni0z{{̡f@f-]V>uд`;WNA,O=3gk>'N*rs Ҡ1_LKn<~<8P SߊMP^$Yw:غǢJ.S)P#NpV^QK:0´j+$ڣ(xܱuKO ]|-P[emDVמ8?82^y]9/hM#0&78tm[9?yv)hbx%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/addurl1.png0000664000175000017500000001633613154001450017235 0ustar karbofoskarbofosPNG  IHDR-"gAMA a cHRMz&u0`:pQ<PLTEνƵBBBB9&bKGDatIME  4pIDATx]Kw⺲.<&,iHȔG؞O++S[s:]8[㇌U*ɲ L-hO. 7>ͧ/?j~|T?exp44F|C/]i4I"iLMei wÉT +N롐CMRCͲH S!,7n$xp5vKC#+\(x2vJ7O㗥\ݿ)"c64f C"&-b -8DSpb6SXI2B m(J\\`5^)F}3"8N}5>ZZKJ*@URB!pPSfWokݗ\f8vh,Gȵ>MLZɣtL8bɆjtT &Kua9vC{,e^SP4 ̒|I>eBVƣZcC%H+%e /1ؼÏ_#!0k&̕)%146ql3)p|%X %}Yi>dc)(_'VDe?ͷQ'k>Z*7t?^˅) bA,C nP)uNw_ɵPxmD {'Y<{CtZl#)PgbM]%Og.Ms$r'lgO0as—#gWDGUrZ%ʦMkF lR]g$ףY{.'bX[syaN`"&C5"c$fC6OfsnT1jI4Y/ɵM/Tl"ޱKE<[_ںL|y!!=|Nho5Ue6H< =NW><#66 ]OlSx6]vG::6-\T,ߨD?HNU΂Yyח/?6sgrX>Wh87VW Z*\_h}ύY˂W^opN-KS ~y2mGݑ_  XJфPB=&g m)K8hXb}ZOSY-53Ho_ V=K58 WA $ Z  A [V E.HZ"8 oYփ]l"F>籚3#<,Q>,y,-uf1Mh?mlpyEVtJ=>Qڟ@gҟ[aG=џe'Jzi70kBVeBr){6zXk!iA9HK7β;V&)&^1K!/Nz=}xu4|R!k"d-pIkkk/\y~ ym?d\bt)EzWS1_WH2'%}~)sH +,#VOIO PaN^U'8Yӂ$P0~g4c_Vʛفh+#6N03;J@I_.%BII ekKUBma;pU]`"Q-*O+/5@s0/BUz5Ow+w{pE/F̺1 @!_u%,҇80 |<~O|!8TUQ>>Tx}&7q-#AN 9ѮV&p7V]kʉWC)ǯ]E ,m2˴&R5K0RdF%XuU⿈ 4Kf7HFT:ϛA_MՉV/ 8ʡTsEjS'\דZBh_9Ulj ~4J L|Gb Gm~!VcP  051=_ג!p*9;lȯZx5i+;HaW[6@ב4X2)[a+u*ͯme2+ PKPQ5HjV/uB9V)*o.2cCj(/]$z _[ri,__j,>__7xW 51Q5Wʪ]DJ"JѬWcIqUfM~5b QyQM!${U6TP=՘=,_dXA&՘A,_hBeEsUj_d|/*WB ![i7vW_9UŵϸF7_e40yѿ`8.kEWy r=5:Z `wSM__Ai'N Kn-raqUPqR*CW~J ]vB*=lbuK*a3=}CM~zaRO5PYUۿP*?>?pV K2u7iӻNtJX W=~5D/9h '@PaV_@'鮟4q9B|RwhGḮB N+L3&ؾ$ݵBJ΀<<ʺD3um_R Y{#O|VŭXms1/'|ǡ O=MahWI!lҐ2!0 @l9&[A'ܬRW>6jP%~*UETA1l}JtIt*zNA7g bb 3AL4輙5ůJV$.<\lxadbBh s,M& NA( ?w vSRYsу+<%0z}Go( =$`'C9 x|1*vCQ:`rhSxJrSc: l_[+@˵r LN4C'%AN+uڌR@=k/z9mwĿO>1^ h6A'KŲ' ي2R]i1!v7$a[.9Jߺq2`Km7 7\Ah:Raz$}M5^/E~ņ_Dz0_ s[߁2ヱr2eѠ?\|w=[, ~ bVT嗍ʮ*tG6KYRmjOMi VM.32-:,p&?,/t jKD {q{ɉMq{z,.bXb/0a-T9+= ȼjH j$A,%xq )ˢb4uˮBK3Qp0GJG_XS RF/$Qj3"¦-f8)|K;2\Q4/]%p K ]w*2_Ň.!#\@ 8r'UMWʓdCW,z|z,wŧ܂VWޝDV+ zF~}lC'k^|RRO멗b_9W\_ŇEv4NCm/T7¯owU ļU1툤"W. GW1WW Ghr*Bop; B Ȕ ޢn*`_+4%ʌ9_uX{>pݥ:p"/ױ*Љ\q7n0^m?C'*+? .[do~#__W=~eA :hnu"Vl#vr񺫐#m~), +ӯc"ka~{e~ UM n_[u4`¯ u"/S XBy`n_spk\j|~yZ޶yBj_é t9@C[v+8v%sx>BK.ï } >9\ 8P"X[v3 kgvܽ8X0?(rf}j+25ʎ"X77:N.Qt 3$3KT&`;A7.SU\s?qϪC{ϯ,I~%?VD?Vu<!G(M(t8 9lu@B8'Xq*Nf:T:򾀼㿲~Q/%!YKߛ򔚁R_/_Ib\-M#/rag~"_ %0& Jg. a21V |KN]~!['))cTx̢hmrok6JLJ8ٔ5`r^/ j4):pV"_g7eN6Uy`uYڬ85H iC|2D=<$c*`z!/#јᔳC3ؕ!b;;\v9zո'/_w&?j^cNYy 7;&h2}Hǯ cqչ!\f}ݵ}QjFLV;7R,$eUA]ɥ2 ͫu̙ hYy Ůůuo5-BZ-;jo:?HM%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_e.png0000664000175000017500000000471513154001451017236 0ustar karbofoskarbofosPNG  IHDR?gAMA a cHRMz&u0`:pQ<PLTEνk"PbKGDHtIME  4pIDATxrqT9@T7E-!0`l3 q$Az̈́ۻ1ʱ3zh !j6E+3+#ך$VHq 镄 HjHƮIwǚrРDi7umMFbcO-MۖnwWe_~x,AsGk-W)FR:;LQcKuKh=>+"|i5xC9URz&Ŵ$-[J[SVrΥ %oYsEϣvXi&0h)ӱe%tSϟou^L!N7b>6H BG[W>JZuZ O]7mR|+I =?#:y1[SxhN>I[MIqwx:kt޹dl/edt\5ϗFKKtRDt\SK.))[ԭ-ںݟKװmqbDO|͓}I]}=ۍob}jY[}WOr:Oaw:z~9t}.͎ŭ΋ Ĝku,^Iq)r^LyTyBU>y...퍻5a΋]g?R_k~wHq2O?&~Izξ6ŋ) 8E(/s<-A'LLtJJ3f8N)Z,yp'&KS癣|")694E`/73鵉~cIOыbh֦lky% u3;2CS۳*ӽYҽKJQω'jcQ;׎ů_Wo/ZuM<𜠓)殦mM[Weo<[toԢTˆ4];8Ni žUM~}#OZ裧8[,S]}).KmJA Gm]0sO=j6J x{nwO )>O1F)jiukl՘˴kj0 ;ks9ib.:l֎:c.vS,.TI#yabG7_sg}viȓ݃ZQE[()2 l-5jƆHqB). zJG \95cnGl~׌Ue%MĜ` lf,^0_3b3efkBݢ9/.Sͣ>ZG>sne)`xh/)Hy_u jƶ0kwq`dt !gsKb6lCgҗ= ʝt6MG"b.éGAuJ1؏-z"-z`Xl}0EnS>/Vq^qy~1]{֌HԌmቚ1{>00{=:r×4b'!ktx/O5c'{X3H$>擏0cCwjB5Q)Ң;5c' ֭ Ed5cz^,Zfu{}twKc"}tC?dcoi1oNDFHd` Ԍm{Kt'fl.OS \|q5c)65ci`3_S]5>V*2濺oSH:>N?XJw}6bNQa00H{$ŪO9*LQnD~ӹI1r^\>;kB\,ѡ6YfnchynJRB5bHx{%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_b.png0000664000175000017500000000566513154001451017240 0ustar karbofoskarbofosPNG  IHDR?gAMA a cHRMz&u0`:pQ<PLTEνkgebKGDHtIME  4p IDATx 8j/P$ 0{3e,J.ew(/Ic寅742sm?6jѦak1ooϟ+Xڈo74kբ㶾âh btt_IǶøYtΝnxs-ZGJ,;&p|CoX]-v[XDDIHʓ&X9\ݢopXmk}iע5u1Y~]¹؍dm[Zx$#-zmѻ۹uq#2zw;OO;hQ,jE 5]8ɬwga;,NR~!31 {2cvPC\-ʌaqNLeLLTX tH9퍁^tf̤D A.)Efbl۸ϙ$ᰐp/xiYaR_Q(3cƤsѼ[43cuqh.~\lf̔r]/ctgf2{k 2.`%5XԀ̘d4YSBfL2c~L4j=$oϿ?)yJܕMs[ 30$ qu?oE 2hc82c~9=5 BV̤J:]{8uf,$^y1\Ib OxXlXgҩ *mL:ΤŇu)x\h,Pjʙb-?baE#=2cct.bL1*Hu\9+d%e[nVE 5X,l)Ȍ}!31 . pef١ۚZ{9@vŶfReUf,.όY٣,̌5uqmfPt`mk3c:O3[ό-(-̌[ =Xڐr0@vŦFUW X\;1`Q,jE 5YSBfL2c\sÝ9UWq+yRR{%yr IŢE[%N!I1m8FTH+Q!|ӎŦW%2V6y}kr 2#cX\L]⟌. p!XTA<`Q,jE 5? aq 2cp_Ȍi@fL< T?y%2g>HV"6.>j? ż*saٯ߮q%2 e&.deXNŏ) kIXVFmCLF_u1,W[$ٯ%C(ۤ۵.79{Ls1m=jbRm΢.r],_/E9؞E?F2FmaE}TCvՋE 5X`Q81Z} `6yOhf22ٺi=[ ?8'GJQ辍yY;} -ZjE|yU/?"F']zŦ}dM[6* ?pUuEw`eyAPo?bKi`*ُR%>HOѾ/ԣKKgc߁uqأE;xu;./'qa=SX6mr_܀=gѿ},5X[ .Xd̻V 1 Ȍipۓ#H_ޫ3cqi9[ߨ+2zf%-˪XWY2c1leh<1̩yɌl3նsn!qSgr,aG_|2c^^RbLsQsxz.6p$ToR40J{zfzGfKѦ=̌ټmИ`GR<_2c6dʌlXyct~G%ܯln), `Q,jE 1 Ȍi 3PܹV ȭjڑs*6v˹\bMA6Uz[@,lzєMO1v% nllR6l6[ >\&qf~,N#oO<ѢcqT/ }`jˑU/VyZ}_s 38rj^cSoa1K^GRWzwIvò,U٢A5,zWoe@oѶУZ,#g>)M3S~eXmbMe>|n,jE 5-R6]"e5?^hʦ`?/%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_d8.png0000664000175000017500000000523113154001451017317 0ustar karbofoskarbofosPNG  IHDR gAMA a cHRMz&u0`:pQ<PLTEεޔ{J+8'bKGD-tIME  4p IDATx[(!p ߫3kf]ӽ&r[4M/(jWTrK< RjHІ#}^QzNZ3J46n^ Ʌ⍥/IAb8ojЗ#=Ѡ`i/r@o,`c(@ ːrkly-DŽ(6l JphBq@6f =(hF q-k90} 58 yx=H$\;[->؂0>ݯLPZ@>P9[o_Hm8hLV~G5U8puPTTTTTTTTTTTTTTTTTTT4E]E:|Gp/5;cvpk Տ3q!1e.11aÚ^~'2gC99o7޶FZʰ}ڟ4-ǁi5BW0oD ltq28$O9Utx]rhk];{[r\U#.Z©bOL$Q8 ˄M {0)TY$r$8)%ADj}F:ǴK\f^z82Vki^vV-߉/':Q5I?8ɎѷJqK/JGtE9\!=-9- neaCp=&sn?zUνԷ6s*CUUlmo/;4 /PѺ-ǏCmn9L9v[-UYulkf6bLcDH xc>bf|W? ݚJNBN hXMu~Hw9˃2঳uBshdž:l,]㠺`k|sPT6|Mݸj;qe,iWBi]>v8JhNPQámwۇ]r7 >T/丷CUyE}_~Q틃 qTw68ˁT [/hoXEᎆJi8,#98\_q9㏽p0~q;H!y"MᚡV`ǻ_sf1I9|e0=an0,NJ|p\Jvɟ )Ȁa`>p" y0,ζ[$?70aMC7iENǸuJ3@=CecRcq(heR)$䰄Dv I9D9t#8:Nz^Zxֱ,a F@Fq@=ފhF0_2 ΐ1QX{73y(M @)8T@N 9BY3q<ӵ_"ާ*pu#èpaz* ¡paJ '0~ssspĢL]pFojCpz=?<%p@ߊ=qxZs8矣gNE5is`#s 9K"g"{8:D94OCvOÍ9 MK8>I@Erf*z0Vzႇ@6/@we9xapH&OY.mh):5_<9(Z(4R8<$Ѽ(,KMR8؇7ucY?ĻemxJ6} ?~RJa8g@R҇M8F͑1 |qZ$UJqPm4P/8.{po^X0}r͎mzm,5EM $/t_gAa9:COzpV^l=] cCaЊpW](**^7 m6gO~{p9j՞EMp29=n!;J ݞK^pwqo;!@a%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_j.png0000664000175000017500000000543613154001451017244 0ustar karbofoskarbofosPNG  IHDRt egAMA a cHRMz&u0`:pQ<PLTEνkA*bKGDHtIME  4p IDATx r@zhUyplઊiVKqH眩x8A7Ѝs{WD6W[?+i76۟ 9Ʀ=+im44?|H;p]>4m*O{Wu4lCmLmH|ZE_Zn^+0TRyH{; **7>k-WL msPZ,vr6]\xFR:Ӯ2$il*k3Vc.=?vW;^Ȯg4N?n<;zM U^V|W^kuW{I#K&oCRnHR)]}K*Jw>oGqvmP|륡^ˆr\|! F0k"t{E`:LclP&fIZVј^/={N8&VumןG1G3=F}o3t3S2S|[#BK;S$x6~-*6F!7twaqgNNx-veUifUy)6qv[jt5M)\ SSF{]JyYDrHeјdc<<'q<ԨhƋ~<ш50rE_k88^^McL^V"-n5*ph* 㝠}c ס=Ƙ^ҠCi!<.Z$? w꿗7јk!k>Q!7ИB8Lft"l cXC8BA=h i1#4W[c>f:գqDύF[gj\znnzX4/l@#O5ƿX4~Rb/߳9[ӣ`,N 'bJdUGn.:SԒO;?(l9@]wq%cȉ,@=c.?DNhX{E Oј ԸC@CC$P{ş{Dr ѸuC]Ke(b<[EMR5ؙ'ݏ .w3YhnaиԏrnKoҏeRwf3uXϏ2SKgw92N}>?Swx5ޙs!OxWhDݟDž1TƺVT .uGK+QKc-M[_c~h 0@oE){=0hBl,q(]aL%quRub +0|T%TO LJߊoS vɹ,nֺcg;ZGuՠܲjov~g>.VtI9P>1Z[b<ج;ѸOc8(/h)]Y^D7VS7;@le_)okJX>_;m^ŸR$m_wR$b-im]Ǹ"W/U9cN;W٣1W)B/cxce.ˏ^:WǤpO֧cbBU 1V!*oB*17ӨoB}cK?3r+~-CEڲeGc,a틎1ݒ gNX=ݧnG ;b1D"Rs;1Wbl˖Mj^l+g=cj V}Lֱz +[rei7'Ʈ::1o֕겱1|؊cyo:s=ƲMb*?ދW)|O^@L1W0JTzQ^U5J"J-"ka5"қEQY&Fh+ҊX9y${P#QP7ԩjxPTُjb%^ZECu86(k=c;hB1fU,g6oFZtUc)bl'ӱ7FYo HIŸ-̷#p7ƾ(4 N-cۛdc? N=9Ʃڱ13cc~0C㱱яNpcYp7Z#L-y.{ad-kzv*d2w8g;mje~o[_yt#7qS(<o>~cuo]ј:ehtي|S[>(ۗ@lӜ*OǏAw1-Uџ>VY;upZbl;ϭ?qmd6cRyGq5n\EM?4gCK|Ls`ȘЇ+c&RjQJ cd@q6qZ7X1Ɛy1QVSs@F_zc|;=tcc(8J.e7F[Sg1k1Pݢuީq?;6搈e3u 8fu gUe*yl1c|~niwir9o/s, iUZwѯ7nKQX:}XoYӛn:o%F^=ƈnc+A&r*ݍz׆[9\-89Ƹاլ#do!Kn1/{1ˍFjb"FKQg9FyT1;uc: C)fJb53uߩ3yG~@xOWz@y%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/snap9_d5.png0000664000175000017500000001377513154001451017330 0ustar karbofoskarbofosPNG  IHDRFIQgAMA a cHRMz&u0`:pQ<PLTEνޥk!!)19BJRZcks{{11BJcc1Μc1{11RR111c111Μc11c11cc1c11cczbKGDHtIME  4p=IDATx c8AB ̱{}JG$!W*츪D\f>'?+.H/Ofh8Sk<9覞ntkoA#?en23c-j汙TvsLh'3;bs{5e楁'rX/Wbq,Ei ^\)j7,WDst7@yvz@qa#剈I1N4֞fn*NIfݳHӿ?,~ܐ^ ;0G#op8ާ7ȥhM_oۚ5zGm: a^h G@"jt NQt]jo M(7jސlz0uP!駟\/h痁\;P + 5Hv!j .5&k؜n-JxrڦA%{5ئy^d6;vm)̉K+,jaN;E*M5"U̥Ek׿IHv65Ҧg jC0i,es5kYWӞn$#ԒGQgRx4!0}$Q zk]`'kϐ"ME^YNID#TE}0CthRڧ֨&AڻCA6dƢ5u8_1Px)ԐG?b~d[ۖMC54mzd 0C mS Д)kKgkgbRG h_RkK!3vm)<;gƥ i\zcLi/֦&;|d7BM//Ny?|ཇ~ 4( cߏ[Q[:)oĄ F.3נ>@[&H]R®61e14C:ZRkRlS Yzb1}˒#G8I)5)< KjJ%nL'v4ߘ!;16A !wtL>=j@GRT[^]XQC[np ӕjε`Ѕs镥iVSY[j+ÄxttGr^l{#uaI!; )eHIƻt}z-E^\7f-m  7tƠ-Gׇmup]Zba} u(  ϛRS] w0!E]P=r黟=NxOcte } hh.Ӕ7D,@'z4ɓ#MM3آh2ކ:Րߴ7).$.EEhKMK: {zG-&6ѫ@ T h;80@t>LwD.=%iLG;gО x:1ѿŦG:c%,K/i[j]j.d.=r7Mi ښoaFY}/ua죇_Zi4|aER3ɐlz01Й)jK˥_R6:y!  Re_T`R ߪZJ yMj=:jJYtdqBC옾;u]חK (Dz,6}0 U2wu)"hGċ22Ʋ}R%e^ߜʋ0f* +2`d͖o]1.}yi#}Ǣb֕,S_֧vGh:14^זg_AOTnBzXG#13X [Acz {?ݸ/})F.&#gJa>BWy˥1d~K K24!R_o@ ocw ~dmFG5S !j<QVx0X18veY^]+ #핺5[<ʇ#g엢 C14/5UIApx]}Z(5" UyQ50$E mp)qtN5,~hĸcntg-iL wi[;2W3^[4)55[\}Hy0]_w=Qǣ3jԳŃUUR<x|H"Qp0}~i8vFKH0EmFcޥa>w?h^_UsBv~^']ӣ^#/Q06?{j dU2%U6Bҋ41 {V t%pg4T/E iQU"wNAk^sc ;*Хd"3q)0}> ]4eGA!ȭ ý)67#-uTVт %񄂅NWuM5 6!=&mW=N -CT|[jTz B~~_vC07${eUfARx"RRzxn{WU5=ITUqTӓR/G)g|ODȆXq\]H.RAV<)9q)0N+)^3 S m iNizb: i]xRA Ri$2^P Rq[UR e'AN); Rvbtҽ n%i3ajw* W=/l`w &F7R^tipŲ},Q_4\R $V nۖV< xfe,"1iU5#:@bhs[iR H/``wHQ.U)x-= $Uԥk3Fһg#ݻ); 5:֐W鏅+4Vi1{(9Y_Ge* #L؍dZ,N>8xir0*G_TDU]HC=jxak*%O*s~z߄tӋ?K?0"oפHuon|7"!8髁.OV iׁok@eҖH(#뙶O)1MlU\7 eM]EW [\D{DRZURHpiBq[Dz4mii>6tpEv4GozozaӾg/sp !+4 U* ҵ¥-A0. (mJmJKىK[ӷ"{]U٩G2B<^$ߏBi xȭ/ H]>^&%N )RW犴x~i )v#u6H Be/|S#!m~iN MH#)HY"vpН~Ӎﳔ(ӑ# e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv$HI e'AN); Rv*!=?%u@~:gg>o=%{O'HťSOKw N=A*.ݝztK }FǞި5R?lvR)~ ]R)솖Haw)hQGv6EjvBkClScGjTᛊ{Up@^[ Eh"Hc{WjT\͚b_vcU%miZ!6-iYl%ʹ!n2]HLR=zT\;tw Rqݩ'HťSOKw'uij}O'Gw5ت'HEG-AN); Rv$HI e'AN); Rv$H RRa;mK\%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/img/addurl2.png0000664000175000017500000001675613154001450017244 0ustar karbofoskarbofosPNG  IHDR-"gAMA a cHRMz&u0`:pQ<PLTEνƵBBB99Y"bKGD-tIME  4pIDATx]w׍z׎W:MW_ZkNNH[T;wMD}9! Lҝ!7U^B~>:WL{7fM lpI @g4ϚAi4*91vF\z<O'ٟϧ٨0[xmlϊ1X.Cn4!]-QUBgXpS8W~q"̦phd'$ +DOJ1-U{B#HYC`RgKcM4_LfGYNg ?4\Ae| OzE6,D&*& t+^*^3U?Ε|EءiP(y SzRg ~hFc4ՆXlN:'/ MS'm hB{HT97.|}6;BQ&HΎvANOn_st8cM?#a gASиO^ƴ{gM)~> Q*2/qrxM_qo/X7+do|\K&}J o:qAWn$74Q4O&&Jwh7PB DAQW\~mj5VMVtmݯf54D }1>d!kEP({Ȥ;LX(o(v'MmD[2[h54 g"R\NE^=v f,}IM4I_TxF-! a#IxM-iv-dE"aBn|=hFװ[Qƻa}-zwt4p9ܫQ}[6W-_.ANsB` jc0J4k `黃&Zh`;b;V;xx ]rw(aYn7LKTQ'я acA:8dxP";ECi$\lJa<VԜV'Zd<}+jMbpq硎_rMƃũn20_j!]pK&{[An55כLlIj+TSJ7kV|52\L_}=¾+-' x&qEx~7Lʝ(w>rMh>E-K|=5'Ч+xPShwhc[z[HMw-_%=\pԤ/ݣeeCπ?tax}pEُS/xs\Ij?JOor~ Ԡ/zY%ե~' $jwjT;=U՗֑陻(W ~8m0Ak'+T\j]mܩgL/9ƯVySP-/N+:'a6U T*ҪXu…ej+~9g/@_ b*le _Ȩ"o__֗oƯbK3j<^S='t/鏼X-~*&!1$bf!YTgԗJXǾ[3UddhNQ8a= ]}*+1)OIW4Mɀ)}L(2}RX I; +uB92a$dHy? ]وeTv%%2HzC o7CCl~QM| zBi+Lraw%b7q:;gQY}!tƃ_"N(L"] :;GdxOdo`x0Hs~I u(C|U$j]Tgyg:d􍄏C_;uaxQ\_z|o(g#6"|z .dJ_/rA)J/旔a9)p| H#dz#3Q0IK!v0XO${I"]X 0Q۟I^dgJ23DžY̩PN cZPl gDJ!.l<jks\- aJm!x9Z&ǫMI)GlJ\AYn+(dW2h*t'ǽ>yX*L_\ҒTz]f!<좺OQ_ Osodc42(JNmW(+/yfK2ƌNʦhȗG]^2|qsTYӣPyp9>j,Aɏ_TP=0\46UsC7~ȹ2sx(W;kSɗ_ZhJj$:⢔#R{5/+,2\1~QS[E,(/UUaQ_#iKt5/SAbk=qëRlV !T_Lu)+ϛ}q.9 [uHq?w5U04%kØS7}$ZV>Ę!/b;O_4(Z pyіU|DW%~!e# <̇BqW_fpd/mz P_\'c.b {S?͟Q_E1~!>(K 9\Ľ[a=~v=)k  Ѣ*KV8aSPWSVh]_21;Re#Ru6DLW[퍦U=M?b;Mu}1>$O?-T8q;W#aG7Zyt҆x1t4 cpV: Hد/G_*c?|kUǯp>Wqh٣/n_nUU?lW}]ѿqM[a ۇN2ruX;tqSOG(yC_ͰrGjjG&}U;1G?Wu}yίA_уS{^^S);ܒh5~%e{Jf-S{DG#񖾼eⲁHq }bKqxjÉ_\yS$nQ.>_abxŏ9˜w$L8~F yl$=IC~) yy¤xylx_t)-}Uo0VGxC9^l\Sח:N;//5%Y``:N"ξE[|9eSͳUo^뻺/LT.6UkWj0FR~!jTaZx(^dק/BnD*'(җ8aAWchy~[_ʓ-{Wi,+qx!oBow_öeW{)*/On5RsCooҌ >.G_m7W8 L8f}U!i)LyӼh~ݒAصG_> ڝOߜsz*UbiˡkjüGztDɉʣ }1(5ߐS?hDXU_8 nZכHUe)m-Z8H]'wۖ/z zG_*gEɛ>9-]mklq?~4KX%Ě> T~R-Χ%veJ}1MSeo%'?[rC;~V&=Ko+lz |n;n QΈ%O} d[P}bWwPd y !_Y0&,aF6I䎂~}yN$WaU[ iSf*19%("ߦlt2ġrI"d܉GN0uX0UӀҗ>.;͇Ӥ66_}:DܪC jRs]!'a:> v}y3C"b`NKCW )dZ#(n!v#e}BT-zWם8d0g߇?$|J_g4 K~Fnr{*$0 ^( a a6 ̓<mvm67F,Y+XWb~v1ri\gdGk[meDn>K7,WƉ:χ9 4s:ո0%8&9a(R!K2Qvx=뫈oz6J=|qZº#О+)n&[ ,T7}nE%WQD>8Q77XLfXPت?,;nP+@19)WaT /4ʥrUY}(_Zo O(/>SV|Ydkj6Z6z5Q>ޚ{1 /KрY/g@9 deZM_֐"Jz"~Dܿ^Mq"V_!W%"ܒhLU/Dr[m?/{Ps$NO=nҗrOc,8Q>}&}y2C$a@՛Wca M-}lW_/xvv}} FjJW|}y~ֹ>MS-K$6>\K}T*o^o/]5}}ytރѪG_%%Tf9$~e_ˑB_Eﭯ^*v2aw2C%X"뻁S/tK٥E}Q1>JρK]7K^߿J?j`򩿽E.΢:aDv-6_&xS\oy&zj::gWymy|t .-Gi¸ӢК0BU,!U} ?s]ꋢ $21Ơbqu(Hh s/WU_QkyʔScq;aav< Z"$K3}FpuH$L.ncꊊ ˿#%}}A*hK}iPb\=A>;?GI|xOݸR_Fm(OEF*._.u w U|ZnHUf͂Ju맊jtC]_J}YGaseK lI}_ aIJ`u1h/"<2ʄM;!LA{~0?~1x}o%@)Indüri rJ}E ]{͜.rYp يb`xr|*VeE_S3/0٧//Qi3tIf+O_AWfԎ:2܉ww+6Z\/Ne !e袪1~H*e;'ķ/!Ǘ~7~A0Y%-ԗ) ]FHԛ#҃YQ?F"6~n ǀtХ1Z*hpOKird{1<9f#nʘskj^ƮKTԻeWM\7 m0`d2]Zm,%,@b@͊|;t?T?>_Țklq Su I~q}5}䚿/r%=W~)r,%tEXtdate:create2016-12-23T10:52:06+01:00nӛ%tEXtdate:modify2016-12-23T10:52:06+01:003k'IENDB`httraqt-1.4.11/help/step9_opt4.html0000664000175000017500000001200313154004555017313 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

Option panel : Scan Rules






Back to Home

httraqt-1.4.11/help/step.html0000664000175000017500000000602113154004446016256 0ustar karbofoskarbofos HTTrack Website Copier - Offline Browser
HTTrack Website Copier
Open Source offline browser

How to start, Step-by-step






Back to Home

httraqt-1.4.11/create_elf_binary.sh0000775000175000017500000000113113165754727017476 0ustar karbofoskarbofos#!/bin/bash CMD=$(type -p cmake) if [ ! -x "$CMD" ]; then # not found exit echo "please install cmake and restart this script" exit 1 fi CPU_NUM=$(nproc --all) echo "cpu cores: $CPU_NUM" DIRECTORY="build" if [ ! -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY exists. mkdir "$DIRECTORY" fi # because of removing of all files in directory if [ -d "$DIRECTORY" ]; then cd "$DIRECTORY" rm * -rf # options: USE_PROFILER, USE_DEBUGGER, USE_QT5 cmake -DUSE_DEBUGGER=ON -DUSE_PROFILER=OFF .. make -j$CPU_NUM cd .. cp ./$DIRECTORY/httraqt . fi httraqt-1.4.11/create_deb_package.sh0000775000175000017500000000130113154021255017545 0ustar karbofoskarbofos#!/bin/bash CMD=$(type -p cmake) if [ ! -x "$CMD" ]; then # not found exit echo "please install cmake and restart this script" exit 1 fi CMD=$(type -p dh) if [ ! -x "$CMD" ]; then # not found exit echo "please install debhelper and restart this script" exit 1 fi CPU_NUM=$(nproc --all) echo "cpu cores: $CPU_NUM" DIRECTORY="build-deb" if [ ! -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY exists. mkdir "$DIRECTORY" fi # because of removing of all files in directory if [ -d "$DIRECTORY" ]; then cd "$DIRECTORY" rm * -rf cmake -DUSE_DEBUGGER=OFF .. make -j$CPU_NUM make package-binary-deb cd .. mv ./$DIRECTORY/httra*.deb . fi httraqt-1.4.11/build/0000775000175000017500000000000014355544107014574 5ustar karbofoskarbofoshttraqt-1.4.11/sources/0000775000175000017500000000000014355543007015156 5ustar karbofoskarbofoshttraqt-1.4.11/sources/config.h.in0000664000175000017500000000521013042707374017200 0ustar karbofoskarbofos/* config.h.in. Generated from configure.in by autoheader. */ /* Check for dlopen in c */ #undef DLLIB /* Check for ftime */ #undef FTIME /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Check for in_addr_t */ #define HTS_DO_NOT_REDEFINE_in_addr_t /* Type to use in place of in_addr_t when system does not provide it. */ /*#cmakedefine in_addr_t ${in_addr_t}*/ /* Check for IPv6 */ #undef HTS_INET6 /* Check for large files support */ #undef HTS_LFS /* Check for libiconv */ #undef LIBICONV /* Check for libsocket */ #undef LIBSOCKET /* LLint format */ #undef LLINT_FORMAT /* LLint type */ #undef LLINT_TYPE /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* "enable replacement (v)snprintf if system (v)snprintf is broken" */ #undef PREFER_PORTABLE_SNPRINTF /* Check for setuid */ #undef SETUID /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Check for pthread in pthreads */ #undef THREADS /* Version number of package */ #undef VERSION httraqt-1.4.11/sources/icons/0000775000175000017500000000000013042707374016272 5ustar karbofoskarbofoshttraqt-1.4.11/sources/icons/line.png0000664000175000017500000000052313042707374017727 0ustar karbofoskarbofosPNG  IHDRd0+jbKGD pHYs  tIME.6R~IDATeN@EϜyP$HV|@hHnhMa poՌ5 v`ufTgszx:&K?Zp&q<ӑ@Q,"6"++{6ىmmmo+6N v둕oGr:wRn\OY6*du߽gꑣ M݁+CoZ\\kS룖CҳR XZnEL4iudWKG1"y$ƞ$[ٸlWv\ҳ ϜK$!P?;EZحh{ltDjrKZYbe1l<ᐺ") ,Dkkp8L{nudg'F tPuryb8ܒs ߓ3=bOtMux#<-Ҋ6!-6*HĻAƛ8|P12:>_$ctn/SOPD!c#Y,dVjg@Hˏ IuvݸS뷸)z-0U7+a!N2GI ^+jM] F??8'+x:pT,,9$&鐊Hh2|&~Vw{<TebB6/\9?ޮwvQgA!SZB`/`X~[1S" bVrw踅ȤG+)ʂyr!^$ v}C§%ؘxs ZÁf|*@^/*yB-הrNٝq\,V-L1@ys2gbE&^kkk5u;ӓD+kSub6ڶq9|3IydWj3@)?Wr(YD%T;h&2*`9U8v8ZBAYd'\9zŮﱱ ʣɤ2˥ LAYz i^V{-\˵͵ZM!9; nnW'T9(֝sXM._`Ȳׯ`~yC7pQҥygIojʵ+sSᦦpIL4>Z7 Fy X,io繌LMR{z[B8>{{{^O1fPZ8r:իr!DZy!;;s:Y]M&?|ƺڼg)k+Ϩ877ҌlED?eer?{T?\zɮNBzd^oPy4==ixzZ,mI-L߾}'o% pm}]z_RRU@/}chN{^^,_b2,sCe67LCCn>ߒ ::< ^o@_ß.k//+w[AKeYfdCo-iv04mCʱH&ORDHuK&;0pǏga/L"}Apfmx.}qy+6]JkkkB_nO<IJymE*RpeuY]}nm}suua*[X >`rRX[YQ-Nf3!ZǣW_`=&/JJJPϱ03s`z`37efX!<}CMxNI}\n|Bl2رrxf/8yBJ[`nw0^/+3˲ \q,WXDE,//1+pe[BDu;(c$oP`L Ü' +>a_B|ݝ* jA;;RIc<g/Ub_oҷ㌦nZ8GNH[P]k#62E"ꭅfn(6?6eh_!Pie#R5男Ӡ?Fr5$NG\ʢMQM4dB`ݝCYssv4B{^ڵ:kLydEu)DelVGҌ'nB՚jCz2HJKKիWp$CScԾx?7'5gx"xtU$VZZW{䱞[9B"s\8*;>oΥïR8 I;ȗC  ._ɞ}#}2ZB; ʂژ[N]FЭiUŒɘ0}/ɥB0^MqJDy/+q@P?670QVP%Fpqy^삹*Ojy[FKhDa`#Ό^>5.¢t:Te%]j|Mx08]n޺cg,'t ,(Vhjl­-8^546?.]KwБޣ##C6Q7'4:DžE?;rn" Ԩ?DFscE*R1ThښU"B[ lIENDB`httraqt-1.4.11/sources/icons/pump.png0000664000175000017500000002000613042707374017757 0ustar karbofoskarbofosPNG  IHDRD\#bKGD pHYs  tIME0*iIDATxݜyUŕ?U޷/M@7"`TqI\FcYc$&c4NeL&Ѹ1FQ'(4{xmc BFwoݺ9N:us-'"s|biG$l)9X?em}ǝSGo Su?,8a{7zYZ~u2GYNSسdT}=MwEl #_^~O/FCOع^G6d8ZՁ`)ñȴn<Ћמʌj+ `qȔ=Xّ[#j5Gvlub ;v+^tF{h{=4p뮒ūWVсʇ'=qݾdȿHEeY "jSd|oʃaDѕ+0_%{QF4EaMOӏ}N~c|fs2z {F~?'Oc׫$x0|c׫_o*#xCP5aYQf}k} IL,:k"aڬ3/|Qntu a=hj)׿ּMbҜZ;*G?)1^O?Īj)vRe ibٚel&T9y8=0}_~QƎ5ˢ; rϖﻴenͽf0 >lmQ WePD!R^wʎ<␟|fq@gnzyimS5xCs)Crp{6L/UwxٓWH 8*R֎%Ǫ)_ >Q2y,J691U7իm6u!OL$]V9 5=mZҹ6Zti[6M#7yw]4P| dݖ9RwT3]nZpTk(GĒ&|7@jD$K -e'.!`Wa:?s]r\,kpt׍ڌ%1it-ֲxŪUpY\2㠭QxEDѣƣ-u7}gNdp+}]TW L,CtЖV16je3+ZS7utb$nYL FKilIXO"W LZɵwڰ#Rcǰt1HS/tM0%#_ Q-_Bj"4UV;eh.= OɳM/E]ſY+|d䣲R.4Fm%Xd)-}>4Q*HQZ+{˒S-T`( POEy76/EcD ("VoEϥ1F;fB[n ce h&vuBq)-}qgpāyed]:c*bL_H њʔ7~tQ<|HS>WI$iyqK1MF+i(EAq񶌟"_[v~~M;y C0答֍<>&͘},A',l.kt} EA)Е_楷ޔW^};P{ȥE4VAqzR}Zk99K4b9w(Kz[Wkk4;8B t6" 0ʇԐL)jЬZt ,7Eƶ>;o-fڬJbD3plslwJX@2Qua%]֢=IaE[|G'QvD v0ƣ/KwW5Q}=N |pR(4]v 剿5lc=*^8J<cX]A;PBiz3Q[hy ȹmM3i5s+Mwllץ7G7O "FRx|x/=H(OS_ݸvdcJоa!CG~6z*#GT㺫x]Pǽ$ X1|cΈ]K˨CIG>"?A7wmT1lH=4 :/~ I=$67lqy~saxwQ_!:s ;ʾȪ?.JBV[b_\yBM[A~~/o\{ տ۟)wvo<Bk_!j@=sg*GT!@#["#h8{m٩Cs5ɃO<<jU͡Xh%v+,*+Qh@\y`^-^#R=#REYג#v?R7bQG&̻MC`qu{Ԟ7Y0ZN-T7SkhߊCM=vnXOW!f'~+FM&hs6>u5`(ZKfbD0ev> FǮ@ hm,v>Q)(@CI%D ;ϋXt6 ,/1"GPik.+F$PWA(B,!d ߳@":^}f rfXF,|겯btRS! %o<\JY4Cv/\/RQk?+-}1l]ڵ bt}+q>$[+x(qPPB$J Ry}K^\3х0GY!2|,\Y>eMѓ!+ۗ%Qy($1i<@V,H.&+}"^iMMQm?ܷJtkT]zܿކӷ_kҽc Nණi%i{k[K?wޢzTw-jxrS4_\IPAF9r\pod6Mݏ3g[8{ 1#Ldžplq2#) 8تTcmtt_7 cH]#yK^^;'3lX=q͇<|0/.:h#8&[`۠FoQF2>; VxmsJ2^`K[5& 5Hެq&V67>ZDtү:L!LnHq0i3 {LPQQB0'[ah۸9uܶRN)e[Op(M4"VC4rrA\}}ُYw Dg4վU Rt1P1(miD)A J9pkt6zx҉k"gs/mіr)24)w-Km fm}іB6 /Ĕ~ tvP  b,QG.6DYUC5g}}:af?KЉ4 SkbOHPJs05SQNdk @0ÔM8pMV|@D̙ReуHƦŗ FUͿ6a#x'-AДr,Gm}mr~|ߖb%q)}m> /HO1CXgj[oJ'n=Yێx-L;˗Qj$aOUyzS6aـ#fD힬j%R햄wA80&Ȥ&n*9Por(.[yꮙ }ƿ],[8Z8g'vS٭_J"tnd}Fm TV4@ MC eBu5Cf|.ݎdof/=־$W1TUmrJV:g[M]B \q3&g_c{vTd9L-24q2`=~Tfm;zZt7{?K辘oJ8+[ Վ 9+HJ_aGWx.a[Ƹ!?#d֏6nFIC/!_| 8eh'Fh6f,KλyPv? X迩|ͽ!}5@/b)]WIsEu0Ph7IP(gIƚh@Kɓ'CzZ~rx"`sE[y&*х*gX~T =i yנ!jG(\_IJD#"Zp/BZ̦8_#-_ZOYv M3z|?G/>B T2V}$ay!uuq<<3p PʡCD % #y< [v?^ldٺ lرa)CȀ8h+$V!Ā1h-߱K,eHuPFqOkdJ+P03c0_e@U{P_}5ۡ| Y|W+|"|z"b/dCS4$h4PWϙv9!@|KH \A4Q<@BajG0$1brl, iE +C3 q `iM$bBRh%XZf,?4؊ ]WͽʎL6]ϝT7 #&@UtUW &l:RЕ}[!^e(Vn;G[ÐG0nII u `YIʱJPr r !{01Rw4/~ #6CmѦETtp])#lO"ڗ {'a{eSdS\S w=\\/}eȹ)FHZ48^<]_+K[Z;y,YM xt5 ÂviKo[)wц2~ MHd\ .p377y(A/F *((EZ` f7$bu2l'ek*GӼI7rٍgI\.bj߬jIVeX*wbTKʼnXIF&PQd!k#wHJf-J,~XڛaY\.E˚B3|*ˆ._@2fHeS]uҲn +׮eĩCa/g)!'|Pe>g-֩EIǪ$n<Չ1aq)`B(csw?xqrY+k)fKL6ظ# T=mdޥqb'XfO8a*jk DeCAj]||{?KfVV{2ID+KB*HE@m*MvmaD04յS}t]KP@C6!cQUWKG1vBT/A'eېwNĒWbg?#[F)gSD$nj);s=+9%DeX.בRIT "9rz ,a`5A'6FukYb=Db1*3|h=GoQBo=\D3=vߞBnvAh`*uҋ\\i/xq`p]!xȪ˩io cOix  Cض1-AlFi ('aC,| qEުQg C(#aC.c80]0!7RR1s.LbK,XB_ol&SdD#7lS7g I[FuJE;PZ(%v܎/]gIP <6( m)zXZR"}R Z!)%"+ˡ =O2 2otvXV@h8 XI#ơ#F:j2Ol<걇 AG$`QrA+RxhmaA4bY.-~ `JR4tg,01R,5$ ( n@b}pl%BPk ,=x^ ؆R 1Q1ECat񐏗=Gtx$L>祈&у+%⣔oP*@Yd!k PBe:}|k[Kٲ1L:(,( Gah]Q8Ze0C}xȖʍ}Sn{R3^U(??@u%T ,QAcs>Eɻ>`<&0x"c;)~Ъ$cae?jJ6ީD]IENDB`httraqt-1.4.11/sources/icons/name.png0000664000175000017500000001323613042707374017725 0ustar karbofoskarbofosPNG  IHDR0kbKGD pHYs  tIME/-[+IDATx=gxײl˸W:!RC $ iDmC r H\罗/$j Rl %mn˪~Ȓ%٪lާ>>֫sfg̙3g,a{A*I^-KC\@e 2Ʃ)1cl42doik }Ɩ$$$P1wB'w5ܜ`6hD۶cE= &,JG;bb&n:a1 G#&0k]FM*c]GǾ>Dd#`b9mE}s^ArF\gݰ"9rcUHK;BBfDC&HMDq  1~ξ,ŪrQeP urVFW}(R6Zt3j }&Y;z N=l#s*LZ9q@H { % ؞gBNRSb(?И "׾eI+;ъXde"7:V%b-.4}2zVH=eiH׉N O10fFr-1 ˅**c UFUڕkJMR0đXU.DVÑF9Px5z<5%>YW"<#zP-ݝXEI,M_JToߤG2Am`{NXv;Į}TBˑ~wd|rarno?-Ac=w|xV!0^!91:Y@nCt,m~:gߢFGp u5^ 6]=KuSyS4bF8v3ErBYdމHV  ^}Tl`5L/Pcff 2/X_ $=NDBHZ2.VZ/leة)1IѨ 5w|1oe|{ߍ6YG1S%׳ê(l|?h7u27S&*UZ' nP`lVe[z{ęJDu(//?DGy% #nڒfRⲅQI7Pc(Cg=FSAIj`ށEo+vG&dƛ‘-=)׃" `' MPs5dX&L>0\h6]A5&|~٦ v iүz9V/F ÈK JmA&֪%>Ѓ#/)uJ7M bA0 3osĿz-p5.[a@\f^GMW?v }Et a !]Pkޞ3^"^(.o4Hja`zdfy嗰ð|FCWM0Jgp=8۱xo~V>Vr`t+-wtR_úTBINuۼR >Phvd 'wKRfĚbs*Z*%ARI)!V/M0ke,V}*DvĄhқ551Z|(  hb5qዔ8HTzQ 9}<,, \ @-@[>UE- ,ؖ4)rl9O<هl`[`[SBzNR?SB0 2u/,4aRHl|CorNIC_Qm$όUqC[w8ea_;Ή< 6=oSww0;N= `gCMV\j`ɦƀh%$'kMrLP N7LC  p ɫaiV}X&K1nI:V 4G';%Z2ң.""ty~VC@%Xv9PcIT Rwdvet|RPR3# KEg<2QM*UʮG8εnI|MV8M$3gdk#cN緆 {ĵg}lM&,"Y". +av6.^0nV: >/Ч\;kc7#s7\~%y͋T*0{]_bUj;\CnrgN"s)[];VUylB)jbߘsc13i.2K2׭^HP)qqfQ. @J2aҁeIk枢q oD/`I}*zJ*pS]§7mtBlRgng8|r!l'nњn޷aBܼlpR񔿠5jN6i~f8!0 p{?X#8ۥ$n}At񳳰>yph4]x/J#ـJ˙2gWOsvӡ":@| Yzί7qn)yC c3 EHp^~j/^~ޠlplU+\\ oj"S>]i'+w8i^CыHuH x!eoW59+20+;ѹv.aߟ"ռpU%}q w_C*8ZɡT8h+O<},ŒUz/  Z3ǔ2AꑆNa@(mowUw-lɧtn L%'HGvvrРL: ,|7 k$oz +ɟt!"} .J!|ozRziBEv >:a-){x2 ӳTX W[Ef[;bqn3- { ,8f2NWšY29?K`{$C04xo ,P dc( EAy%ى&݇BA/S G%/A`S\X5Ml0㋨VhT(_W5̅@~t u,xL ՃwT5^Kv΂ M.&.yod}| 56(#޾ ;rqHTxv/h!c雅M.HNtI`ä2>Ib' )B=O zq3U@iÈlUbo%}TGMa{=ˊQSn8xOؑSv(W?%o*L+ x%\-'fqwXCޏ^ԝQG;ȡ`ԷEᨄl4:"PD&t>S¤5Cϴמ 8 Xz9ϩb!tԔ\ @Q ?#5}qJ0j`ҙMkZVsV_Pbؿdrۓޱ"Vy yefT|fKg*= ۙ|zߙkX B* (oi */4NMD I9 ?c%sY[,= Q ~$}GJ^|4t,DW동[tEHHI _JAŎfFBҺ3tD\60GW[AJ %a  tKgN=|>oWt%@eqt)(Mc>\|,h;g?R ɵ:`hQ:tBq)0\kШ*w.GzWy+OQx~:x.|yN(àhM#s@W 2H j@5NGNF_{P߯ߨN+Cw3]֟Au:Zᧇ{6@9h)" Na"%Da2ilDFKހƀiߞEmtr{+@^S\5RH`yb*ܱ\Z8W뙲ce=uU2_^Ɩ&Fyeѧv|8)^eV0ǚQs+:/ܔ蚻><rE@Fa}qK6*!u5yѭv,f_ǚB_ۨ|Bang?## j=Bp]0 zv-KT5a`\-BP$ڡښ)aH؃R\£HMRPJ4~A&V(s2/\-zV _^`2 =6|oM( +`SV: [%[4%fbU:t%7oTúY/;ͷEiKoL`hݧY[4Bp+h~.yh΋ZT ܗ2se OmvuТG,M`yonn/xE\3wz\cy۞הk~zJO{ua5I9xtc8,0B@ h *g\{ ꡔ" IENDB`httraqt-1.4.11/sources/options/0000775000175000017500000000000014355543007016651 5ustar karbofoskarbofoshttraqt-1.4.11/sources/options/optionslinks.cpp0000664000175000017500000000447713202344735022122 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionslinks.h" #include "../main/includes/httraqt.h" optionsLinks::optionsLinks(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::linksForm() { setupUi(this); this->parent = static_cast(parent); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsLinks::~optionsLinks() { } void optionsLinks::initTextPoints() { *opts << (trWidgets) { linksForm::label1023, _ALL_LINKS_MATCH, "ParseAll", CHECKBOX, 0 }; *opts << (trWidgets) { linksForm::label1022, _GET_NHTML, "Near", CHECKBOX, 0 }; *opts << (trWidgets) { linksForm::label1021, _TEST_LINKS, "Test", CHECKBOX, 0 }; *opts << (trWidgets) { linksForm::label1024, _GET_HTML_FIRST, "HTMLFirst", CHECKBOX, 0 }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/CMakeLists.txt0000664000175000017500000000515014355520452021411 0ustar karbofoskarbofos#CMakeLists.txt set(OPT_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/optionsbrowser.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsbuild.cpp ${CMAKE_CURRENT_SOURCE_DIR}/OptionsDialog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/BuildStringDialog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsexperts.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsflow.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionslimits.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionslinks.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionslog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsmime.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsproxy.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsrulez.cpp ${CMAKE_CURRENT_SOURCE_DIR}/optionsspider.cpp PARENT_SCOPE) set(OPT_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsbrowser.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsbuild.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/OptionsDialog.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/BuildStringDialog.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsexperts.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsflow.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionslimits.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionslinks.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionslog.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsmime.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsproxy.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsrulez.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/optionsspider.h PARENT_SCOPE) set(OPT_FORMS ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsBrowser.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsBuild.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/BuildStringDialog.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsDialog.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsExperts.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsFlow.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsLimits.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsLinks.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsLog.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsMime.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsProxy.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsRulez.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsSpider.ui PARENT_SCOPE) # IF(${USE_QT_VERSION} MATCHES "4") # QT4_WRAP_CPP(OPT_HEADERS_MOC ${OPT_HEADERS}) # QT4_WRAP_UI(OPT_FORMS_HEADERS ${OPT_FORMS}) # ENDIF() # # IF(${USE_QT_VERSION} MATCHES "5") # QT5_WRAP_CPP(OPT_HEADERS_MOC ${OPT_HEADERS}) # QT5_WRAP_UI(OPT_FORMS_HEADERS ${OPT_FORMS}) # ENDIF() # cleanup $build/*.cpp~ on "make clean" SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*~") httraqt-1.4.11/sources/options/optionsrulez.cpp0000664000175000017500000001720613202344735022135 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/optionsrulez.h" #include "includes/OptionsDialog.h" #include "../main/includes/httraqt.h" optionsRulez::optionsRulez(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::rulezForm() { setupUi(this); this->parent = static_cast(parent); QString t = this->parent->translate(LISTDEF_1); QStringList sl = t.split("\n"); rulezForm::comboBox2008->addItems(sl); ext[0] = "+*.odt +*.tex +*.pdf +*.doc +*.docx +*.rtf +*.txt +*.ps"; ext[1] = "+*.gif +*.jpg +*.png +*.jpeg +*.ico +*.tif +*.bmp"; ext[2] = "+*.zip +*.tar +*.tgz +*.gz +*.rar +*.z +*.exe +*.7z"; ext[3] = "+*.mov +*.mpg +*.mpeg +*.avi +*.asf +*.mp3 +*.mp2 +*.rm +*.wav +*.vob +*.mkv +*.qt +*.swf +*.vid +*.ac3 +*.wma +*.wmv"; chk[0] = rulezForm::label1023_2; chk[1] = rulezForm::label1021_3; chk[2] = rulezForm::label1022_2; chk[3] = rulezForm::label1023; for (int i = 0; i < 4; i++) { connect(chk[i], SIGNAL(clicked()), this, SLOT(onInc())); } opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); connect(rulezForm::label1094, SIGNAL(clicked()), this, SLOT(onIncludedLinks())); connect(rulezForm::label1093, SIGNAL(clicked()), this, SLOT(onExcludedLinks())); connect(rulezForm::scanList, SIGNAL(textChanged()), this, SLOT(setScanRulezToGUI())); } optionsRulez::~optionsRulez() { } void optionsRulez::initTextPoints() { *opts << (trWidgets) { rulezForm::labelHelp, _USE_WILDCARDS, "", LABEL, 0 }; *opts << (trWidgets) { rulezForm::textLabel1, _CRITERION, "", LABEL, 0 }; *opts << (trWidgets) { rulezForm::textLabel2, _STRING, "", LABEL, 0 }; *opts << (trWidgets) { rulezForm::labelExt, _TIP_GIF, "", LABEL, 0 }; *opts << (trWidgets) { rulezForm::scanList, -1, "WildCardFilters", TEXTEDIT, "" }; *opts << (trWidgets) { rulezForm::groupAddScan, _ADD_SCAN_RULE, "", GROUPBOX, 0 }; *opts << (trWidgets) { rulezForm::label1023_2, _DOCUMENTS, "", CHECKBOX, 0 }; *opts << (trWidgets) { rulezForm::label1022_2, _ARCHIVES, "", CHECKBOX, 0 }; *opts << (trWidgets) { rulezForm::label1021_3, _IMAGES, "", CHECKBOX, 0 }; *opts << (trWidgets) { rulezForm::label1023, _MULTIMEDIA, "", CHECKBOX, 0 }; } void optionsRulez::setScanRulezToGUI() { QString st; disconnect(rulezForm::scanList, SIGNAL(textChanged()), this, SLOT(setScanRulezToGUI())); st = rulezForm::scanList->toPlainText().replace("\n", " "); // set the widgets for (int i = 0; i < 4; i++) { detectTypeInc(st, i); } connect(rulezForm::scanList, SIGNAL(textChanged()), this, SLOT(setScanRulezToGUI())); } void optionsRulez::detectTypeInc(const QString &st, int i) { // QString editString = scanList->toPlainText(); QStringList lst = ext[i].split(" "); for (QStringList::Iterator j = lst.begin(); j != lst.end(); j++) { if (st.indexOf((*j)) < 0) { return; } } disconnect(chk[i], SIGNAL(clicked()), this, SLOT(onInc())); chk[i]->setChecked(true); connect(chk[i], SIGNAL(clicked()), this, SLOT(onInc())); } void optionsRulez::onInc() { QString editString = rulezForm::scanList->toPlainText(); int pos = 0; for (; pos < 4; pos++) { if (sender() == chk[pos]) { break; } } QStringList lst = ext[pos].split(" "); if (chk[pos]->isChecked() == true) { for (QStringList::Iterator i = lst.begin(); i != lst.end(); i++) { if (editString.contains(*i) == false) { editString = (*i) + " " + editString; } } } else { for (QStringList::Iterator i = lst.begin(); i != lst.end(); i++) { if (editString.contains(*i) == true) { editString.remove(((*i) + " ")); editString.remove(((*i) + "\n")); } } } rulezForm::scanList->setText(editString); } // true for include, false for exclude void optionsRulez::onChangeLinks(bool incl) { int action = rulezForm::comboBox2008->currentIndex(); QString act; QString le = rulezForm::lineEdit356->text(); if (le == "" && action != 10) { return; } disconnect(rulezForm::scanList, SIGNAL(textChanged()), this, SLOT(setScanRulezToGUI())); if (le.indexOf("*.") >= 0) { le.remove("*."); } switch (action) { case 0://File names with extension act = "*." + le; break; case 1://File names containing act = "*/*" + le + "*"; break; case 2://This file name act = "*/" + le; break; case 3://Folder names containing act = "*/*" + le + "*/*"; break; case 4://This folder name act = "*/" + le + "/*"; break; case 5://Links on this domain act = "*[name]." + le + "/*"; break; case 6://Links on domains containing act = "*[name].*[name]" + le + "[name].*[name]/*"; break; case 7://Links from this host act = le + "/*"; break; case 8://Links containing act = "*" + le + "*"; break; case 9://This link act = le; break; case 10://ALL LINKS act = "*"; break; } QString editor; editor = rulezForm::scanList->toPlainText(); if (editor.contains("+" + act + " ") == true) { editor.remove("+" + act + " "); editor.remove("+" + act + "\n"); } if (editor.contains("-" + act + " ") == true) { editor.remove("-" + act + " "); editor.remove("-" + act + "\n"); } if (incl) { editor = "+" + act + " " + editor; } else { editor = "-" + act + " " + editor; } rulezForm::scanList->setText(editor); connect(rulezForm::scanList, SIGNAL(textChanged()), this, SLOT(setScanRulezToGUI())); rulezForm::lineEdit356->setText(""); } void optionsRulez::onExcludedLinks() { onChangeLinks(false); } void optionsRulez::onIncludedLinks() { onChangeLinks(true); } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionsbrowser.cpp0000664000175000017500000002462514355543007022465 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include "includes/OptionsDialog.h" #include "includes/optionsbrowser.h" #include "../main/includes/httraqt.h" #include "../version.h" optionsBrowser::optionsBrowser(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::browserForm() { setupUi(this); this->parent = static_cast(parent); // s. http://www.useragentstring.com/pages/useragentstring.php // QStringList brws_list[6]; QStringList os, brws; brws << "Firefox" // 0 << "Chrome" // 1 << "Opera" // 2 << "MSIE" // 3 << "Netscape"// 4 << "Lynx" // 5 << "Other"; // 6 brws_list[0] << "Mozilla/5.0 (%s; rv:33.0) Gecko/20100101 Firefox/33.0" << "Mozilla/5.0 (%s; rv:32.0) Gecko/20120101 Firefox/32.0" << "Mozilla/5.0 (%s; rv:31.0) Gecko/20120101 Firefox/31.0" << "Mozilla/5.0 (%s; rv:30.0) Gecko/20120101 Firefox/30.0" << "Mozilla/5.0 (%s; rv:29.0) Gecko/20120101 Firefox/29.0" << "Mozilla/5.0 (%s; rv:25.0) Gecko/20100101 Firefox/25.0" << "Mozilla/5.0 (%s; rv:24.0) Gecko/20100101 Firefox/24.0" << "Mozilla/5.0 (%s; rv:22.0) Gecko/20130405 Firefox/23.0" << "Mozilla/5.0 (%s; rv:22.0) Gecko/20130405 Firefox/22.0" << "Mozilla/5.0 (%s; rv:21.0) Gecko/20100101 Firefox/21.0" << "Mozilla/5.0 (%s; rv:20.0) Gecko/20100101 Firefox/20.0" << "Mozilla/5.0 (%s; rv:19.0.1) Gecko/20100101 Firefox/19.0.1" << "Mozilla/5.0 (%s; rv:18.0) Gecko/20100101 Firefox/18.0" << "Mozilla/5.0 (%s; rv:17.0.1) Gecko/20100101 Firefox/17.0.1" << "Mozilla/5.0 (%s; rv:16.0) Gecko/20100101 Firefox/16.0" << "Mozilla/5.0 (%s; rv:14.0) Gecko/20100101 Firefox/14.0.1" << "Mozilla/5.0 (%s; rv:10.0.1) Gecko/20100101 Firefox/10.0.1" << "Mozilla/5.0 (%s; rv:1.9.8) Firefox/5.0" << "Mozilla/5.0 (%s; rv:1.9.6) Firefox/4.0" << "Mozilla/5.0 (%s; rv:1.9.2) Firefox/3.6.0" << "Mozilla/5.0 (%s; rv:1.9.0.10) Firefox/3.0.2" << "Mozilla/5.0 (%s; rv:1.8.1.4) Firefox/2.0.0.3"; brws_list[1] << "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36" << "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36" << "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1985.67 Safari/537.36" << "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36" << "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36" << "Mozilla/5.0 (%s) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17" << "Mozilla/5.0 (%s) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6" << "Mozilla/5.0 (%s) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20"; brws_list[2] << "Opera/9.80 (%s) Presto/2.12.388 Version/12.14" << "Mozilla/5.0 (%s) Gecko/20100101 Firefox/4.0 Opera 12.14" << "Opera/9.80 (%s) Presto/2.12.388 Version/12.14" << "Opera/12.0(%s;U;en)Presto/22.9.168 Version/12.00" << "Opera/12.0 (%s;U;en) Presto/22.9.168 Version/12.00" << "Opera/9.80 (%s; U; pt) Presto/2.10.229 Version/11.62" << "Opera/9.80 (%s) Presto/2.9.168 Version/11.52" << "Opera/9.20 (%s)" << "Opera/9.0 (%s)"; brws_list[3] << "Mozilla/5.0 (%s; rv:1.0.1) Netscape/7.0" << "Mozilla/4.76 [en] (%s)"; brws_list[4] << "Mozilla/5.0 (compatible; MSIE 10.0; %s; Trident/6.0)" << "Mozilla/5.0 (compatible; MSIE 9.0; %s; Trident/5.0)" << "Mozilla/4.0 (compatible; MSIE 5.22; %s)" << "Mozilla/4.0 (compatible; MSIE 7.0; %s)" << "Mozilla/4.0 (compatible; MSIE 6.0; %s)" << "Mozilla/4.5 (compatible; MSIE 4.01; %s)" << "Mozilla/4.78 [en] (%s; U)" << "Mozilla/4.61 [en] (%s; I)" << "Mozilla/2.0 (compatible; MSIE 3.01; %s)" << "Mozilla/4.5 [en] (%s)" << "Mozilla/4.5 (%s)" << "Mozilla/3.01-C-MACOS8 (%s)" << "Mozilla/2.0 (%s; I)" << "Mozilla/3.0 WebTV/1.2 (compatible; MSIE 2.0)" << "Mozilla/2.0 (compatible; MS FrontPage Express 2.0)"; // brws_list[5] << "Mozilla/4.05 [fr] (%s; I)"; brws_list[5] << "Lynx/2.8rel.3 libwww-FM/2.14"; #if USE_QT_VERSION == 6 brws_list[6] << "Mozilla/4.5 (compatible; HTTraQt 1.0x; %s)" << "HyperBrowser (%s)" // << QString(PROGRAM_NAME + " " + PROGRAM_VERSION) << QString().asprintf(PROGRAM_FULL_NAME, HTTQTVERSION) + " (offline browser; web mirror utility)"; #else brws_list[6] << "Mozilla/4.5 (compatible; HTTraQt 1.0x; %s)" << "HyperBrowser (%s)" // << QString(PROGRAM_NAME + " " + PROGRAM_VERSION) << QString().sprintf(PROGRAM_FULL_NAME, HTTQTVERSION) + " (offline browser; web mirror utility)"; #endif // selectOnCombo ( *label1053, brws_list, "UserID" ); os << "X11; U; Linux i686; I" << "X11; U; Linux x86_64" << "X11; U; FreeBSD i386" << "X11; OpenBSD amd64" << "X11; OpenBSD i686" << "X11; U; GNU/kFreeBSD i686" << "X11; I; Linux 2.0.34 i686" << "Windows 3.11" << "Windows 95" << "Win98" << "Windows 98" << "Windows; U; WinNT3.51" << "Windows NT 5.0" << "Windows NT 5.1" << "Windows; U; Windows NT 5.1" << "Windows; U; Windows NT 6.1" << "Windows NT 6.2; Win64; x64" << "Windows NT 6.1; WOW64" << "Windows NT 7.1" << "BeOS; U; BeOS BePC" << "Macintosh; Intel Mac OS X 10.8" << "Macintosh; Intel Mac OS X; U;" << "Macintosh; Intel Mac OS X 10.6" << "Macintosh; U; PPC Mac OS X 10.5" << "X11; U; SunOS 5.8 sun4u" << "Mac_PowerPC" << "Macintosh; I; PPC" << "OS/2" << "Cray; I; OrganicOS 9.7.42beta-27"; browserForm::label1053_2->insertItems(0, os); QStringList footer; footer << "" << "" << "" << "" << "" << "" << ""; browserForm::label1054->addItems(footer); connect(browserForm::label1053_1, SIGNAL(currentIndexChanged ( int )), this, SLOT( brwserChanged(int))); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsBrowser::~optionsBrowser() { } void optionsBrowser::brwserChanged(int n) { browserForm::label1053->clear(); browserForm::label1053->insertItems(0, brws_list[n]); } void optionsBrowser::initTextPoints() { *opts << (trWidgets) { browserForm::label1196, _BROWS_ID, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1196_1, _BROWS_NAME, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1196_2, _OS_ID, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1197, _HTML_FOOT, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1053, -1, "BrowserID", COMBOBOX, "" }; *opts << (trWidgets) { browserForm::label1053_1, -1, "BrowserName", COMBOBOX, "" }; *opts << (trWidgets) { browserForm::label1053_2, -1, "osID", COMBOBOX, "" }; *opts << (trWidgets) { browserForm::label1054, -1, "Footer", COMBOBOX, "" }; } #if 0 void optionsBrowser::initTextPoints() { *opts << (trWidgets) { browserForm::label1196, _BROWS_ID, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1196_1, _BROWS_NAME, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1196_2, _OS_ID, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1197, _HTML_FOOT, "", LABEL, 0 }; *opts << (trWidgets) { browserForm::label1053, -1, "BrowserID", COMBOBOX, "" }; *opts << (trWidgets) { browserForm::label1053_1, -1, "BrowserName", COMBOBOX, "" }; *opts << (trWidgets) { browserForm::label1053_2, -1, "osID", COMBOBOX, "" }; *opts << (trWidgets) { browserForm::label1054, -1, "Footer", COMBOBOX, "" }; } #endif /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/forms/0000775000175000017500000000000013042707374020000 5ustar karbofoskarbofoshttraqt-1.4.11/sources/options/forms/OptionsSpider.ui0000664000175000017500000001431613042707374023146 0ustar karbofoskarbofos spiderForm 0 0 601 419 0 0 540 410 Form 0 0 Tolerant requests (for servers) Alt+V 0 0 Force old HTTP/1.0 requests (no 1.1) Alt+1 0 0 Update hack (limit re-transfers) Alt+U 0 0 0 0 Check document type Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 0 0 Parse java files Qt::Vertical 20 40 0 0 Accept cookies 0 0 URL hacks (join similar URLs) Alt+K 0 0 Spider: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Vertical 20 40 httraqt-1.4.11/sources/options/forms/OptionsBrowser.ui0000664000175000017500000001060013042707374023333 0ustar karbofoskarbofos browserForm 0 0 541 411 0 0 540 410 Form Qt::Vertical 20 40 Select browser 0 0 Browser "Identity" Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 Operation system "Identity" Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Edit UserAgent true false Qt::Horizontal 0 0 HTML footer Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Vertical 20 40 httraqt-1.4.11/sources/options/forms/OptionsMime.ui0000664000175000017500000000757113042707374022614 0ustar karbofoskarbofos mimeForm 0 0 541 411 0 0 540 410 Form MIME associations File types: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true MIME identity: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Vertical 20 40 httraqt-1.4.11/sources/options/forms/OptionsRulez.ui0000664000175000017500000001347713042707374023030 0ustar karbofoskarbofos rulezForm 0 0 540 414 0 0 540 410 Form 0 0 Use wildcards to exclude or include URLs or links. You can put several scan strings on the same line. Use spaces as separators. Example: +*.zip -www.*.com -www.*.edu/cgi-bin/*.cgi Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Pictures Alt+J Archives Alt+Z Multimedia Alt+V Documents QFrame::StyledPanel QFrame::Raised 2 false Add Scan Rule Criterion false Qt::Horizontal 88 20 String false + Alt+E - 0 0 Tip: To have ALL GIF files included, use something like +www.someweb.com/*.gif. (+*.gif / -*.gif will include/exclude ALL GIFs from ALL sites) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true httraqt-1.4.11/sources/options/forms/BuildStringDialog.ui0000664000175000017500000000762013042707374023712 0ustar karbofoskarbofos BuildStringDialog 0 0 422 352 0 0 8 About HTTraQt Website Copier 0 0 true QFrame::NoFrame QFrame::Raised Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true true 0 0 TextLabel Qt::Horizontal 198 20 75 25 75 25 Cancel 75 25 75 25 O&K Alt+K true httraqt-1.4.11/sources/options/forms/OptionsProxy.ui0000664000175000017500000001723713042707374023046 0ustar karbofoskarbofos proxyForm 0 0 541 411 0 0 540 410 Form 0 0 Use proxy for ftp transfers Alt+U Qt::Horizontal 40 20 Qt::Horizontal 40 20 0 0 Proxy address: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 Proxy port: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 25 0 75 16777215 Qt::Horizontal 40 20 Qt::Vertical 20 40 Authentication (only if needed) 0 0 Login: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal 216 20 0 0 Password: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 Hide password Alt+W Qt::Vertical 20 40 httraqt-1.4.11/sources/options/forms/OptionsBuild.ui0000664000175000017500000001440213042707374022753 0ustar karbofoskarbofos buildForm 0 0 541 411 0 0 540 410 Form Qt::Vertical 20 40 0 0 Structure type (how links are saved) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 DOS names (8+3) Alt+8 0 0 150 25 16777215 25 Options 0 0 ISO9660 names Alt+9 0 0 No error pages Alt+E 0 0 No external pages Alt+X 0 0 Hide passwords Alt+W 0 0 Hide query strings Alt+Q 0 0 Do not purge old files Alt+F Qt::Vertical 20 40 httraqt-1.4.11/sources/options/forms/OptionsLinks.ui0000664000175000017500000000732113042707374022776 0ustar karbofoskarbofos linksForm 0 0 541 411 0 0 540 410 Form Qt::Vertical QSizePolicy::Expanding 518 158 0 0 Attempt to detect all links (even in unknown tags/javascript code) Alt+J 0 0 Get non-HTML files related to a link, eg external .ZIP or pictures Alt+Z 0 0 Test validity of all links (even external ones) Alt+V 0 0 Get HTML files first! Alt+H Qt::Vertical QSizePolicy::Expanding 518 98 httraqt-1.4.11/sources/options/forms/OptionsLog.ui0000664000175000017500000001075213042707374022441 0ustar karbofoskarbofos logForm 0 0 541 411 0 0 540 410 Form Qt::Vertical 20 119 0 0 Store ALL files in cache Alt+F 0 0 Do not re-download locally erased files Alt+Y 0 0 Create Log files Alt+C 0 0 0 0 Build top index 0 0 Make an index 0 0 Make a word database Qt::Vertical 20 119 httraqt-1.4.11/sources/options/forms/OptionsLimits.ui0000664000175000017500000004631413042707374023164 0ustar karbofoskarbofos limitsForm 0 0 613 416 0 0 540 410 Form 45 0 50 16777215 s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 450 0 Max transfer rate Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 25 true 100 0 125 25 true 100 0 125 16777215 Qt::Horizontal 100 0 125 25 true 0 0 450 0 Maximum external depth: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal QSizePolicy::Preferred 45 20 45 0 50 16777215 B/s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal QSizePolicy::Preferred 45 20 Qt::Horizontal QSizePolicy::Preferred 45 20 0 0 450 0 Max size of any non-HTML file Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 25 true 0 0 450 0 Pause after downloading.. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 450 0 Site size limit (B) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 16777215 0 0 450 0 Maximum mirroring depth: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 25 true 45 0 50 16777215 B/s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 45 0 50 16777215 s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 16777215 0 0 450 0 Max time overall (s) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 450 0 Maximum number of links Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 450 0 Max size of any HTML file (B) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 16777215 0 0 450 0 Max connections / seconds Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 0 125 25 true 45 0 50 16777215 B/s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 45 0 50 16777215 B/s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal QSizePolicy::Preferred 45 20 Qt::Vertical 20 40 Qt::Vertical 20 40 httraqt-1.4.11/sources/options/forms/OptionsDialog.ui0000664000175000017500000001464113042707374023120 0ustar karbofoskarbofos OptionsDialog Qt::NonModal 0 0 650 503 0 0 650 450 8 Project Options true 0 0 0 540 410 800 600 true false QLayout::SetFixedSize Qt::Horizontal 40 20 0 0 30 25 16777215 35 Save as Default false 0 0 30 25 16777215 35 He&lp Alt+L false 0 0 30 25 16777215 35 &Cancel false 0 0 30 25 16777215 35 &OK false false QTabBar QWidget
qtabbar.h
buttonOk buttonCancel
httraqt-1.4.11/sources/options/forms/OptionsExperts.ui0000664000175000017500000001454713042707374023360 0ustar karbofoskarbofos expertsForm 0 0 541 411 0 0 540 410 Form 400 16777215 0 0 Global travel mode Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 400 16777215 0 0 Rewrite links: internal / external Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 400 16777215 Activate Debugging Mode (httraqt.log) These options should be modified only exceptionally Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 Use a cache for updates Alt+U 0 0 Primary Scan Rule (scan mode) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 400 16777215 0 0 Travel mode Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Vertical 20 40 Qt::Vertical 495 67 Qt::Vertical 495 67 httraqt-1.4.11/sources/options/forms/OptionsFlow.ui0000664000175000017500000002203613042707374022625 0ustar karbofoskarbofos flowForm 0 0 607 410 0 0 540 410 Form Qt::Vertical 20 67 0 0 200 0 Number of connections Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 25 0 0 200 0 TimeOut (s) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 25 true s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal 40 20 0 0 200 0 Retries Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 25 true 0 0 200 0 Min Transfer Rate (B/s) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 100 16777215 B/s Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal 40 20 Qt::Horizontal 40 20 Qt::Horizontal 40 20 0 0 Remove host if timeout 0 0 Remove host if low 0 0 Persistent connections (Keep-Alive) Alt+K Qt::Vertical 20 67 httraqt-1.4.11/sources/options/OptionsDialog.cpp0000664000175000017500000003745113202344735022137 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include #include "../main/includes/httraqt.h" #include "includes/OptionsDialog.h" int OptionsDialog::headers[OPTION_SITES] = {_LINKS, _BUILD, _SCANRULEZ, _LIMITS, _PROXY, _EXPERTS, _MIMETYPES, _FLOWCONTROL, _SPIDER, _BROWSERID, _LOGINDEX }; OptionsDialog::OptionsDialog(QWidget* parent, Qt::WindowFlags fl) : QDialog(parent, fl) { setupUi(this); this->parent = static_cast(parent); _tabTextInfos.clear(); for (int i = 0; i < OPTION_SITES; i++) { tabBar->insertTab (i, translate(headers[i])); } connect(tabBar, SIGNAL(currentChanged(int)), this, SLOT(switchPages(int))); pBuild = new optionsBuild(this); gridWidget->addWidget((QWidget*)pBuild); pBrowser = new optionsBrowser(this); gridWidget->addWidget((QWidget*)pBrowser); pFlow = new optionsFlow(this); gridWidget->addWidget((QWidget*)pFlow); pLimits = new optionsLimits(this); gridWidget->addWidget((QWidget*)pLimits); pLinks = new optionsLinks(this); gridWidget->addWidget((QWidget*)pLinks); pProxy = new optionsProxy(this); gridWidget->addWidget((QWidget*)pProxy); pRulez = new optionsRulez(this); gridWidget->addWidget((QWidget*)pRulez); pExperts = new optionsExperts(this); gridWidget->addWidget((QWidget*)pExperts); pLog = new optionsLog(this); gridWidget->addWidget((QWidget*)pLog); pSpider = new optionsSpider(this); gridWidget->addWidget((QWidget*)pSpider); pMime = new optionsMime(this); gridWidget->addWidget((QWidget*)pMime); initOptionsDialog(); setFontForWidgets(); QSettings s(QSettings::UserScope, "KarboSoft", "HTTraQt"); QPoint pos = s.value("posSettings", QPoint(200, 200)).toPoint(); QSize size = s.value("sizeSettings", QSize(700, 550)).toSize(); resize(size); move(pos); connect(buttonOk, SIGNAL(clicked()), this, SLOT(onOk())); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); connect(pushDefault, SIGNAL(clicked()), this, SLOT(onSaveDefOptions())); connect(buttonHelp, SIGNAL(clicked()), this, SLOT(onHelp())); QWidget* p[] = {pLinks, pBuild, pRulez, pLimits, pProxy, pExperts, pMime, pFlow, pSpider, pBrowser, pLog}; memcpy(pages, p, OPTION_SITES * sizeof(QWidget*)); for (int i = 0; i < OPTION_SITES; i++) { pages[i]->adjustSize(); } update(); setToGUI(); emit switchPages(0); } OptionsDialog::~OptionsDialog() { QSettings s(QSettings::UserScope, "KarboSoft", "HTTraQt"); s.setValue("posSettings", pos()); s.setValue("sizeSettings", size()); s.sync(); delete pBuild; delete pBrowser; delete pFlow; delete pLimits; delete pLinks; delete pProxy; delete pRulez; delete pExperts; delete pLog; delete pSpider; delete pMime; } void OptionsDialog::setFontForWidgets(void) { QFont f = parent->sysFont; setFont(f); pBuild->setFont(f); pBrowser->setFont(f); pFlow->setFont(f); pLimits->setFont(f); pLinks->setFont(f); pProxy->setFont(f); pRulez->setFont(f); pExperts->setFont(f); pLog->setFont(f); pSpider->setFont(f); pMime->setFont(f); } void OptionsDialog::initOptionsDialog() { QVector::iterator ivec; for (ivec = _tabTextInfos.begin(); ivec != _tabTextInfos.end(); ++ivec) { (*ivec).value = prOptions[ (*ivec).idString ]; #ifdef MY_DEBUG if ((*ivec).opttype != prOptions[ (*ivec).idString ].type) { qDebug() << "set to gui" << iopt.key() << "not found in gui!"; } #endif } } void OptionsDialog::getFromGUI() { for (QVector::iterator ivec = _tabTextInfos.begin(); ivec != _tabTextInfos.end(); ++ivec) { QMetaType::Type optType = (QMetaType::Type)(*ivec).value.type(); switch ((*ivec).wtype) { case CHECKBOX: (*ivec).value = ((QCheckBox*)(*ivec).wg)->isChecked() ? 1 : 0; break; case EDITLINE: { if ( optType == QMetaType::Int) { if (((QLineEdit*)(*ivec).wg)->text().length() > 0) { (*ivec).value = ((QLineEdit*)(*ivec).wg)->text().toInt(); } } else { (*ivec).value = -1; } if (optType == QMetaType::Float) { if (((QLineEdit*)(*ivec).wg)->text().length() > 0) { (*ivec).value = ((QLineEdit*)(*ivec).wg)->text().toFloat(); } else { (*ivec).value = -1.0; } } if (optType == QMetaType::QString) { (*ivec).value = ((QLineEdit*)(*ivec).wg)->text(); } break; } case LABEL: { if (optType == QMetaType::QString) { (*ivec).value = ((QLabel*)(*ivec).wg)->text(); } break; } case TEXTEDIT: { // this one only for rulez->scanList (*ivec).value = (((QTextEdit*)(*ivec).wg)->toPlainText()).replace("\n", " ").simplified(); break; } case RADIO: // not exists break; case GROUPBOX: { if (optType == QMetaType::Int) { (*ivec).value = ((QGroupBox*)(*ivec).wg)->isChecked() ? 1 : 0; } break; } case COMBOBOX: { if (optType == QMetaType::QString) { (*ivec).value = ((QComboBox*)(*ivec).wg)->currentText(); } if (optType == QMetaType::Int || optType == QMetaType::Float) { bool ok; QString ct = ((QComboBox*)(*ivec).wg)->currentText(); if (ct == "" || ct == "-") { // qDebug() << "get options combo" << (*ivec).idString << (*ivec).value; if (optType == QMetaType::Int ) { (*ivec).value = -1; } if (optType == QMetaType::Float ) { (*ivec).value = -1.0; } } else { if (optType == QMetaType::Int ) { int num = ct.toInt(&ok); if (ok == true) { (*ivec).value = num; } else { (*ivec).value = ((QComboBox*)(*ivec).wg)->currentIndex(); } } else { float num = ct.toFloat(&ok); if (ok == true) { (*ivec).value = num; } else { (*ivec).value = ((QComboBox*)(*ivec).wg)->currentIndex(); } } } } break; } } prOptions[ (*ivec).idString ] = (*ivec).value; } } void OptionsDialog::setToGUI() { for (QVector::iterator ivec = _tabTextInfos.begin(); ivec != _tabTextInfos.end(); ++ivec) { QMetaType::Type optTypeLo = (QMetaType::Type)(*ivec).value.type();// & 0x0f; // bool nonZero = (((*ivec).opttype & 0x80) != 0); switch ((*ivec).wtype) { case LABEL: { if((*ivec).idTr != -1) { QString t = translate((*ivec).idTr); ((QLabel*)(*ivec).wg)->setText(t.replace("\n", " ")); } else { QString t = translate((*ivec).value.toInt()); ((QLabel*)(*ivec).wg)->setText(t.replace("\n", " ")); } break; } case TEXTEDIT: { // this one only for rulez->scanList, without translation ((QTextEdit*)(*ivec).wg)->setText((*ivec).value.toString()); break; } case BUTTON: { if((*ivec).idTr != -1) { ((QPushButton*)(*ivec).wg)->setText(translate((*ivec).idTr)); } break; } case CHECKBOX: { if((*ivec).idTr != -1) { QString t = translate((*ivec).idTr); ((QCheckBox*)(*ivec).wg)->setText(t.replace("\n", " ")); } if (optTypeLo != QMetaType::QString) { if ((*ivec).value.toInt() == 1) { ((QCheckBox*)(*ivec).wg)->setCheckState(Qt::Checked); } else { ((QCheckBox*)(*ivec).wg)->setCheckState(Qt::Checked); // for toggling ((QCheckBox*)(*ivec).wg)->setCheckState(Qt::Unchecked); } } break; } case GROUPBOX: { if((*ivec).idTr != -1) { ((QGroupBox*)(*ivec).wg)->setTitle(translate((*ivec).idTr)); } if (optTypeLo == QMetaType::Int) { if ((*ivec).value.toInt() == 1) { ((QGroupBox*)(*ivec).wg)->setChecked(true); } else { ((QGroupBox*)(*ivec).wg)->setChecked(false); } } break; } case COMBOBOX: { if (optTypeLo == QMetaType::QString) { int index = ((QComboBox*)(*ivec).wg)->findText((*ivec).value.toString()); if (index >= 0) { ((QComboBox*)(*ivec).wg)->setCurrentIndex(index); } else { QString t = (*ivec).value.toString(); ((QComboBox*)(*ivec).wg)->addItem(t); int tInd = ((QComboBox*)(*ivec).wg)->findText(t); ((QComboBox*)(*ivec).wg)->setCurrentIndex(tInd); } break; } int num; if (((QComboBox*)(*ivec).wg)->findText("") == -1) { num = (*ivec).value.toInt(); ((QComboBox*)(*ivec).wg)->setCurrentIndex(num); break; } if (optTypeLo == QMetaType::Int) { int pos; num = (*ivec).value.toInt(); if ( num == -1 ) { pos = ((QComboBox*)(*ivec).wg)->findText(""); ((QComboBox*)(*ivec).wg)->setCurrentIndex(pos); } else { QString st = QString::number(num); insertInCombo(*(QComboBox*)(*ivec).wg, st); } break; } if (optTypeLo == QMetaType::Float) { int pos; // qDebug() << "set to gui" << (*ivec).idString << (*ivec).value; if ((*ivec).value.toFloat() == -1.0 ) { pos = ((QComboBox*)(*ivec).wg)->findText(""); ((QComboBox*)(*ivec).wg)->setCurrentIndex(pos); } else { QString st = QString::number((*ivec).value.toFloat()); insertInCombo(*(QComboBox*)(*ivec).wg, st); } break; } } case RADIO: { if((*ivec).idTr != -1) { QString t = translate((*ivec).idTr); ((QRadioButton*)(*ivec).wg)->setText(t.replace("\n", " ")); } break; } case EDITLINE: {// no translate for edit widget if (optTypeLo == QMetaType::Int) { if ((*ivec).value.toInt() == -1 ) { ((QLineEdit*)(*ivec).wg)->setText(""); } else { ((QLineEdit*)(*ivec).wg)->setText(QString::number((*ivec).value.toInt())); } break; } if (optTypeLo == QMetaType::Float) { if ((*ivec).value.toFloat() == -1.0 ) { ((QLineEdit*)(*ivec).wg)->setText(""); } else { ((QLineEdit*)(*ivec).wg)->setText(QString::number((*ivec).value.toFloat())); } break; } if (optTypeLo == QMetaType::QString) { ((QLineEdit*)(*ivec).wg)->setText((*ivec).value.toString()); break; } } } } } void OptionsDialog::insertInCombo( QComboBox &box, const QString &s) { float tmp; bool conv; tmp = s.toFloat(&conv); if (conv == false) { qDebug() << "convert error" << s << "to float"; return; } if (box.count() < 2) { return; } for(int ib = 1; ib != box.count() - 1; ++ib) { // the first is "space" or -1 float a, b; a = box.itemText(ib).toFloat(); if (tmp < a) { continue; } b = box.itemText(ib + 1).toFloat(); if (tmp == a) { box.setCurrentIndex(ib); return; // exists } if (tmp == b) { box.setCurrentIndex(ib + 1); return; // exists } if (tmp < b) { box.insertItem(ib + 1, s); return; } } } void OptionsDialog::onHelp() { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( parent->helpDir + "/step9.html"))); } void OptionsDialog::switchPages(int n) { QToolButton* s = (QToolButton*)sender(); if (n == -1) { return; } for (int i = 0; i < OPTION_SITES; i++) { if (i == n) { pages[i]->show(); continue; } pages[i]->hide(); } } void OptionsDialog::onResetDefOptions() { parent->initOptions(); parent->writeSettings(true); } void OptionsDialog::onSaveDefOptions() { getFromGUI(); parent->writeSettings(true); } void OptionsDialog::onOk() { getFromGUI(); parent->writeSettings(false); // project settings reject(); } httraqt-1.4.11/sources/options/includes/0000775000175000017500000000000014355306427020462 5ustar karbofoskarbofoshttraqt-1.4.11/sources/options/includes/optionslinks.h0000664000175000017500000000414414355306405023366 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSLINKS_H #define OPTIONSLINKS_H #include #include #include "ui_OptionsLinks.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsLinks : public QWidget, private Ui::linksForm { Q_OBJECT public: optionsLinks(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsLinks(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: OptionsDialog* parent; /*$PROTECTED_FUNCTIONS$*/ protected slots: /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionsmime.h0000664000175000017500000000442414355306416023200 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSMIME_H #define OPTIONSMIME_H #include #include #include "ui_OptionsMime.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsMime : public QWidget, private Ui::mimeForm { Q_OBJECT public: optionsMime(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsMime(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: void selectOnCombo(QComboBox &cb, QStringList &sl, QString vari); protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; QVector ident; QVector mime; protected slots: void onMIME(); /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionslimits.h0000664000175000017500000000435114355306377023557 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSLIMITS_H #define OPTIONSLIMITS_H #include #include #include "ui_OptionsLimits.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsLimits : public QWidget, private Ui::limitsForm { Q_OBJECT public: optionsLimits(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsLimits(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: void selectOnCombo(QComboBox &cb, QStringList &sl, QString vari); protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: /*$PROTECTED_SLOTS$*/ void editingFinished(void); private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionsbrowser.h0000664000175000017500000000440014355306353023726 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSBROWSER_H #define OPTIONSBROWSER_H #include #include "./OptionsDialog.h" #include "ui_OptionsBrowser.h" class OptionsDialog; class optionsBrowser : public QWidget, private Ui::browserForm { Q_OBJECT public: optionsBrowser(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsBrowser(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: void selectOnCombo(QComboBox &cb, QStringList &sl, QString vari); protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: /*$PROTECTED_SLOTS$*/ void brwserChanged(int n); private: QVector* opts; QStringList brws_list[7]; }; #endif httraqt-1.4.11/sources/options/includes/optionsbuild.h0000664000175000017500000000436714355306361023355 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSBUILD_H #define OPTIONSBUILD_H #include #include #include "ui_OptionsBuild.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsBuild : public QWidget, private Ui::buildForm { Q_OBJECT public: optionsBuild(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsBuild(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ // protected: // void selectOnCombo(QComboBox& cb, QStringList& sl, QString vari); protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: virtual void callBuildStringDialog(); /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionsexperts.h0000664000175000017500000000414114355306373023741 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSEXPERTS_H #define OPTIONSEXPERTS_H #include #include "ui_OptionsExperts.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsExperts : public QWidget, private Ui::expertsForm { Q_OBJECT public: optionsExperts(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsExperts(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionsproxy.h0000664000175000017500000000420514355306423023425 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSPROXY_H #define OPTIONSPROXY_H #include #include #include "ui_OptionsProxy.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsProxy : public QWidget, private Ui::proxyForm { Q_OBJECT public: optionsProxy(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsProxy(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: void hidePass(bool f); /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/OptionsDialog.h0000664000175000017500000001003714355306237023406 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include #ifndef OPTIONS_H #define OPTIONS_H struct trWidgets { QWidget* wg; short idTr; // for translations QString idString; short wtype; // EDITLINE, TEXTEDIT, CHECKBOX, LABEL, RADIO, COMBOBOX // short opttype; // bool, num or string // short dummy; QVariant value; // value or wrap length for GUI }; #endif #ifndef OPTIONSDIALOG_H #define OPTIONSDIALOG_H #include "../../main/includes/httraqt.h" #include "../../main/includes/options.h" #include "ui_OptionsDialog.h" // #include "ui_optionsBuild.h" #include "optionslinks.h" #include "optionslimits.h" #include "optionsproxy.h" #include "optionsbuild.h" #include "optionsrulez.h" #include "optionsexperts.h" #include "optionslog.h" #include "optionsspider.h" #include "optionsbrowser.h" #include "optionsflow.h" #include "optionsmime.h" #define OPTION_SITES 11 // #define NOWRAP -1 #define CHECKBOX 0 #define LABEL 1 #define GROUPBOX 2 #define RADIO 4 #define COMBOBOX 5 #define BUTTON 6 #define EDITLINE 7 #define TEXTEDIT 8 class optionsBuild; class optionsBrowser; class optionsFlow; class optionsLimits; class optionsLinks; class optionsProxy; class optionsRulez; class optionsExperts; class optionsLog; class optionsSpider; class optionsMime; class OptionsDialog: public QDialog, public Ui::OptionsDialog, public cTranslator, public cOptions { Q_OBJECT public: OptionsDialog(QWidget * parent = 0, Qt::WindowFlags f = Qt::WindowType::Widget); ~OptionsDialog(); void onSetDefOptions(); void setToGUI(); void getFromGUI(); void initOptionsDialog(); void setFontForWidgets(void); private slots: void onHelp(); void onOk(); void onSaveDefOptions(); void onResetDefOptions(); void switchPages(int n); private: void insertInCombo( QComboBox &b, const QString &s); private: optionsBuild* pBuild; optionsBrowser* pBrowser; optionsFlow* pFlow; optionsLimits* pLimits; optionsLinks* pLinks; optionsProxy* pProxy; optionsRulez* pRulez; optionsExperts* pExperts; optionsLog* pLog; optionsSpider* pSpider; optionsMime* pMime; // max OPTION_SITES QWidget* pages[OPTION_SITES]; static int headers[OPTION_SITES]; QString okText; QString helpText; QString cancelText; public: QVector _tabTextInfos; HTTraQt* parent; }; #endif httraqt-1.4.11/sources/options/includes/optionsrulez.h0000664000175000017500000000465114355306427023416 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSRULEZ_H #define OPTIONSRULEZ_H #include #include #include "ui_OptionsRulez.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsRulez : public QWidget, private Ui::rulezForm { Q_OBJECT public: optionsRulez(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsRulez(); /*$PUBLIC_FUNCTIONS$*/ private: // void getScanRulezFromGUI(); void initTextPoints(); void detectTypeInc(const QString &st, int i); void onChangeLinks(bool incl); // public slots: /*$PUBLIC_SLOTS$*/ protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: void setScanRulezToGUI(); void onInc(); void onIncludedLinks(); void onExcludedLinks(); /*$PROTECTED_SLOTS$*/ private: QVector* opts; QString ext[4]; QCheckBox* chk[4]; }; #endif httraqt-1.4.11/sources/options/includes/optionslog.h0000664000175000017500000000413014355306412023020 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSLOG_H #define OPTIONSLOG_H #include #include #include "ui_OptionsLog.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsLog : public QWidget, private Ui::logForm { Q_OBJECT public: optionsLog(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsLog(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionsspider.h0000664000175000017500000000415414355306072023535 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSSPIDER_H #define OPTIONSSPIDER_H #include #include #include "ui_OptionsSpider.h" #include "./OptionsDialog.h" class OptionsDialog; class optionsSpider : public QWidget, private Ui::spiderForm { Q_OBJECT public: optionsSpider(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsSpider(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/optionsflow.h0000664000175000017500000000442014355306367023221 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONSFLOW_H #define OPTIONSFLOW_H #include #include #include "./OptionsDialog.h" #include "ui_OptionsFlow.h" class OptionsDialog; class optionsFlow : public QWidget, private Ui::flowForm { Q_OBJECT public: optionsFlow(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~optionsFlow(); /*$PUBLIC_FUNCTIONS$*/ private: void initTextPoints(); public slots: /*$PUBLIC_SLOTS$*/ protected: void selectOnCombo(QComboBox &cb, QStringList &sl, QString vari); protected: /*$PROTECTED_FUNCTIONS$*/ OptionsDialog* parent; protected slots: /*$PROTECTED_SLOTS$*/ void editingFinished(void); protected slots: /*$PROTECTED_SLOTS$*/ private: QVector* opts; }; #endif httraqt-1.4.11/sources/options/includes/BuildStringDialog.h0000664000175000017500000000354713202344735024204 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef BUILDSTRING_H #define BUILDSTRING_H #include "../../main/includes/httraqt.h" #include "ui_BuildStringDialog.h" class HTTraQt; class BuildStringDialog: public QDialog, public Ui::BuildStringDialog, public cTranslator { Q_OBJECT public: BuildStringDialog(QWidget *parent = 0); void initTextPoints(); private: HTTraQt* parent; private slots: void onOk(); }; #endif httraqt-1.4.11/sources/options/BuildStringDialog.cpp0000664000175000017500000000433113202344735022721 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include "../main/includes/httraqt.h" #include "includes/BuildStringDialog.h" BuildStringDialog::BuildStringDialog(QWidget *parent) : QDialog(parent) { setupUi(this); this->parent = static_cast(parent); initTextPoints(); setWindowTitle(translate(_USERDEFSTRUCT)); connect(okButton, SIGNAL(clicked()), this, SLOT(onOk())); connect(pushButton, SIGNAL(clicked()), this, SLOT(reject())); } void BuildStringDialog::onOk() { QString st; st = lineEdit->text(); parent->SetProfile("BuildString", st); accept(); } void BuildStringDialog::initTextPoints() { QString st; label->setText(translate(_Q2)); label_2->setText(translate(_Q3)); parent->GetProfile("BuildString", st); lineEdit->setText(st); } httraqt-1.4.11/sources/options/optionsbuild.cpp0000664000175000017500000000637313202344735022076 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/BuildStringDialog.h" #include "includes/OptionsDialog.h" #include "includes/optionsbuild.h" #include "../main/includes/httraqt.h" optionsBuild::optionsBuild(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::buildForm() { setupUi(this); this->parent = static_cast(parent); QString str = this->parent->translate(LISTDEF_3); QStringList strl = str.split("\n"); buildForm::label1045->insertItems(0, strl); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); connect(buildForm::label1209, SIGNAL(clicked()), this, SLOT(callBuildStringDialog())); } optionsBuild::~optionsBuild() { } void optionsBuild::initTextPoints() { *opts << (trWidgets) { buildForm::label1192, _STRUCT_TYPE, "", LABEL, 0 }; *opts << (trWidgets) { buildForm::label1030, _DOS_NAMES, "Dos", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1034, _NO_ERR_PAG, "NoErrorPages", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1035, _NO_EXTERAL, "NoExternalPages", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1037, _HIDE_PASS, "NoPwdInPages", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1038, _HIDE_QUERY, "NoQueryStrings", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1036, _NOT_PURGE, "NoPurgeOldFiles", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1031, _ISO9660_NAMES, "ISO9660", CHECKBOX, 0 }; *opts << (trWidgets) { buildForm::label1045, -1, "Build", COMBOBOX, 0 }; } void optionsBuild::callBuildStringDialog() { // einbauen aufruf vom dialog BuildStringDialog* bdial = new BuildStringDialog(this->parent->parent); bdial->exec(); } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionsexperts.cpp0000664000175000017500000000666713202344735022477 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionsexperts.h" #include "../main/includes/httraqt.h" optionsExperts::optionsExperts(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::expertsForm() { QString t; QStringList sl; setupUi(this); this->parent = static_cast(parent); t = this->parent->translate(LISTDEF_4); sl = t.split("\n"); expertsForm::label1046->addItems(sl); t = this->parent->translate(LISTDEF_5); sl = t.split("\n"); expertsForm::label1047->addItems(sl); t = this->parent->translate(LISTDEF_6); sl = t.split("\n"); expertsForm::label1048->addItems(sl); t = this->parent->translate(LISTDEF_11); sl = t.split("\n"); expertsForm::label1049->addItems(sl); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsExperts::~optionsExperts() { } void optionsExperts::initTextPoints() { *opts << (trWidgets) { expertsForm::label1257, _ONLY_EXPERTS, "", LABEL, 0 }; *opts << (trWidgets) { expertsForm::label1193, _PRIM_SCAN, "", LABEL, 0 }; *opts << (trWidgets) { expertsForm::label1200, _TRAVEL_MODE, "", LABEL, 0 }; *opts << (trWidgets) { expertsForm::label1201, _GLOBAL_TRAVEL, "", LABEL, 0 }; *opts << (trWidgets) { expertsForm::label1202, _REWRITE_LINKS, "", LABEL, 0 }; *opts << (trWidgets) { expertsForm::label1046, -1, "PrimaryScan", COMBOBOX, 0 }; *opts << (trWidgets) { expertsForm::label1047, -1, "Travel", COMBOBOX, 0 }; *opts << (trWidgets) { expertsForm::label1048, -1, "GlobalTravel", COMBOBOX, 0 }; *opts << (trWidgets) { expertsForm::label1049, -1, "RewriteLinks", COMBOBOX, 0 }; *opts << (trWidgets) { expertsForm::label1029, _USE_CACHE, "Cache", CHECKBOX, 0 }; *opts << (trWidgets) { expertsForm::label1021_2, _DEBUG_MODE, "Debug", CHECKBOX, 0 }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionsflow.cpp0000664000175000017500000001235713202344735021745 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/optionsflow.h" #include "includes/OptionsDialog.h" #include "../main/includes/httraqt.h" optionsFlow::optionsFlow(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::flowForm() { setupUi(this); this->parent = static_cast(parent); QStringList connections; connections << ""; for (int i = 1; i < 15; i++) { connections << QString::number(i); } flowForm::labelConn->insertItems(0, connections); QStringList timeout; timeout << "" << "30" << "60" << "120" << "180" << "300" << "600" << "1200"; flowForm::labelTimeout->insertItems(0, timeout); flowForm::labelTimeout->setDuplicatesEnabled(true); connect (flowForm::labelTimeout->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); QStringList retries; retries << "" << "0" << "1" << "2" << "3" << "6"; flowForm::labelRetries->insertItems(0, retries); flowForm::labelRetries->setDuplicatesEnabled(true); connect (flowForm::labelRetries->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsFlow::~optionsFlow() { } // check the entered value depended from combobox void optionsFlow::editingFinished() { QLineEdit* from; bool valGood; QString t; from = (QLineEdit*)sender(); QComboBox *par = (QComboBox*)from->parent(); t = from->text(); // qDebug() << from << t; if (t == "" || t == "\n") { par->setCurrentIndex(0); // first element, = -1 return; } disconnect (from, SIGNAL(editingFinished()), this, SLOT(editingFinished())); if (from == flowForm::labelTimeout->lineEdit()) { // int, range: space, 0..255 int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 1200)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (from == flowForm::labelRetries->lineEdit()) { // int, range: space, 0..9999 int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 99)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (valGood == true) { // qDebug() << "right" << t; int currInd = par->findText(t); if ( currInd < 0) { par->addItem(t); par->model()->sort(0); int tInd = par->findText(t); par->setCurrentIndex(tInd); } else { par->setCurrentIndex(currInd); } } connect (from, SIGNAL(editingFinished()), this, SLOT(editingFinished())); } void optionsFlow::initTextPoints() { *opts << (trWidgets) { flowForm::label1201_2, _NR_CONN, "", LABEL, 0 }; *opts << (trWidgets) { flowForm::label1290, _TIMEOUTS, "", LABEL, 0 }; *opts << (trWidgets) { flowForm::label1203, _RETRIES, "", LABEL, 0 }; *opts << (trWidgets) { flowForm::label1202_2, _MIN_RATE, "", LABEL, 0 }; *opts << (trWidgets) { flowForm::label1055, -1, "RateOut", EDITLINE, 0 }; *opts << (trWidgets) { flowForm::labelConn, -1, "Sockets", COMBOBOX, 0 }; *opts << (trWidgets) { flowForm::labelTimeout, -1, "TimeOut", COMBOBOX, 0 }; *opts << (trWidgets) { flowForm::labelRetries, -1, "Retry", COMBOBOX, 0 }; *opts << (trWidgets) { flowForm::label1033, _KEEP_ALIVE, "KeepAlive", CHECKBOX, 0 }; *opts << (trWidgets) { flowForm::label1031_2, _CANCEL_TIMEOUT, "RemoveTimeout", CHECKBOX, 0 }; *opts << (trWidgets) { flowForm::label1032, _CANCEL_SLOW, "RemoveRateout", CHECKBOX, 0 }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionsmime.cpp0000664000175000017500000001066114355525467021736 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionsmime.h" #include "../main/includes/httraqt.h" optionsMime::optionsMime(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::mimeForm() { setupUi(this); this->parent = static_cast(parent); QStringList htmlMime; htmlMime << "" << "text/html" << "text/text" << "image/gif" << "image/jpeg" << "image/png" << "application/x-zip" << "application/x-tar.gz" << "application/x-rar" << "application/x-mp3" << "application/x-mov" << "application/octet-stream"; ident << mimeForm::ident01 << mimeForm::ident02 << mimeForm::ident03 << mimeForm::ident04 << mimeForm::ident05 << mimeForm::ident06 << mimeForm::ident07 << mimeForm::ident08; mime << mimeForm::mime01 << mimeForm::mime02 << mimeForm::mime03 << mimeForm::mime04 << mimeForm::mime05 << mimeForm::mime06 << mimeForm::mime07 << mimeForm::mime08; for (int i = 0; i < ident.size(); i++) { ident[i]->insertItems(0, htmlMime); // connect(ident[i], SIGNAL(activated(int)), this, SLOT(onMIME())); } QString st; QStringList listeMime; listeMime << "" << "php" << "cgi" << "asp" << "php2" << "php3" << "php4" << "php5" << "jsp" << "pl" << "cfm" << "php,php3,asp" << "asp,exe" << "pl,cgi" << "php,php2,php3,php4,php5"; for (int i = 0; i < mime.size(); i++) { mime[i]->insertItems(0, listeMime); } opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsMime::~optionsMime() { } void optionsMime::initTextPoints() { *opts << (trWidgets) { mimeForm::groupBox_3, _MIME_ASSOC, "", GROUPBOX, 0 }; *opts << (trWidgets) { mimeForm::label1294, _FILE_TYPES, "", LABEL, 0 }; *opts << (trWidgets) { mimeForm::label1295, _MIME_ID, "", LABEL, 0 }; for (int i = 0; i < 8; i++) { #if USE_QT_VERSION == 6 *opts << (trWidgets) { ident[i], -1, QString().asprintf("MIMEDefsExt%d", (i + 1)), COMBOBOX, "" }; *opts << (trWidgets) { mime[i], -1, QString().asprintf("MIMEDefsMime%d", (i + 1)), COMBOBOX, "" }; #else *opts << (trWidgets) { ident[i], -1, QString().sprintf("MIMEDefsExt%d", (i + 1)), COMBOBOX, "" }; *opts << (trWidgets) { mime[i], -1, QString().sprintf("MIMEDefsMime%d", (i + 1)), COMBOBOX, "" }; #endif } } void optionsMime::onMIME() { for (int i = 0; i < 8; i++) { if (mime[i]->currentText().length() > 0 && ident[i]->currentText().length() > 0) { ident[i]->setEnabled(true); mime[i]->setEnabled(true); if (i < 7) { ident[i + 1]->setEnabled(true); mime[i + 1]->setEnabled(true); } continue; } if (mime[i]->currentText().length() == 0 && ident[i]->currentText().length() == 0) { ident[i]->setEnabled(false); mime[i]->setEnabled(false); } } } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionslog.cpp0000664000175000017500000000540113202344735021547 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionslog.h" #include "../main/includes/httraqt.h" optionsLog::optionsLog(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::logForm() { setupUi(this); this->parent = static_cast(parent); QString t = this->parent->translate(LISTDEF_9); QStringList sl = t.split("\n"); logForm::comboLogType->addItems(sl); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsLog::~optionsLog() { } void optionsLog::initTextPoints() { *opts << (trWidgets) { logForm::comboLogType, -1, "LogType", COMBOBOX, 0 }; *opts << (trWidgets) { logForm::checkStoreAll, _STORE_CACHE, "StoreAllInCache", CHECKBOX, 0 }; *opts << (trWidgets) { logForm::checkNoRecatch, _NO_REDOWNLOAD, "NoRecatch", CHECKBOX, 0 }; *opts << (trWidgets) { logForm::checkLogFiles, _CREATE_LOG, "Log", CHECKBOX, 0 }; *opts << (trWidgets) { logForm::checkMakeIndex, _MAKE_INDEX, "Index", CHECKBOX, 0 }; *opts << (trWidgets) { logForm::checkBuildTopIndex, _MAKE_TOPINDEX, "BuildTopIndex", CHECKBOX, 0 }; *opts << (trWidgets) { logForm::checkMakeWordbase, _MAKE_WORD_INDEX, "WordIndex", CHECKBOX, 0 }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionsproxy.cpp0000664000175000017500000000631313202344735022152 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionsproxy.h" #include "../main/includes/httraqt.h" optionsProxy::optionsProxy(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::proxyForm() { setupUi(this); this->parent = static_cast(parent); opts = &(static_cast(this->parent))->_tabTextInfos; connect(proxyForm::labelHide, SIGNAL(toggled(bool)), this, SLOT(hidePass(bool))); initTextPoints(); } optionsProxy::~optionsProxy() { } void optionsProxy::hidePass(bool f) { if (f == true) { proxyForm::editPass->setEchoMode(QLineEdit::Password); } else { proxyForm::editPass->setEchoMode(QLineEdit::Normal); } } void optionsProxy::initTextPoints() { *opts << (trWidgets) { proxyForm::labelProxy, _PROX_ADDR, "", LABEL, 0 }; *opts << (trWidgets) { proxyForm::groupLogin, _PROX_DEFINE, "", GROUPBOX, 0 }; *opts << (trWidgets) { proxyForm::labelLogin, _LOGIN, "", LABEL, 0 }; *opts << (trWidgets) { proxyForm::labelPort, _PROX_PORT, "", LABEL, 0 }; *opts << (trWidgets) { proxyForm::labelPass, _PASS, "", LABEL, 0 }; *opts << (trWidgets) { proxyForm::labelHide, _HIDE_PASS, "", CHECKBOX, 0 }; *opts << (trWidgets) { proxyForm::labelFtp, _USE_PROXY, "UseHTTPProxyForFTP", CHECKBOX, 0 }; *opts << (trWidgets) { proxyForm::editProxy, -1, "Proxy", EDITLINE, "" }; *opts << (trWidgets) { proxyForm::editPort, -1, "ProxyPort", EDITLINE, "" }; *opts << (trWidgets) { proxyForm::editLogin, -1, "ProxyLogin", EDITLINE, "" }; *opts << (trWidgets) { proxyForm::editPass, -1, "ProxyPass", EDITLINE, "" }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionslimits.cpp0000664000175000017500000002134413202344735022273 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionslimits.h" #include "../main/includes/httraqt.h" optionsLimits::optionsLimits(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::limitsForm() { setupUi(this); this->parent = static_cast(parent); QStringList maxTime; maxTime << "" << "120" << "900" << "1800" << "3600" << "7200"; limitsForm::comboMaxTime->insertItems(0, maxTime); // max time overall limitsForm::comboMaxTime->setDuplicatesEnabled(false); connect (limitsForm::comboMaxTime->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); QStringList connSec; connSec << "" << "1" << "2" << "4" << "8" << "16" << "32" << "64" << "128"; limitsForm::comboMaxConn->insertItems(0, connSec); // max connections/sec limitsForm::comboMaxConn->setDuplicatesEnabled(false); connect (limitsForm::comboMaxConn->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); limitsForm::comboMaxDep->insertItems(0, connSec); // max depth limitsForm::comboMaxDep->setDuplicatesEnabled(false); connect (limitsForm::comboMaxDep->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); QStringList extD; extD << "" << "0" << "1" << "2" << "4" << "8" << "16" << "32" << "64" << "128"; limitsForm::comboMaxExtDep->insertItems(0, extD); // max links limitsForm::comboMaxExtDep->setDuplicatesEnabled(false); connect (limitsForm::comboMaxExtDep->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); QStringList maxLinks; maxLinks << "" << "100000" << "200000" << "1000000" << "5000000"; limitsForm::comboMaxLinks->insertItems(0, maxLinks); // max links limitsForm::comboMaxLinks->setDuplicatesEnabled(true); connect (limitsForm::comboMaxLinks->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); QStringList maxTransferRate; maxTransferRate << "" << "0.0001" << "0.001" << "0.01" << "0.1" << "0.5" << "1" << "5" << "20" << "50" << "75" << "100" << "250"; limitsForm::comboMaxTransf->insertItems(0, maxTransferRate); // max transfer rate limitsForm::comboMaxTransf->setDuplicatesEnabled(false); connect (limitsForm::comboMaxTransf->lineEdit(), SIGNAL(editingFinished()), this, SLOT(editingFinished())); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); limitsForm::labelMaxHtml->setText("MB"); limitsForm::labelMaxNHtml->setText("MB"); limitsForm::labelMaxSize->setText("MB"); limitsForm::labelMaxTransf->setText("MB/s"); } optionsLimits::~optionsLimits() { } // check the entered value depended from combobox void optionsLimits::editingFinished() { QLineEdit* from; bool valGood; QString t; from = (QLineEdit*)sender(); QComboBox *par = (QComboBox*)from->parent(); t = from->text(); // qDebug() << from << t; if (t == "" || t == "\n") { par->setCurrentIndex(0); // first element, = -1 return; } disconnect (from, SIGNAL(editingFinished()), this, SLOT(editingFinished())); if (from == limitsForm::comboMaxConn->lineEdit()) { // int, range: space, 0..255 int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 255)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (from == limitsForm::comboMaxDep->lineEdit()) { // int, range: space, 0..9999 int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 9999)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (from == limitsForm::comboMaxExtDep->lineEdit()) { // int, range: space, 0..9999 int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 9999)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (from == limitsForm::comboMaxTime->lineEdit()) { // int, range: space, 0..99999 sec int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 99999)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (from == limitsForm::comboMaxTransf->lineEdit()) { // float, range: space, 0..1000 MB/s float tmp = t.toFloat(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 1000)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (from == limitsForm::comboMaxLinks->lineEdit()) { // int, range: space, 0..5000000 int tmp = t.toInt(&valGood); if (valGood == true) { if (!(tmp >= 0 && tmp <= 5000000)) { qDebug() << "wrong" << from << tmp; valGood = false; } } } if (valGood == true) { // qDebug() << "right" << t; int currInd = par->findText(t); if ( currInd < 0) { par->addItem(t); par->model()->sort(0); int tInd = par->findText(t); par->setCurrentIndex(tInd); } else { par->setCurrentIndex(currInd); } } connect (from, SIGNAL(editingFinished()), this, SLOT(editingFinished())); } void optionsLimits::initTextPoints() { *opts << (trWidgets) { limitsForm::label1141, _MAX_FROM_ROOT, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1143, _MAX_EXTERNAL, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1205, _MAX_SIZE_HTML, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1209_2, _MAX_SIZE_NHTML, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1206, _SIZE_LIMIT, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1210, _PAUSE_DOWN, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1207, _MAX_TIME, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1208, _MAX_RATE, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1211, _MAX_CONN_SEC, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::label1212, _MAX_LINKS, "", LABEL, 0 }; *opts << (trWidgets) { limitsForm::comboMaxDep, -1, "Depth", COMBOBOX, 0 }; *opts << (trWidgets) { limitsForm::comboMaxExtDep, -1, "ExtDepth", COMBOBOX, 0 }; *opts << (trWidgets) { limitsForm::comboMaxTime, -1, "MaxTime", COMBOBOX, 0 }; *opts << (trWidgets) { limitsForm::comboMaxTransf, -1, "MaxRate", COMBOBOX, 0.0 }; *opts << (trWidgets) { limitsForm::comboMaxConn, -1, "MaxConn", COMBOBOX, 0 }; *opts << (trWidgets) { limitsForm::comboMaxLinks, -1, "MaxLinks", COMBOBOX, 0 }; *opts << (trWidgets) { limitsForm::editMaxHtml, -1, "MaxHtml", EDITLINE, 0.0 }; *opts << (trWidgets) { limitsForm::editMaxNHtml, -1, "MaxOther", EDITLINE, 0.0 }; *opts << (trWidgets) { limitsForm::editMaxSize, -1, "MaxAll", EDITLINE, 0.0 }; *opts << (trWidgets) { limitsForm::editPause, -1, "MaxWait", EDITLINE, 0 }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/options/optionsspider.cpp0000664000175000017500000000623313202344735022260 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/OptionsDialog.h" #include "includes/optionsspider.h" #include "../main/includes/httraqt.h" optionsSpider::optionsSpider(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl), Ui::spiderForm() { setupUi(this); QString t; QStringList sl; this->parent = static_cast(parent); t = this->parent->translate(LISTDEF_7); sl = t.split("\n"); spiderForm::label1238->addItems(sl); t = this->parent->translate(LISTDEF_8); sl = t.split("\n"); spiderForm::label1033_2->addItems(sl); opts = &(static_cast(this->parent))->_tabTextInfos; initTextPoints(); } optionsSpider::~optionsSpider() { } void optionsSpider::initTextPoints() { *opts << (trWidgets) { spiderForm::label1245, _CHECK_DOC_TYPE, "", LABEL, 0 }; *opts << (trWidgets) { spiderForm::label1256, _SPIDER, "", LABEL, 0 }; *opts << (trWidgets) { spiderForm::label1237, _ACCEPT_COOK, "Cookies", CHECKBOX, 0 }; *opts << (trWidgets) { spiderForm::label1239, _PARSE_JAVA, "ParseJava", CHECKBOX, 0 }; *opts << (trWidgets) { spiderForm::label1242, _UPDATE_HACK, "UpdateHack", CHECKBOX, 0 }; *opts << (trWidgets) { spiderForm::label1243, _URL_HACK, "URLHack", CHECKBOX, 0 }; *opts << (trWidgets) { spiderForm::label1241, _TOL_REQ, "TolerantRequests", CHECKBOX, 0 }; *opts << (trWidgets) { spiderForm::label1240, _FORCE_OLD, "HTTP10", CHECKBOX, 0 }; *opts << (trWidgets) { spiderForm::label1238, -1, "CheckType", COMBOBOX, 0 }; *opts << (trWidgets) { spiderForm::label1033_2, -1, "FollowRobotsTxt", COMBOBOX, 0 }; } /*$SPECIALIZATION$*/ httraqt-1.4.11/sources/version.h.in0000664000175000017500000000025413042707374017423 0ustar karbofoskarbofos#ifndef HTTVERSION_H #define HTTVERSION_H #define HTTQTVERSION "@HTTRAQT_VERSION@" #define PROGRAM_DATE "@BUILD_DATE@" #define USE_QT_VERSION @USE_QT_VERSION@ #endif httraqt-1.4.11/sources/main/0000775000175000017500000000000014355543007016102 5ustar karbofoskarbofoshttraqt-1.4.11/sources/main/main.cpp0000664000175000017500000000571113202344735017533 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include "includes/httraqt.h" #include "../version.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); #if 0 QPixmap logo(":/images/splash.png"); QPainter painter(&logo); painter.setFont(QFont("Arial", 15)); QSplashScreen* splash = new QSplashScreen(logo); splash->show(); splash->showMessage(QObject::tr(PROGRAM_FULL_NAME), Qt::AlignLeft | Qt::AlignBottom); #endif #if QT_VERSION < 0x050000 // ask QString in Qt 4 to interpret all char* as UTF-8, // like Qt 5 does. // 106 is "UTF-8", this is faster than lookup by name // [http://www.iana.org/assignments/character-sets/character-sets.xml] QTextCodec::setCodecForCStrings(QTextCodec::codecForMib(106)); // and for reasons I can't understand, I need to do the same again for tr // even though that clearly uses C strings as well... QTextCodec::setCodecForTr(QTextCodec::codecForMib(106)); #ifdef Q_OS_WIN QFile::setDecodingFunction(decodeUtf8); QFile::setEncodingFunction(encodeUtf8); #endif #else // for Win32 and Qt5 we try to set the locale codec to UTF-8. // this makes QFile::encodeName() work. #ifdef Q_OS_WIN QTextCodec::setCodecForLocale(QTextCodec::codecForMib(106)); #endif #endif HTTraQt* mainWidget; QString pName = QString(PROGRAM_NAME) + " v." + QString(HTTQTVERSION); mainWidget = new HTTraQt(0, Qt::Window); mainWidget->setLangGUI(); mainWidget->setWindowTitle(pName); mainWidget->show(); return app.exec(); } httraqt-1.4.11/sources/main/OptionsTab.cpp0000664000175000017500000002057414355522672020705 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include "includes/httraqt.h" #include "includes/OptionsTab.h" #include "../options/includes/OptionsDialog.h" #include "includes/InsertUrlDialog.h" class InsertUrlDialog; int OptionsTab::hl01[] = { _MOD00, _MOD01, _MOD02, _MOD03, _MOD04, _MOD05, _MOD06}; OptionsTab::OptionsTab(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); comb01 = LISTDEF_10; QString tlist = translate(comb01); QStringList lCombo = tlist.split("\n"); comboAction->insertItems(0, lCombo); comboAction->setCurrentIndex(0); label03_2->setText(translate(hl01[0])); connect(label01, SIGNAL(clicked()), this, SLOT(onSetOptions())); connect(label04, SIGNAL(clicked()), this, SLOT(onAddURL())); connect(label05_2, SIGNAL(clicked()), this, SLOT(onCaptureUrl())); connect(label12, SIGNAL(clicked()), this, SLOT(onURLList())); connect(comboAction, SIGNAL(activated(int)), this, SLOT(showHelp())); connect(textEdit, SIGNAL(textChanged ()), this, SLOT(removeSpaceLines())); } void OptionsTab::resizeEvent(QResizeEvent *event) { } void OptionsTab::removeSpaceLines() { QStringList sl; bool found = false; QString t = textEdit->toPlainText(); sl = t.split("\n"); t = ""; foreach(QString entry, sl) { if (entry.length() == 0) { found = true; } } if (found == false) { return; } disconnect(textEdit, SIGNAL(textChanged ()), this, SLOT(removeSpaceLines())); foreach(QString entry, sl) { if (entry.length() > 0) { t = t + entry + "\n"; } } textEdit->setText(t); connect(textEdit, SIGNAL(textChanged ()), this, SLOT(removeSpaceLines())); } void OptionsTab::onCaptureUrl() { QClipboard *clipboard = QApplication::clipboard(); QString originalText = clipboard->text(); originalText = getAndTestUrlString(originalText); if (originalText.length() > 0) { originalText += "\n"; QString st = textEdit->toPlainText(); st = st + originalText; textEdit->setText(st); } else { MessageBox::exec(this, translate(_ERR), translate(_WRONGURLS), QMessageBox::Warning); } } void OptionsTab::updateLastAction() { QString dirName = parent->currentWorkDir + "/" + parent->currentProject; // il existe déja un cache précédent.. renommer if (QFile::exists(dirName + "/hts-cache/new.zip") || (QFile::exists(dirName + "/hts-cache/new.dat") && QFile::exists(dirName + "/hts-cache/new.ndx"))) { if (!QFile::exists(dirName + "/hts-cache/interrupted.lock") && !QFile::exists(dirName + "/hts-in_progress.lock")) { comboAction->setCurrentIndex(LAST_ACTION); } else { comboAction->setCurrentIndex(LAST_ACTION - 1); } } } QString OptionsTab::getAndTestUrlString(const QString st) { QUrl u(st); if (u.isValid() == true) { return st; } return ""; } void OptionsTab::translateTab() { setMinimumSize(410, 250); // ajust size(hight) to content textEdit->setFixedHeight(textEdit->document()->size().height() + textEdit->contentsMargins().top() * 2); if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } QString tlist = translate(comb01); QStringList lCombo = tlist.split("\n"); comboAction->clear(); comboAction->insertItems(0, lCombo); label05_2->setText(translate(_GETCLIPBOARD)); label->setText(translate(_CAPTURL)); label01->setText(translate(_SET_OPT)); label02->setText(translate(_ACTION)); label03->setText(translate(_WEB_ADDR)); label04->setText(translate(_ADD_URL)); label05->setText(translate(_URLLIST)); label06->setText(translate(_PREFS_OPT)); showHelp(); } void OptionsTab::onAddURL() { InsertUrlDialog* dUrl = new InsertUrlDialog(parent); // dUrl->setFont(parent->systemFont); if (dUrl->exec() == QDialog::Rejected) { return; } QString urlString; if (dUrl->m_urllogin.length() == 0) { urlString = dUrl->m_urladr; } else { urlString = dUrl->m_urllogin + ":" + dUrl->m_urlpass + "@" + dUrl->m_urladr; } urlString = getAndTestUrlString(urlString); if (urlString.length() > 0) { urlString += "\n"; QString st = textEdit->toPlainText()/*->text()*/; st = st + urlString; textEdit->setText(st); } else { MessageBox::exec(this, translate(_ERR), translate(_WRONGURLS), QMessageBox::Warning); } delete dUrl; } void OptionsTab::showHelp() { int pos = comboAction->currentIndex(); int origHelpID = hl01[pos]; QString translated = (translate(origHelpID)); label03_2->setText(translated); } void OptionsTab::onURLList() { QString str = translate(_URLLIST); // QFileDialog fd; // fd = new QFileDialog(this, translate(_OPENFILE), parent->currentWorkDir, str); // fd->setFont(parent->systemFont); // fd->exec(); QString name = QFileDialog::getOpenFileName(this, translate(_OPENFILE), parent->currentWorkDir, str); if (name == "" || name == "/" || name == "\\") { return; } QFile fileName(name); if (!fileName.open(QIODevice::ReadOnly | QIODevice::Text)) { return; } QString st = ""; textEdit->clear(); label1286->setText(""); label1286->setText(name); QTextStream in(&fileName); #if USE_QT_VERSION == 6 in.setEncoding(QStringConverter::Utf8); #else in.setCodec("UTF-8"); #endif while (!in.atEnd()) { QString line = in.readLine(); line = getAndTestUrlString(line); if (line.length() > 0) { st = st + line + "\n"; } } fileName.close(); if (st.length() > 0) { textEdit->setText(st); } else { MessageBox::exec(this, translate(_ERR), translate(_WRONGURLS), QMessageBox::Warning); } } void OptionsTab::onSetOptions() { OptionsDialog *oDia = new OptionsDialog(parent); // oDia->setFont(parent->systemFont); oDia->exec(); delete oDia; } bool OptionsTab::testIt() { QString listOfUrls; QStringList urls; bool found = false; listOfUrls = textEdit->toPlainText(); urls = listOfUrls.split("\n"); for (QStringList::Iterator i = urls.begin(); i != urls.end(); i++) { QString result; result = getAndTestUrlString(*i); if (result.length() > 0) { found = true; break; } } if (found == true) { parent->SetProfile("CurrentUrl", listOfUrls); } else { MessageBox::exec(this, translate(_ERR), translate(_WRONGURLS), QMessageBox::Warning); } QString urlFile = label1286->text(); if (urlFile.length() > 0) { parent->SetProfile("CurrentURLList", urlFile); } int action; action = comboAction->currentIndex(); parent->SetProfile("CurrentAction", action); return (found); } httraqt-1.4.11/sources/main/ConfirmTab.cpp0000664000175000017500000000647013202344735020636 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/httraqt.h" #include "includes/ConfirmTab.h" ConfirmTab::ConfirmTab(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); lineEditCounter->setText("5"); connect(radioSave, SIGNAL(toggled(bool)), this, SLOT(onRadio(bool))); connect(radioStart, SIGNAL(toggled(bool)), this, SLOT(onRadio(bool))); #ifdef __WIN32__ // code for win systems // qDebug() << "WIN32"; groupPCoff->setEnabled(false); #endif #ifdef __APPLE__ groupPCoff->setEnabled(false); #endif #ifdef __linux__ // qDebug() << "LINUX"; groupPCoff->setEnabled(true); #endif // LINUX } void ConfirmTab::onRadio(bool b) { QRadioButton* bu = (QRadioButton*) sender(); disconnect(radioSave, SIGNAL(toggled(bool)), this, SLOT(onRadio(bool))); disconnect(radioStart, SIGNAL(toggled(bool)), this, SLOT(onRadio(bool))); if (bu == radioSave) { bool ch = radioSave->isChecked(); radioStart->setChecked(!ch); } if (bu == radioStart) { bool ch = radioStart->isChecked(); radioSave->setChecked(!ch); } connect(radioSave, SIGNAL(toggled(bool)), this, SLOT(onRadio(bool))); connect(radioStart, SIGNAL(toggled(bool)), this, SLOT(onRadio(bool))); } void ConfirmTab::resizeEvent(QResizeEvent *event) { } void ConfirmTab::translateTab() { setMinimumSize(410, 250); if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } radioStart->setText(translate(_ADJ)); radioShutdown->setText(translate(_SHUTD)); radioHibernate->setText(translate(_HIBER)); label05->setText(translate(_TR_SHED)); radioSave->setText(translate(_SAV_SETTINGS)); group02->setTitle(translate(_ON_HOLD)); groupPCoff->setTitle(translate(_PC_OFF)); labelCounter->setText(translate(_SHUTDOWN_COUNTER)); } httraqt-1.4.11/sources/main/CMakeLists.txt0000664000175000017500000000550614355520367020654 0ustar karbofoskarbofos#CMakeLists.txt set(MAIN_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/translator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/htinterface.cpp ${CMAKE_CURRENT_SOURCE_DIR}/options.cpp ${CMAKE_CURRENT_SOURCE_DIR}/httraqt.cpp ${CMAKE_CURRENT_SOURCE_DIR}/AboutDialog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/buttonPanel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ConfirmTab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/FinalTab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/InsertUrlDialog.cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/NewProjTab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/OptionsTab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ProgressTab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/StartTab.cpp PARENT_SCOPE) set(MAIN_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/includes/httraqt.h # ${CMAKE_CURRENT_SOURCE_DIR}/includes/htsnet.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/htinterface.h # ${CMAKE_CURRENT_SOURCE_DIR}/includes/htsstrings.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/options.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/translator.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/AboutDialog.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/buttonPanel.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/FinalTab.h ${CMAKE_CURRENT_SOURCE_DIR}/../version.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/InsertUrlDialog.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/NewProjTab.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/ProgressTab.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/ConfirmTab.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/OptionsTab.h ${CMAKE_CURRENT_SOURCE_DIR}/includes/StartTab.h PARENT_SCOPE) set(MAIN_FORMS ${CMAKE_CURRENT_SOURCE_DIR}/forms/AboutDialog.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/buttonPanel.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/ConfirmTab.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/FinalTab.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/InsertUrlDialog.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/mainForm.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/NewProjTab.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/OptionsTab.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/ProgressTab.ui ${CMAKE_CURRENT_SOURCE_DIR}/forms/StartTab.ui PARENT_SCOPE) #QT4_WRAP_CPP(MAIN_HEADERS_MOC ${MAIN_HEADERS}) #QT4_WRAP_UI(MAIN_FORMS_HEADERS ${MAIN_FORMS}) # cleanup $build/*.cpp~ on "make clean" SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*~") httraqt-1.4.11/sources/main/forms/0000775000175000017500000000000014355520406017226 5ustar karbofoskarbofoshttraqt-1.4.11/sources/main/forms/OptionsTab.ui0000664000175000017500000002545313042707374021663 0ustar karbofoskarbofos OptionsTab 0 0 479 341 0 0 400 210 8 Options QLayout::SetMinimumSize 0 0 100 25 16777215 35 URL list (.txt): Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 250 25 350 35 0 25 0 0 50 25 16777215 35 .. 0 0 250 25 32767 35 Preferences and mirror options: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 150 25 200 35 Set options.. 0 0 100 25 16777215 35 Action: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 350 25 16777215 35 0 0 150 25 200 35 Add a URL... Alt+U 0 0 150 25 200 35 PushButton 0 0 0 25 16777215 35 TextLabel 0 0 0 25 16777215 35 Web Addresses: (URL) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 250 25 false 0 0 401 40 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true httraqt-1.4.11/sources/main/forms/AboutDialog.ui0000664000175000017500000001051513042707374021764 0ustar karbofoskarbofos AboutDialog 0 0 422 471 0 0 8 About HTTraQt Website Copier 0 0 400 100 QFrame::Box QFrame::Raised false 0 0 400 250 true QFrame::Box QFrame::Raised TextLabe Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true true QLayout::SetFixedSize 0 0 0 75 Donate to support HTTraQt development Qt::Horizontal 40 20 0 0 35 0 100 16777215 Close httraqt-1.4.11/sources/main/forms/NewProjTab.ui0000664000175000017500000002274114355520406021606 0ustar karbofoskarbofos NewProjTab 0 0 479 349 0 0 400 210 8 new project 0 QLayout::SetMinimumSize 0 0 172 25 172 16777215 Project name: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 200 25 350 16777215 true true false 0 QLayout::SetMinimumSize true 0 0 172 25 172 16777215 Project category: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 200 25 350 16777215 true 0 0 0 71 16777215 151 Info 0 0 350 70 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 175 25 Base path: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 200 25 500 16777215 0 0 ... Qt::Vertical QSizePolicy::MinimumExpanding 20 35 Qt::Vertical QSizePolicy::MinimumExpanding 20 40 httraqt-1.4.11/sources/main/forms/ProgressTab.ui0000664000175000017500000004173013042707374022030 0ustar karbofoskarbofos ProgressTab 0 0 492 289 0 0 400 209 8 Processing QLayout::SetMinimumSize 0 0 0 100 16777215 500 0 0 0 Progress 0 20 Bytes saved: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Links scanned: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Time: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Files written: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Transfer rate: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Files updated: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Active connections: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 Errors: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 20 0 15 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 0 Current list 0 0 0 150 25 QLayout::SetMinimumSize 0 0 0 25 16777215 25 In progress: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true 0 0 0 50 16777215 50 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true httraqt-1.4.11/sources/main/forms/mainForm.ui0000664000175000017500000002735613042707374021355 0ustar karbofoskarbofos MainWindow 0 0 638 461 0 0 MainWindow 0 0 0 0 QFrame::StyledPanel QFrame::Raised 0 0 false QFrame::NoFrame QFrame::Plain 3 1 Qt::Horizontal 2 0 0 50 0 500 16777215 0 0 QFrame::NoFrame 3 0 Qt::Vertical false 0 0 415 227 Qt::AlignCenter true QLayout::SetDefaultConstraint 0 0 415 75 1000 100 true 0 0 638 30 0 0 File Options Mirror Log Window Help 0 0 0 0 toolBar TopToolBarArea false New project Open Save Delete Browse Recient Exit Load default Reset to default Save as default Load... Save as... Langauage FontSize Modify options Pause transfer View error log View log View file transfers Hide Status bar About HTTraQt Check program updates Contens About Qt Step by step Browse Select Font httraqt-1.4.11/sources/main/forms/StartTab.ui0000664000175000017500000001340213042707374021314 0ustar karbofoskarbofos StartTab Qt::ApplicationModal 0 0 516 377 0 0 400 310 0 0 600 410 8 StartTab 0 0 300 100 700 120 Qt::AlignCenter Qt::Vertical QSizePolicy::Minimum 20 15 0 0 300 25 16777215 30 <html><head/><body><p><span style=" font-weight:600;">versionText (versionDate)</span></p></body></html> Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Vertical QSizePolicy::Minimum 20 20 0 0 350 0 Welcome to HTTraQt Website Copier! Please click on the NEXT button to - start a new project - or resume a partial download Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Vertical QSizePolicy::Minimum 418 50 Qt::Horizontal QSizePolicy::Minimum 40 20 Qt::Horizontal QSizePolicy::Minimum 40 20 httraqt-1.4.11/sources/main/forms/FinalTab.ui0000664000175000017500000000741113042707374021253 0ustar karbofoskarbofos FinalTab 0 0 448 263 0 0 400 210 8 FinalTab 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true QLayout::SetMinimumSize 0 0 0 35 &View log file Alt+V Qt::Horizontal QSizePolicy::Minimum 40 20 QLayout::SetMinimumSize 0 0 0 25 Browse Mirrored &Website Qt::Horizontal QSizePolicy::Minimum 40 20 httraqt-1.4.11/sources/main/forms/buttonPanel.ui0000664000175000017500000001205013042707374022061 0ustar karbofoskarbofos buttonsForm 0 0 600 57 0 0 300 35 600 70 Form Qt::Horizontal QSizePolicy::Minimum 151 35 0 0 100 25 100 40 Qt::NoFocus false 0 0 100 25 100 40 Qt::NoFocus 0 0 100 25 100 40 Qt::NoFocus 0 0 100 25 100 40 false Qt::NoFocus Qt::DefaultContextMenu false Qt::Horizontal QSizePolicy::Minimum 25 20 httraqt-1.4.11/sources/main/forms/ConfirmTab.ui0000664000175000017500000002121013042707374021610 0ustar karbofoskarbofos ConfirmTab 0 0 477 306 0 0 400 210 8 ConfirmTab QLayout::SetMinimumSize 0 35 Please adjust connection parameters if necessary, then press FINISH to launch the mirroring operation. true 0 0 PC off when finished true false 0 0 Shutdown counter (minutes) 0 25 Hibernate PC when finished Qt::Horizontal QSizePolicy::Minimum 40 20 0 0 50 25 75 16777215 0 25 Shutdown PC when finished true Qt::Horizontal QSizePolicy::Minimum 40 20 0 0 On hold 0 0 35 25 50 16777215 0 0 35 25 50 16777215 0 0 35 25 50 16777215 Qt::Horizontal QSizePolicy::Minimum 40 20 0 0 Transfer scheduled for: (hh/mm/ss) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true Qt::Horizontal 0 25 Save settings only, do not launch download now. httraqt-1.4.11/sources/main/forms/InsertUrlDialog.ui0000664000175000017500000001033113042707374022635 0ustar karbofoskarbofos InsertUrlDialog 0 0 444 190 8 Insert URL 0 0 URL: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 300 0 http:// Authentication (only if needed) 0 0 Login Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 Password Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true QLineEdit::Password Qt::Horizontal 318 20 Cancel OK Alt+K true httraqt-1.4.11/sources/main/AboutDialog.cpp0000664000175000017500000000617614355323015021005 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include "includes/httraqt.h" #include "includes/AboutDialog.h" #include "../version.h" AboutDialog::AboutDialog(QWidget *parent, Qt::WindowFlags fl) : QDialog(parent, fl) { setupUi(this); this->parent = static_cast(parent); setStyleSheet(this->parent->programStyleSheet); translateDialog(); connect(pushButton, SIGNAL(clicked()), this, SLOT(reject())); label_2->setPixmap(*(this->parent->mainpix)); adjustSize(); } void AboutDialog::translateDialog() { if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } pushButton->setText(translate(_CLOSE)); QString str2 = translate(_NOTIFY); str2.replace("\n", "
"); QString str4 = translate(_VISITPAGE); #if USE_QT_VERSION == 6 QString outStr = QString().asprintf(PROGRAM_FULL_NAME, HTTQTVERSION) + "
" + str2 + "

" + str4; #else QString outStr = QString().sprintf(PROGRAM_FULL_NAME, HTTQTVERSION) + "
" + str2 + "

" + str4; #endif outStr += "
HTTrack
" + QString(HTTRACK_STR) + ""; outStr += "
HTTraQt " + QString(HTTRAQT_STR) + ""; label->setText(outStr); QString t = "" + translate(_HOW_THANK) + "

" "- " + translate(_SHARE_LINK) + "
" "- " + translate(_REPORT_BUG) + "
" "- " + translate(_MAKE_DONATE) + ". " + translate(_MAKE_TRANSLATION); label_3->setText(t); label_3->setTextFormat(Qt::RichText); label_3->setTextInteractionFlags(Qt::TextBrowserInteraction); label_3->setOpenExternalLinks(true); } httraqt-1.4.11/sources/main/htinterface.cpp0000664000175000017500000006446513202344735021116 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/httraqt.h" #include "includes/ProgressTab.h" #ifdef __cplusplus extern "C" { #endif #include "includes/htinterface.h" #include #include #include #include #include #ifdef __cplusplus } #endif extern HTTraQt* mainWidget; class MainWindow; void __cdecl wrapper_init(t_hts_callbackarg * carg) { //printf("Engine started\n"); // mirror_info("Engine started"); wrapper_loop(NULL, NULL, NULL, 0, 0, 0, 0, 0, 0); } const char* __cdecl wrapper_query(t_hts_callbackarg* carg, httrackp *opt, const char* question) { //char* __cdecl htsshow_query(char* question) { QString q = QString("%1Press to confirm, to abort").arg(question); int ans = MessageBox::exec(NULL, cTranslator::translate(_QUEST), q, QMessageBox::Question); if (ans == QMessageBox::Yes) { return (char*)"Y"; } return (char*)"N"; } const char* __cdecl wrapper_query2(t_hts_callbackarg* carg, httrackp *opt, const char* question) { //char* __cdecl htsshow_query(char* question) { QString q = QString("%1Press to confirm, to abort").arg(question); int ans = MessageBox::exec(NULL, cTranslator::translate(_QUEST), q, QMessageBox::Question); if (ans == QMessageBox::Yes) { return (char*)"Y"; } return (char*)"N"; } const char* __cdecl wrapper_query3(t_hts_callbackarg* carg, httrackp *opt, const char* question) { //char* __cdecl htsshow_query(char* question) { QString q = QString("%1Press to confirm, to abort").arg(question); int ans = MessageBox::exec(NULL, cTranslator::translate(_QUEST), q, QMessageBox::Question); if (ans == QMessageBox::Yes) { return (char*)"Y"; } return (char*)"N"; } int __cdecl wrapper_check(t_hts_callbackarg* carg, httrackp *opt, const char* adr, const char* fil, int status) { /* testprgm** printf("Link status tested: http://%s%s\n",adr,fil); mirror_testc("Link status tested"); */ return -1; } int __cdecl wrapper_check_mime(t_hts_callbackarg* carg, httrackp *opt, const char* adr, const char* fil, const char* mime, int status) // appelé par le wizard { // ATLTRACE(__FUNCTION__ " : check %s%s : <%s>\r\n", adr, fil, mime); return -1; } void __cdecl wrapper_pause(t_hts_callbackarg* carg, httrackp *opt, const char* lockfile) { //void __cdecl htsshow_pause(char* lockfile) { while (QFile::exists(lockfile)) { sleep(1000); } } void __cdecl wrapper_filesave(t_hts_callbackarg* carg, httrackp *opt, const char* file) { } void __cdecl wrapper_filesave2(t_hts_callbackarg* carg, httrackp *opt, const char* adr, const char* fil, const char* save, int is_new, int is_modified, int not_updated) { // ATLTRACE(__FUNCTION__ " : saving %s%s as %s (new=%d, modified=%d, notupdated=%d)\r\n", adr, fil, save, is_new, is_modified, not_updated); } // void htcommandend(void) // { // qDebug() << "htcommandend"; // mainWidget->endMirror(); // } void *pth_showlog(void *threadid) { char commande[1024] ; // sprintf(commande, "kwrite %s/%s/hts-log.txt &\n", // kMirrorViewGlobal->project->s_project.gene_projectPath, // kMirrorViewGlobal->project->s_project.gene_projectName); // printf(commande); // system(commande); // pthread_exit(NULL); } int __cdecl wrapper_linkdetected(t_hts_callbackarg * carg, httrackp * opt, char *link) { return 1; } int __cdecl wrapper_linkdetected2(t_hts_callbackarg * carg, httrackp * opt, char *link, const char *start_tag) { return 1; } int __cdecl wrapper_xfrstatus(t_hts_callbackarg * carg, httrackp * opt, lien_back * back) { return 1; } int __cdecl wrapper_savename(t_hts_callbackarg * carg, httrackp * opt, const char *adr_complete, const char *fil_complete, const char *referer_adr, const char *referer_fil, char *save) { return 1; } int __cdecl wrapper_sendheader(t_hts_callbackarg * carg, httrackp * opt, char *buff, const char *adr, const char *fil, const char *referer_adr, const char *referer_fil, htsblk * outgoing) { return 1; } int __cdecl wrapper_receiveheader(t_hts_callbackarg * carg, httrackp * opt, char *buff, const char *adr, const char *fil, const char *referer_adr, const char *referer_fil, htsblk * incoming) { return 1; } void __cdecl wrapper_uninit(t_hts_callbackarg *carg) { //printf("Engine exited\n"); htinfo_mirror_info((char*)"Engine exited"); // htcommandend(); // #ifdef _WIN32 // WSACleanup(); // #endif } // int __cdecl wrapper_start(t_hts_callbackarg *carg, httrackp *opt) { htinfo_mirror_info((char*)"Started"); // use_show=0; if (mainWidget->global_opt->verbosedisplay == 2) { // use_show=1; //einbauen status display crear // vt_clear(); } return 1; } int __cdecl wrapper_chopt(t_hts_callbackarg* carg, httrackp *opt) { return wrapper_start(carg, opt); } int __cdecl wrapper_preprocesshtml(t_hts_callbackarg* carg, httrackp *opt, char** html, int* len, const char* url_address, const char* url_file) { // ATLTRACE(__FUNCTION__ " : preprocessing %s%s (%d bytes)\r\n", url_address, url_file, *len); return 1; } int __cdecl wrapper_postprocesshtml(t_hts_callbackarg* carg, httrackp *opt, char** html, int* len, const char* url_address, const char* url_file) { // ATLTRACE(__FUNCTION__ " : postprocessing %s%s (%d bytes)\r\n", url_address, url_file, *len); //char *old = *html; //*html = hts_strdup(*html); //hts_free(old); return 1; } int __cdecl wrapper_end(t_hts_callbackarg* carg, httrackp *opt) { htinfo_mirror_info((char*)cTranslator::translate(_ENDMIRROR).data()); // qDebug() << "termine after htinfo_mirror_info"; mainWidget->termine = 1; return 1; } int __cdecl wrapper_checkhtml(t_hts_callbackarg * carg, httrackp * opt, char *html, int len, const char *url_address, const char *url_file) { return 1; char chaine[1024] ; sprintf(chaine, "%s%s", url_address, url_file); //printf("Parsing html file \"%s\": http://%s%s\n",html,url_adresse,url_fichier); htinfo_state_url(chaine); return 1; } void __cdecl htinfo_mirror_info(char *c) { // status } // called each loop of HTTrack int __cdecl wrapper_loop(t_hts_callbackarg* carg, httrackp *opt, lien_back* back, int back_max, int back_index, int lien_tot, int lien_ntot, int stat_time, hts_stat_struct* stats) { static TStamp prev_mytime = 0; /* ok */ TStamp mytime; long int rate = 0; // char st[256]; // int stat_written = -1; int stat_updated = -1; int stat_errors = -1; int stat_warnings = -1; int stat_infos = -1; int nbk = -1; // LLint nb = -1; int stat_nsocket = -1; LLint stat_bytes = -1; LLint stat_bytes_recv = -1; int irate = -1; ASSERT(stats) if (stats) { stat_written = stats->stat_files; stat_updated = stats->stat_updated_files; stat_errors = stats->stat_errors; stat_warnings = stats->stat_warnings; stat_infos = stats->stat_infos; nbk = stats->nbk; stat_nsocket = stats->stat_nsocket; irate = (int) stats->rate; // nb = stats->nb; stat_bytes = stats->nb; stat_bytes_recv = stats->HTS_TOTAL_RECV; } // if (!mainWidget->use_show) // return 1; // qDebug() << "max" << back_max << "index"<< back_index; if (back_max == 0) { // en cas de manque de time mainWidget->SInfo.refresh = 1;//back_index; mainWidget->SInfo.stat_timestart = mtime_local(); return 1; } if (mainWidget->termine || mainWidget->termine_requested) { mainWidget->SInfo.refresh = 0; // pas de refresh mainWidget->termine_requested = 1; return 0; } if (stat_written >= 0) { mainWidget->SInfo.stat_written = stat_written; } if (stat_updated >= 0) { mainWidget->SInfo.stat_updated = stat_updated; } if (stat_errors >= 0) { mainWidget->SInfo.stat_errors = stat_errors; } if (stat_warnings >= 0) { mainWidget->SInfo.stat_warnings = stat_warnings; } if (stat_infos >= 0) { mainWidget->SInfo.stat_infos = stat_infos; } // if (!mainWidget->SInfo.ask_refresh) { // return 0; // } // initialiser ft if (stat_nsocket == -1) { if (mainWidget->SInfo.ft == -1) { mainWidget->SInfo.ft = stat_time; } } mytime = mtime_local(); if (stat_time < 0) { mainWidget->SInfo.stat_time = (int)(mytime - mainWidget->SInfo.stat_timestart); } if ((stat_time > 0) && (stat_bytes_recv > 0)) { rate = (int)(stat_bytes_recv / stat_time); } else { rate = 0; // pas d'infos } /* Infos */ if (stat_bytes >= 0) { mainWidget->SInfo.stat_bytes = stat_bytes; // bytes } if (stat_time >= 0) { mainWidget->SInfo.stat_time = stat_time; // time } if (lien_tot >= 0) { mainWidget->SInfo.lien_tot = lien_tot; // nb liens } if (lien_ntot >= 0) { mainWidget->SInfo.lien_n = lien_ntot; // scanned } mainWidget->SInfo.stat_nsocket = stat_nsocket; // socks if (rate > 0) { mainWidget->SInfo.rate = rate; // rate } if (irate >= 0) { mainWidget->SInfo.irate = irate; // irate } if (mainWidget->SInfo.irate < 0) { mainWidget->SInfo.irate = mainWidget->SInfo.rate; } if (nbk >= 0) { mainWidget->SInfo.stat_back = nbk; } strc_int2bytes2 strc, strc2, strc3; if ((((mytime - prev_mytime) > 100) || ((mytime - prev_mytime) < 0))) { // return (mainWidget->termine == 0); // } prev_mytime = mytime; // st[0] = '\0'; // // qsec2str(st, stat_time); mainWidget->mutex.lock(); // parcourir registre des liens if (back_index >= 0) { // seulement si index pass� // mainWidget->SInfo.refresh = 1; // ??? // return (mainWidget->termine == 0); // } // mainWidget->clearStatsBuffer(); int index = 0; // bool ok = false; // idem // becouse we write into mainWidget->StatsBuffer mainWidget->clearStatsBuffer(); // back_index is number of "Sockets", also max number of rows in the progressbar for displaying for (int k = 0; k < 2; k++) { // 0: aktuelle verbindung 1: andere verbindungen for (int j = 0; (j < 3) && (index < NStatsBuffer); j++) { // durchgang der priorität int max = 1; if ((back_max * k) > max) { max = back_max * k; } for (int _i = 0 + k; (_i < max) && (index < NStatsBuffer); _i++) { // nummer der verbindung int i = (back_index + _i) % back_max; // anfang vom "ersten" if (back[i].status < 0) { // signifie "lien actif" continue; } // if (strlen(back[i].url_fil) > 0){ // qDebug() << "status " << (int)back[i].status << " name " << back[i].url_fil << " i=" << i << endl; // } bool ok = false; switch (j) { case 0: { // prioritaire if ((back[i].status > 0) && (back[i].status < 99)) { mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_RECEIVE); ok = true; } break; } case 1: { switch (back[i].status) { case STATUS_WAIT_HEADERS: { // 99 mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_REQUEST); ok = true; break; } case STATUS_CONNECTING: { // 100 mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_CONNECT); ok = true; break; } case STATUS_WAIT_DNS: { // 101 mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_SEARCH); ok = true; break; } case STATUS_FTP_TRANSFER: { // 1000 mainWidget->StatsBuffer[index].strStatus = QString("ftp: %1").arg(back[i].info); ok = true; break; } case STATUS_SSL_WAIT_HANDSHAKE: { // 102 mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_CONNECT); ok = true; break; } case STATUS_ALIVE: { // waiting (keep-alive) mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_WAITING); ok = true; break; } default: //qDebug() << "1 status" << back[i].status << back[i].url_fil; break; } break; } default: { if (back[i].status == STATUS_READY) { // STATUS_READY if ((back[i].r.statuscode == HTTP_OK)) { mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_READY); ok = true; } else if ((back[i].r.statuscode >= 100) && (back[i].r.statuscode <= 599)) { char tempo[256]; tempo[0] = '\0'; infostatuscode(tempo, back[i].r.statuscode); mainWidget->StatsBuffer[index].strStatus = tempo; ok = true; } else { // mainWidget->StatsBuffer[index].strStatus = cTranslator::translate(_ERROR); // ok = true; } } break; } } if (ok) { QString s = ""; //if (strlen(back[i].url_fil) > 0){ // qDebug() << "k=" << k << "j=" << j << "status:" << back[i].status << "name" << back[i].url_fil << "totalsize" << back[i].r.totalsize << "size" << back[i].r.size; //} mainWidget->StatsBuffer[index].back = i; // index pour + d'infos mainWidget->StatsBuffer[index].url_sav = back[i].url_sav; // pour cancel if (strcmp(back[i].url_adr, "file://")) { s += back[i].url_adr; } else { s += "localhost"; } if (back[i].url_fil[0] != '/') { s += "/"; } s += back[i].url_fil; mainWidget->StatsBuffer[index].file = ""; int pos; pos = s.lastIndexOf('/'); if (pos >= 0) { QString nm = s.mid(pos + 1); if (nm.length() == 0) { if (s != "/") { nm = s; } else { s = ""; } //else{ // qDebug() << "url addr" << back[i].url_adr << "file" << back[i].url_fil; //} } if (nm.length() > MAX_LEN_INPROGRESS) { // couper nm = nm.left(16) + "..." + nm.right(16); } mainWidget->StatsBuffer[index].name = nm; // qDebug() << "k=" << k << "j=" << j << "status:" << back[i].status << "name" << nm << "totalsize" << back[i].r.totalsize << "size" << back[i].r.size; //qDebug() << "name " << nm; // } mainWidget->StatsBuffer[index].file = s; if (back[i].r.totalsize > 0) { // taille prédéfinie mainWidget->StatsBuffer[index].sizeTotal = back[i].r.totalsize; mainWidget->StatsBuffer[index].size = back[i].r.size; } else { // pas de taille prédéfinie if (back[i].status == 0) { // STATUS_READY mainWidget->StatsBuffer[index].sizeTotal = back[i].r.size; mainWidget->StatsBuffer[index].size = back[i].r.size; } else { mainWidget->StatsBuffer[index].sizeTotal = 8192; mainWidget->StatsBuffer[index].size = (back[i].r.size % 8192); } } } index++; } } } } } mainWidget->mutex.unlock(); #ifdef MY_DEBUG for (int d = 0; d < index; d++) { if (mainWidget->StatsBuffer[d].strStatus.length() > 0) { qDebug() << "index=" << d << mainWidget->StatsBuffer[d].file << mainWidget->StatsBuffer[d].size; } } #endif // ((ProgressTab*)mainWidget->widgets[4])->inProcessRefresh(); // qDebug() << "index = " << index; mainWidget->SInfo.refresh = 1; } return (mainWidget->termine == 0); } char* next_token(char* p, int flag) { int detect = 0; int quote = 0; p--; do { p++; if (flag && (*p == '\\')) { // sauter \x ou \" if (quote) { char c = '\0'; if (*(p + 1) == '\\') { c = '\\'; } else if (*(p + 1) == '"') { c = '"'; } if (c) { char* tempo = (char*)malloc(strlen(p) + 2 + 2); tempo[0] = c; tempo[1] = '\0'; strcat(tempo, p + 2); strcpy(p, tempo); free(tempo); } } } else if (*p == 34) { // guillemets (de fin) char* tempo = (char*)malloc(strlen(p) + 2); tempo[0] = '\0'; strcat(tempo, p + 1); strcpy(p, tempo); /* wipe "" */ p--; /* */ quote = !quote; /* */ free(tempo); } else if (*p == 32) { if (!quote) { detect = 1; } } else if (*p == '\0') { p = NULL; detect = 1; } } while (!detect); return p; } void httraq_main() { int r; // result mainWidget->termine = 0; mainWidget->termine_requested = 0; mainWidget->shell_terminated = 0; mainWidget->soft_term_requested = 0; hts_init(); if (mainWidget->global_opt != NULL) { hts_free_opt(mainWidget->global_opt); mainWidget->global_opt = NULL; } // #ifndef _DEBUG // __try // #endif mainWidget->global_opt = hts_create_opt(); // ASSERT(mainWidget->global_opt->size_httrackp == sizeof(httrackp)) { CHAIN_FUNCTION(mainWidget->global_opt, init, wrapper_init, NULL); CHAIN_FUNCTION(mainWidget->global_opt, uninit, wrapper_uninit, NULL); CHAIN_FUNCTION(mainWidget->global_opt, start, wrapper_start, NULL); CHAIN_FUNCTION(mainWidget->global_opt, end, wrapper_end, NULL); CHAIN_FUNCTION(mainWidget->global_opt, chopt, wrapper_chopt, NULL); // change options CHAIN_FUNCTION(mainWidget->global_opt, preprocess, wrapper_preprocesshtml, NULL); CHAIN_FUNCTION(mainWidget->global_opt, postprocess, wrapper_postprocesshtml, NULL); CHAIN_FUNCTION(mainWidget->global_opt, check_html, wrapper_checkhtml, NULL); CHAIN_FUNCTION(mainWidget->global_opt, query, wrapper_query, NULL); CHAIN_FUNCTION(mainWidget->global_opt, query2, wrapper_query2, NULL); CHAIN_FUNCTION(mainWidget->global_opt, query3, wrapper_query3, NULL); CHAIN_FUNCTION(mainWidget->global_opt, loop, wrapper_loop, NULL); CHAIN_FUNCTION(mainWidget->global_opt, check_link, wrapper_check, NULL); CHAIN_FUNCTION(mainWidget->global_opt, check_mime, wrapper_check_mime, NULL); CHAIN_FUNCTION(mainWidget->global_opt, pause, wrapper_pause, NULL); CHAIN_FUNCTION(mainWidget->global_opt, filesave, wrapper_filesave, NULL); CHAIN_FUNCTION(mainWidget->global_opt, filesave2, wrapper_filesave2, NULL); CHAIN_FUNCTION(mainWidget->global_opt, linkdetected, wrapper_linkdetected, NULL); CHAIN_FUNCTION(mainWidget->global_opt, linkdetected2, wrapper_linkdetected2, NULL); CHAIN_FUNCTION(mainWidget->global_opt, xfrstatus, wrapper_xfrstatus, NULL); CHAIN_FUNCTION(mainWidget->global_opt, savename, wrapper_savename, NULL); CHAIN_FUNCTION(mainWidget->global_opt, sendhead, wrapper_sendheader, NULL); CHAIN_FUNCTION(mainWidget->global_opt, receivehead, wrapper_receiveheader, NULL); string cmdPar = mainWidget->cmdOpt.toStdString(); // qDebug() << mainWidget->cmdOpt; // couper en morceaux char **argv; int argvAlloc = 1024; int argc = 1; { char* p = (char*)cmdPar.c_str(); argv = (char**) malloc(argvAlloc * sizeof(char*)); argv[0] = (char*)"httraqt"; do { if (argc >= argvAlloc) { argvAlloc *= 2; argv = (char**) realloc(argv, argvAlloc * sizeof(char*)); if (argv == NULL) { break; } } argv[argc++] = p; argv[argc] = NULL; p = next_token(p, 0); // prochain token if (p) { *p = 0; // octet nul (tableau) p++; } } while (p != NULL); } r = hts_main2(argc, argv, mainWidget->global_opt); sleep(1); free(argv); } // qDebug() << "termine after hts_main2"; mainWidget->termine = 1; if (mainWidget->global_opt != NULL) { hts_free_opt(mainWidget->global_opt); mainWidget->global_opt = NULL; } // sleep(1); // #ifndef _DEBUG // __catch(ExcFilter_(GetExceptionCode(), GetExceptionInformation())) // { // r = -100; // } // #endif // htsthread_wait_n(1); hts_uninit(); } httraqt-1.4.11/sources/main/buttonPanel.cpp0000664000175000017500000001115613202344735021102 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include "includes/httraqt.h" #include "includes/ConfirmTab.h" #include "includes/buttonPanel.h" buttonPanel::buttonPanel(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); connect(backButton, SIGNAL(clicked()), this, SLOT(onBack())); connect(nextButton, SIGNAL(clicked()), this, SLOT(onNext())); connect(stopButton, SIGNAL(clicked()), this, SLOT(onStop())); connect(helpButton, SIGNAL(clicked()), this, SLOT(onHelp())); onButtons(0); } void buttonPanel::onStop() { // progress tab if (parent->currentTab == 4) { int ans = MessageBox::exec(this, translate(_STOPQ), translate(_STOPPROG), QMessageBox::Question); if (ans == QMessageBox::Yes) { parent->onStopAll(); } } else { parent->onQuit(); } } void buttonPanel::translateButtons() { if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } backButton->setText(translate(_PREVIOUS)); helpButton->setText(translate(_HELP)); switch (parent->currentTab) { case 0: { // start tab nextButton->setText(translate(_NEXT)); stopButton->setText(translate(_EXIT)); break; } case 1: { // select proj tab nextButton->setText(translate(_NEXT)); stopButton->setText(translate(_EXIT)); break; } case 2: { // options tab nextButton->setText(translate(_NEXT)); stopButton->setText(translate(_EXIT)); break; } case 3: { // confirm tab nextButton->setText(translate(_READY)); stopButton->setText(translate(_EXIT)); break; } case 4: { // progress tab nextButton->setText(translate(_NEXT)); stopButton->setText(translate(_STOP)); break; } case 5: { // log tab nextButton->setText(translate(_READY)); stopButton->setText(translate(_EXIT)); break; } default: break; } } void buttonPanel::onButtons(int n) { // for: start; select proj; options; delay; progress; log pages unsigned char mask[8] = {0x06, 0x07, 0x07, 0x07, 0x02, 0x06, 0x00}; unsigned char m; if (n < 0 || n > 5) { return; } m = mask[n]; translateButtons(); backButton->setEnabled((m & 0x01)); stopButton->setEnabled((m & 0x02)); nextButton->setEnabled((m & 0x04)); } void buttonPanel::onHelp() { } void buttonPanel::onBack() { if (parent->currentTab == 0) { return; } parent->activatePage(parent->currentTab - 1); } void buttonPanel::onNext() { if (parent->currentTab == 5) { parent->activatePage(0); return; } if (parent->currentTab == 3) { if (static_cast(parent->widgets[3])->radioStart->isChecked() == false) { parent->getMainOptionsFromGUI(); parent->writeSettings(false); // write project settings parent->activatePage(0); return; } } parent->activatePage(parent->currentTab + 1); } httraqt-1.4.11/sources/main/StartTab.cpp0000664000175000017500000000450714355523430020336 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include "includes/StartTab.h" #include "includes/httraqt.h" #include "../version.h" StartTab::StartTab(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); label01->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); label->setPixmap(*(this->parent->mainpix)); } void StartTab::resizeEvent(QResizeEvent *event) { } void StartTab::translateTab() { setMinimumSize(410, 250); QString v; if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } label01->setText(translate(_WELCOME)); #if USE_QT_VERSION == 6 v = QString().asprintf("%s v.%s (%s)", PROGRAM_NAME, HTTQTVERSION, PROGRAM_DATE); #else v = QString().sprintf("%s v.%s (%s)", PROGRAM_NAME, HTTQTVERSION, PROGRAM_DATE); #endif l_version->setText(v); } httraqt-1.4.11/sources/main/includes/0000775000175000017500000000000014355323601017704 5ustar karbofoskarbofoshttraqt-1.4.11/sources/main/includes/htinterface.h0000664000175000017500000001736713202344735022370 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef HTINTERFACE_H #define HTINTERFACE_H #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include // #ifdef __cplusplus // } // #endif // #ifndef DEBUG // #define ASSERT(x) // #else #define ASSERT(x) \ if (! (x) && !(x-1)) { \ qDebug() << "ERROR!! Assert " << #x << " failed\n"; \ qDebug() << " on line " << __LINE__ << "\n"; \ qDebug() << " in file " << __FILE__ << "\n"; \ return 1; \ } #ifdef _DEBUG #define VERIFY_ISWRITEPOINTER(a) \ { if(::IsBadWritePtr(a, sizeof(LPDWORD))) \ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid write pointer\r\n"));}} #define VERIFY_ISREADPOINTER(a) \ { if(::IsBadReadPtr(a, sizeof(LPDWORD)))\ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid read pointer\r\n"));}} #define VERIFY_ISWRITEDATA(a, l)\ { if(::IsBadWritePtr(a, l)) \ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid write area\r\n"));}} #define VERIFY_ISREADDATA(a, l)\ { if(::IsBadReadPtr(a, l)) \ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid read area\r\n"));}} #define ASSERT_ISWRITEPOINTER(a)\ { if(::IsBadWritePtr(a, sizeof(LPDWORD))) \ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid write pointer\r\n")); ASSERT(false);}} #define ASSERT_ISREADPOINTER(a)\ { if(::IsBadReadPtr(a, sizeof(LPDWORD))) \ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid read pointer\r\n")); ASSERT(false);}} #define ASSERT_ISWRITEDATA(a, l)\ { if(::IsBadWritePtr(a, l)) \ { ::OutputDebugString(_T("Parameter ") _T(#a) \ _T(" is not a valid write area\r\n")); ASSERT(false);}} #define ASSERT_ISREADDATA(a, l) { if(::IsBadReadPtr(a, l)) \ { ::OutputDebugString(_T("Parameter ") _T(#a)\ _T(" is not a valid read area\r\n")); ASSERT(false);}} #else #define VERIFY_ISWRITEPOINTER(a) #define VERIFY_ISREADPOINTER(a) #define VERIFY_ISWRITEDATA(a, l) #define VERIFY_ISREADDATA(a, l) #define ASSERT_ISWRITEPOINTER(a) #define ASSERT_ISREADPOINTER(a) #define ASSERT_ISWRITEDATA(a, l) #define ASSERT_ISREADDATA(a, l) #endif // hotfix for the htsglobal macros // to disable #ifdef maximum #undef maximum #endif #ifdef minimum #undef minimum #endif // #ifdef __cplusplus // extern "C" { // #endif #if __WIN32 #else #define __cdecl #endif void httraq_main(); void htinfo_state_url(char* c); void htinfo_mirror_info(char* c); // int scan_end(void); void __cdecl wrapper_init(t_hts_callbackarg* carg); void __cdecl wrapper_uninit(t_hts_callbackarg* carg); int __cdecl wrapper_start(t_hts_callbackarg* carg, httrackp *opt); int __cdecl wrapper_chopt(t_hts_callbackarg* carg, httrackp *opt); int __cdecl wrapper_end(t_hts_callbackarg* carg, httrackp *opt); int __cdecl wrapper_checkhtml(t_hts_callbackarg* carg, httrackp *opt, char* html, int len, char* url_adresse, char* url_fichier); int __cdecl wrapper_preprocesshtml(t_hts_callbackarg* carg, httrackp *opt, char** html, int* len, const char* url_address, const char* url_file); int __cdecl wrapper_postprocesshtml(t_hts_callbackarg* carg, httrackp *opt, char** html, int* len, const char* url_address, const char* url_file); int __cdecl wrapper_loop(t_hts_callbackarg* carg, httrackp *opt, lien_back* back, int back_max, int back_index, int lien_tot, int lien_ntot, int stat_time, hts_stat_struct* stats); // appel� � chaque boucle de HTTrack // int __cdecl wrapper_loop ( void* _back, int back_max, int back_index, int lien_n, int lien_tot, int stat_time, hts_stat_struct* stats ); const char* __cdecl wrapper_query(t_hts_callbackarg* carg, httrackp *opt, const char* question); const char* __cdecl wrapper_query2(t_hts_callbackarg* carg, httrackp *opt, const char* question); const char* __cdecl wrapper_query3(t_hts_callbackarg* carg, httrackp *opt, const char* question); int __cdecl wrapper_check(t_hts_callbackarg* carg, httrackp *opt, const char* adr, const char* fil, int status); int __cdecl wrapper_check_mime(t_hts_callbackarg* carg, httrackp *opt, const char* adr, const char* fil, const char* mime, int status); void __cdecl wrapper_pause(t_hts_callbackarg* carg, httrackp *opt, const char* lockfile); void __cdecl wrapper_filesave(t_hts_callbackarg* carg, httrackp *opt, const char* file); void __cdecl wrapper_filesave2(t_hts_callbackarg* carg, httrackp *opt, const char* adr, const char* fil, const char* save, int is_new, int is_modified, int not_updated); int __cdecl wrapper_linkdetected(t_hts_callbackarg* carg, httrackp *opt, char* link); int __cdecl wrapper_linkdetected2(t_hts_callbackarg* carg, httrackp *opt, char* link, const char* start_tag); int __cdecl wrapper_xfrstatus(t_hts_callbackarg* carg, httrackp *opt, void* back); int __cdecl wrapper_savename(t_hts_callbackarg* carg, httrackp *opt, char* adr_complete, char* fil_complete, char* referer_adr, char* referer_fil, char* save); int __cdecl wrapper_sendheader(t_hts_callbackarg* carg, httrackp *opt, char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* outgoing); int __cdecl wrapper_receiveheader(t_hts_callbackarg* carg, httrackp *opt, char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* incoming); // void htinfo_errors ( char* chaine ); // void htinfo_active_connections ( char* chaine ); // void htinfo_files_updated ( char* chaine ); // void htinfo_transfer_rate ( char* chaine ); // void htinfo_files_written ( char* chaine ); // void htinfo_bytes_saved ( char* chaine ); // void htinfo_time ( char* chaine ); // void htinfo_link_detected(char* chaine); // void htcommandend(void); #ifdef __cplusplus } #endif typedef struct { // int ask_refresh; int refresh; LLint stat_bytes; int stat_time; int lien_n; int lien_tot; int stat_nsocket; int rate; int irate; int ft; LLint stat_written; int stat_updated; int stat_errors; int stat_warnings; int stat_infos; TStamp stat_timestart; int stat_back; } t_InpInfo; #endifhttraqt-1.4.11/sources/main/includes/InsertUrlDialog.h0000664000175000017500000000364413202344735023134 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef INSERTURL_H #define INSERTURL_H #include "httraqt.h" #include "ui_InsertUrlDialog.h" class HTTraQt; class InsertUrlDialog: public QDialog, public Ui::InsertUrlDialog, public cTranslator { Q_OBJECT public: InsertUrlDialog(QWidget *parent = 0); public slots: void onOk(); void translateDialog(); public: QString m_urllogin; QString m_urlpass; QString m_urladr; private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/includes/buttonPanel.h0000664000175000017500000000371714355306337022367 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef BUTTONPANEL_H #define BUTTONPANEL_H #include "httraqt.h" #include "ui_buttonPanel.h" class HTTraQt; class buttonPanel: public QWidget, public Ui::buttonsForm, public cTranslator { Q_OBJECT public: buttonPanel(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); void translateButtons(); void onButtons(int n); public slots: void onHelp(); void onStop(); void onNext(); void onBack(); private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/includes/options.h0000664000175000017500000000571013202344735021554 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef OPTIONS_HEADER #define OPTIONS_HEADER #include "htinterface.h" // #include "htsstrings.h" #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include #ifdef __cplusplus } #endif #include #include #include #include #include #include class cOptions { public: void initOptions(void); void loadOptions(QSettings *s); void saveOptions(QSettings *s, bool gl); void SetProfile(const QString &variName, float val); void SetProfile(const QString &variName, int val); void SetProfile(const QString &variName, const QString &val); void SetProfile(const QString &variName, const QVariant &val); void GetProfile(const QString &variName, int &val); void GetProfile(const QString &variName, float &val); void GetProfile(const QString &variName, QString &val); QVariant GetProfile(const QString &variName); QString cmdArgumentsOptions(int num); void getOptStruct(httrackp *opt); public: static QMap prOptions; int maxProgressRows; QString selectedLang; QString currentProject; QString currentWorkDir; QString currentAppDir; private: void StripControls(QString &st); void profile_code(QString &from); void profile_decode(QString &from); }; #endif httraqt-1.4.11/sources/main/includes/FinalTab.h0000664000175000017500000000375014355306306021545 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef FINWIDGET_H #define FINWIDGET_H #include #include "httraqt.h" #include "ui_FinalTab.h" class HTTraQt; class FinalTab: public QWidget, public Ui::FinalTab, public cTranslator { Q_OBJECT public: FinalTab(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); public slots: void translateTab(void); protected: void resizeEvent(QResizeEvent *event); private slots: void onBrowseLocalWebsite(); void onViewLog(); private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/includes/NewProjTab.h0000664000175000017500000000477614355306315022111 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef NEWPROJECTWIDGET_H #define NEWPROJECTWIDGET_H #include "ui_NewProjTab.h" #include "httraqt.h" class HTTraQt; class NewProjTab : public QWidget, public Ui::NewProjTab, public cTranslator { Q_OBJECT public: NewProjTab(QWidget* parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); ~NewProjTab(); void translateTab(); bool testIt(); void rebuildDirList(); void selectProj(const QString &name); /*$PUBLIC_FUNCTIONS$*/ protected: QStringList currentsubdirs; /*$PROTECTED_FUNCTIONS$*/ protected: void resizeEvent(QResizeEvent *event); protected slots: /*$PROTECTED_SLOTS$*/ private: QString editedName; HTTraQt* parent; private slots: void workDirChanged(); void projectInfoSelected(); void projectInfoEntered(); // void onSelectBatchFile(); void onBrowseProject(); // void onProjectNameChanged(); void onDirChanged(); void changeProjname(QString stl); }; #endif httraqt-1.4.11/sources/main/includes/ConfirmTab.h0000664000175000017500000000370014355306277022113 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef CONFIRMWIDGET_H #define CONFIRMWIDGET_H #include #include "httraqt.h" #include "ui_ConfirmTab.h" class HTTraQt; class ConfirmTab: public QWidget, public Ui::ConfirmTab, public cTranslator { Q_OBJECT public: ConfirmTab(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); void translateTab(); protected: void resizeEvent(QResizeEvent *event); private slots: void onRadio(bool t); private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/includes/httraqt.h0000664000175000017500000002131414355321724021551 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ using namespace std; #include "../../version.h" #include #include #include #include #include #if USE_QT_VERSION == 6 #include #else #include #endif #include #include #include #include #include #include #include #ifndef HTTRAQ_H #define HTTRAQ_H // #include "../../icons/main.h" #include "translator.h" #include "options.h" #include "ui_mainForm.h" #define PROGRAM_NAME "HTTraQt" #define PROGRAM_FULL_NAME "HTTraQt Website Copier v.%s (Qt4/Qt5 based)" #define LAST_ACTION 6 /* Location */ #define WHTT_LOCATION(a) WhttLocation=(a) #ifndef HTS_DEF_FWSTRUCT_lien_back #define HTS_DEF_FWSTRUCT_lien_back #endif #ifdef __cplusplus extern "C" { #endif // #include "includes/htinterface.h" #include #include #include #include #include #ifdef __cplusplus } #endif #define NStatsBuffer 14 #define MAX_LEN_INPROGRESS 40 #include "htinterface.h" class buttonPanel; class QAction; class QMenu; class QTextEdit; struct hInfo { QString name; QString tInfo; int num; }; typedef struct { QString name; QString file; QString strStatus; QString url_sav; // pour cancel QString url_adr; QString url_fil; qint64 size; qint64 sizeTotal; int offset; int back; int actived; // pour disabled } t_StatsBuffer; class MessageTimerBox: public QMessageBox { private: int timeout; bool autoClose; int currentTime; QString defaultText; public: void setTimeout(int t); void setDefaultText(const QString &t); void setAutoClose(bool a); void showEvent ( QShowEvent * event ); private: void timerEvent(QTimerEvent *event); // static int exec(const QString &title, const QString &text, int ticon, int timer); }; class MessageBox: public cTranslator { public: static int exec(void* p, const QString &title, const QString &text, int ticon); }; #if USE_QT_VERSION == 6 class DirModel : public QFileSystemModel { public: QVariant headerData ( int section, Qt::Orientation orientation, int role ) const; }; #else class DirModel : public QDirModel { public: QVariant headerData ( int section, Qt::Orientation orientation, int role ) const; }; #endif class MyThread : public QThread { public: void run(); }; class HTTraQt: public QMainWindow, public Ui::MainWindow, public cTranslator, public cOptions { Q_OBJECT public: HTTraQt(QWidget* parent = 0, Qt::WindowFlags flags = Qt::WindowType::Widget); ~HTTraQt(); bool rebuildWorkDirView(); void activatePage(int pagenum); void onCancelAll(); void onQuit(); bool getLangTable(); void setLangGUI(); void translateActions(); void translateActions(QAction* act, int id); void launch(); void getMainOptionsFromGUI(); void setMainOptionsToGUI(); void initSInfo(); void readGUISettings(); void readSettings(bool global); void writeSettings(bool global); void writeGUISettings(void); void clearStatsBuffer(void); void setFontForWidgets(void); void getOptions(); void onEndMirror(); bool checkContinue(bool msg); void afterChangepathlog(); // void resetDefaultOptions(); bool RemoveEmptyDir(QString path); public slots: void pauseTransfer(); void onStopAll(); void displayOutputMsg(); void displayProgressMsg(); void processFinished(int exitCode, QProcess::ExitStatus exitStatus); bool treeItemClicked(const QModelIndex &m); // void resizeTabs(QResizeEvent* re); void refreshDirModel(); protected: void closeEvent(QCloseEvent *event); // void changeEvent(QEvent* re); private slots: void threadFinished(); void newProject(); void browseSites(); void setLang(QAction* mnu); void quit(); void loadDefaultOptions(); void saveDefaultOptions(); void resetToDefault(); void loadOptionsFromFile(); void saveOptionsAs(); void selectFontSize(QAction* mnu); void modifyOptions(); void setOptions(); void viewLog(); void viewErrorLog(); void viewTransfers(); void hideWindow(); void restoreWindow(); // void createFontSizeMenu(); bool readLangDir(); void checkUpdates(); void contens(); void stepByStep(); void about(); void aboutQt(); void iconActivated(QSystemTrayIcon::ActivationReason reason); private: void shutdown(); void hibernate(); void createTrayIcon(); void renameOldToNew(); void convertTranslateFiles(); QString sizeToText(qint64 s); void gOptions(bool d); QString getLocaleString(); int removeFolder(QDir &dir); bool getStrOption(const QString optName, QString &ret); bool getIntOption(const QString optName, int &ret); void createActions(); void createToolBars(); void createStatusBar(); // void cmdArgumentsOptions(); QString change(char* chaine, char c); bool checkInstanceRuns(); void contextMenuEvent(QContextMenuEvent *); public: QPixmap *mainpix; QPixmap *mainicon; QTimer *timerProgressUpdate; QTimer *timerDirRefresh; QWidget *widgets[6]; // QVector prOptions; // QMap prOptions; buttonPanel* buttonsWidget; int m_todo; private: QSharedMemory *_singular; QString filename; MyThread* mth; QString agumentsLine; QStringList lastDirs; QVector actLangSelect; QVector actFSizeSelect; QMenu *langMenu; QAction* restAct; QActionGroup* langGroup; // int dictFormat; // 0 no file, 1 old, 2 new // System tray icon bool verbose; bool pcShutdown; bool pcHibernate; // System tray menu QMenu* trayIconMenu; public: QStringList lst; char* argv[256]; short argc; QProcess* process; QString cmdOpt; // flag de termination int termine; static int arretbrutal; int termine_requested; int shell_terminated; bool use_show; int soft_term_requested; httrackp *global_opt; bool inprogress; int currentTab; QFont sysFont; short fontSize; QString programStyleSheet; QSystemTrayIcon* trayIcon; /*static*/ t_InpInfo SInfo; t_StatsBuffer StatsBuffer[NStatsBuffer]; // interface to progres tab QStringList langFiles; DirModel dModel; QMutex mutex; QString currentOptionsFile; QString defaultOptionsFile; QString helpDir; QString langDir; QString currentLang; }; #endif httraqt-1.4.11/sources/main/includes/StartTab.h0000664000175000017500000000355314355306332021611 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef STARTINFO_H #define STARTINFO_H #include "httraqt.h" #include "ui_StartTab.h" class HTTraQt; class StartTab: public QWidget, public Ui::StartTab, public cTranslator { Q_OBJECT public: StartTab(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); void translateTab(); protected: void resizeEvent(QResizeEvent *event); private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/includes/AboutDialog.h0000664000175000017500000000364514355306270022262 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef ABOUT_H #define ABOUT_H #include "httraqt.h" #include "ui_AboutDialog.h" class HTTraQt; #define HTTRACK_STR "http://www.httrack.com" #define HTTRAQT_STR "http://httraqt.sourceforge.net" class AboutDialog: public QDialog, public Ui::AboutDialog, public cTranslator { Q_OBJECT public: AboutDialog(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); private: void translateDialog(); private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/includes/ProgressTab.h0000664000175000017500000000420514355306323022313 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef PROCESSTABULATOR_H #define PROCESSTABULATOR_H #include #include #include #include #include #include "httraqt.h" #include "ui_ProgressTab.h" class HTTraQt; class ProgressTab: public QWidget, public Ui::ProgressTab, public cTranslator { Q_OBJECT public: ProgressTab(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); void translateTab(); void inProcessRefresh(); private slots: void update(); void cancelDwnload(); protected: void resizeEvent(QResizeEvent *event); private: HTTraQt* parent; QVector cancelButtons; }; #endif httraqt-1.4.11/sources/main/includes/translator.h0000664000175000017500000002640313202344735022254 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef LANGUAGE_HEADER #define LANGUAGE_HEADER #include #include // #include // QString translateString(const QString& id); class cTranslator { public: bool loadTranslation(const QString fname); public: static const QString translate(int id); static QString engText[]; private: QString convertString(const QString &s); private: static QVector translateTable; }; enum TR_CONSTS { _PROG_NAME = 0, _NR_CONN, //1 _SEL_FONT, //2 _TIMEOUTS, //3 _RETRIES, //4 _MAX_RATE, //5 _MIN_RATE, //6 _KEEP_ALIVE, //7 _CANCEL_TIMEOUT, //8 _CANCEL_SLOW, //9 _CHECK_DOC_TYPE, //10 _SPIDER, //11 _ACCEPT_COOK, //12 _PARSE_JAVA, //13 _UPDATE_HACK, //14 _URL_HACK, //15 _TOL_REQ, //16 _FORCE_OLD, //17 _BROWS_ID, //18 _OS_ID, //19 _OP, //20 _HTML_FOOT, //21 _STRUCT_TYPE, //22 _DOS_NAMES, //23 _NO_ERR_PAG, //24 _NO_EXTERAL, //25 _HIDE_PASS, //26 _HIDE_QUERY, //27 _NOT_PURGE, //28 _ISO9660_NAMES, //29 _BUILD, //30 _ONLY_EXPERTS, //31 _PRIM_SCAN, //32 _TRAVEL_MODE, //33 _GLOBAL_TRAVEL, //34 _REWRITE_LINKS, //35 _USE_CACHE, //36 _DEBUG_MODE, //37 _MAX_FROM_ROOT, //38 _MAX_EXTERNAL, //39 _MAX_SIZE_HTML, //40 _MAX_SIZE_NHTML, //41 _SIZE_LIMIT, //42 _PAUSE_DOWN, //43 _MAX_TIME, //44 _SIZE, //45 _MAX_CONN_SEC, //46 _MAX_LINKS, //47 _ALL_LINKS_MATCH, //48 _GET_NHTML, //49 _TEST_LINKS, //50 _GET_HTML_FIRST, //51 _MIME_ASSOC, //52 _FILE_TYPES, //53 _MIME_ID, //54 _PROX_ADDR, //55 _PROX_PORT, //56 _LOGIN, //57 _PASS, //58 _USE_PROXY, //59 _USE_WILDCARDS, //60 _CRITERION, //61 _STRING, //62 _TIP_GIF, //63 _CARD_FILTER, //64 _ADD_SCAN_RULE, //65 _EXCL_LINKS, //66 _INCL_LINKS, //67 _STORE_CACHE, //68 _NO_REDOWNLOAD, //69 _CREATE_LOG, //70 _MAKE_INDEX, //71 _MAKE_WORD_INDEX, //72 LISTDEF_1, //73 LISTDEF_2, //74 LISTDEF_3, //75 LISTDEF_4, //76 LISTDEF_5, //77 LISTDEF_6, //78 LISTDEF_7, //79 LISTDEF_8, //80 LISTDEF_9, //81 LISTDEF_10, //82 LISTDEF_11, //83 _MOD00, //84 _MOD01, //85 _MOD02, //86 _MOD03, //87 _MOD04, //88 _MOD05, //89 _MOD06, //90 _OK, //91 _CANCEL, //92 _EXIT, //93 _CLOSE, //94 _TIPCANCEL, //95 _TIPOK, //96 _TIPHELP, //97 _TIPPREV, //98 _TIPNEXT, //99 _HIDEPWD, //100 _SAVEPROJECT, //101 _CLOSEPRJ, //102 _DELETECONF, //103 _DELETEEMPTYCONF, //104 _ACTIONNYP, //105 _ERRORDEL, //106 _SELRULE, //107 _ENTER_KEYWORD, //108 _ADDRULE, //109 _ENTERKEYWORDS, //110 _ADD, //111 _SCANRULEZ, //112 _EXCL, //113 _INCL, //114 _EXAMPLE, //115 _GIF, //116 _BLUE, //117 _MOV, //118 _CGI, //119 _CGIBIN, //120 _SOMEWEBCOM, //121 _SOMEWEB, //122 _WWWSOMEWEBCOM, //123 L_B31, //124 _WWWTESTCOM, //125 _ADDEXCL, //126 _ADDINCL, //127 _EXISTFILTERS, //128 _CANCELCHANG, //129 _SAVECURRENT, //130 _CLICKCONFIRM, //131 _NOLOGFILES, //132 _NOINDEX, //133 _CLICKTOQUIT, //134 _BROWSEHTML, //135 _ENDMIRROR, //136 _VIEWLOG, //137 _BROWSEWEBSITE, //138 _NEWPROJ, //139 _VIEWERR, //140 _VIEWREPORT, //141 _CLOSELOGWINDOW, //142 _INFOTYPE, //143 _INFOS, //144 _FIND, //145 _FINDWORD, //146 _INFOLOG, //147 _WARNERRLOG, //148 _UNINITOLE, //149 _CANTFIND, //150 _CANTCONNECT, //151 _RECEIVE, //152 _REQUEST, //153 _CONNECT, //154 _SEARCH, //155 _READY, //156 _RDY, //157 _WAITING, //158 _ERROR, //159 _RECFILES, //160 _PARSHTML, //161 _PURG, //162 _LCACHE, //163 _TESTINGLINKS, //164 _PAUSETOGGLE, //165 _PAUSED, //166 _STOPNOW, //167 _SCANNING, //168 _WAITTIME, //169 _TRDATA, //170 _CONNPROVIDER, //171 _SECTOSTART, //172 _MIRRINPROGRESS, //173 _MIRRFINISHED, //174 _PROBLOCCURED, //175 _DURING, //176 _F21, //177 _F22, //178 _MIRROR_ABORTED, //179 _MIRROR_ERR, //180 _F23, //181 _ERRDELETING, //182 _REALLYQUIT, //183 _G7, //184 _G1C, //185 _G9, //186 _G10, //187 _G11, //188 _G13, //189 _G14, //190 _G15, //191 _PROX_DEFINE, //192 _G15c, //193 _PATH, //194 _SELECTPATH, //195 _QUIT, //196 _ABOUT, //197 _G22, //198 _G23, //199 _G24, //200 _G24b, //201 _G24c, //202 _G25, //203 _G25b, //204 _FNOTFOUND, //205 _G26b, //206 _LOADDEFAULT, //207 _SAVEDEFAULT, //208 _RESETDEFAULT, //209 _G30, //210 _ACTION, //211 _G32, //212 _G32b, //213 _G33, //214 _G34, //215 _DEFINE, //216 _SET_OPT, //217 _PREFS_OPT, //218 _PROJ, //219 _ADD_URL, //220 _WEB_ADDR, //221 _STOPPROG, //222 _HIBER, //223 _PAUSEDOWNL, //224 _PAUSE, //225 _STOPMIRR, //226 _MINIMIZE, //227 _H6, //228 _H7, //229 _BYTESSAVED, //230 _STOP, //231 _LINKSSCANNED, //232 _TIME, //233 _CONNECTIONS, //234 _RUNNING, //235 _HIDE, //236 _TRRATE, //237 _SKIP, //238 _INFO, //239 _FILESWR, //240 _FILESUP, //241 _ERRORS, //242 _ERRS, //243 _INPROGRESS, //244 _I1, //245 _I2, //246 _I2b, //247 _I2c, //248 _I3, //249 _I4, //250 _I5b, //251 _I6, //252 _I6b, //253 _I7, //254 _I8, //255 _I8b, //256 _I9, //257 _I10, //258 _I11, //259 _I11b, //260 _I11c, //261 _I12, //262 _I13, //263 _I15, //264 _I17, //265 _I18, //266 _I19, //267 _I20, //268 _I20b, //269 _I21, //270 _I22b, //271 _I22c, //272 _I23b, //273 _I24, //274 _I25, //275 _I26, //276 _I27, //277 _I28, //278 _I29, //279 _I1a, //280 _I1b, //281 _I1c, //282 _I1d, //283 _I1e, //284 _I1f, //285 _I1h, //286 _I1i, //287 _I1j, //288 _I1k, //289 _I1k2, //290 _I30, //291 _I30b, //292 _I32b, //293 _I34, //294 _I36, //295 _I39, //296 _I41, //297 _LIMITS, //298 _IDENTITY, //299 _I45, //300 _I47, //301 _I47b, //302 _I47f, //303 _I51, //304 _SAVE_PREFS, //305 _SAVE, //306 _I54, //307 _I55, //308 _LINKS, //309 _EXPERTS, //310 _FLOWCONTROL, //311 _BROWSERID, //312 _IOPT7, //313 _LOGINDEX, //314 _PROXY, //315 _MIMETYPES, //316 _J2, //317 _J2b, //318 _J3, //319 _J6, //320 _J7, //321 _J8, //322 _J8b, //323 _J9, //324 _ADJ, //325 _SAV_SETTINGS, //326 _ON_HOLD, //327 _SHUTD, //328 _TR_SHED, //329 _J14, //330 _J15, //331 _J16, //332 _J17, //333 L_K1, //334 L_K2, //335 _VISITPAGE, //336 L_L1, //337 L_L2, //338 _M1, //339 _M2, //340 _M3, //341 _M4, //342 _M5, //343 _M6, //344 _M7, //345 _M8, //346 _M9, //347 L_N1, //348 _NO, //349 _OPTIONS, //350 _PAUSETRANSF, //351 _MODIFYOPT, //352 _VIEW_LOG, //353 _VIEWERRLOG, //354 _VIEWFILETRANSFERS, //355 L_O17, //356 _TOOLBAR, //357 _STATBAR, //358 _SPLIT, //359 _FILE, //360 _PROGR, //361 _PREF, //362 _MIRROR, //363 _LOG, //364 _WINDOW, //365 _HELP, //366 _LOADDEF, //367 _SAVEDEF, //368 _RESETTODEF, //369 _LOADOPT, //370 _SAVEOPTAS, //371 _LANGPREF, //372 _CONTENTS, //373 _P17, //374 _P18, //375 _P19, //376 _P20, //377 _P21, //378 _P22, //379 _P23, //380 _USERDEFSTRUCT, //381 _Q2, //382 _Q3, //383 _R1, //384 _AUTH, //385 _R10, //386 _R11, //387 _R12, //388 _R13, //389 _S1, //390 _S2, //391 _S3, //392 _S4, //393 _S5, //394 _S10, //395 _NEWPROJNAME, //396 _S11b, //397 _PROJNAME, //398 _BASEPATH, //399 _PROJCAT, //400 _WORKDIR, //401 _TYPENEWPROJ, //402 _NEWPROJECT, //403 L_T1, //404 L_T2, //405 L_T4, //406 L_T7, //407 _CAPTURL, //408 L_T10, //409 L_T12, //410 L_T13, //411 L_T14, //412 L_U1, //413 _CATCHURL, //414 L_V2, //415 L_V3, //416 _ABORT, //417 L_V10, //418 _DIAL1, //419 _DIAL2, //420 _DIAL3, //421 _DIAL4, //422 _DIAL5, //423 _DIAL6, //424 _DIAL7, //425 _DIAL8, //426 _DIAL9, //427 _DIAL10, //428 _DIAL11, //429 _DIAL12, //430 _DIAL13, //431 _W4, //432 _W5, //433 _W6, //434 _W7, //435 _X1, //436 _X2, //437 _X3, //438 _WELCOME, //439 _OSFWB, //440 _METADESC, //441 _METAKEYW, //442 _URLLIST, //443 _PREVIOUS, //444 _NEXT, //445 _URLS, //446 _WARNING, //447 _NOJS, //448 _THANKYOU, //449 _CANCLSWND, //450 _SERVEND, //451 _FATALERR, //452 _WRONGURLS, //453 _HOW_THANK, //454 _SHARE_LINK, //455 _REPORT_BUG, //456 _MAKE_DONATE, //457 _NOTIFY, //458 _GETCLIPBOARD, //459 _DOCUMENTS, //460 _ARCHIVES, //461 _IMAGES, //462 _MULTIMEDIA, //463 _OPENGUI, //464 _BROWSEEXISTS, //465 _STEPBYSTEP, //466 _TOPROJECTPAGE, //467 _ABOUTPROG, //468 _ABOUTQT, //, //469 _QUEST, //, //470 _OPENFILE, //471 _NOURL, //472 _URLNOTCOMP, //473 _FILEERR, //474 _REMOVE, //475 _SURE, //476 _ANYDIRNOTEMPTY, //477 _SAVEFILE, //478 _LANGUAGE, //, //479 _STOPQ, //, //480 _NODIR, //481 _CREATEERR, //482 _CANOTCREATEDIR, //483 _NOPROJ, //484 _WAITSPECHOUR, //485 _MIRRWAIT, //, //486 _ERR, //487 _YES, //488 _MAKE_TOPINDEX, //489 _UNITS, //490 _OPEN, //491 _PC_OFF, // 492 _SHUTDOWN_COUNTER, // 493 _MAKE_TRANSLATION, // 494 _BROWS_NAME //495 }; #endif httraqt-1.4.11/sources/main/includes/OptionsTab.h0000664000175000017500000000440514355323601022142 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #ifndef MAINOPTIONS_H #define MAINOPTIONS_H #include #include #include "httraqt.h" #include "ui_OptionsTab.h" class HTTraQt; class OptionsTab: public QWidget, public Ui::OptionsTab, public cTranslator { Q_OBJECT public: OptionsTab(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowType::Widget); bool testIt(); void translateTab(); void updateLastAction(); protected: void resizeEvent(QResizeEvent *event); private slots: void onSetOptions(); void onURLList(); void showHelp(); void removeSpaceLines(); void onCaptureUrl(); void onAddURL(); QString getAndTestUrlString(const QString st); public: int comb01; static int hl01[7]; private: HTTraQt* parent; }; #endif httraqt-1.4.11/sources/main/ProgressTab.cpp0000664000175000017500000004722614355527704021062 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include #include #include #include #ifndef NStatsBuffer #define NStatsBuffer 14 #endif #ifdef __cplusplus extern "C" { #endif // #include #include "httrack-library.h" #include "htsopt.h" extern int hts_is_parsing(httrackp *opt, int flag); extern int hts_setpause(httrackp *opt, int flag); extern int hts_is_testing(httrackp *opt); extern int hts_is_exiting(httrackp *opt); #ifdef __cplusplus } #endif #define DESCR_COLUMN 0 #define FILENAME_COLUMN 1 #define SIZE_COLUMN 2 #define CANCEL_COLUMN 3 #include "includes/httraqt.h" #include "includes/ProgressTab.h" ProgressTab::ProgressTab(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); this->parent->global_opt = NULL; progressSheet->setColumnCount(4); // progressSheet->setColumnHidden(3 , true); progressSheet->setRowCount(NStatsBuffer); QPalette* palette1 = new QPalette(); palette1->setColor(QPalette::ButtonText, Qt::red); // qDebug() << "progresstab" << NStatsBuffer; for (int i = 0; i < NStatsBuffer; i++) { progressSheet->setCellWidget(i, 0, new QLabel()); QProgressBar* pb = new QProgressBar(); pb->setRange(0, 1000); progressSheet->setRowHeight(i, 20); progressSheet->setCellWidget(i, 1, pb); progressSheet->setCellWidget(i, 2, new QLabel()); // "X" QPushButton *nb; nb = new QPushButton("X"); nb->setToolTip(translate(_CANCEL)); // cancel downloading of current file nb->setPalette(*palette1); nb->setHidden(true); cancelButtons << nb; progressSheet->setCellWidget( i, 3, nb);// for cancelButtons // progressSheet->cellWidget(i, 3)->setHidden(true); connect(nb, SIGNAL(pressed()), this, SLOT(cancelDwnload())); } // for (int i = 0; i < NStatsBuffer; i++) { // progressSheet->setRowHidden(i, (i >= this->parent->maxProgressRows)); // } } void ProgressTab::resizeEvent(QResizeEvent *event) { int tableWidth = width(); progressSheet->setColumnWidth(0, tableWidth * 0.12); progressSheet->setColumnWidth(1, tableWidth * 0.50); progressSheet->setColumnWidth(2, tableWidth * 0.12); // for size progressSheet->setColumnWidth(3, tableWidth * 0.10); // for "cancel" button } void ProgressTab::translateTab() { setMinimumSize(410, 250); // ajust size(hight) to content // progressSheet->setFixedHeight(progressSheet->document()->size().height() + progressSheet->contentsMargins().top()*2); // int maxRows = 32;//parent->maxConnections; if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } l_process->setText(translate(_INPROGRESS) + " " + parent->currentProject); // groupBox->setTitle(translate(_INFO)); l_saved->setText(translate(_BYTESSAVED)); l_time->setText(translate(_TIME)); l_rate->setText(translate(_TRRATE)); l_actconn->setText(translate(_CONNECTIONS)); l_scanned->setText(translate(_LINKSSCANNED)); l_written->setText(translate(_FILESWR)); l_updated->setText(translate(_FILESUP)); l_errors->setText(translate(_ERRORS)); QStringList horzHeaders; horzHeaders << translate(_OP) << QString(translate(_FILE) + "/" + translate(_PROGR)) << translate(_SIZE) << ""; progressSheet->setHorizontalHeaderLabels(horzHeaders); // for (int i = 0; i < NStatsBuffer; i++) { // progressSheet->setRowHidden(i, (i >= parent->maxProgressRows)); // } } void ProgressTab::cancelDwnload() { QObject *p; p = sender(); for(int i = 0; i < cancelButtons.count(); ++i) { if (p == cancelButtons[i]) { hts_cancel_file_push(parent->global_opt, parent->StatsBuffer[i].url_sav.toLatin1()); break; } } } // Refresh void ProgressTab::update() { if (parent->global_opt == NULL) { return; } parent->mutex.lock(); if (!parent->termine) { if (parent->SInfo.refresh) { hts_is_parsing(parent->global_opt, 0); // refresh demandé si en mode parsing // while(INFILLMEM_LOCKED) Sleep(10); // attendre au cas où if (!parent->termine) { inProcessRefresh(); // on refresh! } } // parent->SInfo.ask_refresh = 1; } parent->mutex.unlock(); } void ProgressTab::inProcessRefresh() { static int toggle = 0; if (!((!parent->termine) && (!parent->termine_requested))) { return; } if (!parent->SInfo.refresh) { return; } QString lnk; l_process->setText(translate(_INPROGRESS) + " " + parent->currentProject); #if USE_QT_VERSION == 6 if (parent->SInfo.stat_back) { lnk.asprintf("%d/%d (+%d)", parent->SInfo.lien_n, parent->SInfo.lien_tot - 1, parent->SInfo.stat_back); } else { lnk.asprintf("%d/%d", parent->SInfo.lien_n, parent->SInfo.lien_tot - 1); } #else if (parent->SInfo.stat_back) { lnk.sprintf("%d/%d (+%d)", parent->SInfo.lien_n, parent->SInfo.lien_tot - 1, parent->SInfo.stat_back); } else { lnk.sprintf("%d/%d", parent->SInfo.lien_n, parent->SInfo.lien_tot - 1); } #endif bool isIconic = parent->trayIcon->isVisible(); // not Iconmodus if (isIconic == false) { bool parsing = false; if (!parent->soft_term_requested) { if (!hts_setpause(parent->global_opt, -1)) { if (!(parsing = hts_is_parsing(parent->global_opt, -1))) { inforun->setText(translate(_RECFILES)); } else { switch (hts_is_testing(parent->global_opt)) { case 0: inforun->setText(translate(_PARSHTML)); break; case 1: inforun->setText(translate(_TESTINGLINKS)); break; case 2: inforun->setText(translate(_PURG)); break; case 3: inforun->setText(translate(_LCACHE)); break; case 4: inforun->setText(translate(_WAITTIME)); break; case 5: inforun->setText(translate(_TRDATA)); break; } } } else { if (((toggle++) / 5) % 2) { inforun->setText(translate(_PAUSED)); } else { inforun->setText(""); } } } else { if (((toggle++) / 5) % 2) { inforun->setText(translate(_STOPNOW)); } else { inforun->setText(""); } } if (parent->SInfo.stat_time > 0) { QString st = QString::number(parent->SInfo.stat_time); i1->setText(st); // time } else { QString st = QString::number(parent->SInfo.stat_time); i1->setText(st); // time } float mbytes = parent->SInfo.stat_bytes / (1024.0 * 1024.0); #if USE_QT_VERSION == 6 if (mbytes > 1.0 && mbytes < 1024.0) { i0->setText(QString().asprintf("%.2f MB", mbytes)); // bytes } else if (mbytes > 1024.0) { i0->setText(QString().asprintf("%.4f GB", mbytes / 1024.0)); // bytes } else { i0->setText(QString::number(parent->SInfo.stat_bytes)); } #else if (mbytes > 1.0 && mbytes < 1024.0) { i0->setText(QString().sprintf("%.2f MB", mbytes)); // bytes } else if (mbytes > 1024.0) { i0->setText(QString().sprintf("%.4f GB", mbytes / 1024.0)); // bytes } else { i0->setText(QString::number(parent->SInfo.stat_bytes)); } #endif i2->setText(lnk); // scanned if (parent->SInfo.stat_nsocket > 0 /*&& parent->SInfo.stat_nsocket < 32*/) { QString st = QString::number(parent->SInfo.stat_nsocket); i3->setText(st); // socks } else { i3->setText("none"); // wait } QString st; if (parent->SInfo.rate < 0 || parent->SInfo.rate > (1024.0 * 1024.0)) { parent->SInfo.rate = 0; } #if USE_QT_VERSION == 6 st.asprintf("%d (%d)", parent->SInfo.irate, parent->SInfo.rate); #else st.sprintf("%d (%d)", parent->SInfo.irate, parent->SInfo.rate); #endif i4->setText(st); // rate i5->setText(QString::number(parent->SInfo.stat_errors)); i6->setText(QString::number(parent->SInfo.stat_written)); QString tempo; int pc = 0; if (parent->SInfo.stat_written) { pc = (int)((parent->SInfo.stat_updated * 100) / (parent->SInfo.stat_written)); } #if USE_QT_VERSION == 6 if (pc) { tempo.asprintf("%d (%d%%)", parent->SInfo.stat_updated, pc); } else { tempo.asprintf("%d", parent->SInfo.stat_updated); } #else if (pc) { tempo.sprintf("%d (%d%%)", parent->SInfo.stat_updated, pc); } else { tempo.sprintf("%d", parent->SInfo.stat_updated); } #endif i7->setText(tempo); // for (int j = 0; j < NStatsBuffer; j++) { // progressSheet->setRowHidden(j, (j >= parent->maxProgressRows)); // // progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(false); // } /*if (!parsing)*/ { { for(int i = 0; i < NStatsBuffer; i++) { if (parent->StatsBuffer[i].sizeTotal > 0) { TStamp d = ((TStamp) parent->StatsBuffer[i].size * 1000); d = d / ((TStamp) parent->StatsBuffer[i].sizeTotal); parent->StatsBuffer[i].offset = (int) d; QLabel *tsize = (QLabel*) progressSheet->cellWidget(i, SIZE_COLUMN); qint64 sz = parent->StatsBuffer[i].sizeTotal; QString s; #if USE_QT_VERSION == 6 if (sz < 1e3) { // bytes s.asprintf("%4.1f B", (float)sz); } else if ((sz >= 1000) && (sz < 1e6)) { // kBytes s.asprintf("%4.1f kB", (float)(sz / 1024.0)); } else if ((sz >= 1e6) && (sz < 1e9)) { // kBytes s.asprintf("%4.1f MB", (float)(sz / (1024.0 * 1024.0))); } else { // mbytes s.asprintf("%4.1f GB", (float)(sz / (1024.0 * 1024.0 * 1024.0))); } #else if (sz < 1e3) { // bytes s.sprintf("%4.1f B", (float)sz); } else if ((sz >= 1000) && (sz < 1e6)) { // kBytes s.sprintf("%4.1f kB", (float)(sz / 1024.0)); } else if ((sz >= 1e6) && (sz < 1e9)) { // kBytes s.sprintf("%4.1f MB", (float)(sz / (1024.0 * 1024.0))); } else { // mbytes s.sprintf("%4.1f GB", (float)(sz / (1024.0 * 1024.0 * 1024.0))); } #endif if (s.length() > 0) { tsize->setText(s); } } else { parent->StatsBuffer[i].offset = 0; } } } if (!parsing) { QProgressBar *p; p = (QProgressBar *) progressSheet->cellWidget(0, FILENAME_COLUMN); p->setRange(0, 1000); p = (QProgressBar *) progressSheet->cellWidget(0, FILENAME_COLUMN); p->setValue(parent->StatsBuffer[0].offset); } for (int j = 1; j < NStatsBuffer; j++) { QProgressBar *p; p = (QProgressBar *) progressSheet->cellWidget(j, FILENAME_COLUMN); p->setRange(0, 1000); p = (QProgressBar *) progressSheet->cellWidget(j, FILENAME_COLUMN); p->setValue(parent->StatsBuffer[j].offset); } // redraw en boucle { int i = 0; if (parsing) { i++; } for( ; i < NStatsBuffer; i++) { QString st; QLabel *ti = (QLabel*) progressSheet->cellWidget(i, DESCR_COLUMN); st = parent->StatsBuffer[i].strStatus; st.replace("&", "&&"); if (st.length() == 0) { progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(true); if (progressSheet->isRowHidden(i) == false) { progressSheet->setRowHidden(i, true); } } else { progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(false); if (progressSheet->isRowHidden(i) == true) { progressSheet->setRowHidden(i, false); } ti->setText(st); QProgressBar *p; p = (QProgressBar *) progressSheet->cellWidget(i, FILENAME_COLUMN); //ti = (QLabel*) progressSheet->cellWidget(i,FILENAME_COLUMN); st = parent->StatsBuffer[i].name; st.replace("&", "&&"); p->setFormat( st); st = parent->StatsBuffer[i].file; st.replace("&", "&&"); p->setToolTip(st); // if (!parsing) { // if (parent->StatsBuffer[i].strStatus.length() > 0){ // progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(false); // } // else{ // progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(true); // } if ((parent->StatsBuffer[i].strStatus.length() == 0) != (parent->StatsBuffer[i].actived)) { parent->StatsBuffer[i].actived = !parent->StatsBuffer[i].actived; if (!parent->StatsBuffer[i].actived) { progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(true); } else { progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(false); } } /* } else { progressSheet->cellWidget(i, CANCEL_COLUMN)->setHidden(true); }*/ } } } // } /* else*/ if (parsing) { // parsing // QProgressBar *p; p = (QProgressBar *) progressSheet->cellWidget(0, FILENAME_COLUMN); p->setRange(0, 100); p->setValue(parsing); QLabel *ti = (QLabel*) progressSheet->cellWidget(0, DESCR_COLUMN); ti->setText(translate(_SCANNING)); p = (QProgressBar *) progressSheet->cellWidget(0, FILENAME_COLUMN); p->setFormat(parent->StatsBuffer[0].name); } } QString info; QTableWidgetItem * ti; if ((parent->SInfo.stat_nsocket == -1)) { ti = progressSheet->item(0, DESCR_COLUMN); if (ti == NULL) { return; } ti->setText(translate(_WAITSPECHOUR)); #if USE_QT_VERSION == 6 if (isIconic == true /*&& ( !this_CSplitterFrame->iconifie )*/) { // minimise mais pas en icone info.asprintf("[%d s]", parent->SInfo.stat_time); parent->trayIcon->setToolTip(info); } else { info = translate(_MIRRWAIT); info.replace("%d", QString::number(parent->SInfo.stat_time)); } #else if (isIconic == true /*&& ( !this_CSplitterFrame->iconifie )*/) { // minimise mais pas en icone info.sprintf("[%d s]", parent->SInfo.stat_time); parent->trayIcon->setToolTip(info); } else { info = translate(_MIRRWAIT); info.replace("%d", QString::number(parent->SInfo.stat_time)); } #endif } else { if (isIconic == true ) { // iconmodus info = QString("[" + lnk + "]"); parent->trayIcon->setToolTip(info); } else { QString byteb; #if USE_QT_VERSION == 6 if (parent->SInfo.stat_bytes > (1024.0 * 1024.0)) { byteb = QString().asprintf("%.2f MB", parent->SInfo.stat_bytes / (1024.0 * 1024.0)); // bytes } else { byteb = QString().asprintf("%d B", parent->SInfo.stat_bytes); } #else if (parent->SInfo.stat_bytes > (1024.0 * 1024.0)) { byteb = QString().sprintf("%.2f MB", parent->SInfo.stat_bytes / (1024.0 * 1024.0)); // bytes } else { byteb = QString().sprintf("%d B", parent->SInfo.stat_bytes); } #endif info = translate(_MIRRINPROGRESS); if (byteb.length() > 0) { info.replace("%s,", QString(lnk + ",")); info.replace("%s", QString(byteb)); } else { info.replace(", %s", lnk); } } } static QString last_info = ""; if (info != last_info) { /* a change */ if (info.length() > 0) { last_info = info; parent->setWindowTitle(last_info); } } // parent->clearStatsBuffer(); } httraqt-1.4.11/sources/main/options.cpp0000664000175000017500000006065414355543007020314 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include #include "includes/options.h" #include "../version.h" // init of static object QMap cOptions::prOptions; void cOptions::SetProfile(const QString &variName, float val) { if (variName.length() < 1) { return; } QVariant tmp = prOptions[variName]; if (tmp.type() != QMetaType::Float) { qDebug() << "Wrong type, setProfile()" << variName << "was expected FLOAT!"; return; } // tmp = val; prOptions[variName] = val; } void cOptions::SetProfile(const QString &variName, const QVariant &val) { if (variName.length() < 1) { return; } // tmp = val; prOptions[variName] = val; } void cOptions::SetProfile(const QString &variName, int val) { if (variName.length() < 1) { return; } QVariant tmp = prOptions[variName]; if (tmp.type() != QMetaType::Int) { qDebug() << "Wrong type, setProfile()" << variName << "was expected INTEGER!"; return; } // tmp.value = val; prOptions[variName] = val; } void cOptions::SetProfile(const QString &variName, const QString &val) { if (variName.length() < 1) { return; } QVariant tmp = prOptions[variName]; if (tmp.type() != QMetaType::QString) { qDebug() << "Wrong type, setProfile()" << variName << "was expected TEXT!"; return; } // tmp.value = val; prOptions[variName] = val; } QVariant cOptions::GetProfile(const QString &variName) { if (variName.length() < 1) { return -1; } return prOptions[variName]; } void cOptions::GetProfile(const QString &variName, float &val) { if (variName.length() < 1) { return; } QVariant tmp = prOptions[variName]; if (tmp.type() != QMetaType::Float) { qDebug() << "Wrong type, getProfile()" << variName << "was expected FLOAT!"; return; } val = tmp.toFloat(); } void cOptions::GetProfile(const QString &variName, int &val) { if (variName.length() < 1) { return; } QVariant tmp = prOptions[variName]; if (tmp.type() != QMetaType::Int) { qDebug() << "Wrong type, getProfile()" << variName << "was expected INTEGER!"; return; } val = tmp.toInt(); } void cOptions::GetProfile(const QString &variName, QString &val) { if (variName.length() < 1) { return; } QVariant tmp = prOptions[variName]; if (tmp.type() != QMetaType::QString) { qDebug() << "Wrong type, getProfile()" << variName << "was expected TEXT!"; return; } val = tmp.toString(); } void cOptions::saveOptions(QSettings *s, bool gl) { QString os, st, br; GetProfile("BrowserID", st); GetProfile("BrowserName", br); GetProfile("osID", os); if (st.length() > 0) { if (st.contains("%s")) { st.replace("%s", os); } SetProfile("UserID", st); } for (QMap::const_iterator iopt = prOptions.constBegin(); iopt != prOptions.constEnd(); ++iopt) { if (gl == true) { // do not save as global if (iopt.key() == "CurrentUrl" || iopt.key() == "CurrentURLList") { // only in project settings continue; } } if ((*iopt).type() == QMetaType::QString) { QString v = (*iopt).toString(); profile_code(v); s->setValue(iopt.key(), v); } if ((*iopt).type() == QMetaType::Float) { if ((*iopt).toFloat() >= 0) { float fTmp = (*iopt).toFloat(); QString fTxt; #if USE_QT_VERSION == 6 fTxt = QString().asprintf("%6.4f", fTmp); #else fTxt = QString().sprintf("%6.4f", fTmp); #endif //qDebug() << "save" << (*iopt).name << fTxt; s->setValue(iopt.key(), (qint64)( fTxt.toFloat() * 1024.0 * 1024.0)); } else { s->setValue(iopt.key(), ""); } } if ((*iopt).type() == QMetaType::Int) { if ((*iopt).toInt() != -1) { s->setValue(iopt.key(), (*iopt).toInt()); } else { s->setValue(iopt.key(), ""); } } } s->sync(); } // modif RX 10/10/98 pour gestion des , et des tabs void cOptions::StripControls(QString &st) { // st.replace(0x09, " "); // st.replace(0x0a, " "); // st.replace(0x0d, " "); st.simplified(); // st.replace(" ", " "); } // Ecriture profiles void cOptions::profile_code(QString &from) { from.replace("%%", "%"); // delete double entries from.replace("\n\n", "\n"); // delete double entries from.replace("%", "%%"); from.replace("\r", "%0a"); from.replace("\n", "%0d%0a"); from.replace("\t", "%09"); } void cOptions::profile_decode(QString &from) { from.replace("%0d%0a", "\n"); from.replace("%0d", "\n"); from.replace("%0a", "\r"); from.replace("%09", "\t"); from.replace("%%", "%"); } void cOptions::loadOptions(QSettings *s) { initOptions(); // qDebug() << "load"; for (QMap::iterator iopt = prOptions.begin(); iopt != prOptions.end(); ++iopt) { if ((*iopt).type() == QMetaType::QString) { QString tStr; tStr = s->value(iopt.key(), (*iopt).toString()).toString(); profile_decode(tStr); (*iopt) = tStr; continue; } if ((*iopt).type() == QMetaType::QString) { float tFloat; bool iOk; tFloat = s->value(iopt.key(), (*iopt).toFloat()).toFloat(&iOk); if (iOk == true) { if (tFloat >= 0) { QString tTxt; #if USE_QT_VERSION == 6 tTxt = QString().asprintf("%6.4f", tFloat / (1024.0 * 1024.0)); #else tTxt = QString().sprintf("%6.4f", tFloat / (1024.0 * 1024.0)); #endif tFloat = tTxt.toFloat(); } //qDebug() << "load" << (*iopt).name << tFloat << (qint64)tFloat; (*iopt) = tFloat; // overwrite the default value if right } else { (*iopt) = -1.0; } continue; } if ((*iopt).type() == QMetaType::Int) { int tInt; bool iOk; tInt = s->value(iopt.key(), (*iopt).toInt()).toInt(&iOk); if (iOk == true) { (*iopt) = tInt; // overwrite the default value if right } continue; } } // to implement the checking of options file! } void cOptions::getOptStruct(httrackp *g_opt) { httrackp *opt = hts_create_opt(); opt->log = opt->errlog = NULL; // dévalider champs (non modifiés) opt->maxsite = -1; opt->maxfile_nonhtml = -1; opt->maxfile_html = -1; opt->maxsoc = -1; opt->nearlink = -1; opt->timeout = -1; opt->rateout = -1; opt->maxtime = -1; // opt->check_type = 0; // opt->mms_maxtime = -1; opt->maxrate = -1; StringClear(opt->user_agent); opt->retry = -1; opt->hostcontrol = -1; opt->errpage = -1; opt->travel = -1; opt->external = -1; opt->delete_old = -1; opt->parseall = -1; opt->delete_old = -1; opt->travel = 0; // NOTE: NE SERA PRIS EN COMPTE QUE LE BIT 8 int n; float nf; GetProfile("Test", n); if (n) { opt->travel |= 256; } // GetProfile("CheckType", n); // opt->check_type = n; GetProfile("ParseAll", n); if (n) { opt->parseall = 1; } else { opt->parseall = 0; } // near link,err page GetProfile("Near", n); if (n) { opt->nearlink = 1; } else { opt->nearlink = 0; } GetProfile("NoErrorPages", n); if (n) { opt->errpage = 1; } else { opt->errpage = 0; } GetProfile("NoExternalPages", n); if (n) { opt->external = 1; } else { opt->external = 0; } GetProfile("NoPurgeOldFiles", n); if (n) { opt->delete_old = 1; } else { opt->delete_old = 0; } // host control { int a = 0; GetProfile("RemoveTimeout", n); if (n > 0) { a += 1; } GetProfile("RemoveRateout", n); if (n > 0) { a += 2; } opt->hostcontrol = a; } // sockets GetProfile("Sockets", n); if (n >= 0) { opt->maxsoc = n; maxProgressRows = n; } else { maxProgressRows = 8; opt->maxsoc = 8; } // maxfile_nonhtml GetProfile("MaxOther", nf); if (nf > 0) { opt->maxfile_nonhtml = (qint64)(nf * 1024.0 * 1024.0); } else { opt->maxfile_nonhtml = -1; } // maxfile_html GetProfile("MaxHtml", nf); if (nf > 0) { opt->maxfile_html = (qint64)nf * 1024.0 * 1024.0; } else { opt->maxfile_html = -1; } // maxsite GetProfile("MaxAll", nf); if (nf > 0) { opt->maxsite = (qint64)(nf * 1024.0 * 1024.0); } else { opt->maxsite = -1; } // fragment GetProfile("MaxWait", n); if (n > 0) { opt->fragment = (qint64)n; } else { opt->fragment = -1; } // timeout GetProfile("TimeOut", n); if (n >= 0) { opt->timeout = n; } else { opt->timeout = -1; } // rateout GetProfile("RateOut", n); if (n != 0) { opt->rateout = n; } else { opt->rateout = -1; } // maxtime GetProfile("MaxTime", n); if (n > 0) { opt->maxtime = n; } else { opt->maxtime = -1; } // maxrate GetProfile("MaxRate", nf); if (nf > 0) { opt->maxrate = (int)(nf * 1024.0 * 1024.0); } else { opt->maxrate = -1; } // max. connect GetProfile("MaxConn", n); if (n > 0) { opt->maxconn = n; } else { opt->maxconn = -1; } // retry GetProfile("Retry", n); if (n > 0) { opt->retry = n; } else { opt->retry = -1; } // user_agent QString os, st, br; GetProfile("BrowserID", st); GetProfile("BrowserName", br); GetProfile("osID", os); if (st.length() > 0) { if (st.contains("%s")) { st.replace("%s", os); } SetProfile("UserID", st); StringCopy(opt->user_agent, st.toLatin1().data()); } if (g_opt != NULL) { copy_htsopt(opt, g_opt); } hts_free_opt(opt); } QString cOptions::cmdArgumentsOptions(int num) { QString st; int n; float nf; int n1; char choixdeb; int action; QString cmdOpt = ""; action = num; //GetProfile("CurrentAction", action); QString array; array = "wWgY!/i"; choixdeb = array.at(action).toLatin1(); if (choixdeb != 'W') { cmdOpt += "-q "; } GetProfile("BuildTopIndex", n); if (n == 0) { cmdOpt += "-%i0 "; } else { cmdOpt += "-%i "; } if (choixdeb == '/') { cmdOpt += "-i "; } else if (choixdeb != '!') { cmdOpt += ("-" + QString(choixdeb) + " "); } QString url, urllist; GetProfile("CurrentUrl", url); url.replace("\n", " "); url.simplified(); GetProfile("CurrentURLList", urllist); if (url.length() == 0 && urllist.length() == 0) { // nothong to download return ""; } if (url.length() > 0) { // ersetzen! cmdOpt += " " + url + " ";//+"\""; } if (urllist.length() > 0) { cmdOpt += (" -%L \"" + urllist + "\" "); } GetProfile("Depth", n); if (n >= 0) { cmdOpt += ("-r" + QString::number(n) + " "); } GetProfile("ExtDepth", n); if (n >= 0) { cmdOpt += ("-%e" + QString::number(n) + " "); } if (choixdeb == '/') { cmdOpt += "-C1 "; } else { GetProfile("Cache", n); if (n == 0) { cmdOpt += "-C0 "; } else { cmdOpt += "-C2 "; } } GetProfile("NoRecatch", n); if (n != 0) { cmdOpt += "-%n "; } GetProfile("Test", n); if (n == 1) { cmdOpt += "-t "; } GetProfile("ParseAll", n); if (n == 1) { cmdOpt += "-%P "; } else { cmdOpt += "-%P0 "; } GetProfile("Near", n); if (n == 1) { cmdOpt += "-n "; } GetProfile("NoExternalPages", n); if (n != 0) { cmdOpt += "-x "; } GetProfile("NoPurgeOldFiles", n); if (n != 0) { cmdOpt += "-X0 "; } GetProfile("NoPwdInPages", n); if (n != 0) { cmdOpt += "-%x "; } GetProfile("NoQueryStrings", n); if (n != 1) { // include-query-string cmdOpt += "-%q "; } GetProfile("FollowRobotsTxt", n); if (n >= 0) { cmdOpt += ("-s" + QString::number(n) + " "); } GetProfile("Cookies", n); if (n == 0) { cmdOpt += "-b0 "; } GetProfile("CheckType", n); if (n > 0) { cmdOpt += ("-u" + QString::number(n) + " "); } GetProfile("ParseJava", n); if (n == 0) { cmdOpt += "-j0 "; } GetProfile("StoreAllInCache", n); if (n != 0) { cmdOpt += "-k "; } GetProfile("LogType", n); if (n == 1) { cmdOpt += "-z "; GetProfile("Debug", n); if (n == 1) { cmdOpt += "-%H "; } } else if (n == 2) { cmdOpt += "-Z "; GetProfile("Debug", n); if (n == 1) { cmdOpt += "-%H "; } } GetProfile("HTTP10", n); if (n != 0) { cmdOpt += "-%h "; } GetProfile("TolerantRequests", n); if (n > 0) { cmdOpt += "-%B "; } GetProfile("UpdateHack", n); if (n > 0) { cmdOpt += "-%s "; } GetProfile("URLHack", n); if (n > 0) { cmdOpt += "-%u "; } else { cmdOpt += "-%u0 "; } if (choixdeb != 'g') { QString bld; GetProfile("Build", n); if (n == 14) { // i.O. GetProfile("BuildString", st); bld = ("-N \"" + st + "\""); // cmdOpt += bld; } else { if (n >= 0 && n <= 5) { bld = "-N" + QString::number(n); } else if (n >= 6 && n <= 11) { bld = "-N10" + QString::number(n - 6); } else if (n == 12) { bld = "-N99"; } else if (n == 13) { bld = "-N199"; } } if (bld.length() > 0) { cmdOpt += (bld + " "); } } GetProfile("Dos", n); GetProfile("ISO9660", n1); if (n > 0) { cmdOpt += "-L0 "; } else if (n1 > 0) { cmdOpt += "-L2 "; } GetProfile("Index", n); if (n == 0) { cmdOpt += "-I0 "; } GetProfile("WordIndex", n); if (n == 0) { cmdOpt += "-%I0 "; } /*else { cmdOpt += "-%I "; }*/ /* GetProfile("HTMLFirst", n); if (n == 1) { cmdOpt += "-p7 "; } */ QString filter; GetProfile("PrimaryScan", n); // filter if (n >= 0 && n <= 2) { filter = "-p" + QString::number(n) + " "; } else if (n == 3) { /* default */ GetProfile("HTMLFirst", n1); if (!n1) { filter = "-p3 "; } } else { if (n == 4) { filter = "-p7 "; } } GetProfile("Travel", n); if (n == 0) { filter += "-S "; } else if (n == 1) { filter += "-D "; } else if (n == 2) { filter += "-U "; } else if (n == 3) { filter += "-B "; } // GetProfile("GlobalTravel", n); if (n == 0) { filter += "-a "; } else if (n == 1) { filter += "-d "; } else if (n == 2) { filter += "-l "; } else if (n == 3) { filter += "-e "; } // GetProfile("RewriteLinks", n); if (n == 0) { filter += "-K0 "; } else if (n == 1) { filter += "-K "; } else if (n == 2) { filter += "-K3 "; } else if (n == 3) { filter += "-K4 "; } cmdOpt += filter; //sizemax GetProfile("MaxAll", nf); if (n > 0) { cmdOpt += ("-M" + QString::number((qint64)(nf * 1024.0 * 1024.0)) + " "); } //pausebytes GetProfile("MaxWait", n); if (n > 0) { cmdOpt += ("-G" + QString::number(n) + " "); } float nf1; GetProfile("MaxHtml", nf); GetProfile("MaxOther", nf1); if (nf >= 0 || nf1 >= 0) { cmdOpt += "-m"; if (nf1 > 0) { cmdOpt += QString::number((qint64)(nf1 * 1024.0 * 1024.0)); } else { cmdOpt += "0"; } if (nf > 0) { cmdOpt += ("," + QString::number((qint64)(nf * 1024.0 * 1024.0))); } else { cmdOpt += ",0"; } cmdOpt += " "; } GetProfile("Sockets", n); if (n >= 0) { maxProgressRows = n; } else { maxProgressRows = 8; } cmdOpt += ("-c" + QString::number(n) + " "); GetProfile("TimeOut", n); if (n > 0) { cmdOpt += ("-T" + QString::number(n) + " "); } GetProfile("RateOut", n); if (n > 0) { cmdOpt += ("-J" + QString::number(n) + " "); } GetProfile("Retry", n); if (n > 0) { cmdOpt += ("-R" + QString::number(n) + " "); } int a = 0; GetProfile("RemoveTimeout", n); if (n > 0) { a += 1; } GetProfile("RemoveRateout", n); if (n > 0) { a += 2; } if (a > 0 ) { cmdOpt += ("-H" + QString::number(a) + " "); } GetProfile("KeepAlive", n); if (n > 0) { cmdOpt += "-%k "; } else { cmdOpt += "-%k0 "; } GetProfile("Log", n); if (n != 0) { cmdOpt += "-f2 "; } else { cmdOpt += "-Q "; } GetProfile("NoErrorPages", n); if (n > 0) { cmdOpt += "-o0 "; } // GetProfile("MaxTime", n); if (n > 0) { cmdOpt += ("-E" + QString::number(n) + " "); // max timeout } GetProfile("MaxRate", nf); if (nf > 0.0) { cmdOpt += ("-A" + QString::number((int)(nf * 1024.0 * 1024.0)) + " "); // max rate } // maxConnections = 0; GetProfile("MaxConn", n); if (n > 0) { cmdOpt += ("-%c" + QString::number(n) + " "); // max connections // maxConnections = n; } GetProfile("MaxLinks", n); if (n > 0) { cmdOpt += ("-#L" + QString::number(n) + " "); // max links } GetProfile("UseHTTPProxyForFTP", n); if (n > 0) { cmdOpt += "-%f "; } /*else { cmdOpt += "-%f0 "; }*/ // cmdOpt += "#f"; // flush QString os, br; GetProfile("BrowserID", st); GetProfile("BrowserName", br); GetProfile("osID", os); if (st.length() > 0) { if (st.contains("%s")) { st.replace("%s", os); } // qDebug() << "cmd" << st; cmdOpt += (" -F \"" + st + "\" "); } GetProfile("Footer", st); if (st.length() > 0) { QString stTmp = st; cmdOpt += (" -%F \"" + stTmp + "\" "); } GetProfile("Proxy", st); if (st.length() > 0) { GetProfile("ProxyPort", n); cmdOpt += (" -P " + st + ":" + QString::number(n) + " "); } // lang iso QString lng_iso = selectedLang;//translate("LANGUAGE_ISO"); if (lng_iso.length() > 0) { cmdOpt += " -%l \"" + lng_iso; if (lng_iso != "en") { cmdOpt += ",en"; } cmdOpt += "\" "; } // end of lang if (choixdeb == '!') { cmdOpt += " --testlinks "; } else if (choixdeb == 'Y') { cmdOpt += " --mirrorlinks "; } if (currentProject.length() > 0) { cmdOpt += " -O \"" + currentWorkDir + "/" + currentProject + "/\" "; } GetProfile("WildCardFilters", st); if (st.length() > 0) { cmdOpt += (" " + st); } for (int an = 1; an < 9; an++) { QString st1, st2; QString n1, n2; n1 = "MIMEDefsMime" + QString::number(an); n2 = "MIMEDefsExt" + QString::number(an); GetProfile(n1, st1); GetProfile(n2, st2); if (st1.length() > 0 && st2.length() > 0) { cmdOpt += (" --assume " + st2 + "=" + st1 + " "); } } // clean StripControls(cmdOpt); return cmdOpt; } void cOptions::initOptions() { // QMap m; prOptions[ "Near" ] = 1; prOptions[ "ParseAll" ] = 1; prOptions[ "Test" ] = 0; prOptions[ "HTMLFirst" ] = 0; prOptions[ "Dos" ] = 0; prOptions[ "ISO9660" ] = 0; prOptions[ "NoErrorPages" ] = 0; prOptions[ "NoExternalPages" ] = 1; prOptions[ "NoPwdInPages" ] = 0; prOptions[ "NoQueryStrings" ] = 1; prOptions[ "NoPurgeOldFiles" ] = 0; prOptions[ "Build" ] = 0; prOptions[ "WildCardFilters" ] = "+*.png +*.gif +*.jpg +*.css +*.js -ad.doubleclick.net/*"; prOptions[ "Depth" ] = -1; prOptions[ "ExtDepth" ] = 0; prOptions[ "CurrentAction" ] = 0; prOptions[ "MaxHtml" ] = -1.0; prOptions[ "MaxOther" ] = -1.0; prOptions[ "MaxAll" ] = -1.0; prOptions[ "MaxWait" ] = 0; prOptions[ "MaxTime" ] = -1; prOptions[ "MaxRate" ] = -1.0; prOptions[ "MaxConn" ] = -1; prOptions[ "MaxLinks" ] = -1; prOptions[ "Proxy" ] = ""; prOptions[ "CurrentUrl" ] = ""; prOptions[ "CurrentURLList" ] = ""; prOptions[ "Category" ] = ""; prOptions[ "BuildString" ] = "%h%p/%n%q.%t"; prOptions[ "UseHTTPProxyForFTP" ] = 0; prOptions[ "PrimaryScan" ] = 4; prOptions[ "Debug" ] = 0; prOptions[ "UserID" ] = "Mozilla/5.0 (X11; U; Linux i686; I; rv:17.0.1) Gecko/20100101 Firefox/17.0.1"; prOptions[ "BrowserName" ] = "Firefox"; prOptions[ "BrowserID" ] = "Mozilla/5.0 (%s; rv:17.0.1) Gecko/20100101 Firefox/17.0.1"; prOptions[ "osID" ] = "X11; U; Linux i686; I"; prOptions[ "Travel" ] = 1; prOptions[ "GlobalTravel" ] = 0; prOptions[ "RewriteLinks" ] = 0; prOptions[ "Footer" ] = ""; prOptions[ "Cache" ] = 1; prOptions[ "TimeOut" ] = -1; prOptions[ "Sockets" ] = 8; prOptions[ "Retry" ] = -1; prOptions[ "KeepAlive" ] = 1; prOptions[ "RemoveTimeout" ] = 0; prOptions[ "RemoveRateout" ] = 0; prOptions[ "RateOut" ] = 0; prOptions[ "StoreAllInCache" ] = 0; for (int j = 1; j <= 8; ++j) { QString n; n = "MIMEDefsMime" + QString::number(j); prOptions[ n ] = ""; n = "MIMEDefsExt" + QString::number(j); prOptions[ n ] = ""; } prOptions[ "NoRecatch" ] = 0; prOptions[ "Log" ] = 0; prOptions[ "Index" ] = 1; prOptions[ "BuildTopIndex" ] = 1; prOptions[ "WordIndex" ] = 1; prOptions[ "LogType" ] = 0; prOptions[ "URLHack" ] = 1; prOptions[ "Cookies" ] = 1; prOptions[ "UpdateHack" ] = 1; prOptions[ "ParseJava" ] = 1; prOptions[ "TolerantRequests" ] = 0; prOptions[ "HTTP10" ] = 0; prOptions[ "CheckType" ] = 0; prOptions[ "FollowRobotsTxt" ] = 2; prOptions[ "ProxyPort" ] = 21; } httraqt-1.4.11/sources/main/InsertUrlDialog.cpp0000664000175000017500000000447113202344735021660 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include "includes/httraqt.h" #include "includes/InsertUrlDialog.h" InsertUrlDialog::InsertUrlDialog(QWidget *parent) : QDialog(parent) { setupUi(this); this->parent = static_cast(parent); connect(label2, SIGNAL(clicked()), this, SLOT(close())); connect(label1, SIGNAL(clicked()), this, SLOT(onOk())); translateDialog(); } void InsertUrlDialog::translateDialog() { if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } groupBox->setTitle(translate(_AUTH)); label1226->setText(translate(_LOGIN)); label1227->setText(translate(_PASS)); label2->setText(translate(_CANCEL)); label1->setText(translate(_OK)); } void InsertUrlDialog::onOk() { m_urllogin = label1233->text(); m_urlpass = label1232->text(); m_urladr = label1234->text(); accept(); } httraqt-1.4.11/sources/main/httraqt.cpp0000644000175000017500000021523214355527704020306 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include #include #include #include #include #include // #include #include #if USE_QT_VERSION == 5 // Qt5 part #else // Qt4 part #endif #include #include #include #include #include // // #include "htinterface.h" // #include "htsstrings.h" #include "includes/translator.h" #include "includes/httraqt.h" #include "includes/options.h" #include "ui_mainForm.h" #include "includes/buttonPanel.h" #include "../options/includes/OptionsDialog.h" #include "includes/AboutDialog.h" #include "includes/NewProjTab.h" #include "includes/OptionsTab.h" #include "includes/StartTab.h" #include "includes/ConfirmTab.h" #include "includes/ProgressTab.h" #include "includes/FinalTab.h" class OptionsDialog; class ProgressTab; bool writeWIniFile(QIODevice &device, const QSettings::SettingsMap &map) { QDataStream out(&device); if ( device.isOpen () && ! map.empty() ) { QMap::const_iterator it; for ( it = map.begin(); it != map.end(); ++it ) { QString buffer; QString val = it.value().toString(); if (val.length() > 0) { if (val.indexOf("\"") == 0) { val.remove(0, 1); } if (val.lastIndexOf("\"") == val.length() - 1) { val.remove(val.length() - 1, 1); } val.replace("\n", "%0d%0a"); } buffer = QString ( "%1=%2\n" ).arg ( it.key(), val ); if ( ! buffer.isEmpty() ) { device.write ( buffer.toStdString().c_str() ); } buffer.clear(); } return true; } return false; } bool readWIniFile(QIODevice &device, QSettings::SettingsMap &map) { QDataStream in(&device); if ( device.isOpen () ) { if ( !map.empty() ) { map.clear(); } while ( ! device.atEnd() ) { QByteArray line = device.readLine().trimmed(); if ( line.startsWith ( "#" )) { continue; } if ( !line.contains ( "=" )) { continue; } int pos = line.indexOf("="); QString key = line.left(pos); QString val = line.mid(pos + 1); if (val.length() > 0) { if (val.indexOf("\"") == 0) { val.remove(0, 1); } if (val.lastIndexOf("\"") == val.length() - 1) { val.remove(val.length() - 1, 1); } val.replace("%0d%0a", "\n"); // val.remove("%0d%0a"); } if ( ! key.isEmpty() ) { if (val.length() > 0) { #if USE_QT_VERSION == 6 if ( val.contains ( QRegularExpression ( "^[0-9]+$" ) ) ) { map.insert ( key, QVariant ( val ).toInt() ); } else { map.insert ( key, QVariant ( val ).toString() ); } #else if ( val.contains ( QRegExp ( "^[0-9]+$" ) ) ) { map.insert ( key, QVariant ( val ).toInt() ); } else { map.insert ( key, QVariant ( val ).toString() ); } #endif } } } return true; } return false; } HTTraQt* mainWidget; static const QSettings::Format WIniFormat = QSettings:: registerFormat ("ini", readWIniFile, writeWIniFile); using namespace std; void MessageTimerBox::showEvent ( QShowEvent * event ) { currentTime = 0; if (autoClose) { this->startTimer(1000); } } void MessageTimerBox::setDefaultText(const QString &t) { defaultText = t; } void MessageTimerBox::setAutoClose(bool b) { autoClose = b; } void MessageTimerBox::setTimeout(int t) { timeout = t; QString tx; tx = defaultText; tx.replace("%d", QString::number(timeout)); setText(tx); } void MessageTimerBox::timerEvent(QTimerEvent *event) { QString t; currentTime++; t = defaultText; t.replace("%d", QString::number(timeout - currentTime)); setText(t); if (currentTime >= timeout) { this->done(0); } } int MessageBox::exec(void* p, const QString &title, const QString &text, int ticon) { int ret; QMessageBox* msgBox = NULL; msgBox = new QMessageBox((QWidget*)p); msgBox->setIcon((QMessageBox::Icon)ticon); msgBox->setWindowTitle(title); msgBox->setText(text); if (ticon == QMessageBox::Question) { msgBox->setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox->setButtonText(QMessageBox::Yes, translate(_YES)); msgBox->setButtonText(QMessageBox::No, translate(_NO)); } else { msgBox->setStandardButtons(QMessageBox::Yes); msgBox->setButtonText(QMessageBox::Yes, translate(_OK)); } if (mainWidget->programStyleSheet.length() > 0) { msgBox->setStyleSheet(mainWidget->programStyleSheet); } ret = msgBox->exec(); delete msgBox; return ret; } void MyThread::run() { httraq_main(); } QVariant DirModel::headerData ( int section, Qt::Orientation orientation, int role ) const { if (orientation == Qt::Horizontal) { if (role != Qt::DisplayRole) { return QVariant(); } switch (section) { case 0: return mainWidget->currentWorkDir; default: return QVariant(); } } } void HTTraQt::launch() { m_todo = (static_cast(widgets[2]))->comboAction->currentIndex(); cmdOpt = cmdArgumentsOptions(m_todo); writeSettings(false); initSInfo(); // wait time, if entered QString hh, mm, ss; bool okHH, okMM, okSS; int intHH, intMM, intSS; intHH = intMM = intSS = 0; hh = (static_cast(widgets[3]))->labelHH->text(); // HH mm = (static_cast(widgets[3]))->labelMM->text(); // MM ss = (static_cast(widgets[3]))->labelSS->text(); // SS pcShutdown = false; pcHibernate = false; if ((static_cast(widgets[3]))->groupPCoff->isChecked() == true) { pcShutdown = (static_cast(widgets[3]))->radioShutdown->isChecked(); pcHibernate = (static_cast(widgets[3]))->radioHibernate->isChecked(); } if (hh.length() > 0) { intHH = hh.toInt(&okHH); } if (intHH < 0 || intHH > 23) { okHH = false; intHH = 0; } if (mm.length() > 0) { intMM = mm.toInt(&okMM); } if (intMM < 0 || intMM > 59) { okMM = false; intMM = 0; } if (ss.length() > 0) { intSS = ss.toInt(&okSS); } if (intSS < 0 || intSS > 59) { okSS = false; intSS = 0; } if (intHH > 0 || intMM > 0 || intSS > 0) { int mSec = 1000 * (intHH * 3600 + intMM * 60 + intSS); QTimer::singleShot(mSec, this, SLOT(onStopAll())); } int result = 0; { QString projectDir; projectDir = currentWorkDir + "/" + currentProject + "/"; // on efface le doit.log, pour annuler les parametres anciens et en redéfinir de nouveaux // c'est ici une logique qui diffère de la version en ligne de commande if (QFile::exists(projectDir + "hts-cache/new.zip") || QFile::exists(projectDir + "hts-cache/new.ndx")) { // un cache est présent QFile fl(projectDir + "hts-cache/doit.log"); if (fl.exists()) { fl.remove(); } if (fl.open(QFile::WriteOnly) == true) { fl.close(); } } } // if (global_opt != NULL) { // hts_free_opt(global_opt); // global_opt = NULL; // } termine = 0; termine_requested = 0; // global_opt = hts_create_opt(); timerProgressUpdate->start(1000); //progress tab ones per second to update timerDirRefresh->start(10000); // ones per 10 seconds mth = new MyThread; connect(mth, SIGNAL(finished ()), this, SLOT(threadFinished())); connect(mth, SIGNAL(terminated ()), this, SLOT(threadFinished())); mth->start(); } void HTTraQt::refreshDirModel() { #if USE_QT_VERSION == 6 dModel.setRootPath(currentWorkDir); #else dModel.refresh(); #endif statusBar()->showMessage("Update dir list", 1000); } HTTraQt::HTTraQt(QWidget* parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) { setupUi(this); mainWidget = this; currentAppDir = qApp->applicationDirPath(); if (currentAppDir.lastIndexOf("/build") > 0) { // build dir detection currentAppDir.remove("/build"); } currentLang = "English"; _singular = new QSharedMemory("HTTraQt", this); QFont sysFont = qApp->font(); sysFont = sysFont; fontSize = sysFont.pointSize(); mth = NULL; verbose = true; // for hibernate and shutdown debug messages only! readGUISettings(); mainpix = new QPixmap(":/icons/line.png"); *mainpix = mainpix->scaled(479, 100); QPainter painterPix(mainpix); painterPix.drawPixmap(25, 5, QPixmap(":/icons/pump.png")); painterPix.drawPixmap(122, 78, QPixmap(":/icons/opensource.png")); painterPix.drawPixmap(142, 17, QPixmap(":/icons/name.png")); mainicon = new QPixmap(100, 100); mainicon->fill(Qt::transparent); QPainter painterIcon(mainicon); painterIcon.drawPixmap(25, 5, QPixmap(":/icons/pump.png")); #if USE_QT_VERSION == 6 programStyleSheet = QString().asprintf("font-size: %dpt", fontSize); #else programStyleSheet = QString().sprintf("font-size: %dpt", fontSize); #endif if ( fontSize == -1) { fontSize = sysFont.pixelSize(); #if USE_QT_VERSION == 6 programStyleSheet = QString().asprintf("font-size: %dpx", fontSize); #else programStyleSheet = QString().sprintf("font-size: %dpx", fontSize); #endif } if (programStyleSheet.length() > 0) { setStyleSheet(programStyleSheet); } if (readLangDir() == false) { // init from langFiles variable in format "filename:language" MessageBox::exec(this, translate(_ERR), "Directory with other languages not found\nDefault GUI language is english", QMessageBox::Critical); } currentTab = 0; groupMain->setFont(sysFont); groupButtons->setFont(sysFont); dirView->setFont(sysFont); // this function i need only for converting! normally is disabled // old help file format -> new // convertTranslateFiles(); buttonsWidget = new buttonPanel(this); gridLayoutB->addWidget(buttonsWidget); widgets[0] = new StartTab(this); gridLayoutM->addWidget(widgets[0]); widgets[1] = new NewProjTab(this); gridLayoutM->addWidget(widgets[1]); widgets[2] = new OptionsTab(this); gridLayoutM->addWidget(widgets[2]); widgets[3] = new ConfirmTab(this); gridLayoutM->addWidget(widgets[3]); widgets[4] = new ProgressTab(this); gridLayoutM->addWidget(widgets[4]); widgets[5] = new FinalTab(this); gridLayoutM->addWidget(widgets[5]); setFontForWidgets(); timerProgressUpdate = new QTimer(this); timerDirRefresh = new QTimer(this); connect(timerProgressUpdate, SIGNAL(timeout()), widgets[4], SLOT(update())); connect(timerDirRefresh, SIGNAL(timeout()), this, SLOT(refreshDirModel())); // flag de termination termine = 0; process = NULL; termine_requested = 0; shell_terminated = 0; soft_term_requested = 0; setWindowIcon(QIcon(*mainicon)); dModel.setReadOnly(true); dirView->setModel(&dModel); setCentralWidget(centralwidget); dirView->setColumnHidden(1, true); dirView->setColumnHidden(2, true); dirView->setColumnHidden(3, true); dirView->setAnimated(false); dirView->setIndentation(20); dirView->setSortingEnabled(true); connect(dirView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(treeItemClicked(const QModelIndex &))); connect(dirView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(treeItemClicked(const QModelIndex &))); initOptions(); readSettings(true); // global settings statusBar()->showMessage("Current directory: " + currentWorkDir); createActions(); createToolBars(); createStatusBar(); createTrayIcon(); if (getLangTable() == false) { MessageBox::exec(this, translate(_ERR), "Can't open language file!\nDefault GUI language is english", QMessageBox::Critical); currentLang = "English"; } for (QVector::iterator itL = actLangSelect.begin(); itL != actLangSelect.end(); ++itL) { if ((*itL)->text() == currentLang) { (*itL)->setChecked(true); break; } } #if 0 if(checkInstanceRuns() == true) { int res = QMessageBox::question(0, "Warning", "Application already running\nDo you want to continue?", QMessageBox::Yes | QMessageBox::No); if (res == QMessageBox::No) { exit(-1); } } #endif setLangGUI(); activatePage(0); } // void HTTraQt::resizeTabs(QResizeEvent* se) // { // qDebug() << "resize"; // } void HTTraQt::setFontForWidgets() { buttonsWidget->setStyleSheet(programStyleSheet); for (int i = 0; i < 6; i++) { widgets[i]->setStyleSheet(programStyleSheet); } } void HTTraQt::clearStatsBuffer(void) { // SInfo.refresh for (int i = 0; i < NStatsBuffer; i++) { StatsBuffer[i].strStatus = ""; // etat StatsBuffer[i].name = ""; // nom StatsBuffer[i].file = ""; // fichier StatsBuffer[i].url_sav = ""; StatsBuffer[i].back = 0; StatsBuffer[i].size = 0; StatsBuffer[i].sizeTotal = 0; } } void HTTraQt::threadFinished(void) { if (global_opt != NULL) { hts_free_opt(global_opt); global_opt = NULL; } buttonsWidget->onNext(); // to log page onEndMirror(); timerProgressUpdate->stop(); timerDirRefresh->stop(); /* Aborted mirror or finished? */ { QString projectDir; projectDir = currentWorkDir + "/" + currentProject + "/"; if (soft_term_requested || termine_requested) { QFile fl(projectDir + "hts-cache/interrupted.lock"); if (fl.open(QFile::WriteOnly) == true) { fl.close(); } } else { QFile::remove(projectDir + "hts-cache/interrupted.lock"); } } delete mth; mth = NULL; if (pcShutdown == true) { shutdown(); } if (pcHibernate == true) { hibernate(); } } // bool HTTraQt::treeItemClicked(const QModelIndex &m) { // dirView->resizeColumnToContents(0); } // true if new project bool HTTraQt::rebuildWorkDirView() { bool newProj = false; if (currentWorkDir.length() == 0) { // currentWorkDir = QDir::homePath() + "/My Web Sites"; readSettings(true); } QDir wDir(currentWorkDir); if (wDir.exists() == false) { wDir.mkpath(currentWorkDir); newProj = true; } dirView->reset(); dirView->setRootIndex(dModel.index(currentWorkDir)); #if USE_QT_VERSION == 6 dModel.setRootPath(currentWorkDir); #else dModel.refresh(); #endif // something in hts-cache? if (checkContinue(false) == false) { newProj = true; } return newProj; } void HTTraQt::initSInfo() { // SInfo.ask_refresh = 0; SInfo.refresh = 0; SInfo.stat_bytes = 0; SInfo.stat_time = 0; SInfo.lien_n = 0; SInfo.lien_tot = 0; SInfo.stat_nsocket = 0; SInfo.rate = 0; SInfo.irate = 0; SInfo.ft = 0; SInfo.stat_written = 0; SInfo.stat_updated = 0; SInfo.stat_errors = 0; SInfo.stat_warnings = 0; SInfo.stat_infos = 0; SInfo.stat_timestart = mtime_local(); SInfo.stat_back = 0; } // reprise possible? bool HTTraQt::checkContinue(bool msg) { QString projectDir; projectDir = currentWorkDir + "/" + currentProject + "/"; if (QFile::exists(projectDir + "hts-cache/new.zip") || ((QFile::exists(projectDir + "hts-cache/new.dat")) && (QFile::exists(projectDir + "hts-cache/new.ndx")))) { // il existe déja un cache précédent.. renommer return true; } if (QFile::exists(projectDir + "hts-cache/old.zip") || ((QFile::exists(projectDir + "hts-cache/old.dat")) && (QFile::exists(projectDir + "hts-cache/old.ndx")))) { // il existe déja un ancien cache précédent.. renommer return true; } if ( msg == true) { MessageBox::exec(this, translate(_ERR), translate(_CANTFIND), QMessageBox::Critical); } return false; } void HTTraQt::afterChangepathlog() { QString st = ""; char tempo[8192]; bool modify; QString projectDir; projectDir = currentWorkDir + "/" + currentProject + "/"; #if 0 if (fexist(fconcat(catbuff, tempo, "winprofile.ini"))) { // un cache est présent if (fsize(fconcat(catbuff, tempo, "winprofile.ini")) > 0) { // taille log contrôle>0 int i; for(i = 0; i < (int) strlen(tempo); i++) { if (tempo[i] == '/') { tempo[i] = '\\'; } } Read_profile(fconcat(catbuff, tempo, "winprofile.ini"), 0); // peut on modifier? int pos = m_ctl_todo.GetCurSel(); if ((pos == LAST_ACTION) || (pos == LAST_ACTION - 1) || (pos == 0)) { modify = true; } else { modify = false; } // existe: update if (fexist(fconcat(catbuff, tempo, "hts-cache/new.zip")) || (fexist(fconcat(catbuff, tempo, "hts-cache/new.dat"))) && (fexist(fconcat(catbuff, tempo, "hts-cache/new.ndx"))) ) { // il existe déja un cache précédent.. renommer if (modify) { if ((!fexist(fconcat(catbuff, tempo, "hts-in_progress.lock"))) && (!fexist(fconcat(catbuff, tempo, "hts-cache/interrupted.lock"))) ) { m_ctl_todo.SetCurSel(LAST_ACTION); } else { m_ctl_todo.SetCurSel(LAST_ACTION - 1); } } log_flip = 1; } else if (log_flip) { if (modify) { m_ctl_todo.SetCurSel(0); } log_flip = 0; } OnSelchangetodo(); } } else if (log_flip) { m_ctl_todo.SetCurSel(0); log_flip = 0; } #endif } void HTTraQt::renameOldToNew() { QString projectDir; projectDir = currentWorkDir + "/" + currentProject + "/"; if (QFile::exists(projectDir + "hts-cache/old.dat") && QFile::exists(projectDir + "hts-cache/old.ndx")) { if (QFile::remove(projectDir + "hts-cache/new.dat") == false) { MessageBox::exec(this, translate(_ERR), translate(_ERRDELETING), QMessageBox::Warning); } if ( QFile::remove(projectDir + "hts-cache/new.ndx") == false) { MessageBox::exec(this, translate(_ERR), translate(_ERRDELETING), QMessageBox::Warning); } } if (QFile::remove(projectDir + "hts-cache/new.lst") == false ) { MessageBox::exec(this, translate(_ERR), translate(_ERRDELETING), QMessageBox::Warning); } if (QFile::exists(projectDir + "hts-cache/old.zip")) { if (QFile::remove(projectDir + "hts-cache/new.zip") == false ) { MessageBox::exec(this, translate(_ERR), translate(_ERRDELETING), QMessageBox::Warning); } } QFile::remove(projectDir + "hts-cache/new.txt"); QFile::rename(projectDir + "hts-cache/old.zip", projectDir + "hts-cache/new.zip"); QFile::rename(projectDir + "hts-cache/old.dat", projectDir + "hts-cache/new.dat"); QFile::rename(projectDir + "hts-cache/old.ndx", projectDir + "hts-cache/new.ndx"); QFile::rename(projectDir + "hts-cache/old.lst", projectDir + "hts-cache/new.lst"); QFile::rename(projectDir + "hts-cache/old.txt", projectDir + "hts-cache/new.txt"); } QString HTTraQt::sizeToText(long long int s) { QString t; if (s < 0) { return QString(" size is wrong!"); } if (s > 1024 && s < 1024 * 1024) { t = QString::number(s / 1024) + " kB"; } else if (s > (1024 * 1024)) { t = QString::number(s / (1024 * 1024)) + " MB"; } else { t = QString::number(s / 1024) + " B"; } return t; } void HTTraQt::onEndMirror() { QStringList ext = (QStringList() << "zip" << "dat" << "ndx"); QString oldName, oldShort; QString newName, newShort; long int oldSize = -1; long int newSize = -1; // endInProgress(); QString projectDir; projectDir = currentWorkDir + "/" + currentProject + "/"; for (QStringList::iterator iExt = ext.begin(); iExt != ext.end(); ++iExt) { QFile oldF; QFile newF; oldName = projectDir + "hts-cache/old." + (*iExt); oldShort = "old." + (*iExt); newName = projectDir + "hts-cache/new." + (*iExt); newShort = "new." + (*iExt); oldF.setFileName (oldName); newF.setFileName (newName); if (oldF.exists() == true && newF.exists() == true ) { oldSize = oldF.size(); newSize = newF.size(); } if (oldSize > 0 && newSize > 0) { break; } } if (oldSize == -1) { // nothing to overwrite, project was new return; } if (newSize == -1) { MessageBox::exec(this, translate(_ERR), translate(_MIRROR_ERR), QMessageBox::Warning); return; // nothing was found } } void HTTraQt::contextMenuEvent(QContextMenuEvent *) { #if 0 QMenu* contextMenu = new QMenu("boo", this); Q_CHECK_PTR(contextMenu); QString caption = QString("" "Context Menu"); //caption->setAlignment( Qt::AlignCenter ); // contextMenu->setTitle( "boo" ); contextMenu->addMenu(QString("&New")); //, SLOT(news()), QKeySequence(Qt::CTRL+Qt::Key_N) ); contextMenu->addMenu(QString("&Open...")); //, this, SLOT(open()), CTRL+Key_O ); contextMenu->addMenu(QString("&Save")); //, this, SLOT(save()), CTRL+Key_S ); QMenu *submenu = new QMenu(this); Q_CHECK_PTR(submenu); submenu->addMenu(QString("&Print to printer")); //, this, SLOT(printer()) ); submenu->addMenu(QString("Print to &file")); //, this, SLOT(file()) ); submenu->addMenu(QString("Print to fa&x")); //, this, SLOT(fax()) ); contextMenu->addMenu(QString("&Print")); //, submenu ); contextMenu->exec(QCursor::pos()); delete contextMenu; #endif } void HTTraQt::displayProgressMsg() { QByteArray msg; QString result; // QProcess* actualP = NULL; process->setReadChannel(QProcess::StandardError); msg = process->readAllStandardError(); // if ( msg.length() > 1 ) { result = msg.data(); // actualP = process; // qDebug() << "displayProgressMsg:" << result ; // } // if ( result.length() < 1 ) // return; } void HTTraQt::displayOutputMsg() { QString line; process->setReadChannel(QProcess::StandardOutput); while (process->canReadLine()) { line = process->readLine().trimmed(); } // qDebug() << "displayOutputMsg:" << line ; } void HTTraQt::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { } void HTTraQt::createActions() { // newProjAct->setShortcut ( tr ( "Ctrl+N" ) ); newProjAct->setStatusTip(translate(_OPENGUI)); connect(newProjAct, SIGNAL(triggered()), this, SLOT(newProject())); // openProjAct->setShortcut ( tr ( "Ctrl+O" ) ); // openProjAct->setStatusTip(translate("Open project")); // connect(openProjAct, SIGNAL(triggered()), this, SLOT(openProject())); // saveProjAct->setShortcut ( tr ( "Ctrl+S" ) ); // saveProjAct->setStatusTip(translate("Save project")); // connect(saveProjAct, SIGNAL(triggered()), this, SLOT(saveProject())); // delProjAct->setShortcut ( tr ( "Ctrl+D" ) ); // delProjAct->setStatusTip(translate("Delete a project")); // connect(delProjAct, SIGNAL(triggered()), this, SLOT(deleteProject())); browseAct->setShortcut ( tr ( "Ctrl+B" ) ); browseAct->setStatusTip(translate(_BROWSEEXISTS)); connect(browseAct, SIGNAL(triggered()), this, SLOT(browseSites())); // loadDefOptAct->setShortcut ( tr ( "Ctrl+L" ) ); loadDefOptAct->setStatusTip(translate(_LOADDEF)); connect(loadDefOptAct, SIGNAL(triggered()), this, SLOT(loadDefaultOptions())); saveOptAct->setStatusTip(translate(_SAVEDEF)); connect(saveOptAct, SIGNAL(triggered()), this, SLOT(saveDefaultOptions())); // resetOptToDefAct->setShortcut ( tr ( "Ctrl+R" ) ); resetOptToDefAct->setStatusTip(translate(_RESETTODEF)); connect(resetOptToDefAct, SIGNAL(triggered()), this, SLOT(resetToDefault())); loadOptAct->setStatusTip(translate(_LOADOPT)); connect(loadOptAct, SIGNAL(triggered()), this, SLOT(loadOptionsFromFile())); // recentAct->setShortcut ( tr ( "Ctrl+R" ) ); // recentAct->setStatusTip(translate("Recent file")); // connect(recentAct, SIGNAL(triggered()), this, SLOT(recent())); // exitAct->setShortcut ( tr ( "Ctrl+X" ) ); exitAct->setStatusTip(translate(_EXIT)); connect(exitAct, SIGNAL(triggered()), this, SLOT(quit())); saveOptAsAct->setStatusTip(translate(_SAVEOPTAS)); connect(saveOptAsAct, SIGNAL(triggered()), this, SLOT(saveOptionsAs())); // selectFontAct->setStatusTip(translate(_SEL_FONT)); // connect(selectFontAct, SIGNAL(triggered()), this, SLOT(selectFontSize())); // fontSizePrefAct->setStatusTip(translate(_SEL_FONT)); langPrefAct->setStatusTip(translate(_LANGPREF)); // fontPrefAct->setStatusTip(translate(_SEL_FONT)); // connect(langPrefAct, SIGNAL(triggered()), this, SLOT(langPreference())); // modifyOptAct->setShortcut ( tr ( "Ctrl+M" ) ); modifyOptAct->setStatusTip(translate(_MODIFYOPT)); connect(modifyOptAct, SIGNAL(triggered()), this, SLOT(modifyOptions())); // pauseOptAct->setShortcut ( tr ( "Ctrl+P" ) ); pauseOptAct->setStatusTip(translate(_PAUSETRANSF)); connect(pauseOptAct, SIGNAL(triggered()), this, SLOT(pauseTransfer())); viewLogAct->setStatusTip(translate(_VIEW_LOG)); connect(viewLogAct, SIGNAL(triggered()), this, SLOT(viewLog())); viewErrLogAct->setStatusTip(translate(_VIEWERRLOG)); connect(viewErrLogAct, SIGNAL(triggered()), this, SLOT(viewErrorLog())); // viewTransferAct->setStatusTip(translate(_VIEWFILETRANSFERS)); // connect(viewTransferAct, SIGNAL(triggered()), this, SLOT(viewTransfers())); // hideAct->setShortcut ( tr ( "Ctrl+H" ) ); hideAct->setStatusTip(translate(_HIDE)); connect(hideAct, SIGNAL(triggered()), this, SLOT(hideWindow())); restAct = new QAction(translate(_OPEN), this); // restAct->setStatusTip(translate(_RESTORE)); connect(restAct, SIGNAL(triggered()), this, SLOT(restoreWindow())); // winStatusAct->setStatusTip(translate("Status Bar")); // connect(winStatusAct, SIGNAL(triggered()), this, SLOT(windowStatusBar())); // checkAct->setShortcut ( tr ( "Ctrl+U" ) ); checkAct->setStatusTip(translate(_TOPROJECTPAGE)); connect(checkAct, SIGNAL(triggered()), this, SLOT(checkUpdates())); contentAct->setStatusTip(translate(_CONTENTS)); connect(contentAct, SIGNAL(triggered()), this, SLOT(contens())); stepByStepAct->setStatusTip(translate(_STEPBYSTEP)); connect(stepByStepAct, SIGNAL(triggered()), this, SLOT(stepByStep())); // aboutAct->setShortcut ( tr ( "Ctrl+A" ) ); aboutAct->setStatusTip(translate(_ABOUTPROG)); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); aboutQtAct->setStatusTip(translate(_ABOUTQT)); aboutQtAct->setFont(sysFont); connect(aboutQtAct, SIGNAL(triggered()), this, SLOT(aboutQt())); } void HTTraQt::createTrayIcon() { if (!QSystemTrayIcon::isSystemTrayAvailable()) { hideAct->setEnabled(false); return; } QApplication::setQuitOnLastWindowClosed(false); trayIconMenu = new QMenu(this); trayIconMenu->addAction(restAct); trayIconMenu->addSeparator(); trayIconMenu->addAction(modifyOptAct); trayIconMenu->addAction(viewLogAct); trayIconMenu->addAction(viewErrLogAct); // view err log trayIconMenu->addSeparator(); trayIconMenu->addAction(pauseOptAct); // pause trayIconMenu->addAction(aboutAct); // about trayIconMenu->addAction(exitAct); trayIcon = new QSystemTrayIcon(this); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); trayIcon->setContextMenu(trayIconMenu); trayIcon->setIcon(QIcon(*mainicon)); } void HTTraQt::iconActivated(QSystemTrayIcon::ActivationReason reason) { switch (reason) { case QSystemTrayIcon::Trigger: // qDebug() << "trigger"; break; case QSystemTrayIcon::DoubleClick: // qDebug() << "double"; emit restoreWindow(); // iconComboBox->setCurrentIndex((iconComboBox->currentIndex() + 1) // % iconComboBox->count()); break; case QSystemTrayIcon::MiddleClick: // qDebug() << "middle"; // showMessage(); break; default: ; } } void HTTraQt::hideWindow() { // to system tray trayIcon->show(); hide(); } void HTTraQt::restoreWindow() { // to normal trayIcon->hide(); showNormal(); } void HTTraQt::newProject() { QString app; app = qApp->applicationDirPath() + "/httraqt"; QProcess *myProcess = new QProcess(); myProcess->start(app); } void HTTraQt::browseSites() { QString name = currentWorkDir + "/" + currentProject + "/index.html"; if (QFile::exists(name) == true ) { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( name ))); } } void HTTraQt::loadDefaultOptions() { int ans = MessageBox::exec(this, translate(_QUEST), translate(_LOADDEFAULT), QMessageBox::Question); if (ans == QMessageBox::Yes) { readSettings(true); } } void HTTraQt::saveDefaultOptions() { int ans = MessageBox::exec(this, translate(_QUEST), translate(_SAVEDEFAULT), QMessageBox::Question); if (ans == QMessageBox::Yes) { writeSettings(true); // global options } } void HTTraQt::resetToDefault() { int ans = MessageBox::exec(this, translate(_QUEST), translate(_RESETDEFAULT), QMessageBox::Question); if (ans == QMessageBox::Yes) { initOptions(); } } void HTTraQt::loadOptionsFromFile() { QSettings* s; QString fileName = QFileDialog::getOpenFileName(this, translate(_OPENFILE), currentWorkDir, "HTTrack Settings (linprofile.ini winprofile.ini)"); if (fileName.length() == 0) { return; } s = new QSettings(fileName, WIniFormat); loadOptions(s); } bool HTTraQt::checkInstanceRuns() { if(_singular->attach(QSharedMemory::ReadOnly)) { // _singular->detach(); return false; } if(_singular->create(1)) { return true; } return false; } void HTTraQt::saveOptionsAs() { QSettings* s; QString fileName = QFileDialog::getSaveFileName(this, translate(_SAVEFILE), currentWorkDir, "winprofile.ini"); if (fileName.length() == 0) { return; } s = new QSettings(fileName, WIniFormat); saveOptions(s, false); } void HTTraQt::pauseTransfer() { if (pauseOptAct->isChecked() == true) { hts_setpause(global_opt, 1); } else { hts_setpause(global_opt, 0); } } void HTTraQt::onStopAll() { pauseOptAct->setChecked(false); // qDebug() << "onStopAll"; if (soft_term_requested) { termine_requested = 1; } else { soft_term_requested = 1; hts_request_stop(mainWidget->global_opt, 0); } } void HTTraQt::viewTransfers() { } // this is only possible, if programm installed in home directory, like firefox // in other case only display information about update, // normal updates only from repository void HTTraQt::checkUpdates() { QDesktopServices::openUrl(QUrl("http://httraqt.sourceforge.net/", QUrl::TolerantMode)); } // zeige hilfe void HTTraQt::contens() { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( helpDir + "/index.html"))); } void HTTraQt::stepByStep() { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( helpDir + "/step.html"))); } void HTTraQt::createToolBars() { // fileToolBar()->addToolBar(translate("File")); // fileToolBar->addAction(newLetterAct); // fileToolBar->addAction(saveAct); // fileToolBar->addAction(printAct); // // editToolBar = addToolBar(translate("Edit")); // editToolBar->addAction(undoAct); } void HTTraQt::createStatusBar() { statusBar()->showMessage(translate(_READY), 2000); } void HTTraQt::getOptions() { currentOptionsFile = ""; if (currentProject.length() > 0) { QString linname, winname; linname = currentWorkDir + "/" + currentProject + "/linprofile.ini"; winname = currentWorkDir + "/" + currentProject + "/hts-cache/winprofile.ini"; if (QFile::exists(linname) == true) { currentOptionsFile = linname; } if (QFile::exists(winname) == true) { currentOptionsFile = winname; } } if (currentOptionsFile.length() > 0) { readSettings(false); // project } else { readSettings(true); // global } } void HTTraQt::writeGUISettings(void) { QSettings* s; s = new QSettings(QSettings::UserScope, "KarboSoft", "HTTraQt"); s->setValue("pos", pos()); s->setValue("size", size()); s->setValue("WorkDir", currentWorkDir); s->setValue("LANGUAGE", currentLang); s->setValue("LASTPROJ", currentProject); // s->setValue("FontSize", fontSize); // s->setValue("GUIFont", sysFont); // qDebug() << "writeGUISettings"; int i = 0; for (QStringList::Iterator iDir = lastDirs.begin(); iDir != lastDirs.end(); iDir++, i++) { if (i > 8) { // max last dirs break; } s->setValue("LASDIR" + QString::number(i), (*iDir)); } s->sync(); } void HTTraQt::writeSettings(bool global) { QSettings* s; QString fname; if (global == true) { s = new QSettings(QSettings::UserScope, "KarboSoft", "HTTraQt"); s->setValue("WorkDir", currentWorkDir); s->setValue("LANGUAGE", currentLang); // qDebug() << "writesettings global"; } else { if (currentProject.length() == 0) { return; } fname = currentWorkDir + "/" + currentProject/* + "/hts-cache"*/; QDir d(fname); if (d.exists() == false) { d.mkpath((const QString) fname); } if (d.mkpath(fname + "/hts-cache") == false) { qDebug() << "can not create"; } fname += "/hts-cache/winprofile.ini"; // qDebug() << "writesettings local" << fname; s = new QSettings(fname, WIniFormat); } saveOptions(s, global); } // to get locale and convert to internal string QString HTTraQt::getLocaleString() { QString res; QLocale lSys = QLocale::system(); switch (lSys.language()) { case QLocale::Byelorussian: res = "Belarussian"; break; case QLocale::Bulgarian: res = "Bulgarian"; break; case QLocale::Spanish: res = "Castellano"; break; case QLocale::Czech: res = "Česky"; break; case QLocale::Chinese: res = "Chinese-Simplified"; break; case QLocale::Danish: res = "Dansk"; break; case QLocale::German: res = "Deutsch"; break; case QLocale::Estonian: res = "Eesti"; break; case QLocale::C: res = "English"; break; case QLocale::Finnish: res = "Finnish"; break; case QLocale::French: res = "Français"; break; case QLocale::Greek: res = "Greek"; break; case QLocale::Italian: res = "Italiano"; break; case QLocale::Japanese: res = "Japanese"; break; case QLocale::Hungarian: res = "Magyar"; break; case QLocale::Netherlands: res = "Nederlands"; break; case QLocale::NorwegianNynorsk: res = "Norsk"; break; case QLocale::Polish: res = "Polski"; break; case QLocale::Brazil: res = "Português-Brasil"; break; case QLocale::Portuguese: res = "Português"; break; case QLocale::Romanian: res = "Romanian"; break; case QLocale::Russian: res = "Russian"; break; case QLocale::Slovak: res = "Slovak"; break; case QLocale::Slovenian: res = "Slovenian"; break; case QLocale::Swedish: res = "Svenska"; break; case QLocale::Turkish: res = "Turkish"; break; case QLocale::Ukrainian: res = "Ukrainian"; break; default: res = "English"; break; } return res; } void HTTraQt::readGUISettings() { QSettings* s; s = new QSettings(QSettings::UserScope, "KarboSoft", "HTTraQt"); QPoint pos = s->value("pos", QPoint(200, 200)).toPoint(); QSize size = s->value("size", QSize(840, 640)).toSize(); resize(size); move(pos); QString l; l = getLocaleString(); currentLang = s->value("LANGUAGE", l).toString(); currentProject = s->value("LASTPROJ").toString(); sysFont = sysFont.toString(); int sz = sysFont.pointSize(); if ( sz == -1) { sz = sysFont.pixelSize(); } fontSize = sz; for (int i = 0; i < 8; i++) { QString d = s->value("LASDIR" + QString::number(i)).toString(); QDir dr; if (d.length() == 0) { break; } if (dr.exists(d) == true) { lastDirs << d; } } QDir dir; QStringList dirsLang; dirsLang << "/usr/share/httraqt/" << "/usr/local/share/httraqt/" << currentAppDir; foreach(QString entry, dirsLang) { helpDir = entry + "/help/"; dir = QDir(helpDir); if (dir.exists() == true) { break; } else { helpDir = ""; } } foreach(QString entry, dirsLang) { langDir = entry + "/lang/"; dir = QDir(langDir); if (dir.exists() == true) { break; } else { langDir = ""; } } } void HTTraQt::readSettings(bool global) { QSettings* s; QString fname; QString text; if (global == true) { s = new QSettings(QSettings::UserScope, "KarboSoft", "HTTraQt"); currentWorkDir = s->value(QString("WorkDir"), QString(QDir::homePath() + "/My Web Sites")).toString(); } else { fname = currentWorkDir + "/" + currentProject + "/linprofile.ini"; if (QFile::exists(fname) == false) { // exists fname = currentWorkDir + "/" + currentProject + "/hts-cache/winprofile.ini"; if (QFile::exists(fname) == false) { // exists fname = ""; } } } if (fname.length() == 0) { // file not found, global settings s = new QSettings(QSettings::UserScope, "KarboSoft", "HTTraQt"); } else { s = new QSettings(fname, WIniFormat); } currentOptionsFile = fname; loadOptions(s); } void HTTraQt::onCancelAll() { } void HTTraQt::onQuit() { quit(); } void HTTraQt::activatePage(int pageNum) { switch (pageNum) { case 0: { // start tab currentTab = 0; // actions pcShutdown = false; pcHibernate = false; browseAct->setEnabled(false); viewLogAct->setEnabled(false); viewErrLogAct->setEnabled(false); pauseOptAct->setEnabled(false); modifyOptAct->setEnabled(false); break; } case 1: { // new project tab or select project // qDebug() << "seite 1: " << currentWorkDir; (static_cast(widgets[1]))->editBasePath->setText(currentWorkDir); (static_cast(widgets[1]))->selectProj(currentProject); currentTab = 1; //actions browseAct->setEnabled(false); viewLogAct->setEnabled(false); viewErrLogAct->setEnabled(false); pauseOptAct->setEnabled(false); modifyOptAct->setEnabled(false); break; } case 2: { // options tab if (currentTab == 1) { // prüfe, ob die parameter i.o. sind: aus NewProjTab if ((static_cast(widgets[1]))->testIt() == false) { // projektname muss vorhanden sein return; } } bool nProj = rebuildWorkDirView(); QString url; GetProfile("CurrentUrl", url); (static_cast(widgets[2]))->textEdit->setText(url); QString urlFile; GetProfile("CurrentURLList", urlFile); (static_cast(widgets[2]))->label1286->setText(urlFile); if (nProj == false) { (static_cast(widgets[2]))->updateLastAction(); getOptions(); } else { m_todo = 0; (static_cast(widgets[2]))->comboAction->setCurrentIndex(m_todo); readSettings(true); // global m_todo = 0; } // wenn projekt existierte, einlesen von diversen settings und url liste. if ((m_todo == LAST_ACTION) || (m_todo == LAST_ACTION - 1)) { if (checkContinue(true) == false) { return; } } currentTab = 2; //actions browseAct->setEnabled(false); viewLogAct->setEnabled(false); viewErrLogAct->setEnabled(false); pauseOptAct->setEnabled(false); modifyOptAct->setEnabled(false); break; } case 3: { // confirm tab with delay time if (currentTab == 2) { // prüfe, ob die parameter i.o. sind: aus OptionsTab if ((static_cast(widgets[2]))->testIt() == false) { // die url liste muss vorhanden sein MessageBox::exec(this, translate(_NOURL), translate(_URLNOTCOMP), QMessageBox::Critical); return; } } (static_cast(widgets[2]))->updateLastAction(); QString url = (static_cast(widgets[2]))->textEdit->toPlainText(); SetProfile("CurrentUrl", url); QString urlFile = (static_cast(widgets[2]))->label1286->text(); SetProfile("CurrentURLList", urlFile); (static_cast(widgets[3]))->groupPCoff->setChecked(false); (static_cast(widgets[3]))->labelHH->clear(); // HH (static_cast(widgets[3]))->labelMM->clear(); // MM (static_cast(widgets[3]))->labelSS->clear(); // SS currentTab = 3; getMainOptionsFromGUI(); writeSettings(false); // write project settings // check current action, if QString prDir; prDir = currentWorkDir + "/" + currentProject + "/"; //actions browseAct->setEnabled(false); viewLogAct->setEnabled(false); viewErrLogAct->setEnabled(false); pauseOptAct->setEnabled(false); modifyOptAct->setEnabled(false); menuPreferences->setEnabled(true); break; } case 4: { // progress tab currentTab = 4; //actions browseAct->setEnabled(true); viewLogAct->setEnabled(true); viewErrLogAct->setEnabled(true); pauseOptAct->setEnabled(true); modifyOptAct->setEnabled(true); menuPreferences->setEnabled(false); for (int i = 1; i < NStatsBuffer; i++) { (static_cast(widgets[4]))->progressSheet->setRowHidden(i, true); } launch(); break; } case 5: { // log tab currentTab = 5; // actions browseAct->setEnabled(true); viewLogAct->setEnabled(false); viewErrLogAct->setEnabled(false); pauseOptAct->setEnabled(false); modifyOptAct->setEnabled(false); menuPreferences->setEnabled(true); break; } default: break; } for (int i = 0; i <= 5; i++) { if (i == pageNum) { if (widgets[i]->isHidden() == true) { widgets[i]->show(); } } else { if (widgets[i]->isHidden() == false) { widgets[i]->hide(); } } } buttonsWidget->onButtons(pageNum); } HTTraQt::~HTTraQt() { if(_singular->isAttached()) { _singular->detach(); } quit(); } int HTTraQt::removeFolder(QDir &dir) { int res = 0; //list of dirs QStringList lstDirs = dir.entryList(QDir::Dirs | QDir::AllDirs | QDir::NoDotAndDotDot); //file list QStringList lstFiles = dir.entryList(QDir::Files); //rm files foreach(QString entry, lstFiles) { QString entryAbsPath = dir.absolutePath() + "/" + entry; QFile::remove(entryAbsPath); } //for directories recursive foreach(QString entry, lstDirs) { QString entryAbsPath = dir.absolutePath() + "/" + entry; QDir dr; dr = QDir(entryAbsPath); removeFolder(dr); } //deleting of directory if (!QDir().rmdir(dir.absolutePath())) { res = 1; } return res; } void HTTraQt::viewLog() { QString name = currentWorkDir + "/" + currentProject + "/" "hts-log.txt"; // fichier log existe ou on est télécommandé par un ! if (QFile::exists(name) == true ) { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( name ))); return; } // name = currentWorkDir + "/" + currentProject + "/" "hts-err.txt"; // // if (QFile::exists(name) == true ) { // QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( name ))); // return; // } QString l = translate(_NOLOGFILES); l.replace("%s", currentProject); MessageBox::exec(this, translate(_ERROR), l, QMessageBox::Warning); } void HTTraQt::viewErrorLog() { QString name = currentWorkDir + "/" + currentProject + "/" "hts-err.txt"; if (QFile::exists(name) == true ) { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( name ))); return; } QString l = translate(_NOLOGFILES); l.replace("%s", currentProject); MessageBox::exec(this, translate(_ERROR), l, QMessageBox::Warning); } #if 0 void HTTraQt::createFontSizeMenu() { fontSizeMenu = menuPreferences->addMenu(translate(_SEL_FONT)); fsizeGroup = new QActionGroup(this); QStringList szList; szList << "9" << "10" << "12" << "14" << "16" << "18" << "20"; foreach(QString entry, szList) { QAction *tmpAction = new QAction(entry, fontSizePrefAct); tmpAction->setCheckable(true); fontSizeMenu->addAction(tmpAction); fsizeGroup->addAction(tmpAction); if (fontSize == entry.toInt()) { tmpAction->setChecked(true); } actFSizeSelect.push_back(tmpAction); } connect(fsizeGroup, SIGNAL(triggered(QAction*)), this, SLOT(selectFontSize(QAction*))); } #endif bool HTTraQt::readLangDir() { bool found = false; QString lngDirName; QStringList dirsLang; QDir dir; dirsLang << "/usr/share/httraqt/" << "/usr/local/share/httraqt/" << currentAppDir; // dictFormat = 0; foreach(QString entry, dirsLang) { lngDirName = entry + "/lang/"; dir = QDir(lngDirName); if (dir.exists() == true) { found = true; break; } lngDirName = entry + "/language/"; dir = QDir(lngDirName); if (dir.exists() == true) { found = true; break; } } if(found == false) { return false; } langFiles.clear(); QStringList fList = dir.entryList(QStringList("*.utf")); found = false; langMenu = menuPreferences->addMenu(translate(_LANGUAGE)); langGroup = new QActionGroup(this); for (QStringList::Iterator iL = fList.begin(); iL != fList.end(); iL++) { QFile fLang(lngDirName + *iL); if (fLang.exists() == false) { continue; } QString iconName; if (fLang.open(QIODevice::ReadOnly)) { //wird eingelesen QTextStream stream(&fLang); #if USE_QT_VERSION == 6 stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif QString line, nm; int lines = 0; while (!stream.atEnd()) { line = stream.readLine(); // line of text excluding '\n' lines++; if (line == "LANGUAGE_NAME") { line = stream.readLine(); lines++; nm = line; continue; } if (line == "LANGUAGE_ISO") { line = stream.readLine(); selectedLang = line; lines++; iconName = lngDirName + "flags/" + line + ".png"; found = true; langFiles += (*iL) + ":" + nm; QAction *tmpAction = new QAction(nm, langPrefAct); tmpAction->setCheckable(true); if (QFile::exists(iconName) == true) { QFile flIcon(iconName); if (flIcon.size() < 1024 ) { // checking of filesize tmpAction->setIcon(QIcon(iconName)); } } langGroup->addAction(tmpAction); langMenu->addAction(tmpAction); if (currentLang == nm) { tmpAction->setChecked(true); } actLangSelect.push_back(tmpAction); break; } if (lines > 8) { break; } } fLang.close(); } else { continue; } } connect(langGroup, SIGNAL(triggered(QAction*)), this, SLOT(setLang(QAction*))); return (found); } void HTTraQt::selectFontSize(QAction* mnu) { QString lngStr; lngStr = mnu->text(); lngStr.remove(QChar('&')); fontSize = lngStr.toInt(); mnu->setChecked(true); int sz = sysFont.pointSize(); // for lang menu and for fontsize menu #if USE_QT_VERSION == 6 if ( sz == -1) { programStyleSheet = QString().asprintf("font-size: %dpx", fontSize); } else { programStyleSheet = QString().asprintf("font-size: %dpt", fontSize); } #else if ( sz == -1) { programStyleSheet = QString().sprintf("font-size: %dpx", fontSize); } else { programStyleSheet = QString().sprintf("font-size: %dpt", fontSize); } #endif QString sSheet2 = QString("QMenu { %1; }").arg( programStyleSheet ); setStyleSheet(programStyleSheet); langMenu->setStyleSheet(sSheet2); setFontForWidgets(); } void HTTraQt::setLang(QAction* mnu) { QString lngStr; mnu = langGroup->checkedAction(); lngStr = mnu->text(); currentLang = lngStr; if (getLangTable() == false) { qDebug() << "setLang" << false; } QVector::iterator itL; disconnect(langGroup, SIGNAL(triggered(QAction*)), this, SLOT(setLang(QAction*))); mnu->setChecked(true); connect(langGroup, SIGNAL(triggered(QAction*)), this, SLOT(setLang(QAction*))); setLangGUI(); } void HTTraQt::convertTranslateFiles() { // bool found = false; QString lngDirName = currentAppDir + "/lang/"; QDir dir(lngDirName); QStringList fList = dir.entryList(QStringList("*.utf")); for (QStringList::Iterator iL = fList.begin(); iL != fList.end(); iL++) { if (loadTranslation(lngDirName + *iL) == false) { continue; } QFile fLang(lngDirName + *iL); QTextStream streamInput; if (fLang.open(QIODevice::ReadOnly)) { //wird eingelesen streamInput.setDevice(&fLang); #if USE_QT_VERSION == 6 streamInput.setEncoding(QStringConverter::Utf8); #else streamInput.setCodec("UTF-8"); #endif } else { continue; } // #ifdef TRANSLATE_FILE QFile langTrFile(lngDirName + (*iL) + ".new"); if (langTrFile.open(QIODevice::WriteOnly)) { bool trBeg = false; QTextStream streamOutput(&langTrFile); #if USE_QT_VERSION == 6 streamInput.setEncoding(QStringConverter::Utf8); #else streamOutput.setCodec("UTF-8"); #endif while (trBeg == false) { QString line; line = streamInput.readLine(); if (line.length() > 0) { if (line.indexOf("OK") == 0 || line.indexOf("Ok") == 0) { // beg of translations detected trBeg = true; break; } else { streamOutput << line << "\r\n"; } } } if (trBeg == true) { for (int i = 0; engText[i] != ""; i++) { QString ll = translate(i); if (ll.length() > 0) { ll.replace( "\n", "\\r\\n"); ll.replace( "\n", "\\n"); ll.replace( "\t", "\\t"); ll.replace( "/", "\\\\"); ll.replace( "&", "&"); ll.replace( ">", ">"); ll.replace( "<", "<"); #if USE_QT_VERSION == 6 streamOutput << QString().asprintf("t%03d=", i) << ll << "\r\n"; #else streamOutput << QString().sprintf("t%03d=", i) << ll << "\r\n"; #endif } } } } else { qDebug() << "cannot open" << langTrFile.fileName(); } langTrFile.close(); fLang.close(); } } // thanks to Leon // https://qt-project.org/forums/viewthread/5957 //HIBERNATE void HTTraQt::hibernate() { int ret; MessageTimerBox msgBox; bool num; int minutes = (static_cast(widgets[3]))->lineEditCounter->text().toInt(&num); if (num == false) { minutes = 1; } msgBox.setDefaultText("Hibernate PC?\nAutoclose in %d seconds..."); msgBox.setIcon(QMessageBox::Question); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setAutoClose(true); msgBox.setTimeout(minutes * 60); //Closes after x minutes ret = msgBox.exec(); if (ret == QMessageBox::No) { return; } #ifdef __WIN32__ // code for win systems #endif #ifdef __linux__ bool gnome_power1 = false; bool gnome_power2 = false; bool hal_works = false; QDBusMessage response; gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh hibernate"); gnome_power2 = QProcess::startDetached("gnome-power-cmd hibernate"); if(!gnome_power1 && !gnome_power2 && verbose) { qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work"; } if(!gnome_power1 && !gnome_power2) { QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); response = powermanagement.call("Hibernate"); if(response.type() == QDBusMessage::ErrorMessage) { if(verbose) { qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } } else { hal_works = true; } } if(!hal_works && !gnome_power1 && !gnome_power2) { QDBusInterface powermanagement("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power", "org.freedesktop.DeviceKit.Power", QDBusConnection::systemBus()); if(response.type() == QDBusMessage::ErrorMessage) { if(verbose) { qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } } } #endif // LINUX #ifdef __APPLE__ #endif } //SHUTDOWN void HTTraQt::shutdown() { int ret; MessageTimerBox msgBox; bool num; int minutes = (static_cast(widgets[3]))->lineEditCounter->text().toInt(&num); if (num == false) { minutes = 1; } msgBox.setDefaultText("Shutdown PC?\nAutoclose in %d seconds..."); msgBox.setIcon(QMessageBox::Question); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setAutoClose(true); msgBox.setTimeout(minutes * 60); //Closes after three seconds ret = msgBox.exec(); if (ret == QMessageBox::No) { return; // no shutdown } #ifdef __WIN32__ // code for win systems #endif #ifdef __linux__ bool shutdown_works = false; bool gnome_power1 = false; bool gnome_power2 = false; bool hal_works = false; QDBusMessage response; QDBusInterface gnomeSessionManager("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", QDBusConnection::sessionBus()); response = gnomeSessionManager.call("RequestShutdown"); if(response.type() == QDBusMessage::ErrorMessage) { if(verbose) { qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh shutdown"); gnome_power2 = QProcess::startDetached("gnome-power-cmd shutdown"); if(verbose && !gnome_power1 && !gnome_power2) { qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work"; } } else { shutdown_works = true; } QDBusInterface kdeSessionManager("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface", QDBusConnection::sessionBus()); response = kdeSessionManager.call("logout", 0, 2, 2); if(response.type() == QDBusMessage::ErrorMessage) { if(verbose) { qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } } else { shutdown_works = true; } if(!shutdown_works && !gnome_power1 && !gnome_power2) { QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); response = powermanagement.call("Shutdown"); if(response.type() == QDBusMessage::ErrorMessage) { if(verbose) { qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } } else { hal_works = true; } } if(!hal_works && !shutdown_works && !gnome_power1 && !gnome_power2) { QDBusInterface powermanagement("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()); response = powermanagement.call("Stop"); if(response.type() == QDBusMessage::ErrorMessage) { if(verbose) { qWarning() << "W: " << response.errorName() << ":" << response.errorMessage(); } QProcess::startDetached("sudo shutdown -P now"); } } #endif // UNIX #ifdef __APPLE__ #endif } bool HTTraQt::getLangTable() { QString lang = currentLang; QString fileLang = ""; for (QStringList::Iterator iLang = langFiles.begin(); iLang != langFiles.end(); iLang++) { if ((*iLang).contains(":" + lang) > 0) { fileLang = *iLang; fileLang.remove(":" + lang); break; } } if (fileLang == "") { return (false); } if (QFile::exists(langDir + fileLang) == false) { MessageBox::exec(this, translate(_ERROR), "Language file not exists!\n\n" + langDir + "\n\n" + fileLang, QMessageBox::Warning); return (false); } return loadTranslation(langDir + fileLang); } void HTTraQt::setLangGUI() { (static_cast(widgets[0]))->translateTab(); (static_cast(widgets[1]))->translateTab(); (static_cast(widgets[2]))->translateTab(); (static_cast(widgets[3]))->translateTab(); (static_cast(widgets[4]))->translateTab(); (static_cast(widgets[5]))->translateTab(); // actions translate translateActions(); rebuildWorkDirView(); } void HTTraQt::translateActions(QAction* act, int id) { QString tmp; QString str = translate(id); int posTab; if (str.length() == 0) { return; } posTab = str.indexOf("\\t"); tmp = translate(id); if (posTab > 0) { QString shrtcut = str.mid(posTab + 2); QStringList tmpC = tmp.split("\\t"); act->setText(tmpC.at(0)); act->setFont(sysFont); act->setShortcut(shrtcut); } else { act->setText(tmp); act->setFont(sysFont); } } void HTTraQt::translateActions() { buttonsWidget->translateButtons(); menuFile->setTitle(translate(_FILE)); translateActions(newProjAct, _P18); translateActions(browseAct, _P23); browsProjAct->setStatusTip ( translate ( _BROWSEEXISTS ) ); translateActions(exitAct, _EXIT); // exitAct->setStatusTip ( tr ( "Exit" ) ); menuPreferences->setTitle(translate(_PREF)); // menuPreferences->setStyleSheet(sSheet); translateActions(loadDefOptAct, _LOADDEF); // loadDefOptAct->setStatusTip ( tr ( "Load default options" ) ); translateActions(saveOptAct, _SAVEDEF); // saveOptAct->setStatusTip ( tr ( "Save default options" ) ); translateActions(resetOptToDefAct, _RESETTODEF); // resetOptToDefAct->setStatusTip ( tr ( "Reset to default options" ) ); translateActions(loadOptAct, _LOADOPT); // loadOptAct->setStatusTip ( tr ( "Load options..." ) ); // translateActions(recentAct, "Recent file"); // recentAct->setStatusTip ( tr ( "Recent file" ) ); translateActions(saveOptAsAct, _SAVEOPTAS); // translateActions(selectFontAct, _SEL_FONT); // saveOptAsAct->setStatusTip ( tr ( "Save options as..." ) ); langMenu->setTitle(translate(_LANGPREF)); // fontSizeMenu->setTitle(translate(_SEL_FONT)); menuMirror->setTitle(translate(_MIRROR)); // menuMirror->setStyleSheet(sSheet); translateActions(modifyOptAct, _MODIFYOPT); // modifyOptAct->setStatusTip ( tr ( "Modify options" ) ); pauseOptAct->setCheckable(true); translateActions(pauseOptAct, _PAUSETRANSF); // pauseOptAct->setStatusTip ( tr ( "Pause transfer" ) ); menuLog->setTitle(translate(_LOG)); // menuLog->setStyleSheet(sSheet); translateActions(viewLogAct, _VIEW_LOG); // viewLogAct->setStatusTip ( translate("View log" ) ); translateActions(viewErrLogAct, _VIEWERRLOG); // viewErrLogAct->setStatusTip ( tr ( "View error log" ) ); menuWindow->setTitle(translate(_WINDOW)); // menuWindow->setStyleSheet(sSheet); translateActions(hideAct, _HIDE); translateActions(restAct, _OPEN); // hideAct->setStatusTip ( tr ( "Hide" ) ); menuHelp->setTitle(translate(_HELP)); // menuHelp->setStyleSheet(sSheet); translateActions(checkAct, _TOPROJECTPAGE); translateActions(stepByStepAct, _STEPBYSTEP); translateActions(contentAct, _CONTENTS); translateActions(aboutAct, _ABOUTPROG); } void HTTraQt::quit() { int ans; if (pcHibernate == false && pcShutdown == false ) { ans = MessageBox::exec(this, translate(_QUIT), translate(_REALLYQUIT), QMessageBox::Question); if (ans == QMessageBox::No) { return; } } writeGUISettings(); qApp->quit(); } void HTTraQt::closeEvent(QCloseEvent* ce) { int ans; if (pcHibernate == false && pcShutdown == false ) { ans = MessageBox::exec(this, translate(_QUIT), translate(_REALLYQUIT), QMessageBox::Question); if (ans == QMessageBox::No) { ce->ignore(); return; } } writeGUISettings(); // ce->accept(); qApp->quit(); // return; } void HTTraQt::aboutQt() { QMessageBox::aboutQt(this, PROGRAM_NAME); } void HTTraQt::about() { AboutDialog *ad; ad = new AboutDialog(this); ad->exec(); delete ad; } // modifs RX 10/10/98: gestion des , QString HTTraQt::change(char* chaine, char c) { int comma = 1; int first = 1; QString chaine1; for (int i = 0; i < (int) strlen(chaine); i++) { switch (chaine[i]) { case 10: case 13: case 9: case ' ': case ',': comma = 1; break; default: if (comma) { if (!first) { chaine1 += ' '; } else { first = 0; } chaine1 += c; comma = 0; } chaine1 += chaine[i]; break; } } return chaine1; } void HTTraQt::getMainOptionsFromGUI() { QString str; QStringList sList; // str = firstWidget->label1027->currentText(); // SetProfileString(mainOptions, "Category", str); str = (static_cast(widgets[2]))->textEdit->toPlainText(); SetProfile("CurrentUrl", str); //end of combobox str = (static_cast(widgets[2]))->label1286->text(); SetProfile("CurrentURLList", str); } void HTTraQt::gOptions(bool dialog) { if (mth == NULL ) { return; } OptionsDialog *oDia; if (dialog == true) { oDia = new OptionsDialog(this); oDia->exec(); } if (global_opt != NULL) { getOptStruct(global_opt); } if (dialog == true) { delete oDia; writeSettings(false); } } void HTTraQt::setOptions() { gOptions(false); // without dialog } void HTTraQt::modifyOptions() { gOptions(true); } void HTTraQt::setMainOptionsToGUI() { QString str; QStringList sList; readSettings(true); // GetProfileString(mainOptions, "Category", str); // str = firstWidget->label1027->Text(); GetProfile("CurrentUrl", str); str.replace(" ", "\n"); (static_cast(widgets[2]))->textEdit->setText(str); str = translate((static_cast(widgets[2]))->comb01); sList = str.split("\n"); GetProfile("CurrentURLList", str); (static_cast(widgets[2]))->label1286->setText(str); } bool HTTraQt::RemoveEmptyDir(QString path) { int ans = MessageBox::exec(this, translate(_REMOVE), translate(_SURE), QMessageBox::Question); if (ans == QMessageBox::No) { return false; } QDirIterator it(path, QDirIterator::Subdirectories); while (it.hasNext()) { QString n = it.next(); if (n == "." || n == "..") { continue; } QString fullPath = path + "/" + n; QDir subd(fullPath); if (subd.rmdir(fullPath) == false) { MessageBox::exec(this, translate(_ERR), translate(_ANYDIRNOTEMPTY), QMessageBox::Warning); return false; } } QStringList names; QString maske = path + "/*.*"; QDir d(path); names = d.entryList(QStringList("*.*")); for (QStringList::Iterator ist = names.begin(); ist != names.end(); ++ist) { if (*ist == "." || *ist == "..") { // is dir continue; } else { d.remove(path + "/" + (*ist)); } } if (d.remove(maske) == true) { d.rmdir(path); } #ifdef WIN32 QDir::setCurrent("C:\\"); #else QString home = QDir::homePath(); QDir::setCurrent(home); #endif return true; } httraqt-1.4.11/sources/main/translator.cpp0000664000175000017500000007224314355527704021015 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include "includes/translator.h" #include "includes/httraqt.h" extern HTTraQt* mainWidget; QVector cTranslator::translateTable; QString cTranslator::engText[] = { "HTTraQt", // 0 "N# connections", // 1 "Select font size", // 2 "TimeOut", // 3 "Retries", // 4 "Maximum transfer rate", // 5 "Minimum transfer rate", // 6 "Persistent connections (Keep-Alive)", // 7 "Cancel all links from host if timeout occurs", // 8 "Cancel all links from host if too slow", // 9 "Check document type", // 10 "Spider", // 11 "Accept cookies", // 12 "Parse java files", // 13 "Update hack (limit re-transfers)", // 14 "URL hacks (join similar URLs)", // 15 "Tolerant requests (for servers)", // 16 "Force old HTTP/1.0 requests (no 1.1)", // 17 "Browser identity", // 18 "Operation system Identity", // 19 "Operation", // 20 "HTML footer", // 21 "Structure type (how links are saved)", // 22 "DOS names (8+3)", // 23 "No error pages", // 24 "No external pages", // 25 "Hide passwords", // 26 "Hide query strings", // 27 "Do not purge old files", // 28 "ISO9660 names (CDROM)", // 29 "Build", // 30 "These options should be modified only exceptionally", // 31 "Primary Scan Rule", // 32 "Travel mode", // 33 "Global travel mode", // 34 "Rewrite links: internal / external", // 35 "Use a cache for updates and retries", // 36 "Activate Debugging Mode (httraqt.log)", // 37 "Maximum mirroring depth from root address", // 38 "Maximum mirroring depth for external/forbidden addresses (0, that is, none, is the default)", // 39 "Max size of any HTML file", // 40 "Max size of any non-HTML file", // 41 "Size limit", // 42 "Pause after downloading..", // 43 "Max time", // 44 "Size", // 45 "Max connections / seconds", // 46 "Maximum number of links", // 47 "All links will match", // 48 "Get non-HTML files related to a link, eg external .ZIP or pictures", // 49 "Test all links (even forbidden ones)", // 50 "Get HTML files first!", // 51 "Type/MIME associations", // 52 "File types:", // 53 "MIME identity:", // 54 "Proxy address:", // 55 "Proxy port:", // 56 "Login", // 57 "Password", // 58 "Use proxy for ftp transfers", // 59 "Use wildcards to exclude or include URLs or links.\nYou can put several scan strings on the same line.\nUse spaces as separators.\n\nExample: +*.zip -www.*.com -www.*.edu/cgi-bin/*.cgi", // 60 "Criterion", // 61 "String", // 62 "Tip: To have ALL GIF files included, use something like +www.someweb.com/*.gif. \n(+*.gif / -*.gif will include/exclude ALL GIFs from ALL sites)", // 63 "WildCardFilters", // 64 "Add Scan Rule", // 65 "Exclude links", // 66 "Include link(s)", // 67 "Store ALL files in cache", // 68 "Do not re-download locally erased files", // 69 "Create Log files", // 70 "Make an index", // 71 "Make a word database", // 72 "File names with extension:\nFile names containing:\nThis file name:\nFolder names containing:\nThis folder name:\nLinks on this domain:\nLinks on domains containing:\nLinks from this host:\nLinks containing:\nThis link:\nALL LINKS", // 73 "Show all\nHide debug\nHide infos\nHide debug and infos", // 74 "Site-structure (default)\nHtml in web/, images/other files in web/images/\nHtml in web/html, images/other in web/images\nHtml in web/, images/other in web/\nHtml in web/, images/other in web/xxx, where xxx is the file extension\nHtml in web/html, images/other in web/xxx\nSite-structure, without www.domain.xxx/\nHtml in site_name/, images/other files in site_name/images/\nHtml in site_name/html, images/other in site_name/images\nHtml in site_name/, images/other in site_name/\nHtml in site_name/, images/other in site_name/xxx\nHtml in site_name/html, images/other in site_name/xxx\nAll files in web/, with random names (gadget !)\nAll files in site_name/, with random names (gadget !)\nUser-defined structure..", // 75 "Just scan\nStore html files\nStore non html files\nStore all files (default)\nStore html files first", // 76 "Stay in the same directory\nCan go down (default)\nCan go up\nCan both go up & down", // 77 "Stay on the same address (default)\nStay on the same domain\nStay on the same top level domain\nGo everywhere on the web", // 78 "Never\nIf unknown (except /)\nIf unknown", // 79 "no robots.txt rules\nrobots.txt except wizard\nfollow robots.txt rules", // 80 "normal\nextended\ndebug", // 81 "Download web site(s)\nDownload web site(s) + questions\nGet individual files\nDownload all sites in pages (multiple mirror)\nTest links in pages (bookmark test)\n* Continue interrupted download\n* Update existing download", // 82 "Relative URI / Absolute URL (default)\nAbsolute URL / Absolute URL\nAbsolute URI / Absolute URL\nOriginal URL / Original URL", // 83 "- Mirroring Mode -\n\nEnter address(es) in URL box", // 84 "- Interactive Wizard Mode (questions) -\n\nEnter address(es) in URL box", // 85 "- File Download Mode -\n\nEnter file address(es) in URL box", // 86 "- Links List Mode -\n\nUse URL box to enter address(es) of page(s) containing links to mirror", // 87 "- Link Testing Mode -\n\nEnter Web address(es) with links to test in URL box", // 88 "- Update Mode -\n\nVerify address(es) in URL box, check parameters if necessary then click on 'NEXT' button", // 89 "- Resume Mode (Interrupted Operation) -\n\nVerify address(es) in URL box, check parameters if necessary then click on 'NEXT' button", // 90 "Ok", // 91 "Cancel", // 92 "Exit", // 93 "Close", // 94 "Cancel changes", // 95 "Click to confirm", // 96 "Click to get help!", // 97 "Click to return to previous screen", // 98 "Click to go to next screen", // 99 "Hide password", // 100 "Save project", // 101 "Close current project?", // 102 "Delete this project?", // 103 "Delete empty project %s?", // 104 "Action not yet implemented", // 105 "Error deleting this project", // 106 "Select a rule for the filter", // 107 "Enter keywords for the filter", // 108 "Add this rule", // 109 "Please enter one or several keyword(s) for the rule", // 110 "Add", // 111 "Scan Rules", // 112 "Matching links will be excluded:", // 113 "Matching links will be included:", // 114 "Example:", // 115 "gif\nWill match all GIF files", // 116 "blue\nWill find all files with a matching 'blue' sub-string such as 'bluesky-small.jpeg'", // 117 "bigfile.mov\nWill match the file 'bigfile.mov', but not 'bigfile2.mov'", // 118 "cgi\nWill find links with folder name matching sub-string 'cgi' such as /cgi-bin/somecgi.cgi", // 119 "cgi-bin\nWill find links with folder name matching whole 'cgi-bin' string (but not cgi-bin-2, for example)", // 120 "someweb.com\nWill find links with matching sub-string such as www.someweb.com, private.someweb.com etc.", // 121 "someweb\nWill find links with matching folder sub-string such as www.someweb.com, www.someweb.edu, private.someweb.otherweb.com etc.", // 122 "www.someweb.com\nWill find links matching whole 'www.someweb.com' sub-string (but not links such as private.someweb.com/..)", // 123 "someweb\nWill find any links with matching sub-string such as www.someweb.com/.., www.test.abc/fromsomeweb/index.html, www.test.abc/test/someweb.html etc.", // 124 "www.test.com/test/someweb.html\nWill only find the 'www.test.com/test/someweb.html' file. Note that you have to type the complete path (URL + site path)", // 125 "Add exclusion filter", // 126 "Add inclusion filter", // 127 "Existing filters", // 128 "Cancel changes", // 129 "Save current preferences as default values", // 130 "Click to confirm", // 131 "No log files in %s!", // 132 "No 'index.html' file in %s!", // 133 "Click to quit HTTraQt Website Copier", // 134 "Browse HTML start page", // 135 "End of mirror", // 136 "View log files", // 137 "Browse Mirrored Website", // 138 "New project...", // 139 "View error and warning reports", // 140 "View report", // 141 "Close the log file window", // 142 "Info type:", // 143 "Infos", // 144 "Find", // 145 "Find a word", // 146 "Info log file", // 147 "Warning/Errors log file", // 148 "Unable to initialize the OLE system", // 149 "HTTraQt could not find any interrupted download file cache in the specified folder!", // 150 "Could not connect to provider", // 151 "receive", // 152 "request", // 153 "connect", // 154 "search", // 155 "Ready", // 156 "ready", // 157 "waiting", // 158 "error", // 159 "Receiving files..", // 160 "Parsing HTML file..", // 161 "Purging files..", // 162 "Loading cache in progress..", // 163 "Parsing HTML file (testing links)..", // 164 "Pause - Toggle [Mirror]/[Pause download] to resume operation", // 165 "Paused (select [File]/[Pause transfer] to continue)", // 166 "Finishing pending transfers - Select [Cancel] to stop now!", // 167 "scanning", // 168 "Waiting for scheduled time..", // 169 "Transferring data..", // 170 "Connecting to provider", // 171 "[%d seconds] to go before start of operation", // 172 "Site mirroring in progress [%s, %s]", // 173 "Site mirroring finished!", // 174 "A problem occured during the mirroring operation\n", // 175 "\nDuring:\n", // 176 "\nSee the log file if necessary.\n\nClick FINISH to quit HTTraQt Website Copier.\n\nThanks for using HTTraQt!", // 177 "Mirroring operation complete.\nClick Exit to quit HTTraQt.\nSee log file(s) if necessary to ensure that everything is OK.\n\nThanks for using HTTraQt!", // 178 "* * MIRROR ABORTED! * *\nThe current temporary cache is required for any update operation and only contains data downloaded during the present aborted session.\nThe former cache might contain more complete information; if you do not want to lose that information, you have to restore it and delete the current cache.\n[Note: This can easily be done here by erasing the hts-cache/new.* files]\n\nDo you think the former cache might contain more complete information, and do you want to restore it?", // 179 "* * MIRROR ERROR! * *\nHTTraQt has detected that the current mirror is empty. If it was an update, the previous mirror has been restored.\nReason: the first page(s) either could not be found, or a connection problem occured.\n=> Ensure that the website still exists, and/or check your proxy settings! <=", // 180 "\n\nTip: Click [View log file] to see warning or error messages", // 181 "Error deleting a hts-cache/new.* file, please do it manually", // 182 "Do you really want to quit HTTraQt Website Copier?", // 183 "Log files Path", // 184 "New project / Import?", // 185 "Choose criterion", // 186 "Maximum link scanning depth", // 187 "Enter address(es) here", // 188 "Define additional filtering rules", // 189 "Proxy Name (if needed)", // 190 "Proxy Port", // 191 "Define proxy settings", // 192 "Use standard HTTP proxy as FTP proxy", // 193 "Path", // 194 "Select Path", // 195 "Quit HTTraQt Website Copier", // 196 "About HTTraQt", // 197 "Save current preferences as default values", // 198 "Click to continue", // 199 "Click to define options", // 200 "Click to add a URL", // 201 "Load URL(s) from text file", // 202 "HTTraQt preferences (*.opt)|*.opt||", // 203 "Address List text file (*.txt)|*.txt||", // 204 "File not found!", // 205 "Do you really want to change the project name/path?", // 206 "Load user-default options?", // 207 "Save user-default options?", // 208 "Reset all default options?", // 209 "Welcome to HTTraQt!", // 210 "Action:", // 211 "Max Depth", // 212 "Maximum external depth:", // 213 "Filters (refuse/accept links) :", // 214 "Paths", // 215 "Define..", // 216 "Set options..", // 217 "Preferences and mirror options:", // 218 "Project name", // 219 "Add a URL...", // 220 "Web Addresses: (URL)", // 221 "Stop HTTraQt?", // 222 "Hibernate", // 223 "Pause Download?", // 224 "Pause", // 225 "Stop the mirroring operation", // 226 "Minimize to System Tray", // 227 "Click to skip a link or stop parsing", // 228 "Click to skip a link", // 229 "Bytes saved", // 230 "Stop", // 231 "Links scanned", // 232 "Time:", // 233 "Connections:", // 234 "Running:", // 235 "Hide", // 236 "Transfer rate", // 237 "SKIP", // 238 "Information", // 239 "Files written:", // 240 "Files updated:", // 241 "Errors:", // 242 "Errors", // 243 "In progress:", // 244 "Follow external links", // 245 "Test all links in pages", // 246 "Try to ferret out all links", // 247 "Download HTML files first (faster)", // 248 "Choose local site structure", // 249 "Set user-defined structure on disk", // 250 "Do not update zero size or user-erased files", // 251 "Create a Start Page", // 252 "Create a word database of all html pages", // 253 "Create error logging and report files", // 254 "Generate DOS 8-3 filenames ONLY", // 255 "Generate ISO9660 filenames ONLY for CDROM medias", // 256 "Do not create HTML error pages", // 257 "Select file types to be saved to disk", // 258 "Select parsing direction", // 259 "Select global parsing direction", // 260 "Setup URL rewriting rules for internal links (downloaded ones) and external links (not downloaded ones)", // 261 "Max simultaneous connections", // 262 "File timeout", // 263 "Minimum admissible transfer rate", // 264 "Maximum number of retries on non-fatal errors", // 265 "Maximum size for any single HTML file", // 266 "Maximum size for any single non-HTML file", // 267 "Maximum amount of bytes to retrieve from the Web", // 268 "Make a pause after downloading this amount of bytes", // 269 "Maximum duration time for the mirroring operation", // 270 "Maximum connections/seconds (avoid server overload)", // 271 "Maximum number of links that can be tested (not saved!)", // 272 "Comment to be placed in each HTML file", // 273 "Back to starting page", // 274 "Save current preferences as default values", // 275 "Click to continue", // 276 "Click to cancel changes", // 277 "Follow local robots rules on sites", // 278 "Links to non-localised external pages will produce error pages", // 279 "Do not erase obsolete files after update", // 280 "Accept cookies?", // 281 "Check document type when unknown?", // 282 "Parse java applets to retrieve included files that must be downloaded?", // 283 "Store all files in cache instead of HTML only", // 284 "Log file type (if generated)", // 285 "Create a debugging file", // 286 "Use non-standard requests to get round some server bugs", // 287 "Use old HTTP/1.0 requests (limits engine power!)", // 288 "Attempt to limit retransfers through several tricks (file size test..)", // 289 "Attempt to limit the number of links by skipping similar URLs (www.foo.com==foo.com, http=https ..)", // 290 "Write external links without login/password", // 291 "Write internal links without query string", // 292 "Try to catch all URLs (even in unknown tags/code)", // 293 "Use a cache for updates", // 294 "Log files", // 295 "Primary Scan Rule", // 296 "Flow control", // 297 "Limits", // 298 "Identity", // 299 "Abandon host if error", // 300 "Abandon host if too slow", // 301 "Configure", // 302 "Reduce connection time and type lookup time using persistent connections", // 303 "Max site size", // 304 "Save prefs", // 305 "Save", // 306 "Max transfer rate", // 307 "Follow robots.txt", // 308 "Links", // 309 "Experts Only", // 310 "Flow Control", // 311 "Browser ID", // 312 "Scan Rules", // 313 "Log, Index, Cache", // 314 "Proxy", // 315 "MIME Types", // 316 "Do not connect to a provider (already connected)", // 317 "Do not use remote access connection", // 318 "Schedule the mirroring operation", // 319 "Click to start!", // 320 "No saved password for this connection!", // 321 "Can not get remote connection settings", // 322 "Select a connection provider", // 323 "Start", // 324 "Please adjust connection parameters if necessary,\nthen press FINISH to launch the mirroring operation.", // 325 "Save settings only, do not launch download now.", // 326 "On hold", // 327 "Shutdown", // 328 "Transfer scheduled for: (hh/mm/ss)", // 329 "Connect to provider (RAS)", // 330 "Connect to this provider", // 331 "Disconnect when finished", // 332 "Disconnect modem on completion", // 333 "\n(Please notify us of any bug or problem)\n\nDevelopment:\nInterface (Windows): Xavier Roche\n" "Spider: Xavier Roche\nJavaParserClasses: Yann Philippot\n\n(C)1998-2003 Xavier Roche and other contributors\n" "MANY THANKS for translation tips to:\nRobert Lagadec (rlagadec@yahoo.fr)", // 334 "About HTTraQt Website Copier", // 335 "Please visit our Web page", // 336 "Wizard query", // 337 "Your answer:", // 338 "Link detected..", // 339 "Choose a rule", // 340 "Ignore this link", // 341 "Ignore directory", // 342 "Ignore domain", // 343 "Catch this page only", // 344 "Mirror site", // 345 "Mirror domain", // 346 "Ignore all", // 347 "Wizard query", // 348 "No", // 349 "Options", // 350 "Pause transfer", // 351 "Modify options", // 352 "View log", // 353 "View error log", // 354 "View file transfers", // 355 "Check program updates...", // 356 "&Toolbar", // 357 "&Status Bar", // 358 "S&plit", // 359 "File", // 360 "Progress", // 361 "Preferences", // 362 "Mirror", // 363 "Log", // 364 "Window", // 365 "Help", // 366 "Load default options", // 367 "Save default options", // 368 "Reset to default options", // 369 "Load options...", // 370 "Save options as...", // 371 "Language preference...", // 372 "Contents...", // 373 "About HTTraQt...", // 374 "New project\tCtrl+N", // 375 "&Open...\tCtrl+O", // 376 "&Save\tCtrl+S", // 377 "Save &As...", // 378 "&Delete...", // 379 "&Browse sites...", // 380 "User-defined structure", // 381 "%n\tName of file without file type (ex: image)\n%N\tName of file including file type (ex: image.gif)\n" "%t\tFile type only (ex: gif)\n%p\tPath [without ending /] (ex: /someimages)\n" "%h\tHost name (ex: www.someweb.com)\n%M\tMD5 URL (128 bits, 32 ascii bytes)\n" "%Q\tMD5 query string (128 bits, 32 ascii bytes)\n%q\tMD5 small query string (16 bits, 4 ascii bytes)\n" "\n%s?\tShort name (ex: %sN)", // 382 "Example:\t%h%p/%n%q.%t\n->\t\t%HOME%/mirror/www.someweb.com/someimages/image.gif", // 383 "Proxy settings", // 384 "Authentication (only if needed)", // 385 "Enter proxy address here", // 386 "Enter proxy port here", // 387 "Enter proxy login", // 388 "Enter proxy password", // 389 "Enter project name here", // 390 "Enter saving path here", // 391 "Select existing project to update", // 392 "Click here to select path", // 393 "Select or create a new category name, to sort your mirrors in categories", // 394 "HTTraQt Project Wizard...", // 395 "New project name:", // 396 "Existing project name:", // 397 "Project name:", // 398 "Base path:", // 399 "Project category:", // 400 "%HOME%/My Web Sites", // 401 "Type a new project name, \nor select existing project to update/resume", // 402 "New project", // 403 "Insert URL", // 404 "URL:", // 405 "Authentication (only if needed)", // 406 "Forms or complex links:", // 407 "Capture URL...", // 408 "Enter URL address(es) here", // 409 "Enter site login", // 410 "Enter site password", // 411 "Use this capture tool for links that can only be accessed through forms or javascript code", // 412 "Choose language according to preference", // 413 "Catch URL!", // 414 "Please set temporary browser proxy settings to the following values (Copy/Paste Proxy Address and Port).\n" "Then click on the Form SUBMIT button in your browser page, or click on the specific link you want to capture.", // 415 "This will send the desired link from your browser to HTTraQt.", // 416 "ABORT", // 417 "Copy/Paste the temporary proxy parameters here", // 418 "Unable to find Help files!", // 419 "Unable to save parameters!", // 420 "Please drag only one folder at a time", // 421 "Please drag only folders, not files", // 422 "Please drag folders only", // 423 "Select user-defined structure?", // 424 "Please ensure that the user-defined-string is correct,\notherwise filenames will be bogus!", // 425 "Do you really want to use a user-defined structure?", // 426 "Too manu URLs, cannot handle so many links!!", // 427 "Not enough memory, fatal internal error..", // 428 "Unknown operation!", // 429 "Add this URL?\n", // 430 "Warning: main process is still not responding, cannot add URL(s)..", // 431 "Select or modify your file type(s) here", // 432 "Select or modify your MIME type(s) here", // 433 "Go up", // 434 "Go down", // 435 "File download information", // 436 "Freeze Window", // 437 "More information:", // 438 "Welcome to HTTraQt Website Copier!\n\nPlease click on the NEXT button to\n" "\n- start a new project\n- or resume a partial download", // 439 "Open Source offline browser", // 440 "Website Copier/Offline Browser. Copy remote websites to your computer. Free.", // 441 "httrack, httraqt, webhttrack, offline browser", // 442 "URL list (*.txt)", // 443 "Previous", // 444 "Next", // 445 "URLs", // 446 "Warning", // 447 "Your browser does not currently support javascript. For better results, please use a javascript-aware browser.", // 448 "Thank you", // 449 "You can now close this window", // 450 "Server terminated", // 451 "A fatal error has occured during this mirror", // 452 "Wrong URL(s)!", // 453 "How You can thank a developer:", // 454 "Share the link to this program or to this project", // 455 "Report to developer about bugs or mistakes in the program", // 456 "Donate", // 457 "\n(Please notify us of any bug or problem)\n\nDevelopment:\n" "Interface (Windows): Xavier Roche\nInterface (Qt4/Qt5 based): Eduard Kalinowski\nSpider: Xavier Roche\n" "JavaParserClasses: Yann Philippot\n\n(C)1998-2003 Xavier Roche and other contributors\n" "MANY THANKS for translation tips to:\nRobert Lagadec (rlagadec@yahoo.fr)", // 458 "Get from the clipboard", // 459 "Documents", // 460 "Archives", // 461 "Images", // 462 "Multimedia", // 463 "Open new GUI", // 464 "Browse exists projects", // 465 "Step by step...", // 466 "To the project page...", // 467 "About HTTraQt Website Copier...", //468 "About Qt", // 469 "Question", // 470 "Open File", // 471 "No URL!", // 472 "The URL list is not complete!", // 473 "File error", // 474 "remove", // 475 "are you sure?", // 476 "Any subdirectory not empty!", // 477 "Save File", // 478 "&Language", // 479 "Stop?", // 480 "No directory", // 481 "Creating error", // 482 "Can not create directory!", // 483 "No project", // 484 "Waiting for specific hour to start", // 485 "Mirror waiting [%d seconds]", // 486 "Error", // 487 "Yes", // 488 "Build top Index", // 489 "Units", // 490 "Open", // 491 "PC off when finished", // 492 "Shutdown counter (minutes)", // 493 "Make or correct translation", // 494 "Browser name", // 495 "" }; bool cTranslator::loadTranslation(const QString fname) { QFile langFile(fname); short vecSize = (short)(sizeof(engText) / sizeof(char*)); translateTable.clear(); translateTable.resize(vecSize + 1); if (!langFile.open(QIODevice::ReadOnly)) { return false; } // qDebug() << fname; QTextStream stream(&langFile); #if USE_QT_VERSION == 6 stream.setEncoding(QStringConverter::Utf8); #else stream.setCodec("UTF-8"); #endif QString llEng = stream.readLine(); if (llEng.length() > 0) { llEng.remove("\n"); } if (llEng == "LANGUAGE_NAME") { translateTable << llEng; } else { MessageBox::exec(this, translate(_FILEERR), "File is not a language file!", QMessageBox::Warning); langFile.close(); return (false); } bool begTranslation = false; while (!stream.atEnd()) { llEng = stream.readLine(); llEng = convertString(llEng); #if USE_QT_VERSION == 6 QRegularExpression r = QRegularExpression("t[0-9]{3}="); #else QRegExp r = QRegExp("t[0-9]{3}="); #endif if (llEng.indexOf(r) == 0) { int num, pos; QString str; pos = llEng.indexOf("="); if (pos > 0) { str = llEng.mid(pos + 1); // num = llEng.mid(1, pos - 1).toShort(); // qDebug() << num << str; if (num >= vecSize) { qDebug() << "size too big"; } else { translateTable[num] = str; } } } else { if (llEng == "Ok") { // translation part beginns with "Ok" begTranslation = true; } if (begTranslation == false) { continue; } bool found = false; QString llTranslate = stream.readLine(); if (llTranslate.length() == 0) { continue; } llTranslate = convertString(llTranslate); for(int i = 0; i < vecSize; i++) { // suche QString tmpEng = engText[i]; if (tmpEng.indexOf("%HOME%") >= 0) { tmpEng.replace("%HOME%", QDir::homePath()); } if ( tmpEng == llEng) { translateTable[i] = llTranslate; found = true; break; } } if (found == false) { qDebug() << "no translation found" << llEng; } } } langFile.close(); return (true); } QString cTranslator::convertString(const QString &s) { QString res = s; if (res.length() > 0) { res.replace( "\\r\\n", "\n"); res.replace( "\\n", "\n"); res.replace( "\\t", "\t"); res.replace( "\\\\", "/"); res.replace( "&", "&"); res.replace( ">", ">"); res.replace( "<", "<"); } if (res.length() == 0) { return res; } if (res.indexOf("winhttrack") >= 0) { res.replace("winhttrack", "httraqt"); } if (res.indexOf("C:/") >= 0) { res.replace("C:/", "%HOME%/"); } if (res.indexOf("c:/") >= 0) { res.replace("c:/", "%HOME%/"); } if (res.indexOf("%HOME%") >= 0) { res.replace("%HOME%", QDir::homePath()); } return res; } const QString cTranslator::translate( int id ) { QString m; if (id < 0) { return ""; } if (translateTable.size() == 0) { return QString(engText[id]); } if ((id >= 0) && (id < (int)(sizeof(engText) / sizeof(char*)))) { if(translateTable[id].length() == 0) { m = QString(engText[id]); } else { m = translateTable[id]; } if (m.indexOf("%HOME%") >= 0) { m.replace("%HOME%", QDir::homePath()); } } return m; } httraqt-1.4.11/sources/main/NewProjTab.cpp0000664000175000017500000002322313202344735020620 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include #include "includes/NewProjTab.h" #include "../version.h" NewProjTab::NewProjTab(QWidget* parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); label02->setEnabled(false); // project category disabled comboProjCat->setEnabled(false); // selection too // setStyleSheet(this->parent->programStyleSheet); connect(editBasePath, SIGNAL(textChanged(QString)), this, SLOT(workDirChanged())); connect(comboProjName->lineEdit(), SIGNAL(returnPressed()), this, SLOT(projectInfoEntered())); connect(comboProjName, SIGNAL(activated(int)), this, SLOT(projectInfoSelected())); connect(label1228, SIGNAL(clicked()), this, SLOT(onBrowseProject())); } void NewProjTab::translateTab(void) { setMinimumSize(410, 250); if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } label01->setText(translate(_PROJNAME)); label02->setText(translate(_PROJCAT)); label04->setText(translate(_BASEPATH)); label03->setText(translate(_TYPENEWPROJ)); } NewProjTab::~NewProjTab() { // cout << "will be deleted" << endl; } void NewProjTab::resizeEvent(QResizeEvent *event) { } bool NewProjTab::testIt() { QString baseDir = editBasePath->text(); if (baseDir.length() <= 0) { MessageBox::exec(this, translate(_NODIR), translate(_TYPENEWPROJ), QMessageBox::Critical); return (false); } QDir verz(baseDir); if (verz.exists() == false) { if (verz.mkdir(baseDir) == false) { MessageBox::exec(this, translate(_CREATEERR), translate(_CANOTCREATEDIR), QMessageBox::Critical); return (false); } } parent->currentWorkDir = baseDir; QString projName = comboProjName->currentText(); if (projName.length() <= 0) { MessageBox::exec(this, translate(_NOPROJ), translate(_TYPENEWPROJ), QMessageBox::Critical); return (false); } QString newPrDir = baseDir + "/" + projName + "/hts-cache/"; parent->currentProject = projName; // qDebug() << "new projtab" << projName; QDir dr(newPrDir); if (dr.exists() == false) { if (dr.mkpath(newPrDir) == false) { MessageBox::exec(this, translate(_CREATEERR), translate(_CANOTCREATEDIR), QMessageBox::Critical); return false; } } parent->getOptions(); parent->writeSettings(false); parent->setWindowTitle(QString(PROGRAM_NAME) + " v." + HTTQTVERSION + " , " + translate(_PROJ) + ": " + parent->currentProject); return (true); } void NewProjTab::rebuildDirList() { currentsubdirs.clear(); comboProjName->clear(); QFileInfoList finfolist; QDir dr(parent->currentWorkDir); dr.setNameFilters(QStringList("*")); dr.setFilter(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot); finfolist = dr.entryInfoList(); for (int i = 0; i < finfolist.size(); ++i) { QString tmpNm = finfolist.at(i).fileName(); if (QFile::exists(parent->currentWorkDir + "/" + tmpNm + "/linprofile.ini") == true || QFile::exists(parent->currentWorkDir + "/" + tmpNm + "/hts-cache/winprofile.ini") == true ) { currentsubdirs << tmpNm; } } if (editedName.size() > 0) { if (currentsubdirs.indexOf(editedName) == -1) { currentsubdirs << editedName; } } if (currentsubdirs.size() > 0) { int ind; comboProjName->setDuplicatesEnabled(false); comboProjName->addItems(currentsubdirs); ind = comboProjName->findText(editedName); if (ind >= 0) { comboProjName->setCurrentIndex(ind); } } } void NewProjTab::onBrowseProject() { QString t = editBasePath->text(); if (t.length() < 1) { t = parent->currentWorkDir; } QString s = QFileDialog::getExistingDirectory(this, translate(_SELECTPATH), t, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks/* | QFileDialog::DontUseNativeDialog*/); if (s.length() <= 0) { return; } QDir dd(s); if (dd.exists() == false) { return; } parent->currentWorkDir = s; parent->writeSettings(true); editBasePath->setText(s); parent->dirView->reset(); parent->dirView->setRootIndex(parent->dModel.index(s)); editedName = ""; rebuildDirList(); } void NewProjTab::workDirChanged() { QString dr = editBasePath->text(); QDir d(dr); if (d.exists() == false) { return; } rebuildDirList(); parent->dirView->setRootIndex(parent->dModel.index(dr)); } #if 0 void NewProjTab::onSelectBatchFile() { QFileDialog* fd; int sz = parent->systemFont.pointSize(); QString sSheet; sSheet = QString().sprintf("font-size: %dpt", sz); if ( sz == -1) { sz = parent->systemFont.pixelSize(); sSheet = QString().sprintf("font-size: %dpx", sz); } setStyleSheet(sSheet); fd = new QFileDialog(this, translate("Choose a file"), parent->currentWorkDir, "Text (*.txt)"); // fd->setFont(parent->systemFont); // fd->exec(); QString s = fd->getOpenFileName();//QFileDialog::getOpenFileName(this, translate("Choose a file"), parent->currentWorkDir, "Text (*.txt)"); } #endif void NewProjTab::projectInfoEntered() { QString temp = comboProjName->currentText(); editedName = temp; } void NewProjTab::selectProj(const QString &name) { int pos = comboProjName->findText(name); if (pos >= 0) { comboProjName->setCurrentIndex(pos); emit projectInfoSelected(); } } void NewProjTab::projectInfoSelected() { bool exists = false; // disconnect(editBasePath, SIGNAL(textChanged (QString)), this, SLOT(projectInfoSelected())); QString temp = comboProjName->currentText(); editedName = temp; parent->currentProject = temp; QString fileName = parent->currentWorkDir + "/" + temp; QDir dir = fileName; if (QFile::exists(fileName + "/linprofile.ini")) { if (dir.exists() == true) { exists = true; } } if (QFile::exists(fileName + "/hts-cache/winprofile.ini")) { if (dir.exists() == true) { exists = true; } } if (exists == false) { // parent->readSettings(true); label03->setText(translate(_NEWPROJECT)); } else { label03->setText(translate(_TYPENEWPROJ)); } parent->getOptions(); changeProjname(fileName); // connect(editBasePath, SIGNAL(textChanged (QString)), this, SLOT(projectInfoSelected())); } void NewProjTab::onDirChanged() { QString dir = editBasePath->text(); QDir dd(dir); if (dd.exists() == true) { // opren dir in file browser rebuildDirList(); } } void NewProjTab::changeProjname(QString stl) //kompletter name { QString st; bool found = false; QString tempName; // if (stl.length() == 0 || stl.length() > HTS_URLMAXSIZE) { label03->setText(translate(_TYPENEWPROJ)); label01->setText(translate(_PROJNAME)); } else { st = editBasePath->text(); // current Directory tempName = (stl + "/linprofile.ini"); QFile setlin(tempName); if (setlin.exists() == true && // un cache est pr�sent (setlin.size()) > 0) { // taille log contr�le>0 found = true; } else { tempName = (stl + "/hts-cache/winprofile.ini"); QFile setwin(tempName); if (setwin.exists() == true && // un cache est pr�sent (setwin.size()) > 0) { // taille log contr�le>0 found = true; } } if (found == false) { // parent->readSettings(true); label03->setText(translate(_NEWPROJECT)); label01->setText(translate(_NEWPROJNAME)); // parent->m_todo = 0; } else { parent->GetProfile("CurrentUrl", st); parent->GetProfile("Category", stl); // label03->setText(st); label01->setText(translate(_PROJNAME)); } } parent->currentOptionsFile = tempName; rebuildDirList(); } httraqt-1.4.11/sources/main/FinalTab.cpp0000664000175000017500000000474213202344735020272 0ustar karbofoskarbofos/*************************************************************************** * C++ Implementation: * * Copyright (C) 2012-2017 by Eduard Kalinowski * * Germany, Lower Saxony, Hanover * * eduard_kalinowski@yahoo.de * * * * HTTraQt is free software; may be distributed and/or modified under the * * terms of the GNU General Public License version 3 as published by the * * Free Software Foundation and appearing in the file LICENSE_GPLv3 * * included in the packaging of this file. * * * * 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 Lesser General Public * * License along with HTTraQt. If not, see http://www.gnu.org/licenses * ***************************************************************************/ #include #include #include "includes/httraqt.h" #include "includes/FinalTab.h" FinalTab::FinalTab(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl) { setupUi(this); this->parent = static_cast(parent); connect(label3, SIGNAL(clicked()), this, SLOT(onViewLog())); connect(label4, SIGNAL(clicked()), this, SLOT(onBrowseLocalWebsite())); } void FinalTab::resizeEvent(QResizeEvent *event) { } void FinalTab::translateTab(void) { setMinimumSize(410, 250); if (parent->programStyleSheet.length() > 0) { setStyleSheet(parent->programStyleSheet); } label3->setText(translate(_VIEWLOG)); label4->setText(translate(_BROWSEWEBSITE)); } void FinalTab::onViewLog() { QDesktopServices::openUrl(QUrl::fromLocalFile(qPrintable( parent->currentWorkDir + "/" + parent->currentProject + "/hts-log.txt"))); } void FinalTab::onBrowseLocalWebsite() { QDesktopServices::openUrl(QUrl::fromLocalFile(parent->currentWorkDir + "/" + parent->currentProject + "/index.html")); } httraqt-1.4.11/sources/httraqt.qrc0000664000175000017500000000034513042707374017357 0ustar karbofoskarbofos icons/line.png icons/name.png icons/opensource.png icons/pump.png httraqt-1.4.11/sources/version.h0000664000175000017500000000022114355543007017007 0ustar karbofoskarbofos#ifndef HTTVERSION_H #define HTTVERSION_H #define HTTQTVERSION "1.4.11" #define PROGRAM_DATE "05 Jan 2023" #define USE_QT_VERSION 6 #endif