Sunteți pe pagina 1din 81

UltraDefrag Handbook

7.0.0

Generated by Doxygen

Chapter 1

The UltraDefrag Handbook


Authors: Stefan Pendl (stefanpe@users.sourceforge.net), Dmitri Arkhangelski (dmitriar@users.sourceforge.net).

Table of Contents
1. Introduction 2. Installation 3. Console Interface 4. Scheduled Defragmentation 5. Graphical Interface 6. Boot Time Defragmentation 7. File Fragmentation Reports 8. Tips and Tricks 9. Frequently Asked Questions 10. Reporting Bugs 11. Translation 12. Credits and License 13. Development

License
UltraDefrag is licensed under the terms of the GNU General Public License . Feel free to redistribute it under certain conditions. This document is licensed under the terms of the GNU Free Documentation License .

The UltraDefrag Handbook

Generated by Doxygen

Chapter 2

Introduction
Preface
UltraDefrag speeds up the computer by defragmentation of les. When les consist of many little fragments scattered around the disk the computer needs more mechanical work to read them. Because of that the disk access becomes slower. UltraDefrag reduces the le fragmentation, thus it makes disk operations faster. Also the program can optimize a whole disk by placing small les close to each other, sorted by path (or other criteria). After the disk optimization less mechanical work is needed to read groups of small les. This reduces startup times of many applications including web and photo browsers. In contrast with the most other disk defragmenters UltraDefrag can defragment locked les by running during the Windows boot. Actually all les including page and hibernation les can be defragmented there. Also UltraDefrag aims to be fast, simple, reliable and efcient.

About the software


UltraDefrag has the following features: system les defragmentation (page-le, hibernation le, ...) MFT (master le table) defragmentation NTFS metales defragmentation ultra fast NTFS analysis fast defragmentation algorithm effective disk optimization algorithm (many strategies available) safety, it can never damage processed les simplicity, it can be used without reading the documentation ability to defragment single les/directories from the context menu of Explorer ability to defragment additional streams attached to NTFS les

Introduction

ability to exclude any unimportant les based on exible lters ability to defragment les, which have more fragments than specied by a threshold ability to automatically break defragmentation when the specied time interval elapses ability to perform defragmentation only when the disk fragmentation level is above the specied value ability to select multiple disks for defragmentation well readable HTML reports powerful command line interface ability to automatically hibernate/shutdown PC after a job is done ability to make an automatic effective defragmentation through Windows Task Scheduler multilingual graphical interface little binaries (about 1 Mb) portable version available which requires no installation native 64-bit support open source code licensed under GPL UltraDefrag runs on Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 and Windows 7, including all 64 bit versions of Windows. UltraDefrag v6 supports Windows NT 4.0 and Windows 2000 as well. UltraDefrag cannot be used on DOS, Windows 9x, Windows NT 3.51, ReactOS and Mac OS since these operating systems provide no defragmentation API. However, Linux port of UltraDefrag exists. It is based on NTFS3G capabilities.

Supported le-systems
The following le-systems can be defragmented by UltraDefrag: FAT12/16/32, exFAT and NTFS. There are a few system restrictions which apply to disk defragmentation. Unfortunately UltraDefrag cannot take away these restrictions: The rst clusters of FAT directories cannot be moved. This is a well known FAT driver restriction and cannot be xed. So, UltraDefrag cannot defragment FAT directories. It tries to optimize them instead by placing all fragments close to each other behind the rst one. The rst 16 clusters of MFT cannot be moved, this is a le system driver limitation. So, UltraDefrag cannot defragment the MFT. However, it can optimize it by placing all fragments close to each other.

Fragmentation level
The fragmentation level or percentage is calculated as follows:

fragmentation = number of fragmented file fragments / number of all file fragments


Generated by Doxygen

Processing algorithms
Defragmentation algorithm
1. The analysis phase scans the whole disk to collect information about all les and free space. 2. The defragmentation phase eliminates little fragments by joining them together. This speeds up access to individual les.

Full optimization algorithm


1. The analysis phase is the same as for defragmentation. 2. The next phase moves all small les and fragments to the end of the disk to free space at the beginning of it. 3. The third phase moves small les back, sorted by user dened criteria (by path in ascending order by default). This speeds up access to groups of les. 4. The last phase defragments all les.

Quick optimization algorithm


Quick optimization consists of the same steps as the full optimization. However, to speed things up it skips already sorted out groups of les. Free space consolidation becomes not so good in this case, but overall disk processing time becomes shorter. Note Optimization algorithms ignore any size, name and fragment count lters.

Sometimes even the disk optimization fails to make a large continuous free space gap. This happens when unmovable (locked) les are scattered around the disk. In order to defragment big les (pagele etc.) in such cases they are two workarounds available: Move all les to another disk, reformat the disk and move all back. This causes the perfect disk optimization. Run GParted or Partition Magic to manually reduce the disk size as much as possible. This operation will move all les including system les to the beginning of the disk. After restoring the original size, you will have a large continuous free space area at the end of the disk. This space may be used hereafter to defragment large les.

Note UltraDefrag always skips les located directly in MFT records (these les usually have sizes below 1kb), because they are actually part of the MFT. Also les which have no content are skipped, because actually there are no clusters on disk belonging to them. Additionally, UltraDefrag never tries to defragment les marked as temporary by applications which created them. Because such les will be deleted soon, therefore they will not decrease the system performance.
Generated by Doxygen

Introduction

Web resources
The Ultra Defragmenters home page at Sourceforge.net. Please be sure to visit this site for information, documentation, tutorials, news, etc. All UltraDefrag related things are available there. For help requests visit our forum at Sourceforge.net. Please report all problems and bugs via our bug tracker at Sourceforge.net. To participate in the UltraDefrag translation, please visit the UltraDefrag project at Transifex.

Generated by Doxygen

Chapter 3

Installation
To obtain the latest version of the program please visit the projects download page. Note You must be an administrator to install and run UltraDefrag. You must have a 64-bit version of Windows to run the 64-bit versions of the program. The IA-64 version was never tested by the authors. It requires the Intel Itanium processor and an appropriate 64-bit edition of Windows. There are two different types of packages available for download: Full-featured installer It installs all of the program features, but requires installation therefore cannot be used directly from USB sticks. The installer allows installing the UltraDefrag Micro Edition too, which is a lightweight version of the program containing only the command line tool and the boot time defragmenter. It is intended to be used from the console only. Portable package Download it, unpack it and use without an installation. Copy it on an USB stick and you will be able to use UltraDefrag everywhere by simply running it from there.

Note The boot time defragmenter is missing from the portable packages, but all other features are included. You can nd more information about portable applications here. To expand usage statistics gathering by the website UltraDefrag sends also requests to the Google Analytics service during startup. It takes no negative effect on security - many thousands of websites around the world use the same service to gather basic statistics of use. However, the UltraDefrag usage tracking can be turned off during an installation.

Silent Installation
UltraDefrag can be installed in silent mode by adding the /S switch to the installers command line at the command prompt. In this case no dialogs will be shown and the program will be installed to the hard drive completely with all the features enabled.

8 Note

Installation

For easier debugging of installation problems a log le will be created when an error is encontered. The log le is located in the temporary folder of the executing user: %TMP%\UltraDefrag_Install.log The following additional command line switches are supported: /FULL=1 Install the full edition, which includes all components and icons. /MICRO=1 Install the micro edition, which includes only the core components and the shell extension. /ICONS=(0|1) Install or remove all shortcut icons. Example: /ICONS=0 removes all icons. /BOOT=(0|1) Install or remove the boot components. Example: /BOOT=1 installs the boot components. /CONSOLE=(0|1) Install or remove the console components. Example: /CONSOLE=1 installs the console components. /GUI=(0|1) Install or remove the GUI components. Example: /GUI=1 installs the GUI components. /HELP=(0|1) Install or remove the documentation. Example: /HELP=0 removes the documentation. /SHELLEXTENSION=(0|1) Install or remove the Explorer context menu handler. Example: /SHELLEXTENSION=0 removes the Explorer context menu handler. Installing the context menu handler forces the console interface it depends on to be installed. /STARTMENUICON=(0|1) Install or remove the start menu icon. Example: /STARTMENUICON=1 installs the start menu icon. Installing the start menu icon forces the GUI interface it depends on to be installed. /DESKTOPICON=(0|1) Install or remove the desktop icon. Example: /DESKTOPICON=0 removes the desktop icon. Installing the desktop icon forces the GUI interface it depends on to be installed. /QUICKLAUNCHICON=(0|1) Install or remove the quick launch icon. Example: /QUICKLAUNCHICON=1 installs the quick launch icon. Installing the quick launch icon forces the GUI interface it depends on to be installed.
Generated by Doxygen

9 /DISABLE USAGE TRACKING=(0|1) Enable or disable tracking the usage of UltraDefrag. Example: /DISABLE_USAGE_TRACKING=1 disables usage tracking. Usage tracking is done by accessing a simple text le on the UltraDefrag home page. /D={Install Location} This sets the installation folder for UltraDefrag. Example: /D=C:\Program Files\UltraDefrag. It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. Only absolute paths are supported. The destination folder must be empty or contain a previous UltraDefrag installation. Example command line to silently install the full edition with only the start menu icon:

ultradefrag.bin.i386.exe /S /FULL=1 /ICONS=0 /STARTMENUICON=1 /D=C:\Program Files\UltraDefrag


To check the result of the command line switches omit the /S switch, which opens the interactive installer and allows checking the selections on the component page. There is also a silent mode for the uninstaller program. At the command prompt type:

%UD_INSTALL_DIR%\uninstall.exe /S
to automatically remove the program from the hard drive without any graphical dialogs.

Generated by Doxygen

10

Installation

Generated by Doxygen

Chapter 4

Console Interface
The UltraDefrag installer places the command line tool udefrag.exe into the System32 directory. Therefore it may be run without specifying the full path. View screenshots...

Command line options


Usage:

udefrag [command] [options] [driveletter:] [path(s)]


Commands: -a, --analyze Analyze the disk. --defragment Defragment the disk. This is the default action. --optimize-mft Optimize the MFT by placing its fragments as close to each other as possible. This is also included in full and quick optimization. -q, --quick-optimize Optimize the disk space by moving not fragmented les to the beginning of the disk. -o, --optimize Optimize the disk space by moving all les to the beginning of the disk. -l, --list-available-volumes List all disks available for defragmentation, except removable. Each line of the output contains a drive letter, lesystem name, total space and amount of free space. -la, --list-available-volumes=all List all disks available for defragmentation, including removable.

12 -h, -?, --help Show help screen. Running UltraDefrag without arguments has the same effect.

Console Interface

Note The commands are exclusive and cant be combined with each other. Options: -r, --repeat Defragment or optimize the disk until there is nothing left that can be moved. This will process the disk multiple times in a row if needed and possible. -b, --use-system-color-scheme Use system color scheme (usually black/white) instead of the green color. -p, --suppress-progress-indicator Hide progress indicator and cluster map. -v, --show-volume-information Show disk information after a job completes. -m, --show-cluster-map Show a map representing clusters of the disk. --map-border-color=color Set cluster map border color. Available values: black, white, red, green, blue, yellow, magenta, cyan, darkred, darkgreen, darkblue, darkyellow, darkmagenta, darkcyan, gray. Yellow color is used by default. --map-symbol=x Set the character used for the map drawing. There are two accepted formats: a character may be typed directly, or its hexadecimal number may be used. For example, --map-symbol=0x1 forces UltraDefrag to use a smile character for the map drawing. Valid numbers are in the range of 0x1 to 0xFF. The % symbol is used by default. --map-rows=n Number of rows of the cluster map. Default value is 10. --map-symbols-per-line=n Number of map symbols contained in each row of the map. Default value is 68. --use-entire-window Expand cluster map to use entire console window. --wait Wait until already running instance of UltraDefrag completes before starting the job (useful for the scheduled defragmentation).
Generated by Doxygen

13 --shellex This option forces to list objects to be processed and display a prompt to hit any key after a job completion. It is intended for use in Explorers context menu handler.

Note All the environment variables listed below are ignored when the --shellex switch is on the command line. Instead of taking environment variables into account the program interprets the %UD_INSTALL_DIR%\options\guiopts.lua le. Drive letter: Specifying just the drive letter will cause UltraDefrag to defragment the disk. It is possible to specify multiple drive letters. Like this: udefrag c: d: x: Also the following keys can be used instead of the drive letter: --all Process all available disks. --all-xed Process all disks except removable. Note The --all-xed key has higher precedence, if both keys are specied UltraDefrag will process xed drives only. Path: Specifying a path will cause UltraDefrag to defragment only the specied path. It is possible to specify multiple paths separated by spaces. Paths including spaces must be enclosed by double quotes ("). Relative and absolute paths are supported. Example:

udefrag "%USERPROFILE%" ..\Test "My Documents" C:\WINDOWS\WindowsUpdate.log

Environment variables
Filter variables
UD IN FILTER List of le patterns to be included in the defragmentation process. File patterns must be separated by semicolons. UD EX FILTER List of le patterns to be excluded from the defragmentation process. File patterns must be separated by semicolons.
Generated by Doxygen

14 UD FRAGMENT SIZE THRESHOLD Eliminate only fragments smaller than specied. The following size sufxes are accepted: KB, MB, GB, TB, PB, EB. UD FILE SIZE THRESHOLD Exclude all les larger than the specied size. The following size sufxes are accepted: KB, MB, GB, TB, PB, EB. UD OPTIMIZER FILE SIZE THRESHOLD In optimization sort out les smaller than specied only. The following size sufxes are accepted: KB, MB, GB, TB, PB, EB. The default value is 20MB. UD FRAGMENTS THRESHOLD Exclude all les which have less fragments than the specied number. UD SORTING

Console Interface

Set the le sorting method for the disk optimization. PATH is used by default, it forces to sort les by their paths. Four more options are available: SIZE (sort by size), C_TIME (sort by creation time), M_TIME (sort by last modication time) and A_TIME (sort by last access time). UD SORTING ORDER Set the le sorting order for the disk optimization. ASC (ascending) is used by default. DESC (descending) forces to sort les in descending order. UD FRAGMENTATION THRESHOLD Set the fragmentation threshold, in percents. When the disk fragmentation level is below the specied value, all the disk processing jobs except of the MFT optimization will be not performed.

Process variables
UD TIME LIMIT When the specied time interval elapses the job will be terminated automatically. The following time format is accepted: Ay Bd Ch Dm Es. Here A,B,C,D,E represent any integer number, y,d,h,m,s - sufxes represent years, days, hours, minutes and seconds. UD REFRESH INTERVAL Progress refresh interval, in milliseconds. The default value is 100. UD DISABLE REPORTS If this environment variable is set to 1 (one), no le fragmentation report will be generated.

Debug variables
UD DBGPRINT LEVEL Control amount of the debugging output. NORMAL is used by default, DETAILED may be used to collect information for the bug report, PARANOID turns on a really huge amount of debugging information. UD LOG FILE PATH If this variable is set, it should contain the path (including lename) to the log le to save debugging output into. If the variable is not set, no logging to a le will be performed.
Generated by Doxygen

15 UD DRY RUN If this environment variable is set to 1 (one) the les are not physically moved. This allows testing the algorithm without changing the content of the disk.

Note All lters are case insensitive. Each lter substring represents a pattern, UltraDefrag will compare with paths. For example, the "temp;<em>tmp</em>" lter will be applied both to temporary folders and to Internet Explorers cache. Both ? and wildcards are accepted by lters. ? character matches any one character, - any zero or more characters. . pattern matches any le with an extension. An asterisk alone () matches anything (with or without an extension). Note Files marked temporary by system are always excluded regardless of lters, because usually they take no effect on system performance. Files excluded from processing are never treated as fragmented. Because only les affecting system performance should get our attention.

Examples
include only paths, which include one of these words

set UD_IN_FILTER=*windows*;*winnt*
eliminate only fragments below 20 MB in size

set UD_FRAGMENT_SIZE_THRESHOLD=20MB
process only les below 50 MB in size

set UD_FILE_SIZE_THRESHOLD=50MB
process only les with more than 6 fragments

set UD_FRAGMENTS_THRESHOLD=6
process only disks with fragmentation level above 10%

set UD_FRAGMENTATION_THRESHOLD=10
terminate processing after 6 hours and 30 minutes

set UD_TIME_LIMIT=6h 30m


save debugging information to the specied le

set UD_LOG_FILE_PATH=C:\Windows\Temp\defrag_native.log
defragment drive C:

udefrag C:
Generated by Doxygen

16 list all available drives

Console Interface

udefrag -la
analyze all drives excluding removable ones

udefrag -a --all-fixed
optimize drives E: and K:

udefrag -o E: K:
optimize the MFT of drives O: and Q:

udefrag --optimize-mft O: Q:
defragment the specied le and folder

udefrag C:\Windows\WindowsUpdate.log "C:\Program Files"

Example batch scripts


The following example illustrates defragmentation of a few different disks in series adjusting parameters separately for each disk.

@echo off set UD_EX_FILTER=*system volume information*;*temp*;*tmp*;*recycle*;*.zip;*.7z;*.rar set UD_FILE_SIZE_THRESHOLD=50MB udefrag c: > c:\ud.log set UD_IN_FILTER=D:\My Documents\* udefrag d: >> c:\ud.log set UD_IN_FILTER= udefrag e: >> c:\ud.log
Notice that we are excluding archives in the script above. Because they are usually rarely accessed and may be left fragmented therefore without noticeable system performance degradation. The next example demonstrates how the complex disk defragmentation job may be automated easily.

@echo off rem Defragment small files. set UD_FILE_SIZE_THRESHOLD=50MB udefrag c: rem Defragment large files rem which have at least 5 fragments. set UD_FILE_SIZE_THRESHOLD= set UD_FRAGMENTS_THRESHOLD=5 udefrag c:
The following three commands are very useful in disk defragmentation scripts too:
Generated by Doxygen

17

chkdsk checks disks for errors and corrects them shutdown -s -t 00 automatically shuts down the computer hibernate4win now hibernates the computer The last command is included in the UltraDefrag package. It was especially created to hibernate the computer through the command line after a disk defragmentation, which may take some time to nish.

Explorers context menu handler


The UltraDefrag command line tool is also used as an Explorers context menu handler. When you right click a drive, folder or le icon in Explorer, you can select an appropriate menu item to defragment the selected object. To stop the defragmentation press Ctrl+C keys or close the command prompt. To congure the context menu handler edit the IV-th section of the %UD_INSTALL_DIR%\options\guiopts.lua le. Currently the context menu handler is not available in the portable version of the program.

Generated by Doxygen

18

Console Interface

Generated by Doxygen

Chapter 5

Scheduled Defragmentation
When some important les are frequently modifying the Windows Task Scheduler can help to automate their defragmentation. Set up scheduled tasks and youll save a lot of your time. Examples of commands: Defragment Firefox cache

udefrag "%APPDATA%\Mozilla*"
Defragment Google Earth cache

udefrag "%APPDATA%\Google\GoogleEarth*"
Defragment small les on all non-removable disks

cmd.exe /C "set UD_SIZELIMIT=100M && udefrag --wait --all-fixed"


Visit ultradefrag.wikispaces.com for tutorials and more examples.

20

Scheduled Defragmentation

Generated by Doxygen

Chapter 6

Graphical Interface
The UltraDefrag GUI consists of a single re-sizable window. View screenshots...

The Menus
Action

Analyze (F5; Enter) This analyzes the currently selected disk(s), constantly updates the cluster map and status bar, and generates a report. The process locates free space, folders, fragmented, compressed, regular and system les.

Defragment (F6) This defragments the currently selected disk(s), constantly updates the cluster map and status bar, and generates a report. The process moves fragmented les to free space to concatenate them.

Quick optimization (F7) This optimizes the currently selected disk(s), constantly updates the cluster map and status bar, and generates a report. The process moves fragmented les to the back of the disk to free space at the front and moves them back to the front to concatenate them.

22

Graphical Interface

Full optimization (Ctrl+F7) This optimizes the currently selected disk(s), constantly updates the cluster map and status bar, and generates a report. The process moves fragmented and regular les to the back of the disk to free space at the front and moves them back to the front to concatenate them.

Optimize MFT (Shift+F7) This optimizes the MFT by placing its fragments as close to each other as possible.

Pause (Space) This pauses the currently running process at any stage, currently pending move operations will be completed to avoid corruption. Selecting it once more will resume the paused process.

Stop (Ctrl+C) This aborts the currently running process at any stage, currently pending move operations will be completed to avoid corruption.

Repeat action (Shift+R) If this is set, the current operation will be repeated multiple times in a row until there is nothing left that can be moved. This allows processing as many les as possible.

Skip removable media (Ctrl+M) If this is checked, disks located on removable drives are not included in the disk list.

Rescan drives (Ctrl+D) This updates the disk list to include disks located on removable drives, which have been plugged in after starting UltraDefrag.

Repair drives This runs CHKDSK against the selected drives to clear the status Disk needs to be repaired if possible. You need to rescan the drives afterwards to update their status.

Generated by Doxygen

23

When done This allows one to select an action that will be executed after all operations have been performed. The default is None, available actions are: Exit, Standby, Hibernate, Logoff, Reboot and Shutdown.

Exit (Alt+F4) This terminates UltraDefrag.

Report

Show report (F8) This displays the report generated for the selected disk(s) in a browser window.

Settings

Language This mainly allows selecting the displayed language. The entry View change log opens the page of translation changes at the translation wiki. The entry View translation report opens the page with the current translation status at the translation wiki. The entry Translations folder opens the folder containing the translation.template and all language les. The entry Submit current translation opens the page of the currently selected translation at the translation wiki for editing or a new page to submit it.

Generated by Doxygen

24

Graphical Interface

Graphical interface > Font (F9) Usually the font must be changed only, if the contents of the disk list are not displayed correctly.

Graphical interface > Options (F10) This will open a text editor window with the script loaded mentioned in the section Conguring below, which allows you to change the look and feel of the window as well as the behaviour of the actions.

Boot time scan > Enable (F11) This enables or disables the boot time processing. (Disabled for portable editions)

Boot time scan > Script (F12) This opens a text editor window with the script loaded mentioned in the chapter Boot Time Defragmentation, which allows changing the way the boot time processing behaves. (Disabled for portable editions)

Reports (Ctrl+R) This allows changing the look of the reports.

Sorting This allows selecting the sorting criteria for the optimization. The entries Sort by path, Sort by size, Sort by creation time, Sort by last modication time and Sort by last access time specify the le criteria used for sorting. The entries Sort in ascending order and Sort in descending order specify the direction used for sorting.

Help

Contents (F1) This launches the handbook you are currently reading.

Generated by Doxygen

25

Best practice (F2) This launches the Tips and Tricks chapter of this handbook.

FAQ (F3) This launches the Frequently Asked Questions chapter of this handbook.

Cluster map legend This launches the Cluster Map section of this page.

Debug The entry Open log (Alt+L) opens the current debug log le in a text editor. The entry Send bug report opens the bug tracker web page in the browser, which allows you to submit a bug report.

Check for update This checks for program updates on demand, this is helpful if automatic update checks are disabled.

About (F4) This opens the about window.

Preview
(available only in alpha and beta releases)

No preview options Currently there are no preview options available.

The Tool-Bar
It consists of the most frequently used commands for easy access.

Generated by Doxygen

26

Graphical Interface

List of Disks
The top part of the window contains a full list of disks available for defragmentation. Each line of the list contains disk name and type of lesystem, status display, fragmentation percentage, total amount of space, amount of free space and, nally, percentage of free space on the disk. Fixed drives are marked by Dirty drives are marked by , removable drives - by and , run CHKDSK to correct the problem.

Multiple disks can be selected in the list. In this case UltraDefrag will process them one after the other. The rules for the selection are the same as in Windows Explorer. To select all drives you can use Ctrl+A too. Double-clicking a drive will start its analysis.

Cluster Map
It represents the disk clusters by little colored squares. The rst cluster on disk is the one in the top-left corner of the map. The last cluster on disk is the one in the bottom-right corner of the map. The clusters in between are organized by rows. The colors have the following meaning: Fragmented Directory Free Space Files and directories When there are two different colors assigned to the same item, the darker one marks objects above the size threshold, if one is set. Not Fragmented Locked (System) Compressed MFT Unused Map Block

Note Files excluded from processing are never treated as fragmented, because only les affecting system performance should get our attention. MFT Dark magenta represents the master le table (MFT), light magenta - the space reserved for the MFT expansion. Unused map blocks Since the amount of clusters per map block must be a whole number it can happen that there are unused map blocks at the end of the cluster map. For example a drive has 3000 clusters and the cluster map has 3020 blocks, this will result in the last 20 map blocks being marked as unused, since it is impossible to display 0,99 clusters per block.

Note Unused map blocks are not to be confused with free space. Free space color The default is white as shown in the image above, but this can be changed through the background color setting.
Generated by Doxygen

27

When done
If any of the actions except None is checked, UltraDefrag will automatically perform that action after the job completes. Note Your system and hardware conguration must support shutdown and power off, otherwise Windows may reboot your PC or even do nothing. Therefore test this mode before using it at a regular basis. Your system must support the selected suspend mode and it must be turned on. Otherwise Windows will display a message box containing a brief error description and the system will not be switched into any suspend mode.

Conguring
The default font is Courier New, 9. GUI options are stored in guiopts.lua le. They have the same meaning as the environment variables accepted by the UltraDefrag command line tool. It does make sense to set grid_line_width = 0, if you set map_block_size = 1 to be able to use the whole size of the cluster map. This is especially useful, if you have drives of sizes of 500GB and more.

Generated by Doxygen

28

Graphical Interface

Generated by Doxygen

Chapter 7

Boot Time Defragmentation


UltraDefrag also includes a new mode that allows you to run it at boot time in a manner similar to chkdsk. This is known as a native application. The primary goal of it is defragmentation of locked les. UltraDefrag runs at Windows boot before any le locking, so it can defragment almost everything, including page and hibernation les. View

screenshots...
If the boot time defragmenter is enabled, it will run at every boot. Note You will have a chance to exit immediately, just press any key when the appropriate prompt is displayed. If no key is pressed during this delay, the boot time script will be executed. You can always stop the disk analysis/defragmentation by pressing the Pause/Break key on the keyboard. The following restrictions exist for the boot time scans: You may not scan encrypted disks. This is because lsass.exe, the component of the operating system that reads encrypted disks, is still not loaded at a time of the native applications execution. In Windows Safe Mode the program cannot display text on the boot screen. UltraDefrag checks for boot options and returns immediately, if the Safe Mode ag has been found. The boot time defragmenter can be enabled/disabled either from the main GUI window or by typing boot-on/boot-off commands in the command prompt.

Boot Time Modes


The boot time defragmenter can be executed in two modes: Boot time script The boot time script consists of the disk defragmentation commands, ancillary commands and comments. It is located at %windir%\system32\ud-boot-time.cmd. To edit this le execute boot-cong at the command prompt or simply click the Boot time script button on the UltraDefrag GUI toolbar. The boot time script simplies also the use of UltraDefrag on computers running Windows 98. After installing Windows XP as a second operating system, UltraDefrag may be installed too. After adding the shutdown command to the boot time script you may simply boot the XP system (which requires much less resources at boot time!) and safely leave your computer. It will be shut down automatically after the job is completed.

30

Boot Time Defragmentation

To abort the script execution and enter the interactive mode immediately hit ESC at any time during the boot time script processing. Interactive mode When the exit command is missing in the boot time script UltraDefrag runs in interactive mode after the last script command is executed. UltraDefrag displays the following command prompt and waits for the users input:
Interactive mode: Type help for list of supported commands. #

All commands displaying long lists (help, hexview, history, man, set, type) are splitting them into pages in interactive mode.

Available Boot Time Commands


; or # Lines starting with one of these characters are treated as comments. @ Do not show the command line preceded by the at-sign on the screen. By default the command line is displayed on the screen. boot-on Turn on the boot time defragmentation to be executed at every boot. boot-off Turn off the boot time defragmentation. It prevents them from being executed at next reboots. Until you will enable them manually through UltraDefrag Conguration dialog or boot-on.cmd script. call Similar to the DOS command. Executes the specied script. If no script is specied, the default boot time script is executed. echo Similar to the DOS command. Display a message, empty line, enable/disable showing the command line on the screen or display the status of showing the command line. exit Similar to the DOS command. Break the boot time program execution and return the specied error code or zero. help Show a list of all available commands. hexview Display the contents of the specied le in a HEX viewer layout.
000000C0: 0a 00 3b 00 20 00 46 00 | ; F 000000C8: 72 00 61 00 67 00 6d 00 | r a g m 000000D0: 65 00 6e 00 74 00 65 00 | e n t e
Generated by Doxygen

31 history Show a list of all manually entered commands. To cycle through the commands use the up/down arrow/cursor keys. man List or display available manual pages. pause Pause the script execution for the specied time interval (in milliseconds, 2147483647 maximum) or till a key is pressed, if no duration is specied. For example, the command pause 1000 will pause execution for one second. reboot Reboot the computer. set Similar to the DOS command. List, set and clear environment variables. For further information about the supported variables consult the Console Interface page. shutdown Halt the computer. type Similar to the DOS command. Display the contents of a le, the default is the boot time script. udefrag This is the native equivalent of the UltraDefrag command line tool. The following command switches are supported: -l, -la, -a, -o, -q, --quick-optimize, --optimize-mft, --all, --all-xed, -r, --repeat Multiple drive letters on a single command line are allowed. You can specify absolute paths to process single les or directories. Paths including spaces must be enclosed by double quotes ("). To specify multiple paths separate them by spaces. Example:

udefrag "C:\Documents and Settings" C:\WINDOWS\WindowsUpdate.log


For further information about the command switches and variables consult the Console Interface page. When UltraDefrag encounters the wrong syntax it shows an appropriate message on the screen and continues the script execution.

Environment variable expansion


The boot time script and the interactive mode support environment variable expansion. This allows a more exible script to be written by using %SystemDrive% instead of C:. In addition to the regular variables there are two variables, DATE and TIME, that will be set dynamically. Both are formated to be easily used as part of a le name, so a timestamped log le name can be created. DATE This will be expanded to the current date in the format YYYY-MM-DD

echo DATE ... %DATE%


Generated by Doxygen

32

Boot Time Defragmentation

Results in the display of:


DATE ... 2012-02-14

TIME This will be expanded to the current time in the format HH-MM

echo TIME ... %TIME%


Results in the display of:
TIME ... 12-04

Boot time script example


The following script is used by default:

@echo off ;-------------------------------------------------------------------; UltraDefrag Boot Time Shell Script ;-------------------------------------------------------------------; !!! NOTE: THIS FILE MUST BE SAVED IN UNICODE (UTF-16) ENCODING !!! ;-------------------------------------------------------------------set UD_IN_FILTER=*windows*;*winnt*;*ntuser*;*pagefile.sys;*hiberfil.sys set UD_EX_FILTER=*temp*;*tmp*;*.zip;*.7z;*.rar;*dllcache*;*ServicePackFiles* ; uncomment the following line to create debugging output ; set UD_DBGPRINT_LEVEL=DETAILED ; uncomment the following line to save debugging information to a log file ; set UD_LOG_FILE_PATH=%UD_INSTALL_DIR%\Logs\defrag_native.log udefrag c: exit
The following script utilizes environment variable expansion:

;-------------------------------------------------------------------; UltraDefrag Boot Time Shell Script ;-------------------------------------------------------------------; !!! NOTE: THIS FILE MUST BE SAVED IN UNICODE (UTF-16) ENCODING !!! ;-------------------------------------------------------------------set UD_IN_FILTER=*windows*;*winnt*;*ntuser*;*pagefile.sys;*hiberfil.sys set UD_EX_FILTER=*temp*;*tmp*;*.zip;*.7z;*.rar;*dllcache*;*ServicePackFiles* ;create a timestamped log file set UD_LOG_FILE_PATH=%UD_INSTALL_DIR%\Logs\defrag_native_%DATE%_%TIME%.log udefrag %SystemDrive% exit

Generated by Doxygen

Chapter 8

File Fragmentation Reports


Every time you run a disk analysis, defragmentation or optimization, UltraDefrag produces the le fragmentation report with a full list of fragmented les located on the disk. UltraDefrag saves le fragmentation reports in the LuaReport format. This raw format is used then to generate HTML and plain text reports from. You can congure the generated report type through the udreportopts.lua le described below. UltraDefrag saves all reports to the /reports sub-folder of the programs directory. To open LuaReport click the fraglist_{drive}.luar le in Explorer or simply click the Report button in the UltraDefrag GUI after the disk processing/analysis job has been completed. To distinguish between old and new reports, the date and time is included in the header of the report. When you are opening the LuaReport a single HTML page or plain text le is generated and opened in your default web browser or text editor. It contains the list of fragmented les. The meaning of the columns is described below. By default, all les are sorted by number of fragments in descending order. To change the sorting click the column heading by which to sort the list. The sorting is a slow process (350 lines/sec on 1.8GHz CPU). However, being implemented in JavaScript, it is very reliable. Note Reports never contain les excluded from the processing, because only les affecting system performance should get our attention.

Columns
Fragments The number of fragments. Filesize The size of the le. Comment [OVR] for les above the size threshold, [DIR] for directories and [CMP] for NTFS compressed les Status This is the reason the le is still fragmented. The following states are displayed:

34

File Fragmentation Reports

locked, move failed, invalid (the le system needs to be checked - run CHKDSK {Driveletter} /F /R) If no reason is specied the le simply requires more continuous free space in order to be processed. Filename This is the full path of the le.

Conguring
All options related to le fragmentation reports are contained in the udreportopts.lua le inside the /options sub-folder of the programs directory. To open this le for editing click its icon in Explorer or simply select Settings => Reports from the UltraDefrag GUI menu. The udreportopts.lua le contains parameter-value pairs and comments (they are starting with double dashes). However this le is a real program written in the Lua programming language. The following conguration is used by default:
-------------------------------------------------------------------------------- Ultra Defragmenter report options (default). -- Save your personal preferences as udreportopts-custom.lua -- to ensure that they will not be overwritten on upgrade. -------------------------------------------------------------------------------------------------------------------------------------------------------------- Set this parameter to zero to disable HTML reports generation. ------------------------------------------------------------------------------produce_html_report = 1 -------------------------------------------------------------------------------- Set this parameter to 1 to enable generation of plain text reports. ------------------------------------------------------------------------------produce_plain_text_report = 0 -------------------------------------------------------------------------------- All the following options were primarily designed to achieve better -- compatibility with old web browsers. -------------------------------------------------------------------------------------------------------------------------------------------------------------- Set enable_sorting to zero if your web browser is too old -- and you have error messages about invalid javascript code. ------------------------------------------------------------------------------enable_sorting = 1 -------------------------------------------------------------------------------- Set this parameter to 1 if you prefer to look at filenames split -- into few short lines. If you prefer to use fullscreen mode of your -- web browser then set this parameter to zero. ------------------------------------------------------------------------------split_long_names = 0 -------------------------------------------------------------------------------- Set here maximum number of characters per line in filename cells. ------------------------------------------------------------------------------max_chars_per_line = 50 -------------------------------------------------------------------------------- The web page style can be set through udreport.css style sheet. ------------------------------------------------------------------------------Generated by Doxygen

35

If you have problems editing conguration les, use the Tools > Folder options > File types menu in Explorer to associate the lua extension with your preferred text editor.

Generated by Doxygen

36

File Fragmentation Reports

Generated by Doxygen

Chapter 9

Tips and Tricks


Performance Considerations
Initial usage

Before any disk defragmentation we recommend to disable the Windows paging le. It expands RAM, but works much slower. So, its removing will take much bigger effect on system performance than the disk defragmentation. If more RAM is needed than physically installed, setting up additional RAM modules always gives the best result. Then, if youd like to keep some les close to the beginning of the disk because of the highest speed of this area, dont ask the disk defragmenter for this job: just repartition the disk and use the rst partition to keep the most frequently accessed les while the second partition - for backups, videos, music and other stuff tolerant for a bit slower access.

How frequently to defragment?

Defragment your system disk only when you notice a system slowdown - approximately on a monthly basis, not frequently. Data drives have even less need to be defragmented, especially if they contain primarily music, pictures and videos. Optimization is reasonable when you have free space heavily fragmented on your system disk. To determine whether to run optimizer or not execute the analysis and look at the cluster map. If you see white space heavily scattered around the disk - its time for an optimization. However, it isnt recommended to optimize disks too frequently. Run it once a year or so since it may take a lot of time. And, once again, dont crave to defragment/optimize data les - music/video has no need to be continues on disk, other data les have tendency for temporary living on the disk.

Performance of UltraDefrag from best to worst

Running at Boot Time this is the fastest, since there are no other processes running Running in Safe Mode here are only a limited number of processes running, which are essential to operate Windows

38 Running with Anti-virus Software disabled read and write operations are not interrupted by the AV process Running when the System is fully used

Tips and Tricks

this is the worst and not recommended at all, since many les are locked by running applications. You should never use this to process entire disks.

Note You must disable your virus detection software before using UltraDefrag. Any virus scanner running during the defragmentation extremely slows down the process. Some Anti-virus programs allow to exclude processes from being monitored, if your Anti-virus program supports this, you can use it instead of disabling it completely. You may still encounter slower performance compared to running UltraDefrag at boot or in safe mode. We recommend to exclude as much les as possible from defragmentation - this will dramatically decrease the defragmentation time. Temporary les and archives are usually rarely accessed and may be left fragmented without a noticeable system performance degradation.

Hardware Considerations
Flash and SSD drives

The use of disk defragmentation is not recommended on flash memory or solid-state drives (SSD), as it may reduce the lifespan of the drive. As ash memory does not rely on physical movement to read the drive, random le access is much faster than a mechanical hard drive, so defragmentation is not necessary. On the other hand, ash drives defragmentation increases their potential for recovery as mentioned in our forum.

Floppy drives

Floppy drives defragmentation is not recommended, because it always reduces the lifespan of the oppies.

Checking the le system

Freshly used drives can be defragmented immediately; any drive, which has been in use for a long time without maintenance, should be checked for consistency rst: CHKDSK {Drive:} /F /V this checks the drive and repairs it if needed CHKDSK {Drive:} /R /F /V this checks the drive, repairs it and collects lost clusters if needed (takes quite long, but is the safest)

Parallel processing

You can process multiple disks simultaneously, but only if they are located on different hard-disks. Processing multiple disks located on the same physical hard-disk will increase processing time signicantly.
Generated by Doxygen

39

Example: Hard-disk 1 contains disks C: and D: Hard-disk 2 contains disks G: and H: You can start one UltraDefrag session to process disks C: and D: and a second separate session to process disks G: and H: This will result in less time needed to process all four disks. If both hard-disks are occupied in a similar way the time will be reduced to about 50% compared to the time needed for all disks to be processed one after the other.

Caveats
Repeated defragmentation

Highly fragmented disks will have to be defragmented several times until you will see an improvement.

Prevent the system from endless boot processing

To prevent the system from a situation where it is not possible to boot into Windows, it is best to turn off boot processing at the top of the boot-time-script. This is done with the boot-off command. The boot processing is still executed, but the next boot will not cause another run of the boot time interface.

Cleaning up the USN journal

Sometimes a fragmented USN journal can prevent UltraDefrag from consolidating free space. In such a case you can remove the USN journal by executing the fsutil command as shown below from an administrative command prompt. It is recommended to recreate the USN journal after the drive has been processed. Query USN journal Use the command line below to get the current settings of the USN journal of drive C:. Write them down to use them for recreating the USN journal.

fsutil usn queryjournal C:


Delete USN journal Use the command line below to delete the USN journal of drive C:.

fsutil usn deletejournal /n C:


Create USN journal Use the command line below to create the USN journal of drive C:. A reasonable size of the USN journal is 85MB for each 100GB, the delta should be between 1 /8 and 1 /4 of the maximum size. The default values are usually 32MB maximum size and 4MB delta. The example creates an USN journal of default size.

fsutil usn createjournal m=33554432 a=4194304 C:

Generated by Doxygen

40

Tips and Tricks

Generated by Doxygen

Chapter 10

Frequently Asked Questions


Installer
How can I determine which installer to download? 1. open the Run dialog by hitting [Windows]+R 2. type cmd.exe /K echo %PROCESSOR_ARCHITECTURE% 3. hit the OK button 4. examine the top-left corner of the opened command prompt window If it reads x86 you download the i386 installer. If it reads AMD64 you download the amd64 installer. If it reads IA64 you download the ia64 installer.

Can I up- or downgrade over an existing installation? The installer is written to support up- and downgrading without the need to remove a previous version. In addition, usually it is not needed to reboot.

Can I specify a custom installation folder? Starting with version 5.1.0 it is supported to specify the install location. The installer validates the selected location, since only empty and existing UltraDefrag installation folders are supported.

How can I check what went wrong with my silent installation? Starting with version 5.1.0 a log le is created at %TMP%\UltraDefrag_Install.log.

General Usage

42

Frequently Asked Questions

After defragmentation I see my restore points disappeared, what happens? This is a normal situation when restore points disappear after an intensive disk processing. Windows limits amount of disk space reserved for restore points. When you perform intensive disk processing, Windows tracks changes through system restore, therefore the mentioned limit may be easily exceeded which results in old restore points deletion. We would recommend to avoid the use of restore points for serious purposes, because Windows can never guarantee that some point saved in the past will be available in the next moment. Use backup software instead, Windows already has such a program and there are also lots of 3-rd party programs of such kind.

How can I determine the fragmentation percentage of a drive? Starting with version 5.1.0 the analysis calculates the fragmentation percentage. It is displayed in the Fragmentation column of the drive list of the GUI and when you run the command line tool using the -v command line parameter. You can run an analysis of a drive from the Explorer context menu too.

How can I optimize similar to v5.x.x in v6.x.x? Starting with version 6.0.0 the optimization no longer ignores lters. In addition there is a new lter added that skips les of a specied size when running optimization. To get a similar behavior of v5 in v6, you need to disable/unset all lters and set the variable UD_OPTIMIZER_FILE_SIZE_THRESHOLD for the boot time and console interfaces respectively the setting optimizer_le_size_threshold for the GUI to 15 EB.

Graphical Interface
Where can I nd a legend of the cluster map colors? The colors are described in the Cluster Map section of the Graphical Interface page.

When will the cluster map become interactive, so Ill be able to know where individual les are located on disk? When defragmentation algorithms are quite effective, this is not necessary to know location of individual les - anyway youll get your drive optimized quite well. Maybe well implement the discussed feature later, but now we prefer to concentrate our forces on a disk optimization algorithm improvements.

Why conguration les editing is better than one settings window with tabs? It is much easier and reliable to use the standard Notepad application to edit conguration les.

Why does the progress percentage update irregularly? The progress percentage measures disk space, not the number of les. So when few big les are analyzed, the progress will increase very fast. Conversely, when thousands of small les are analyzed, progress will be relatively slow.
Generated by Doxygen

43

Why is the progress exceeding 100%, when processing FAT disks? On FAT disks space is immediately released after a le is moved, so it happens, that more les can be fully defragmented, than initially calculated.

Why is the disk name not displayed? Explorer replaces an empty disk name by Local Disk or similar, UltraDefrag does not replace an empty disk name with any default.

Why is only the last report displayed, if I choose to display multiple reports? Browsers which do not support tabbed browsing are reusing the same window. This is a limitation of the way a HTML page is opened from within Explorer.

Why are multiple windows opened, if I choose to display multiple reports? If your browser supports tabbed browsing open one instance of your default browser before you display the reports. This will open each report in a new tab depending on your browsers conguration.

Command Line Tool


How can I process all disks except a few? You can use the lter variables to do this. For instance you like to defragment all xed drives except C and S. To achieve this you use set UD_EX_FILTER=C:\;S:\ and execute udefrag --all-xed. The analysis will be executed for any drive, but defragmentation will be skipped for drive C and S. The analysis will not be complete for excluded FAT disks, because the driver does only check the root folder of excluded disks.

Boot time processing


What is the best conguration for boot disks? For NTFS it should be sufcient to use quick optimization. For FAT it is highly recommended to convert the boot disk into NTFS due to performance and security reasons.

Why are there still some les fragmented? Some system congurations are locking les even at boot, which cant be prevented. In some cases the size of the free space regions is not big enough to hold the entire le, this can be corrected by using quick optimization, which consolidates free space.
Generated by Doxygen

44

Frequently Asked Questions

Miscellaneous
How can I disable the boot time defragmenter manually? If something goes wrong and the boot-off script does not work properly, remove the defrag_native entry from the following system registry parameter manually:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute

I have set UD LOG FILE PATH or log le path, but the log le is not created? If creating the log le fails for any reason, UltraDefrag tries to create the log le in the temporary folder of the current user. Only if creating the log le in the temporary fails too, there will be no log le created. The default temporary location for the GUI and console edition is: %TMP%\UltraDefrag_Logs\{lename} The default temporary location for boot time defrag is: %SystemRoot%\UltraDefrag_Logs\{lename} The le name is the one from the specied log le path variable.

How many differences are between the Ultra Defragmenter and well known MyDefrag (previously JkDefrag)? Both programs have similar disk analysis algorithms, but defragmentation is done in different ways. While MyDefrag tends to give more control over a les placement, UltraDefrag is designed to be as simple and fast as possible. So, UltraDefrag never uses a complex disk optimization strategies, because their use often noticeably increases the processing time. The biggest advantages of UltraDefrag are an ability to defragment system les at boot time, nice graphical interface, handy reports and instant availability of sources licensed under GPL. The main disadvantage of both applications (UltraDefrag and MyDefrag) is that they are based on the Windows defragmenting interface that has a very ugly implementation. We cannot change this, because it is part of the lesystem drivers (ntfs.sys, fastfat.sys), which are too complex and not open source to modify or replace them.

Generated by Doxygen

Chapter 11

Reporting Bugs
If you have encountered a bug please submit your report via our bug tracker. Additional debugging information is always much appreciated.

Collecting debugging information to report problems using the graphical interface


1. Optionally download the DbgView program. 2. Optionally download and install Hardcopy as a free utility to easily create and save screenshots. (a) You can use the native Windows screen capture capability using the [Alt]+[Print Screen] keyboard shortcut and saving the image with Paint too. (b) Starting with Windows 7 the Snipping Tool is shipping with Windows, which is similar to Hardcopy mentioned above. 3. Launch UltraDefrag (a) Click the wrench icon on the toolbar. This should open a text editor with the settings le loaded. (b) Search for the line dbgprint_level = "" and change it to dbgprint_level = "DETAILED". (c) Search for the line log_le_path = "" and change it to log_le_path = ".\\Logs\\ultradefrag.log". (d) Save the settings le and close the text editor. 4. Optionally launch the DbgView utility and enable the Capture Win32 option from the Capture menu. (a) On Vista and above make sure to run the utility as the Administrator user by right-clicking on it and selecting Run as Administrator. 5. Launch UltraDefrag and perform the action you have problems with. You may just use the analysis to collect common debugging information too. 6. Select the menu entry Help => Debug => Open log to display the log le in a text editor. (a) You can use the "Save as ..." menu entry of the text editor to place the le where you want. 7. Optionally save the log created by the DbgView utility through the le menu entry Save as .... 8. Save any screenshot you have created as a PNG image, do not include them in an Ofce document. 9. Create a bug report package and attach it to the bug tracker artifact. 10. Select the menu entry Help => Debug => Send bug report to open the bug tracker web page.

46

Reporting Bugs

Collecting debugging information to report problems using the console interface


1. Launch a command prompt. On Vista and above make sure to run as the Administrator user by right-clicking on it and selecting Run as Administrator. 2. Enter set UD_DBGPRINT_LEVEL=DETAILED and hit return. 3. Enter set UD_LOG_FILE_PATH=%UD_INSTALL_DIR%\Logs\udefrag.log and hit return. 4. Execute udefrag with the action you have problems with. You may just use the analysis to collect common debugging information too. 5. Open an Explorer window and open the folder %UD_INSTALL_DIR%\Logs where the udefrag.log le is located. 6. Create a bug report package and attach it to the tracker artifact.

Collecting debugging information to report problems using the boot time interface
1. Launch a command prompt, on Vista and above make sure to run as the Administrator user by right-clicking on it and selecting Run as Administrator. 2. Execute the boot-cong utility to open the boot time script in the text editor. (a) Add the line set UD_DBGPRINT_LEVEL=DETAILED to the script. (b) Add the line set UD_LOG_FILE_PATH=%UD_INSTALL_DIR%\Logs\defrag_native.log to the script. (c) Add the line udefrag with the action you have problems with to the script. You may just use the analysis to collect common debugging information too. (d) Save the script and close the text editor. 3. Execute the boot-on utility to enable boot time processing. 4. Reboot the system to have the boot time processing executed. 5. Open an Explorer window and open the folder %UD_INSTALL_DIR%\Logs where the defrag_native.log le is located. 6. Create a bug report package and attach it to the tracker artifact.

Disable debugging
For the GUI you just have to set dbgprint_level and log_le_path to an empty string. For the boot time utility comment out the lines containing the denition of the UD_DBGPRINT_LEVEL and UD_LOG_FILE_PATH variables by adding a semicolon (;) at the beginning of those lines.

Creating a compressed archive to submit


It is best to ZIP your collected les into a single compressed archive, which will reduce the up- and download size immensely. If you do not own a ZIP utility, check out 7-zip. Windows XP and above include the ability to create ZIP archives through the Explorer right-click menu Send To => Compressed Folder. Note The Sourceforge trackers only allow uploading les of 256KB in size. For bigger les you may use one of the free le hosting services.

Generated by Doxygen

Chapter 12

Translation
UltraDefrag is now using the wxWidgets GUI library, which utilizes the GNU gettext utility for internationalization support. The translations are hosted by Transifex, which offers its service for free to open source projects.

There are two ways of translating UltraDefrag


Ofine translation This way is useful if you dont have access to the Internet, you dont want to translate online or the translation is not available for selection at the online service. Online translation This way is useful if you like to work on the latest translation source.

Currently not all languages are supported by Transifex for online translation
Kapampangan and W aray-W aray Use the ofine translation and request the current translation le from the translation maintainer (stefanpe@users.-

sourceforge.net)
The folder "%UD_INSTALL_DIR%\po" contains the translation resources at the release date. The les are saved as {language code}.po, where the language codes are based on the ISO 639-2 Language Code List. Chinese (Simplied) Use Chinese (China) instead. Chinese (Traditional) Use Chinese (Taiwan) instead.

Ofine translation
Prerequisites Download and install PoEdit

48

Translation

Run PoEdit Enter your name and e-mail address under File => Preferences => Personalise => Identity Open the translations folder "%UD_INSTALL_DIR%\po" using Settings => Language => Translations folder from the UltraDefrag GUI menu. Editing an existing translation 1. Open the le "%UD_INSTALL_DIR%\po\{language code}.po". The language codes are based on the ISO 639-2 Language Code List. 2. During translation pay attention to the Notes for translators. 3. Now send the translation le to the translation maintainer (stefanpe@users.sourceforge.net) 4. Your changes will be applied to the next release of UltraDefrag. Creating a new translation 1. Use File => New catalogue from POT le and select "%UD_INSTALL_DIR%\po\UltraDefrag.pot" as the translation template. 2. Enter the following information in the catalog properties dialog: Project name and version: ultradefrag Language: The language code based on the ISO 639-2 Language Code List. Charset: UTF-8 Optionally you can ll in the plural forms. 3. As the le name use the language code you entered in the language eld. 4. During translation pay attention to the Notes for translators. 5. Now send the translation le to the translation maintainer (stefanpe@users.sourceforge.net) 6. Your changes will be applied to the next release of UltraDefrag.

Online translation
1. Visit the UltraDefrag project at Transifex. If you are not yet a member of Transifex, register for free as a translator. 2. Edit an existing translation or submit a new one Edit an existing translation select the name of the language from the list hit the Translate now button Submit a new translation select Add new translation select the language from the drop down menu select the option of how you like to translate Upload le allows you to upload an ofine translation Translate online allows you to use the online editor 3. Your changes will be applied to the next release of UltraDefrag.

Generated by Doxygen

Chapter 13

Credits and License


Program and Documentation Copyright 2007-2008 Dmitri Arkhangelski (dmitriar@users.sourceforge.net) Justin Dearing (zippy1981@users.sourceforge.net) Program and Documentation Copyright 2009 Dmitri Arkhangelski (dmitriar@users.sourceforge.net) Program and Documentation Copyright 2010-2013 Dmitri Arkhangelski (dmitriar@users.sourceforge.net) Stefan Pendl (stefanpe@users.sourceforge.net) Web Design Copyright 2009, 2011 Sayem Chaklader (gearspec@gmail.com) Translations Copyright 2008-2013 Albanian Arabic Fitim I. HALILI Ahmed Arbaoui Awadh A Al-Ghaamdi Karam Al-Shorbassi MrEgho Dmitri Arkhangelski Sayem Chaklader Timur Ljubun ci c Dmitri Arkhangelski Georgi Dimov

Armenian Belarusian Bengali Bosanski Bulgarian

50 Burmese (Padauk) Catalan Muhammed Widuya Illes Balears Joseph S. B. Maza TurboHz muzuiget HPJ Tommy He Elita Alutee All UltraDefrag Fans muzuiget Ryan Ping Chih Ko rexx James Bond Passerby Denis Jeli ci c Dmitri Arkhangelski Mladen Ivoevi c David Hork /Dave MacBlack/ Pavel Kinkor Patrick Paludan-Mller Jens Erik Graversgaard Wim Kerstens Klaas Nekeman Tom Louwrier Andrew Smith Dmitri Arkhangelski Olav Mgi Ali Jafari Joseph S. B. Maza Ezekiel JB Vegiga Stefan Pendl jtl Stefan Pendl Pascal Crozet Jrme Blum Mathieu Van Weersch Marina Louwrier-Johannsen Thomas Laroche William Gathoye Julio Mojn Fuentes UGLT.org Stefan Geuken Stefan Pendl Konstantinos Kapoukranidis

Credits and License

Chinese (Simplied)

Chinese (Traditional)

Croatian

Czech Danish Dutch

English (GB) English (US) Estonian Farsi Filipino (Tagalog)

Finnish French

Galician Georgian German Greek

Generated by Doxygen

51 Dionisios Klonaris Dmitri Arkhangelski Gaurav Chatterjee Utkarsh Ray Nagy Zsolt ron Hegeds Gellrt Lukcs Brechler Zsolt Stefan Pendl Joseph S. B. Maza Taufan Nur Hidayat Djati Satria Imanuel Novian Djati Satria Paolo Loggia Alessandro Visentin Edoardo Brunetti Sherpya Giacomo Margarito ao3 kako Masao Kajiwara Taufan Nur Hidayat Edwin N. Camaya Alex Han Inhwan Hwang 4Li Dmitri Arkhangelski Sevelyr Vladislav Stuznev Raitis Nugumanovs Eugenijus Janukevi cius Laurynas Dmitri Arkhangelski Sveinung Heggen Stefan Pendl Andrzej Rudnik Krzysztof Swiderski Ireneusz Chorosz Mateusz Kacprzak Depeo da Masol Felipe Ricardo A. Garcia Carlos Rodrigues

Hebrew Hindi Hungarian

Icelandic Iloko Indonesian (Bahasa Indonesia) Indonesian Italian

Japanese

Javanese Kapampangan Korean

Latin Latvian

Lithuanian Macedonian Norwegian Polish

Portuguese (BR) Portuguese

Generated by Doxygen

52 Srgio Marques Micu (BeBe) Dumitru Dmitri Arkhangelski Raitis Nugumanovs Damjan Daljevic Dmitri Arkhangelski Milan Cerovsk Miha Mlakar Dmitri Arkhangelski Daniel Testa Txusti Juan C. Mendez Valledor Conrad Flyckt Felipe ngel Gonzlez Bez Joseph S. Maza Francisco Ortega Olivos Magnus Rostedt Per-Eric Jenshagen Christoffer Ekberg Vinod V. Pat Taweewat Thanapon Namjittrong Huseyin Kozan Vedat Odabasioglu Sahin Salincakli Alper Tiryakioglu Dmitri Arkhangelski Vietnamize Team DT Harvey Fiji Voltaire Oyzon Joseph S. Maza Dmitri Arkhangelski

Credits and License

Romanian Russian Serbian Slovak Slovenian Spanish (AR) Spanish (ES) Spanish (MEX)

Swedish

Tamil Thai Turkish

Ukrainian Vietnamese Wray-Wray

Yiddish Portions Copyright

UltraDefrag includes portions of the following open source libraries: wxWidgets, Lua, GNU C Library, GNU

libavl. Also UltraDefrag includes portions of ReactOS code.


Portions Copyright 1998-2005 Julian Smart, Robert Roebling et al This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. This library 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 Library General Public Licence for more details. You should have received a copy of the GNU Library General Public Licence along with this software, usually in a le named COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Portions Copyright 1994-2007 Lua.org, PUC-Rio Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation les (the "Software"), to deal in the Software without restriction, including without limitation the
Generated by Doxygen

53

rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Portions Copyright 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. Portions Copyright 1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Portions Copyright 2002 ReactOS Team 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 2 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, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. UltraDefrag GUI includes icons made by third-party persons/organizations. The glass icon has been copied from NSIS compilers frontend. Portions Copyright 2002 Robert Rainwater rrainwater@yahoo.com This software is provided as-is, without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
Generated by Doxygen

54

Credits and License

1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Table and stop icons have been copied from FamFamFam Silk icon set. Portions Copyright 2006 Mark James This work is licensed under a Creative Commons Attribution 2.5 License. The icons can also be used under Creative Commons Attribution 3.0 License with the following requirements: As an author, I would appreciate a reference to my authorship of the Silk icon set contents within a readme le or equivalent documentation for the software which includes the set or a subset of the icons contained within. The repeat icon has been copied from Default Icon set. Portions Copyright 2011 interactivemania Default Icon by interactivemania is licensed under a Creative Commons Attribution-No Derivative Works 3.0. Lua and Lua Report icons are based on artwork by Alexandre Nakonechnyj. Portions Copyright 1998 Lua.org. Graphic design by Alexandre Nakonechnyj. Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, and distribute this logo for any purpose, including commercial applications, subject to the following conditions: The origin of this logo must not be misrepresented; you must not claim that you drew the original logo. The only modication you can make is to adapt the orbiting text to your product name. The logo can be used in any scale as long as the relative proportions of its elements are maintained. Taskbar overlay icon is based on Fugue icon set. Pause, gear, terminal, script, help, light bulb, star; large stop icons have been copied from this set too. Portions Copyright 2012 Yusuke Kamiyamane These icons are licensed under a Creative Commons Attribution 3.0 License.

Maintainer Stefan Pendl (stefanpe@users.sourceforge.net) Chief Architect Dmitri Arkhangelski (dmitriar@users.sourceforge.net)


Generated by Doxygen

55

Special thanks for contributions (in alphabetical order): Justin Dearing Tiago Filipe Silva The initial version of this handbook and other documentation les. UltraDefrag Scheduler .NET application. Optimization of web images and udsorting.js script.

Special thanks for good suggestions (in alphabetical order): Alexander Peter Kowalski Alexander Vedyakin Andrei Maksimov Brian Gaff Bryan Kirk Christopher Naegel Craig Oakes Process priority control (not implemented yet). Disk type detection improvements. More effective defragmenting algorithms. GUI improvements. A lot of other interesting ideas. More comfortable GUI design. Better GUI appearance (new list of drives). Autodefrag feature (not implemented yet). A partial solution for kernel mode driver loading problem on Vista. Hint about case mismatch of conguration dialog help les. Hint about problem with .lua le open action registration. NT 4.0 support. Drives repair GUI menu. x64 native support. Better default values for lters. System fonts and visual styles for graphical interface. Disk processing algorithms optimization. Boot time defragmentation. Disk analysis speedup. GUI improvements. Manifests for Vista User Account Control (UAC). Progress bar. More effective defragmenting algorithms. Strong error handling. Reducing drivers memory usage by the new cluster map internal representation. Internationalization support. Installer improvements. Various interesting programming tricks. Shutdown when done option. FAT directories defragmentation algorithm. Various important GUI improvements.

Dario Raparelli Gan Yau Kuang Jan Loncik Jim Laski Joachim Otahal Justin Dearing Kalle Koseck Kerem Gmrkc Leland G. Whitlock Markus Elfring Mike Braca Nagy Zsolt Parvez Reza Steve Lawrence Vasily Smirnov

Special thanks for correcting and updating translations (in alphabetical order): Alper Tiryakioglu, Antonio Vivace Benny Sttz Connection Dandy Cheung, Daniel Rodrguez, Dmitry Zemskov Erwin Dokter, El Fiera Fabrizio Marana, Francisco Ortega Olivos, FS Giulio Fornasar, Gustavo Rezende Haein Jung, Harald Arnesen
Generated by Doxygen

56

Credits and License

Jan Iemhoff, JIFF Luigi C. Denis Jeli ci c Javier Valdivieso, Joseph S. B. Maza, Joseph S. Maza, Jos Carlos Taveira de Souza, Jos Luis Faras Ken Choy Latino, Leo Smulders Massa, Matej Marton NetVicious Patrick Palm Reynald Didier, Robert Jr, Rodrigo Lopes Paitach Seph, SMHA, Suranappar.se Timo VJ Lhde, Tjeerd van Sas, translucens Zirikkanen Special thanks for extensive testing (in alphabetical order): Andrei Maksimov Bear Windows Brent Jenkins Fred Schall Jeff Cubillos Kalle Koseck Kerem Gmrkc Leslie Trenholm Markus Elfring Nagy Zsolt Sachin Kunjikoran Stefan Pendl Tom Arroyo Also special thanks is going to: Mark Russinovich V. Soldatov blume1975 ReactOS Team
Generated by Doxygen

57

NSIS developers Markus F.X.J. Oberhumer, Lszl Molnr & John F. Reiser MinGW Team Alexander A. Telyatnikov Mumtaz Zaheer Giovanni Di Sirio James Brown Timo VJ Lhde Lokesh Dhakar Mark James Michael Dunn Michael Kaplan Special thanks for good music is going to (in chronological order): Egor Letov Jean Michel Jarre Erik Truffaz Cradle of Filth Iron Maiden Jimi Hendrix Forseti Agalloch Also many thanks to all the people who helped us improve UltraDefrag. This documentation is licensed under the terms of the GNU Free Documentation License. The program is licensed under the terms of the GNU General Public License.

Generated by Doxygen

58

Credits and License

Generated by Doxygen

Chapter 14

GNU Free Documentation License


Version 1.1, March 2000

Copyright (C) 2000 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. Preamble
The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. Applicability And Denitions


This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modied Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Documents overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

60

GNU Free Documentation License

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specication is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent le format whose markup has been designed to thwart or discourage subsequent modication by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modication. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the works title, preceding the beginning of the body of the text.

2. Verbatim Copying
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. Copying In Quantity
If you publish printed copies of the Document numbering more than 100, and the Documents license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to t legibly, you should put the rst ones listed (as many as t reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publiclyaccessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
Generated by Doxygen

61

4. Modications
You may copy and distribute a Modied Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modied Version under precisely this License, with the Modied Version lling the role of the Document, thus licensing distribution and modication of the Modied Version to whoever possesses a copy of it. In addition, you must do these things in the Modied Version: 1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. 2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modications in the Modied Version, together with at least ve of the principal authors of the Document (all of its principal authors, if it has less than ve). 3. State on the Title page the name of the publisher of the Modied Version, as the publisher. 4. Preserve all the copyright notices of the Document. 5. Add an appropriate copyright notice for your modications adjacent to the other copyright notices. 6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modied Version under the terms of this License, in the form shown in the Addendum below. 7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Documents license notice. 8. Include an unaltered copy of this License. 9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modied Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modied Version as stated in the previous sentence. 10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. 11. In any section entitled "Acknowledgements" or "Dedications", preserve the sections title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. 12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. 13. Delete any section entitled "Endorsements". Such a section may not be included in the Modied Version. 14. Do not retitle any existing section as "Endorsements" or to conict in title with any Invariant Section. If the Modied Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modied Versions license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modied Version by various partiesfor example, statements of peer review or that the text has been approved by an organization as the authoritative denition of a standard. You may add a passage of up to ve words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modied Version. Only one passage of Front-Cover Text and one of
Generated by Doxygen

62

GNU Free Documentation License

Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modied Version.

5. Combining Documents
You may combine the Document with other documents released under this License, under the terms dened in section 4 above for modied versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodied, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

6. Collections Of Documents
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. Aggregation With Independent Works


A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modied Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Documents Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

8. Translation
Translation is considered a kind of modication, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this
Generated by Doxygen

63

License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

9. Termination
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. Future Revisions Of This License


The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document species that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specied version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

Generated by Doxygen

64

GNU Free Documentation License

Generated by Doxygen

Chapter 15

GNU General Public License


Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free softwareto make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundations software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each authors protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modied by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reect on the original authors reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyones free use or not licensed at all.

66

GNU General Public License

The precise terms and conditions for copying, distribution and modication follow.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION


0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modication".) Each licensee is addressed as "you". Activities other than copying, distribution and modication are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Programs source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modied les to carry prominent notices stating that you changed the les and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modied program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modied work as a whole. If identiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
Generated by Doxygen

67

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface denition les, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted
Generated by Doxygen

68

GNU General Public License

interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 species a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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.

END OF TERMS AND CONDITIONS


Visit the Free Software Foundation.

Generated by Doxygen

Chapter 16

GNU Library General Public License


Version 2, June 1991

Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.]

Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free softwareto make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object les to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributors protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modied by someone else and passed on, we want its recipients to know that what

70

GNU Library General Public License

they have is not the original version, so that any problems introduced by others will not reect on the original authors reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyones free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and dont assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benet from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header les, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modication follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION


0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modication".) "Source code" for a work means the preferred form of the work for making modications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface denition les, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modication are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
Generated by Doxygen

71

1. You may copy and distribute verbatim copies of the Librarys complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) The modied work must itself be a software library. b) You must cause the les modied to carry prominent notices stating that you changed the les and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modied Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-dened independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)

These requirements apply to the modied work as a whole. If identiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
Generated by Doxygen

72

GNU Library General Public License

If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satises the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header le that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially signicant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely dened by law. If such an object le uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object le is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modication of the work for the customers own use and reverse engineering for debugging such modications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:

a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modied executable containing the modied Library. (It is understood that the user who changes the contents of denitions les in the Library will not necessarily be able to recompile the application to use the modied denitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specied in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specied materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.

For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
Generated by Doxygen

73

It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to nd the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library 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.
Generated by Doxygen

74

GNU Library General Public License

Each version is given a distinguishing version number. If the Library species a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source le to most effectively convey the exclusion of warranty; and each le should have at least the "copyright" line and a pointer to where the full notice is found.

one line to give the librarys name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is but WITHOUT ANY MERCHANTABILITY Library General distributed in the hope that it will be useful, WARRANTY; without even the implied warranty of or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Public License for more details.

You should have received a copy of the GNU Library General Public License along with this library; if not, write to the
Generated by Doxygen

75

Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the library Frob (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice
Thats all there is to it!

Generated by Doxygen

76

GNU Library General Public License

Generated by Doxygen

Chapter 17

GNU Lesser General Public License


Version 3, 29 June 2007 Copyright 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.

0. Additional Denitions. As used herein, this License refers to version 3 of the GNU Lesser General Public License, and the GNU GPL refers to version 3 of the GNU General Public License. The Library refers to a covered work governed by this License, other than an Application or a Combined Work as dened below. An Application is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Dening a subclass of a class dened by the Library is deemed a mode of using an interface provided by the Library. A Combined Work is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the Linked Version. The Minimal Corresponding Source for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The Corresponding Application Code for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.

1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.

78

GNU Lesser General Public License

2. Conveying Modied Versions. If you modify a copy of the Library, and, in your modications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modied version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.

3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header le that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document.

4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modication of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modied version of the Linked Version to produce a modied Combined Work, in the manner specied by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the users computer system, and (b) will operate properly with a modied version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modied version of the Combined Work produced by recombining or relinking the Application with a modied version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specied by section 6 of the GNU GPL for conveying Corresponding Source.)
Generated by Doxygen

79

5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to nd the accompanying uncombined form of the same work.

6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it species that a certain numbered version of the GNU Lesser General Public License or any later version applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it species that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxys public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.

Generated by Doxygen

S-ar putea să vă placă și