topic "U++ package/project templates";
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[H4;b83;*4 $$3,5#07864147445237544204411237157677:title]
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
[b42;a42;ph2 $$5,5#45413000475342174754091244180557:text]
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
[l321;t246;C@5;1 $$7,7#20902679421464641399138805415013:code]
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
[t4167;C2 $$10,0#37138531426314131251341829483380:class]
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
[l160;t4167;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
[2 $$19,0#53580023442335529039900623488521:gap]
[t4167;C2 $$20,20#70211524482531209251820423858195:class`-nested]
[b50;2 $$21,21#03324558446220344731010354752573:Par]
[pdt236;*R4 $$22,22#40103207490822212450221436281730:WW`_title`_00]
[pht236;R2 $$23,23#29400012433312235252470404892822:WW`_title`_0]
[l236;pht236;R2 $$24,24#00454607453530313094118224015203:WW`_title`_1]
[l472;pht236;R2 $$25,25#33277462411042730011509123771117:WW`_title`_2]
[t236;2 $$26,26#71381142429583301433821046382111:WW`_screen]
[l236;t236;R2 $$27,27#07510943411664463674260230433339:WW`_cont`_1]
[l236;r236;t236;R2 $$28,28#54451302481117114292509401142872:WW`_text`_1]
[l236;r236;O2;t236;R2 $$29,29#48341504488149500391468343047403:WW`_list`_1]
[#l472;r236;t236;R2 $$30,30#52952442412790244233520900630609:WW`_text`_2]
[l472;t236;R2 $$31,31#20231881437551803363040212070507:WW`_cont`_2]
[l709;t236;R2 $$32,32#54252048405397105149130048740284:WW`_cont`_3]
[l472;r236;O2;t236;R2 $$33,33#30072837473536604092861621497204:WW`_list`_2]
[l472;O2;t236;C2 $$34,34#06230149405604125301230058170633:WW`_code`_2`_b]
[l472;t236;C2 $$35,35#15131915417316391232700012624331:WW`_code`_2]
[l709;r236;t236;C2 $$36,36#23923133421414554955209105909811:WW`_code`_3]
[#l236;r236;O2;t236;R2 $$37,37#03093274465041652393701215017436:WW`_text`_1`_b]
[#r236;t236;R2 $$38,38#44044703428202477345708892265501:WW`_text`_0]
[r236;t236;C2 $$39,39#64654381424019708140519310021423:WW`_code`_0]
[l236;t236;C2 $$40,40#50502365423032532055871338576202:WW`_code`_1]
[#l472;r236;O2;t236;R2 $$41,41#91819714438380021404078440414145:WW`_text`_2`_b]
[b83;*+117 $$42,42#2AC2FD302E8CD436942CC99374D81489:SubTitle]
[2 $$0,0#00000000000000000000000000000000:Default]
[{_}%EN-US 
[s2; U`+`+ package/project templates&]
[s3; Table of contents&]
[s0; &]
[s0; [^`#1^ 1. Prologue]&]
[s0; [^`#2^ 2. Description]&]
[s0; [^`#3^ 3. Ready`-to`-use Templates]&]
[s0;     [^`#3`_1^ 3.1 Overview]&]
[s0;     [^`#3`_2^ 3.2 Basic CtrlLib application]&]
[s0;     [^`#3`_3^ 3.3 Console application (no U`+`+)]&]
[s0;     [^`#3`_4^ 3.4 Core console project]&]
[s0;     [^`#3`_5^ 3.5 CtrlLib application with main window]&]
[s0;     [^`#3`_6^ 3.6 SDL project (no U`+`+)]&]
[s0;     [^`#3`_7^ 3.7 SDL with Core package]&]
[s0; [^`#4^ 4. Template File Layout]&]
[s0;     [^`#4`_1^ 4.1 Extension]&]
[s0;     [^`#4`_2^ 4.2 Sections]&]
[s0;     [^`#4`_3^ 4.3 Section Order]&]
[s0;     [^`#4`_4^ 4.4 Size]&]
[s0; [^`#5^ 5. Syntax]&]
[s0;     [^`#5`_1^ 5.1 Comments]&]
[s0;     [^`#5`_2^ 5.2 White Space]&]
[s0;     [^`#5`_3^ 5.3 Basic Rule]&]
[s0;     [^`#5`_4^ 5.4 Delimiters]&]
[s0;         [^`#5`_4`_1^ 5.4.1 `"`@`@`"]&]
[s0;         [^`#5`_4`_2^ 5.4.2 `"??`"]&]
[s0;     [^`#5`_5^ 5.5 Expressions]&]
[s0;         [^`#5`_5`_1^ 5.5.1 Basic Rule]&]
[s0;         [^`#5`_5`_2^ 5.5.2 `"`@`@][/^`#5`_5`_2^ filename`_expression][^`#5`_5`_2^ `"]&]
[s0;         [^`#5`_5`_3^ 5.5.3 `"??][/^`#5`_5`_3^ expression][^`#5`_5`_3^ `"]&]
[s0;         [^`#5`_5`_4^ 5.5.4 `"<: ... :>`"]&]
[s0;         [^`#5`_5`_5^ 5.5.5 `"<:? ][/^`#5`_5`_5^ expression][^`#5`_5`_5^  
:> ... <:.:>`"]&]
[s0;         [^`#5`_5`_6^ 5.5.6 `"<:? ][/^`#5`_5`_6^ expression][^`#5`_5`_6^  
:> ... <:/:> ... <:.:>`"]&]
[s0;     [^`#5`_6^ 5.6 `"PACKAGE`"]&]
[s0;         [^`#5`_6`_1^ 5.6.1 Description]&]
[s0;         [^`#5`_6`_2^ 5.6.2 Usage]&]
[s0;     [^`#5`_7^ 5.7 `"PACKAGE`_TOUPPER`"]&]
[s0;         [^`#5`_7`_1^ 5.7.1 Description]&]
[s0;         [^`#5`_7`_2^ 5.7.2 Usage]&]
[s0;     [^`#5`_8^ 5.8 `"PACKAGE`_TOUPPER`_CAPS`"]&]
[s0;         [^`#5`_8`_1^ 5.8.1 Description]&]
[s0;         [^`#5`_8`_2^ 5.8.2 Usage]&]
[s0;     [^`#5`_9^ 5.9 Header Line]&]
[s0;         [^`#5`_9`_1^ 5.9.1 Description]&]
[s0;         [^`#5`_9`_2^ 5.9.2 `"template`"]&]
[s0;         [^`#5`_9`_3^ 5.9.3 `"][/^`#5`_9`_3^ Name][^`#5`_9`_3^ `"]&]
[s0;         [^`#5`_9`_4^ 5.9.4 `"main`", `"sub`"]&]
[s0;         [^`#5`_9`_5^ 5.9.5 Usage]&]
[s0;     [^`#5`_10^ 5.10 `"filename`"]&]
[s0;         [^`#5`_10`_1^ 5.10.1 Description]&]
[s0;         [^`#5`_10`_2^ 5.10.2 Definition]&]
[s0;         [^`#5`_10`_3^ 5.10.3 Usage]&]
[s0;     [^`#5`_11^ 5.11 `"id`"]&]
[s0;         [^`#5`_11`_1^ 5.11.1 Description]&]
[s0;         [^`#5`_11`_2^ 5.11.2 Definition]&]
[s0;         [^`#5`_11`_3^ 5.11.3 Usage]&]
[s0;     [^`#5`_12^ 5.12 `"option`"]&]
[s0;         [^`#5`_12`_1^ 5.12.1 Description]&]
[s0;         [^`#5`_12`_2^ 5.12.2 Definition]&]
[s0;         [^`#5`_12`_3^ 5.12.3 Usage]&]
[s0;     [^`#5`_13^ 5.13 `"select`"]&]
[s0;         [^`#5`_13`_1^ 5.13.1 Description]&]
[s0;         [^`#5`_13`_2^ 5.13.2 Definition]&]
[s0;         [^`#5`_13`_3^ 5.13.3 Usage]&]
[s0;     [^`#5`_14^ 5.14 `"text`"]&]
[s0;         [^`#5`_14`_1^ 5.14.1 Description]&]
[s0;         [^`#5`_14`_2^ 5.14.2 Definition]&]
[s0;         [^`#5`_14`_3^ 5.14.3 Usage]&]
[s0;     [^`#5`_15^ 5.15 Undefined variables]&]
[s0; [^`#6^ 6. Template Dialog Layout]&]
[s0; [^`#7^ 7. Deployment]&]
[s0; [^`#8^ 8. Epilogue]&]
[s0; [^`#9^ 9. UPP File Syntax]&]
[s0; &]
[s3;:1: 1. Prologue&]
[s5; Often projects have the same base, the same structure, and / 
or even identical parts of code. One way to avoid unnecessary 
typing or similar work when creating a new project like that, 
is to use a parameterized template.&]
[s5; An U`+`+ package template (UPT) is such a parameterized template. 
It is used to create one or more package files which can be edited 
further. There can be more than one UPT.&]
[s5; And you can create a new UPT yourself! To enable you to do this, 
is the main purpose of this document.&]
[s0; &]
[s3;:2: 2. Description&]
[s5; A UPT is a special file with a .upt`-extension containing text 
and rules to create additional text.&]
[s5; When starting TheIDE or calling `"File / Set main package..`", 
the appearing window shows a `"New Package`" option. If this 
option is selected, TheIDE looks for UPTs and presents them in 
a list. Selecting one of them automatically shows a preview of 
the file(s) to create, possibly modified by options appearing 
at the same time. When everything is as wanted, `"Create`" writes 
the previewed files to disk and the new project is ready to be 
worked on.&]
[s0; &]
[s3;:3: 3. Ready`-to`-use Templates&]
[s42;:3`_1: 3.1 Overview&]
[s5; U`+`+ is shipped with the following six UPTs:&]
[s5;l160;i150;O2; Basic CtrlLib application&]
[s5;l160;i150;O2; Console application (no U`+`+)&]
[s5;l160;i150;O2; Core console project&]
[s5;l160;i150;O2; CtrlLib application with main window&]
[s5;l160;i150;O2; SDL project (no U`+`+)&]
[s5;l160;i150;O2; SDL with Core package&]
[s5; `"<empty>`" means: do not use any package template.&]
[s42;:3`_2: 3.2 Basic CtrlLib application&]
[s5; This UPT builds only the foundations of a GUI application: the 
needed include directive, the GUI equivalent for `"main()`", 
and the required build flag. You have the options to generate 
a header file (with include guards) and to add the `"multithreaded`" 
build flag.&]
[s42;:3`_3: 3.3 Console application (no U`+`+)&]
[s5; This UPT creates the foundations of a plain C`+`+ console application. 
Even the non`-GUI facilities of U`+`+ cannot be used. There aren`'t 
any options.&]
[s5; This template comes in handy when you just want to exploit TheIDE.&]
[s42;:3`_4: 3.4 Core console project&]
[s5; This UPT builds the foundations of a console application which 
uses only the non`-GUI facilities of U`+`+. You have the options 
to create a header file (with include guards) and to add the 
`"multithreaded`" build flag. Additionally you can direct the 
template to include code which reads the command line arguments 
into a const Vector<String>. (Please note that this is not the 
same as char`* argv`[`], the `"pointees`" of which are modifiable 
and include an additional string `- argv`[0`], the path and name 
of the running program.)&]
[s42;:3`_5: 3.5 CtrlLib application with main window&]
[s5; This seems to be the most useful UPT which lays the foundations 
of a `"big`" GUI application. You get  files containing the framework 
of your own application class, the name of which you can choose. 
You have a layout menu offering: no layouts, a general layout 
file, a main window`-specific layout file, and a main`-window`-specific 
layout file generating an `"OK`"`- and a `"Cancel`"`-Button. 
Finally there is an option to generate an image list file and 
an option to add the `"multithreaded`" build flag.&]
[s42;:3`_6: 3.6 SDL project (no U`+`+)&]
[s5; This UPT generates the foundations of a Simple DirectMedia Layer 
(SDL) console application. The U`+`+ facilities cannot be used. 
Apart from an option to create a header file and an option to 
write an event loop, there are three more multimedia`-specific 
options.&]
[s5; This template comes in handy when you just want to exploit TheIDE.&]
[s42;:3`_7: 3.7 SDL with Core package&]
[s5; This UPT builds the foundations of a Simple DirectMedia Layer 
(SDL) console application. Additionally, the non`-GUI U`+`+ facilities 
are enabled. Apart from an option to create a header file and 
an option to write an event loop, there are three more multimedia`-specific 
options .&]
[s0; &]
[s3;:4: 4. Template File Layout&]
[s42;:4`_1: 4.1 Extension&]
[s5; The extension of a UPT file must be `".upt`". If a file has 
a different extension or none at all it is not even considered 
to contain a UPT.&]
[s42;:4`_2: 4.2 Sections&]
[s5; A UPT file is made up of three distinct sections:&]
[s5;l160;i150;O2;~~~0; The header line&]
[s5;l160;i150;O2;~~~0; The variable definitions&]
[s5;l160;i150;O2;~~~0; The file definitions&]
[s5; If the header line is missing, the file is classified as invalid 
and ignored.&]
[s5; In principle the variable definitions are optional, although 
it is just them which makes a UPT flexible and thus valuable.&]
[s5; The non`-existence of any file definition, although syntactically 
safe, makes a UPT file absolutely useless. After all, a UPT is 
to generate files. If there is no file definition, a file simply 
cannot be created.&]
[s42;:4`_3: 4.3 Section Order&]
[s5; The sections of a UPT file must appear in the following order:&]
[s5;l160; [* 1.] The header line&]
[s5;l160; [* 2.] The variable definitions `- if there aren`'t any: the 
file definitions&]
[s5;l160; [* 3.] The file definitions (if there are variable definitions)&]
[s5; If the header line is not at the beginning of the file `- apart 
from comments or any white space `-, the file is classified as 
invalid and ignored. The header line is terminated by a semicolon.&]
[s5; The variable definition section is terminated by the beginning 
of the file definition section which starts with (the first) 
`"`@`@`". Variable definitions which follow the file definition(s) 
are considered simple text, belonging to the (last) file.&]
[s5; The file definition section is terminated by the end of the 
UPT file.&]
[s42;:4`_4: 4.4 Size&]
[s5; The size of the UPT file and such the number and the size(s) 
of the generated file(s) are virtually unlimited.&]
[s0; &]
[s3;:5: 5. Syntax&]
[s42;:5`_1: 5.1 Comments&]
[s5; You can write standard C`+`+ comments (`"/`* ... `*/ and `"//`") 
as usual. Inside of the variable definition section they behave 
as expected. Inside of the file definition section they become 
comments in the generated file. Putting `"/`*`" into the variable 
definition section and `"`*/`" into the file definition section 
leads to weird results.&]
[s42;:5`_2: 5.2 White Space&]
[s5; Inside of the header line and the variable definition section, 
but outside of a word or a number, extra white space doesn`'t 
count.&]
[s5; Inside of the file definition section and starting with the 
second line of each file definition the same rule applies inside 
of expressions. Outside of expressions any white space defines 
the layout of the respective file. That simply means: white space 
appears as white space in the generated file.&]
[s42;:5`_3: 5.3 Basic Rule&]
[s5; Inside of the file definition section any text which is not 
part of an expression appears unchanged in the generated file.&]
[s42;:5`_4: 5.4 Delimiters&]
[s42;l160;:5`_4`_1: 5.4.1 `"`@`@`"&]
[s5;l160; `"`@`@`" marks the beginning of a file definition. Everything 
up to this delimiter is part of the header line, a variable definition, 
or a previous file definition.&]
[s5;l160; But `"`@`@`" is a valid delimiter only at the beginning 
of a line. In this case even white space matters. If `"`@`@`" 
are not the very first two characters of the line, they represent 
just plain text.&]
[s5;l160; `"`@`@`" functions not only as a delimiter but mainly as 
(the beginning of) an expression.&]
[s42;l160;:5`_4`_2: 5.4.2 `"??`"&]
[s5;l160; Although `"??`" marks the possible nullification of a file 
definition, it is more an expression than a delimiter.&]
[s5;l160; It must appear inside of a file definition. If not, the 
UPT file is classified as invalid and ignored.&]
[s5;l160; `"??`" is a valid delimiter only at the beginning of a 
line. In this case even white space matters. If `"??`" are not 
the very first two characters of the line, they represent just 
plain text.&]
[s5;l160; `"??`" makes sense only in cooperation with an expression. 
Standing alone it makes its line disappear.&]
[s42;:5`_5: 5.5 Expressions&]
[s42;l160;:5`_5`_1: 5.5.1-|Basic Rule&]
[s5;l160; As the UPT file is evaluated by CParser, you can use any 
valid numerical or logical C expression or any combination of 
them, wherever an expression is permitted. The numeric values 
are of type `"double`".&]
[s5;l160; Expressions are meant to be used inside of the file definition 
section.&]
[s5;l160; You can also use such an expression inside of the variable 
definition section as a default value for an option variable 
and a select variable, if this makes sense to you.&]
[s5;l160; NEVER USE AN EXPRESSION TO SET THE DEFAULT VALUE OF A FILENAME 
VARIABLE OR AN ID VARIABLE! YOUR COMPUTER IS LIKELY TO CRASH 
AS SOON AS YOUR TEMPLATE IS SELECTED.&]
[s42;l160;:5`_5`_2: 5.5.2 `"`@`@[/ filename`_expression]`"&]
[s5;l160; `"`@`@`" marks the beginning of a file name. The name starts 
immediately after the second `"`@`" (with the third character 
of the line) and ends with the last character of the logical 
line. If you enter a filename as a literal, make sure that it 
is valid, especially if you use white space. The validity of 
a filename depends on the OS.&]
[s5;l160; There are three typical patterns (the file extensions are 
just examples), although other or more complicated expressions 
are possible:&]
[s0; [C -|`@`@<:PACKAGE:>.cpp]&]
[s0; [C -|`@`@<:][/C filename`_variable][C :>.hpp]&]
[s0; [C -|`@`@][/C filename`_literal][C .txt]&]
[s42;l160;:5`_5`_3: 5.5.3 `"??[/ expression]`"&]
[s5;l160; `"??`" decides whether a file is to be created. It evaluates 
the following expression. If the result is true, the file is 
created. If the result is false, the entire file is discarded. 
This holds, even if there are lines above the line containing 
the `"??`".&]
[s5;l160; `"??`" has a second effect. Beginning with the first file 
template containing a `"??[/ expression]`" (`"??`" alone does not 
suffice!) `"<:PACKAGE:>`" retains the path `- if any `- in the 
variable. Without such a line the path `- if any `- is removed 
from the variable. That means:&]
[s5;l160; Independent of the value of `"[/ expression]`" the filename 
templates of all the files preceding the file template containing 
the first `"??[/ expression]`" don`'t show the path `- if any `- 
in <: PACKAGE :>.&]
[s5;l160; If `"??[/ expression]`" evaluates to `"true`" `"<:PACKAGE:>`" 
in the containing file template shows path `- if any `- and filename.&]
[s5;l160; If `"??[/ expression]`" evaluates to `"false`" the containing 
file template simply doesn`'t show up.&]
[s5;l160; Independent of the value of `"[/ expression]`" the filename 
templates of all the files following the file template containing 
the first `"??[/ expression]`" DO show the path `- if any `- in 
<: PACKAGE :>.&]
[s42;l160;:5`_5`_4: 5.5.4 `"<: ... :>`"&]
[s5;l160; `"<:`" and `":>`" convert the enclosed literal into an expression 
which is evaluated. The result is then displayed without the 
delimiters.&]
[s5;l160; A string, enclosed in quotation marks, yields exactly this 
string. Without quotations marks it is considered a variable. 
If this variable has been defined, its value is displayed. Otherwise, 
nothing is shown.&]
[s5;l160; You can combine numerical expressions and strings, e.g.:&]
[s5;l160; <:condition`_1 ? `"text`_1`" : `"text`_2`":>&]
[s5;l160; You cannot nest `"<: ... :>`".&]
[s5;l160; `"<: :>`" and a single `"<:`" show a corresponding error message. 
A single `":>`" is just a plain string.&]
[s42;l160;:5`_5`_5: 5.5.5 `"<:? [/ expression] :> ... <:.:>`"&]
[s5;l160; This pattern emulates `"if ([/ expression]) ...;`"&]
[s5;l160; White space inside of the `"<`::>`"s doesn`'t matter. Between 
them it does: it produces white space in the resulting file.&]
[s42;l160;:5`_5`_6: 5.5.6-|`"<:? [/ expression] :> ... <:/:> ... <:.:>`"&]
[s5;l160; This pattern emulates `"if ([/ expression]) ...; else ...;`"&]
[s5;l160; White space inside of the `"<`::>`"s doesn`'t matter. Between 
them it does: it produces white space in the resulting file.&]
[s42;:5`_6: 5.6 `"PACKAGE`"&]
[s42;l160;:5`_6`_1: 5.6.1-|Description&]
[s5;l160; `"PACKAGE`" is the predefined identifier of a variable 
to which the content of the `"Package name`" input field is assigned.&]
[s42;l160;:5`_6`_2: 5.6.2 Usage&]
[s5;l160; The input is filtered. Only alphanumeric characters, `"`_`", 
`"/`", and `"`\`" are accepted. That means that you can enter 
a path but not a drive specification as `":`" is not a valid character 
(e. g., Windows).  `"`\`" is immediately transformed into `"/`".&]
[s5;l160; Whether the path part in the `"Package name`" input field 
`- if any `- is shown by <: PACKAGE :> depends on the preceding 
existence of a `"??[/ expression]`" in the UPT file. Refer to section 
5.5.3 `"??[/ expression]`".&]
[s5;l160; [C ... <: PACKAGE :> ...]&]
[s42;:5`_7: 5.7 `"PACKAGE`_TOUPPER`"&]
[s42;l160;:5`_7`_1: 5.7.1 Description&]
[s5;l160; `"PACKAGE`_TOUPPER`" is the predefined identifier of a 
variable to which the content of the `"Package name`" input field, 
transformed into uppercase letters, is assigned. If there were 
uppercase letters before, they are not changed.&]
[s5;l160; The reason for the existence of this variable is a well`-established 
practice to write uppercase include guards in .hpp`- (.h`-) files.&]
[s5;l160; `"PACKAGE`_TOUPPER`" is only available with U`+`+ releases 
later than `"609`-dev3`".&]
[s42;l160;:5`_7`_2: 5.7.2 Usage&]
[s5;l160; In contrast to `"PACKAGE`", `"PACKAGE`_TOUPPER`" always 
contains the path part `- if any `- of the `"Package name`" input 
field.&]
[s5;l160; [C ... <: PACKAGE`_TOUPPER :> ...]&]
[s42;:5`_8: 5.8-|`"PACKAGE`_TOUPPER`_CAPS`"&]
[s42;l160;:5`_8`_1: 5.8.1 Description&]
[s5;l160; `"PACKAGE`_TOUPPER`_CAPS`" is the predefined identifier 
of a variable to which the content of the `"Package name`" input 
field, transformed into uppercase letters, is assigned. In contrast 
to `"PACKAGE`_TO`_UPPER`" the sequence of a lowercase letter 
followed by an uppercase letter is separated by `"`_`", but not 
vice versa. Furthermore `"/`" is replaced by `"`_`", e.g.:&]
[s5;l160; MyPath/MyPackage `-> MY`_PATH`_MY`_PACKAGE&]
[s5;l160; The reason for the existence of this variable is a well`-established 
practice to write uppercase include guards in .hpp`- (.h`-) files.&]
[s5;l160; `"PACKAGE`_TOUPPER`_CAPS`" is only available with U`+`+ 
releases later than `"609`-dev3`".&]
[s42;l160;:5`_8`_2: 5.8.2-|Usage&]
[s5;l160; In contrast to `"PACKAGE`", `"PACKAGE`_TOUPPER`_CAPS`" 
always contains the path part `- if any `- of the `"Package name`" 
input field.&]
[s5;l160; [C ... <: PACKAGE`_TOUPPER`_CAPS :> ...]&]
[s42;:5`_9: 5.9 Header Line&]
[s42;l160;:5`_9`_1: 5.9.1 Description&]
[s5;l160; The header line identifies a UPT file as such, names the 
template and categorizes it.&]
[s42;l160;:5`_9`_2: 5.9.2 `"template`"&]
[s5;l160; The `"template`" keyword identifies the UPT file as such. 
If this keyword is not at the beginning of the file `- apart 
from comments or any white space `-, the file is classified as 
invalid and ignored. The keyword must no be enclosed in quotation 
marks.&]
[s42;l160;:5`_9`_3: 5.9.3 `"[/ Name]`"&]
[s5;l160; This is the name of the UPT file which appears in the template 
list of the `"Create new package`" dialog. It must be enclosed 
in quotation marks. If the name is missing, the file is classified 
as invalid and ignored.&]
[s42;l160;:5`_9`_4: 5.9.4 `"main`", `"sub`"&]
[s5;l160; These keywords which must not be enclosed in quotation 
marks, determine the scope of the UPT file.&]
[s5;l160; The `"Select main package`" window contains the option 
`"All packages`". If this option is checked, all the `"main`" 
UPT files only are presented in the template list of the `"Create 
new package`" dialog. If this option is unchecked all the `"sub`" 
UPT files only are shown in the template list of the `"Create 
new package`" dialog.&]
[s5;l160; A UPT file can be both `"main`" and `"sub`".&]
[s5;l160; If neither keyword is used, the UPT file is silently ignored.&]
[s42;l160;:5`_9`_5: 5.9.5 Usage&]
[s5;l160; The header line is terminated by a semicolon.&]
[s5;l160; [C template `"][/C name][C `" `[main `| sub `| main sub `| sub 
main`];]&]
[s42;:5`_10: 5.10 `"filename`"&]
[s42;l160;:5`_10`_1: 5.10.1 Description&]
[s5;l160; `"filename`" defines a variable which is determined to 
host a filename. Using it makes a named edit field appear. The 
input is filtered. Only alphanumeric characters, `"`_`", and 
`".`" are accepted. That means that you cannot enter a path or 
a drive specification (e. g., Windows).&]
[s42;l160;:5`_10`_2: 5.10.2 Definition&]
[s5;l160; The keyword and the variable name must not be enclosed 
in quotation marks, whereas the title must. Doing otherwise results 
in an error message and the UPT file is ignored. You can set 
a literal, enclosed in quotation marks, as default. Using a variable 
name instead, although syntactically correct, doesn`'t work. 
The variable definition is terminated by a semicolon.&]
[s5;l160; [C filename `"][/C title][C `" ][/C variable`_name][C  `[`= `"][/C default`"][C `];]&]
[s42;l160;:5`_10`_3: 5.10.3-|Usage&]
[s5;l160; [C ... <: ][/C variable`_name][C  :> ...]&]
[s5;l160; You can compare filename variables and act based on the 
result of this comparison.&]
[s42;:5`_11: 5.11 `"id`"&]
[s42;l160;:5`_11`_1: 5.11.1 Description&]
[s5;l160; `"id`" defines a variable which is determined to host a 
string. Using it makes a named edit field appear. The input is 
filtered. Only alphanumeric characters and `"`_`" are accepted.&]
[s42;l160;:5`_11`_2: 5.11.2 Definition&]
[s5;l160; The keyword and the variable name must not be enclosed 
in quotation marks, whereas the title must. Doing otherwise results 
in an error message and the UPT file is ignored. You can set 
a literal, enclosed in quotation marks, as default. Using a variable 
name instead, although syntactically correct, doesn`'t work. 
The variable definition is terminated by a semicolon.&]
[s5;l160; [C id `"][/C title][C `" ][/C variable`_name][C  `[`= `"][/C default`"][C `];]&]
[s42;l160;:5`_11`_3: 5.11.3 Usage&]
[s5;l160; [C ... <: ][/C variable`_name][C  :> ...]&]
[s5;l160; You can compare id variables and act based on the result 
of this comparison.&]
[s42;:5`_12: 5.12 `"option`"&]
[s42;l160;:5`_12`_1: 5.12.1 Description&]
[s5;l160; `"option`" defines a variable which is determined to host 
a boolean value. Using it makes a named option box appear.&]
[s42;l160;:5`_12`_2: 5.12.2 Definition&]
[s5;l160; The keyword and the variable name must not be enclosed 
in quotation marks, whereas the title must. Doing otherwise results 
in an error message and the UPT file is ignored. You can set 
either `"0`" or `"1`", enclosed in quotation marks or not, as 
default. Everything else is evaluated as `"false`". Using a variable 
name instead, although syntactically correct, doesn`'t work. 
The variable definition is terminated by a semicolon.&]
[s5;l160; option `"[/ title]`" [/ variable`_name] `[`= `[`"`]0 `| 1`[[/ `"]`]`];&]
[s42;l160;:5`_12`_3: 5.12.3 Usage&]
[s0;l160; [C ... <: ][/C variable`_name][C  ? ][/C number`_1][C  : ][/C number`_2][C  
:> ...]&]
[s0;l160; [C ... <: ][/C variable`_name][C  ? `"][/C string`_1][C `" : `"][/C string`_2][C `" 
:> ...]&]
[s0;l160; [C ... <: ? ][/C variable`_name][C  :>][/C number][C <: . :> ...]&]
[s0;l160; [C ... <: ? ][/C variable`_name][C  :>][/C string][C <: . :> ...]&]
[s0;l160; [C ... <: ? ][/C variable`_name][C  :>][/C number`_1][C <: / :>][/C number`_2][C <: 
. :> ...]&]
[s0;l160; [C ... <: ? ][/C variable`_name][C  :>][/C string`_1][C <: / :>][/C string`_2][C <: 
. :> ...]&]
[s5;l160; You can compare option variables and act based on the result 
of this comparison.&]
[s42;:5`_13: 5.13 `"select`"&]
[s42;l160;:5`_13`_1: 5.13.1 Description&]
[s5;l160; `"select`" defines a variable which works like an enumeration. 
Integer values, starting with 0, are assigned to named options. 
Using `"select`" makes a named DropList appear, of which the 
options can be selected but not edited.&]
[s42;l160;:5`_13`_2: 5.13.2 Definition&]
[s5;l160; The options must be listed inside of parentheses. The keyword 
and the variable name must not be enclosed in quotation marks, 
whereas the options and the title must. Doing otherwise or giving 
no option at all, results in an error message and the UPT file 
is ignored. The options must be separated by commas. If not, 
they are concatenated. You can set any value, enclosed in quotation 
marks or not, as default, but only integer values in the range 
`"0 to number`_of`_last`_option `- 1`" are accepted. Everything 
else makes no default option appear. The same holds for variables, 
be they defined or not. If you give no default at all, the first 
option becomes the default. The variable definition is terminated 
by a semicolon.&]
[s5;l160; [C option (`"option`_1`", `"option`_2`", ...) `"][/C title][C `"][/C  
variable`_name]&]
[s5;l160; [C -|`[`= 0 `| ... `| ][/C number`_of`_last`_option `- 1][C `];]&]
[s42;l160;:5`_13`_3: 5.13.3 Usage&]
[s0;l160; [C ... <: ][/C variable`_name][C  `=`= ][/C zero`_based`_option`_index][C  
:> ... <: . :>]&]
[s0;l160; [C ... <: ][/C variable`_name][C  > ][/C zero`_based`_option`_index][C  
:> ... <: . :>]&]
[s0;l160; [C ... <: ][/C variable`_name][C  >`= ][/C zero`_based`_option`_index][C  
:> ... <: . :>]&]
[s0;l160; [C ... <: ][/C variable`_name][C  < ][/C zero`_based`_option`_index][C  
:> ... <: . :>]&]
[s0;l160; [C ... <: ][/C variable`_name][C  <`= ][/C zero`_based`_option`_index][C  
:> ... <: . :>]&]
[s0;l160; [C ... <: ][/C variable`_name][C  !`= ][/C zero`_based`_option`_index][C  
:> ... <: . :>]&]
[s5;l160; You can select filename variables and act based on the 
result of this comparison.&]
[s42;:5`_14: 5.14 `"text`"&]
[s42;l160;:5`_14`_1: 5.14.1 Description&]
[s5;l160; `"text`" defines a variable which is determined to host 
an arbitrary string. Using it makes a named edit field appear. 
The input is not filtered. Any character is accepted.&]
[s42;l160;:5`_14`_2: 5.14.2 Definition&]
[s5;l160; The keyword and the variable name must not be enclosed 
in quotation marks, whereas the title must. Doing otherwise results 
in an error message and the UPT file is ignored. You can set 
a literal, enclosed in quotation marks, as default. Using a variable 
name instead, although syntactically correct, doesn`'t work. 
The variable definition is terminated by a semicolon.&]
[s5;l160; [C text `"][/C title][C `" ][/C variable`_name][C  `[`= `"][/C default`"][C `];]&]
[s42;l160;:5`_14`_3: 5.14.3 Usage&]
[s5;l160; [C ... <: ][/C variable`_name][C  :> ...]&]
[s5;l160; You can compare text variables and act based on the result 
of this comparison.&]
[s42;:5`_15: 5.15 Undefined variables&]
[s5; Using undefined variables in syntactically correct places causes 
no harm. Nevertheless an undefined variable has no value, even 
not 0.&]
[s0; &]
[s3;:6: 6. Template Dialog Layout&]
[s5; The `"Create in`"`-DropList always shows the currently selected 
assembly as well as the `"uppsrc`" assembly.&]
[s5; The templates are sorted alphabetically. If you have many templates, 
the template list will get scrollbars. So the number of your 
templates is virtually unlimited.&]
[s5; The variables appear in the order as entered. If you have many 
variables, they may not all be shown. Just enlarge the window. 
But this dialog section will not get scrollbars, so the number 
of variables is indeed limited.&]
[s5; The preview window displays TAB characters as small upright 
rectangles, but after opening the generated project files these 
characters show up as usual.&]
[s0; &]
[s3;:7: 7. Deployment&]
[s5; TheIDE looks in the following directories for UPT files:&]
[s5;l160;i150;O2; MyApps&]
[s5;l160;i150;O2; uppsrc&]
[s5; Sub`-directories are also scanned.&]
[s28;l0;~~~256; &]
[s3;:8: 8. Epilogue&]
[s5; This documentation is valid for U`+`+ releases starting with 
`"610`-dev3`".&]
[s5; If you find any mistakes, be they just linguistic or typographic, 
please report them on the U`+`+ forum (http://www.arilect.com/upp/forum/).&]
[s5; If something is not clear or seems to be not clear, please report 
so on the U`+`+ forum.&]
[s5; If this documentation is insufficient or seems to be insufficient, 
please say so on the U`+`+ forum.&]
[s0; &]
[s3;:9: 9. UPP File Syntax&]
[s5; Each package has a package definition file, the name of which 
must be the same as the name of the package folder. The extension 
is `".upp`".&]
[s5; If you create U`+`+ GUI applications, the UPP file normally 
has the following three sections:&]
[s38;l160; &]
[s39;l160; uses&]
[s39;l160;     CtrlLib;&]
[s39;l160; &]
[s39;l160; file&]
[s39;l160; [/     file`_1.ext],&]
[s39;l160; [/     file`_2.ext],&]
[s39;l160;     ...;&]
[s39;l160; &]
[s39;l160; mainconfig&]
[s39;l160;     `"`" `= `"GUI [/ flag`_2] ...`";&]
[s0;l160; ]]