| **Navigation:**  [[clarion ide.htm|Development Environment (IDE)]] >Redirection System | [[icsharpcode formsdesigner gui addcomponentsdialog.htm|{{btn_prev_n.gif|Previous page}}]][[clarion ide.htm|{{btn_home_n.gif|Return to chapter overview}}]][[tracing the redirection system.htm|{{btn_next_n.gif|Next page}}]] | | || The Clarion IDE sets the active working directory to the folder in which the current application or project file resides. Clarion uses the redirection file (%ClarionRoot%\BIN\**Clarion80.RED**) both to locate files and to output new files. The project system first looks for a local redirection (.RED) file in the current directory (e.g., the directory where the project is). If it does not find one there, it uses the default RED file (%ClarionRoot%\BIN\Clarion8.RED). The RED file controls where files are found as well as where they are creaed and saved. When the project system needs to find a file, it looks through the RED file, checking if the file being looked for matches the file extension at the beginning of each line of the red file. If the extension matches, the project system then searches each directory in the list on that line starting at the left most directory. Once the file is found in one of the search directories, that file is used. When a file needs to be created by the project system the same system. Once a file extension pattern is found to match the file being created, then the first directory of that pattern is used. The red file is not used at all when a program runs. However, the redirection file is used to find DLLs when the **Copy referenced DLLs to output directory** check box in the **Project Options** is selected. {{notebox.jpg|NoteBox.jpg}} Backup files are always created in the directory where the original file is located. To edit the default redirection file, choose **Tools **{{c6h0013.jpg|C6H0013.jpg}}** Edit Base Redirection File**. The text editor opens the appropriate redirection file for editing. Adding a pipe character "|" to the end of a path causes the redirection system to stop searching. This is very useful if you want to have separate template registries for different development projects. __**Redirection File Syntax**__ Each line of the redirection file is in the format: filemask = directory1 [;directory2]... [;directoryn] The //filemask// is a file name or a file mask using the standard OS wild card characters: * and ?. The //directory //is a pathname identifying the directory or folder to search for the //filemask //files. The first //directory //is where any new //filemask //files are created. This is only true for files created and saved by the development environment, such as .OBJ, .DBD, .LIB, .EXE, and .CLW. The additional //directory //entries name additional search paths for existing //filemask //files. {{notebox.jpg|NoteBox.jpg}} The redirection system also supports transforming '**.**' and '**..**' syntax into directory names based on the location where the redirection file was opened (not based on the current directory). The redirection file needs to know what '**.**' means because you can have one red file in use in a project that is compiling on one thread while you have a different red file in use on a different thread for an app that is in a different directory. It is also recommended that any paths with spaces should be quoted as follows: ***.* = %ROOT%\Accessory\libsrc\win; "%ROOT%\Accessory\my images"** __**Redirection Macros**__ The redirection file //directory //can contain macros. **Redirection macros are labels surrounded by the percent sign (%).** When a redirection macro is detected, the Clarion environment substitutes the macro's substitution value. You can define redirection macros and their substitution values in the **Redirection File** tab located in the **Tools > Options > Clarion > (product name) > Versions** section of the IDE: {{redirection.jpg|Redirection.jpg}} For example to define a TEMP macro: {{redirection2.jpg|Redirection2.jpg}} To use the TEMP macro, add the following to CLARION70.RED: ***.dbd = %TEMP%\obj** The Clarion environment expands the redirection line to: ***.dbd = c:TEMP\obj** __**The ROOT Macro**__ The redirection file //directory //can contain the predefined %ROOT% macro. By default, the %ROOT% macro expands to the drive and path one level above that from which the environment program is executing. For example, if the environment program is in C:\Clarion\BIN, the environment substitutes C:\Clarion for %ROOT%. The default redirection file uses the %ROOT% macro to work with Clarion's default directory structure, regardless of where you install Clarion. You may override the %ROOT% macro's default substitution value by explicitly changing a value in the Redirection File options. For example: **Name:   **ROOT **Value:   **D:\Clarion __**The LibPath Macro**__ The redirection system supports the %libpath% macro in the [Copy] section of a redirection file.  This macro evaluates to the folder where the .lib file is located when copying the matching .dll to the destination folder. The default redirection file includes the folder %libpath%\bin\%configuration% in the Copy section.  This matches the structure implemented by Clarion.NET when you create a lib file for a .NET assembly, thus making it very easy to add .NET assembly projects to your win32 solution __**Additional Macros:**__ **REDNAME** Converts to the redirection file name based on the version of Clarion you are building with. **REDDIR** Expands to the directory where the default redirection file can be found for the version of Clarion you are building with. **WinUserApplicationData** Expands to the directory where the user application data is stored. Under Windows 7 and later, this is C:\Users\{**user name**}\AppData\Roaming Under Windows XP this will be the //C:\Documents and Settings\{//**//user name//**//}\Application Data// **WinCommonApplicationData** Expands to the directory where the common application data is stored. Under Windows XP this is //C:\Documents and Settings\All Users\Application Data// folder by default. **THISDIR** Expands to the directory where the redirection file is located. This makes it easier to put your .DCT in a root folder or a folder of the root. __**The Redirection**____ ____**{INCLUDE}**__ You can now include other redirection files in a target redirection by adding the following line: **{include <;redirection file name>}** This acts like the contents of the included redirection file is contained at the place where the {include} directive is placed. The RED file uses a priority system. The earlier a line is read the higher the priority. For example, if you have: **{include C:\myred.red}** **{include C:\otherred.red}** And //myred.red// has the following line: ***.ico = C:\myicons** And my//otherred.red// has the following line: ***.ico = C:\othericons** If //cancel.ico// exists in both locations, then the one in the //myicons //folder would be used. However, if you reversed the include lines so you had' **{include C:\otherred.red}** **{include C:\myred.red}** 'then the //cancel.ico// in the //othericons// folder would be used. In addition, any {include} within a section is only active when that section is active. Relative paths in the {include} directive are now calculated based on the directory of the redirection file rather than the directory of the project file. This allows you to spread applications/redirection files over more than one level of folders. For example you could have multiple products that share common company sources and templates but may have product specific location for the output. __**Redirection File Sections**__ The redirection file can be separated into sections that are conditionally ignored or used depending on Project System settings. The sections are of the form **[Section Name]** where //Section Name// is one of the following: | __**Section Name**__ | __**Project System Switch**__ | | DEBUG | Debug Mode | | RELEASE | Release Mode | | COMMON | none - COMMON is always used | | COPY | none - COPY is always used | Redirection lines within a section are only used if the section's corresponding Project System switches are true (COMMON is always true). Redirection lines without a section are always used. For example: **[DEBUG]** ***.obj = c:\test** **[RELEASE]** ***.obj = c:\release ** **[COMMON]** ***.* = work** In this example if the Build Configuration is set to Release, then .obj files are created in //c:\release//. If the Build Configuration is set to Debug, then .obj files are created in //c:\test//. __**The Default Redirection File**__ ***Note**: The IDE checks for the existence of the RED file, and if it does not exist, the IDE creates a new default RED file. [Copy] -- Directories only used when copying dlls *.dll = %BIN%;%BIN%\AddIns\BackendBindings\ClarionBinding\Common;%ROOT%\Accessory\bin;%libpath%\bin\%configuration% [Debug] -- Directories only used when building with Debug configuration *.obj = obj\debug *.res = obj\debug *.rsc = obj\debug *.lib = obj\debug *.FileList.xml = obj\debug *.map = map\debug [Release] -- Directories only used when building with Release configuration *.obj = obj\release *.res = obj\release *.rsc = obj\release *.lib = obj\release *.FileList.xml = obj\release *.map = map\release [Common] *.chm = %BIN%;%ROOT%\Accessory\bin *.tp? = %ROOT%\template\win *.trf = %ROOT%\template\win *.txs = %ROOT%\template\win *.stt = %ROOT%\template\win *.*   = .; %ROOT%\libsrc\win; %ROOT%\images; %ROOT%\template\win *.lib = %ROOT%\lib *.obj = %ROOT%\lib *.res = %ROOT%\lib *.hlp = %BIN%;%ROOT%\Accessory\bin *.dll = %BIN%;%ROOT%\Accessory\bin *.exe = %BIN%;%ROOT%\Accessory\bin *.tp? = %ROOT%\Accessory\template\win *.txs = %ROOT%\Accessory\template\win *.stt = %ROOT%\Accessory\template\win *.lib = %ROOT%\Accessory\lib *.obj = %ROOT%\Accessory\lib *.res = %ROOT%\Accessory\lib *.dll = %ROOT%\Accessory\bin *.*   = %ROOT%\Accessory\images; %ROOT%\Accessory\resources; %ROOT%\Accessory\libsrc\win; %ROOT%\Accessory\template\win **Additional Notes:** 1.The default redirection file is designed to work with Clarion's default directory structure. If you change the directory structure, you should make corresponding changes to the redirection file. 2.You can specify extra directories that are searched for DLL files (used by the "Copy Referenced Dlls" option) by adding to the [Copy] section of the redirection file.