topic "Functions4U. Reference";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[{_}%EN-US 
[ {{10000@(113.42.0) [s0; [*@7;4 Functions4U. Reference]]}}&]
[s0;*@3;4 &]
[s0; List of functions in package.&]
[s0; &]
[ {{10000@1 [s0; [* Running files and commands]]}}&]
[s4;%- &]
[s5;:Upp`:`:LaunchFile`(const char`*`,const char`*`):%- [@(0.0.255) bool]_[* LaunchFile](
[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 file], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 p
arams]_`=_[@3 0])&]
[s2; Opens the file [%-*@3 file][%-  with ][%-*@3 params ]with the adecuated 
program defined in the OS by default.&]
[s0; &]
[s0;l288; [/ Example:]&]
[s2; [/ LaunchFile(`"c:`\`\My spreadsheet.txt`"). It will open default 
program (like gedit or notepad) with document `"My spreadsheet.txt`".]&]
[s3; &]
[s0; &]
[ {{10000@1 [s0; [* File Handling]]}}&]
[s4; &]
[s5;:FileCat`(const char`*`,const char`*`):%- [@(0.0.255) bool]_[* FileCat]([@(0.0.255) con
st]_[@(0.0.255) char]_`*[*@3 file], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 appendFile])
&]
[s2; Appends at the end of [%-*@3 file] the contents of file [%-*@3 appendFile]. 
[%-*@3 file] will be modified and [%-*@3 appendFile ]will remain 
unchanged.&]
[s0;l288; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:FileStrAppend`(const char`*`,const char`*`):%- [@(0.0.255) bool]_[* FileStrAppend]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 file], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 str])&]
[s2; Appends at the end of [%-*@3 file] the text [%-*@3 str].&]
[s0;l288; Returns true in case of success.&]
[s4;%- &]
[s5;:AppendFile`(const char`*`,const char`*`):%- [@(0.0.255) bool]_[* AppendFile]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 filename], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 str])
&]
[s2; Appends at the end of file [%-*@3 filename] the text [%-*@3 str].&]
[s2; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:AppendFileName`(const String`&`,const char`*`,const char`*`):%- [_^String^ String]_
[* AppendFileName]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 path1], 
[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path2], [@(0.0.255) const]_[@(0.0.255) char]_`*
[*@3 path3])&]
[s2; Like AppendFileName() but joining three paths. &]
[s3; &]
[s4;%- &]
[s5;:GetUpperFolder`(const char`*`):%- [_^String^ String]_[* GetUpperFolder]([@(0.0.255) co
nst]_[@(0.0.255) char]_`*[*@3 folderName])&]
[s2; Returns the name of the folder over [%-*@3 folderName].&]
[s3; &]
[s4;%- &]
[s5;:IsRootFolder`(const char`*`):%- [@(0.0.255) bool]_[* IsRootFolder]([@(0.0.255) const]_
[@(0.0.255) char]_`*[*@3 folderName])&]
[s0;l288; Returns false if there is a folder over [%-*@3 folderName]. 
It does not check if [%-*@3 folderName] exists.&]
[s3; &]
[s4;%- &]
[s5;:GetUpperFolder`(const String`&`):%- [_^String^ String]_[* GetUpperFolder]([@(0.0.255) c
onst]_[_^String^ String]_`&[*@3 folderName])&]
[s2; Returns the folder over [%-*@3 folderName].&]
[s3; &]
[s4;%- &]
[s5;:FileRealName`(const char`*`):%- [_^String^ String]_[* FileRealName]([@(0.0.255) const]_
[@(0.0.255) char]_`*[*@3 path])&]
[s2; Returns the real name of [%-*@3 path].(directory or file) with 
the right letter cases or `"`" if [%-*@3 path].does not exist.&]
[s3; &]
[s4;%- &]
[s5;:GetNextFolder`(const char`*`,const char`*`):%- [_^String^ String]_[* GetNextFolder](
[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 folder], [@(0.0.255) const]_[@(0.0.255) char]_`*
[*@3 lastFolder])&]
[s2; Considering [%-*@3 folder ]as a parent folder of [%-*@3 lastFolder], 
it returns the folder under [%-*@3 folder ]that is also parent 
of [%-*@3 lastFolder].&]
[s2; For example: GetNextFolder(`"/home`", `"/home/user/documents`") 
returns `"/home/user`".&]
[s3; &]
[s4; &]
[s5;:FileCompare`(const char`*`,const char`*`):%- [@(0.0.255) int]_[* FileCompare]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 path1], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path2])&]
[s2; Compares files [%-*@3 path1] and [%-*@3 path2]. &]
[s2; It returns:&]
[s2;i150;O0; `-2 if there are problems opening or reading from the 
files.&]
[s2;i150;O0; `-1 if files are different.&]
[s2;i150;O0; 1 if files are equal.&]
[s3; &]
[s4;%- &]
[s5;:FindStringInFile`(const char`*`,const String`,int64`):%- [_^int64^ int64]_[* FindStr
ingInFile]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 file], [@(0.0.255) const]_[_^String^ S
tring]_[*@3 text], [_^int64^ int64]_[*@3 pos0]_`=_[@3 0])&]
[s2; Search in [%-*@3 file] for string [%-*@3 text] from byte position 
[%-*@3 pos0]. &]
[s2; It returns &]
[s2;i150;O0; `-2 if there are problems opening or reading from the 
[%-*@3 file].&]
[s2;i150;O0; `-1 if [%-*@3 text] is not found in [%-*@3 file].&]
[s2;i150;O0; An int64 value indicating the byte where [%-*@3 text] 
is found.&]
[s3; &]
[s4;%- &]
[s5;:GetDirectoryLength`(const char`*`):%- [_^int64^ Upp`::int64]_[* GetDirectoryLength]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 directoryName])&]
[s2; Returns the size in bytes of the sum of all file sizes under 
[%-*@3 directoryName].&]
[s3; &]
[s4;%- &]
[s5;:GetLength`(const char`*`):%- [_^int64^ Upp`::int64]_[* GetLength]([@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 fileDirName])&]
[s2; Returns the size of [%-*@3 fileDirName].&]
[s0;l288;i150;O0; If it is a file, it returns its size.&]
[s0;l288;i150;O0; If it is a folder, it returns the size in bytes 
of the sum of all file sizes under [%-*@3 fileDirName].&]
[s3;%- &]
[s4;%- &]
[s5;:DirectoryCopy`(const char`*`,const char`*`):%- [@(0.0.255) bool]_[* DirectoryCopy]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 dir], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 newPlace])
&]
[s2; Copy folder [%-*@3 dir] including all files and folders to [%-*@3 newPlace].&]
[s0;l288; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:SetReadOnly`(const char`*`,bool`):%- [@(0.0.255) bool]_[* SetReadOnly]([@(0.0.255) con
st]_[@(0.0.255) char]_`*[*@3 path], [@(0.0.255) bool]_[*@3 readOnly])&]
[s2; Sets [%-*@3 path ](file or folder) as read only or write permitted 
depending on the value of[%-*@3  readOnly].&]
[s0;l288; In Linux the permissions are set for user, group and others.&]
[s2; -|Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:SetReadOnly`(const char`*`,bool`,bool`,bool`):%- [@(0.0.255) bool]_[* SetReadOnly]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 path], [@(0.0.255) bool]_[*@3 user], [@(0.0.255) bool]_[*@3 gr
oup], [@(0.0.255) bool]_[*@3 others])&]
[s2; Sets [%-*@3 path] (file or folder) as read only or write permitted 
for[%-*@3  user], [%-*@3 group ]and [%-*@3 others].&]
[s0;l288; -|Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:IsReadOnly`(const char`*`,bool`&`,bool`&`,bool`&`):%- [@(0.0.255) bool]_[* IsReadOnl
y]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], [@(0.0.255) bool]_`&[*@3 user], 
[@(0.0.255) bool]_`&[*@3 group], [@(0.0.255) bool]_`&[*@3 others])&]
[s2; Returns true in [%-*@3 user], [%-*@3 group] or [%-*@3 others] if [%-*@3 path 
](file or folder) is read only for some of those user groups.&]
[s0; -|Returns true in case of success.&]
[s3;%- &]
[s4;%- &]
[s5;:LoadFile`_Safe`(const String`):%- [_^String^ String]_[* LoadFile`_Safe]([@(0.0.255) co
nst]_[_^String^ String]_[*@3 fileName])&]
[s2; Same as LoadFile([%-*@3 fileName]) but it works in POSIX for files 
automatically generated by the OS.&]
[s2; &]
[s2; U`+`+ LoadFile() functions prior to loading the file into a 
String, get the length of the file to dimension the String that 
will get the file. This is not valid for OS generated virtual 
files where the file length returned by the OS is 0 (for example 
files under folder /proc in Linux)&]
[s2; LoadFile`_Safe() just get the file bytes returned by the OS 
until the file end.&]
[s3; &]
[s4;%- &]
[s5;:IsFile`(const char`*`):%- [@(0.0.255) bool]_[* IsFile]([@(0.0.255) const]_[@(0.0.255) ch
ar]_`*[*@3 fileName])&]
[s2; Returns true if [%-*@3 fileName] is a file.&]
[s3; &]
[s4; &]
[s5;:IsFolder`(const char`*`):%- [@(0.0.255) bool]_[* IsFolder]([@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 fileName])&]
[s2; Returns true id [%-*@3 fileName] is a folder.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:GetRelativePath`(Upp`:`:String`&`,Upp`:`:String`&`,Upp`:`:String`&`):%- [@(0.0.255) b
ool]_[* GetRelativePath]([_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 from], 
[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path], [_^Upp`:`:String^ String][@(0.0.255) `&
]_[*@3 ret])&]
[s2; Returns the relative path to go from [%-*@3 from] to [%-*@3 path 
]in[%-*@3  ret] and returns true.&]
[s0;l288; For example, if:&]
[s0;l288;i150;O0; [%-*@3 from] `= `"/books/technology/computers`"&]
[s0;l288;i150;O0; [%-*@3 path ]`= `"/books/biology/mammals`"&]
[s0;l288; GetRelativePath() would return `"../../biology/mammals`".&]
[s2; If there is no match between both paths it returns false.&]
[s2; This is a changed version from original function as IsNull() 
cannot distinguish String(`"`") and String(Null).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:SearchFile`(Upp`:`:String`,Upp`:`:String`,Upp`:`:String`,Upp`:`:Vector`<Upp`:`:String`>`&`):%- [_^Upp`:`:Vector^ V
ector]<[_^Upp`:`:String^ String]>_[* SearchFile]([_^Upp`:`:String^ String]_[*@3 dir], 
[_^Upp`:`:String^ String]_[*@3 condFile], [_^Upp`:`:String^ String]_[*@3 text], 
[_^Upp`:`:Vector^ Vector]<[_^Upp`:`:String^ String]>_`&[*@3 errorList])&]
[s2; Returns a Vector of Strings containing the file names with full 
path of the files under folder [%-*@3 dir] that comply with condition 
(with wildcards) [%-*@3 condFile] and that contain inside the text 
[%-*@3 text].&]
[s2; [%-*@3 errorList] contains the errors.&]
[s3; &]
[s4;%- &]
[s5;:SearchFile`(String`,String`,String`):%- [_^Array^ Vector]<[_^String^ String]>_[* Searc
hFile]([_^String^ String]_[*@3 dir], [_^String^ String]_[*@3 condFile], 
[_^String^ String]_[*@3 text]_`=_`"`")&]
[s2; Returns a Vector of Strings containing the file names with full 
path of the files under folder [%-*@3 dir] that comply with condition 
(with wildcards) [%-*@3 condFile ]and that contain inside the text 
[%-*@3 text].&]
[s3; &]
[s4; &]
[s5;:FileToTrashBin`(const char`*`):%- [@(0.0.255) void]_[* FileToTrashBin]([@(0.0.255) con
st]_[@(0.0.255) char]_`*[*@3 path])&]
[s2; Deletes file [%-*@3 path].by sending it to the Trash Bin.&]
[s3; &]
[s4;%- &]
[s5;:TrashBinGetCount`(`):%- [_^int64^ int64]_[* TrashBinGetCount]()&]
[s2; Returns the number of items (files and directories) located 
in the Trash Bin.&]
[s3;%- &]
[s4;%- &]
[s5;:TrashBinClear`(`):%- [@(0.0.255) void]_[* TrashBinClear]()&]
[s0; Removes all the items (files and directories) located in the 
Trash Bin.ç&]
[s3; &]
[s0; &]
[s0;%- &]
[ {{10000@1 [s0; [* File/Folder Handling `"X`" functions]]}}&]
[s0; &]
[s0;%- [%% File and folder handling functions with eXtras defined in 
]EXT`_FILE`_FLAGS&]
[s3; &]
[s4;%- &]
[s5;:USE`_TRASH`_BIN:%- [@(0.0.255) enum]_EXT`_FILE`_FLAGS_[* USE`_TRASH`_BIN]_`=_[@3 1]&]
[s2; If true, removed fildes and fodlers will be moved to the Trash 
(recycle) Bin.&]
[s3;%- &]
[s4;%- &]
[s5;:BROWSE`_LINKS:%- [@(0.0.255) enum]_EXT`_FILE`_FLAGS_[* BROWSE`_LINKS]_`=_[@3 2]&]
[s2; If true, folder functions will follow symbolic links.&]
[s3;%- &]
[s4;%- &]
[s5;:DELETE`_READ`_ONLY:%- [@(0.0.255) enum]_EXT`_FILE`_FLAGS_[* DELETE`_READ`_ONLY]_`=_[@3 4
]&]
[s2; If true, file/folder deletion functions will not consider read 
only flag.&]
[s0; &]
[s4;%- &]
[s5;:DeleteFolderDeepWildcardsX`(const char`*`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) bool]_
[* DeleteFolderDeepWildcardsX]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], 
EXT`_FILE`_FLAGS_[*@3 flags]_`=_[@3 0])&]
[s2;%- [%% Delete all folders under ][*@3 path ][%% using ][*@3 flags][%%  
that comply the condition in wildcards included in ][*@3 path.]&]
[s2; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:DeleteFileDeepWildcardsX`(const char`*`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) bool]_[* D
eleteFileDeepWildcardsX]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], 
EXT`_FILE`_FLAGS_[*@3 flags]_`=_[@3 0])&]
[s2;%- [%% Delete all files under ][*@3 path ][%% using ][*@3 flags][%%  that 
comply the condition in wildcards included in ][*@3 path.]&]
[s2; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:DeleteFolderDeepX`(const char`*`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) bool]_[* DeleteFo
lderDeepX]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], EXT`_FILE`_FLAGS_[*@3 flags
]_`=_[@3 0])&]
[s2; Delete [%-*@3 path] folder and all files and folders under it 
using [%-*@3 flags].&]
[s2; Returns true in case of success.&]
[s3;%- &]
[s4;%- &]
[s5;:RenameDeepWildcardsX`(const char`*`,const char`*`,const char`*`,bool`,bool`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) b
ool]_[* RenameDeepWildcardsX]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], 
[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 namewc], [@(0.0.255) const]_[@(0.0.255) char]_`*
[*@3 newname], [@(0.0.255) bool]_[*@3 forfile], [@(0.0.255) bool]_[*@3 forfolder], 
EXT`_FILE`_FLAGS_[*@3 flags]_`=_NO`_FLAG)&]
[s2; Rename to [%-*@3 newname] the files (if [%-*@3 forfile] is set to 
true) and/or folders (if [%-*@3 forfolder] is set to true) under 
[%-*@3 path] that comply the condition in wildcards included in 
[%-*@3 namewc] using [%-*@3 flags] .&]
[s2; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:FileMoveX`(const char`*`,const char`*`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) bool]_[* Fi
leMoveX]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 oldpath], [@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 newpath], EXT`_FILE`_FLAGS_[*@3 flags]_`=_NO`_FLAG)&]
[s2; Moves or renames [%-*@3 oldpath] file to [%-*@3 newpath] using [%-*@3 flags].&]
[s2; Returns true in case of success.&]
[s3; &]
[s4; &]
[s5;:FileDeleteX`(const char`*`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) bool]_[* FileDeleteX]([@(0.0.255) c
onst]_[@(0.0.255) char]_`*[*@3 path], EXT`_FILE`_FLAGS_[*@3 flags]_`=_NO`_FLAG)&]
[s2; Deletes [%-*@3 path] file using [%-*@3 flags].&]
[s2; Returns true in case of success.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:DirectoryExistsX`(const char`*`,EXT`_FILE`_FLAGS`):%- [@(0.0.255) bool]_[* Di
rectoryExistsX]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], 
EXT`_FILE`_FLAGS_[*@3 flags]_`=_NO`_FLAG)&]
[s2; Determines if directory [%-*@3 path] exists using [%- EXT`_FILE`_FLAGS 
][%-*@3 flags].&]
[s2; In Windows it mounts persistent but unmounted network drives.&]
[s3; &]
[s0; &]
[ {{10000@1 [s0; [* String functions]]}}&]
[s4;%- &]
[s5;:Trim`(const String`&`):%- [_^String^ String]_[* Trim]([@(0.0.255) const]_[_^String^ Stri
ng][@(0.0.255) `&]_[*@3 s])&]
[s2; Like TrimBoth(), it removes left and right spaces in [%-*@3 s]. 
Spaces are chars like, `' `', `'`\t`', `'`\n`', ...&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Tokenize`(const Upp`:`:String`&`,const Upp`:`:String`&`,int`):%- [^Upp`:`:Vector^ V
ector]<String>_[* Tokenize]([@(0.0.255) const]_[^Upp`:`:String^ String]_`&[*@3 str], 
[@(0.0.255) const]_[^Upp`:`:String^ String]_`&[*@3 token, ][@(0.0.255) int 
][*@3 pos] `= 0)&]
[s2; Returns all substrings in [%-*@3 str] beginning from [%-*@3 pos][%-  
]that are between [%-*@3 token].&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Tokenize`(const Upp`:`:String`&`,const Upp`:`:String`&`,Upp`:`:Vector`<Upp`:`:String`>`&`,int`):%- [@(0.0.255) v
oid]_[* Tokenize]([@(0.0.255) const]_[_^Upp`:`:String^ String]_`&[*@3 str], 
[@(0.0.255) const]_[_^Upp`:`:String^ String]_`&[*@3 token], [_^Upp`:`:Vector^ Vector]<[_^Upp`:`:String^ S
tring]>_`&[*@3 ret, ][@(0.0.255) int ][*@3 pos] `= 0)&]
[s2; Sets in [%-*@3 ret] all substrings in [%-*@3 str] beginning from 
[%-*@3 pos][%-  ]that are between [%-*@3 token].&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Tokenize2`(const Upp`:`:String`&`,const Upp`:`:String`&`,int`&`):%- [_^Upp`:`:String^ S
tring]_[* Tokenize2]([@(0.0.255) const]_[_^Upp`:`:String^ String]_`&[*@3 str], 
[@(0.0.255) const]_[_^Upp`:`:String^ String]_`&[*@3 token], [@(0.0.255) int]_`&[*@3 pos])&]
[s2; Finds the next token in [%-*@3 str] beginning from [%-*@3 pos]. 
[%-*@3 token] is a String that contains token identifier chars.&]
[s2; Returns the String from original [%-*@3 pos] to the char after 
found token or until the end of the String if no token is found. 
[%-*@3 pos] is updated to the next char after returned String, 
or Null if there are not more chars available.&]
[s2; It replaces old Tokenize function().&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Tokenize2`(const Upp`:`:String`&`,const Upp`:`:String`&`):%- [_^Upp`:`:String^ S
tring]_[* Tokenize2]([@(0.0.255) const]_[_^Upp`:`:String^ String]_`&[*@3 str], 
[@(0.0.255) const]_[_^Upp`:`:String^ String]_`&[*@3 token])&]
[s2; Finds a token in [%-*@3 str]. [%-*@3 token] is a String that contains 
token identifier chars.&]
[s2; Returns the String to the char after found token or until the 
end of the String if no token is found.&]
[s2; It replaces old Tokenize function().&]
[s3; &]
[s4;%- &]
[s5;:ReadCSV`(const String`,char`,bool`,bool`):%- [_^Vector^ Vector]<[_^Vector^ Vector]_<
[_^Value^ Value]>_>_[* ReadCSV]([@(0.0.255) const]_[_^String^ String]_[*@3 strFile], 
[@(0.0.255) char]_[*@3 separator], [@(0.0.255) bool]_[*@3 bycols], [@(0.0.255) bool]_[*@3 rem
oveRepeated])&]
[s2; Read a .csv file in String [%-*@3 strFile] where [%-*@3 separator] 
can be defined.&]
[s2; If [%-*@3 bycols] is set, the data is saved in `[column`]`[rows`] 
order.&]
[s2; If [%-*@3 removeRepeated ]then repeated rows will be deleted.&]
[s3; &]
[s4;%- &]
[s5;:WriteCSV`(Vector`<Vector`<Value`>`>`&`,char`,bool`):%- [_^String^ String]_[* WriteCS
V]([_^Vector^ Vector]<[_^Vector^ Vector]_<[_^Value^ Value]>_>_`&[*@3 data], 
[@(0.0.255) char]_[*@3 separator], [@(0.0.255) bool]_[*@3 bycols])&]
[s2; Save a .csv file to a String where [%-*@3 separator] can be defined.&]
[s2; If [%-*@3 bycols] is set, the data is supposed to be stored in 
`[column`]`[rows`] order.&]
[s3; &]
[s4; &]
[s5;:ReverseFind`(const String`&`,const String`&`,int`):%- [@(0.0.255) int]_[* ReverseFin
d]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 s], [@(0.0.255) const]_[_^String^ S
tring][@(0.0.255) `&]_[*@3 toFind], [@(0.0.255) int]_[*@3 from]_`=_[@3 0])&]
[s2; Find in [%-*@3 s] the String [%-*@3 toFind] beginning in [%-*@3 from 
]in reverse order.&]
[s2; Similar to Find() but searching from the end of the String.&]
[s3; &]
[s4;%- &]
[s5;:FormatLong`(long`):%- [_^String^ String]_[* FormatLong]([@(0.0.255) long]_[*@3 a])&]
[s2; Returns the long number [%-*@3 a ]converted into a String.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:SecondsToString`(double`,bool`,bool`):%- [_^String^ String]_[* SecondsToStrin
g]([@(0.0.255) double]_[*@3 seconds], [@(0.0.255) bool]_[*@3 units]_`=_[@(0.0.255) false], 
[@(0.0.255) bool ][*@3 dec]_`=_[@(0.0.255) true])&]
[s2; Converts an amount of [%-*@3 seconds] to a String formatted as 
HH:MM:SS.&]
[s0; -|If [%-*@3 units ]is true the units (hours, mins, seconds) will 
be part of the text.&]
[s0; -|If [%-*@3 dec ]is true it will show seconds decimals.&]
[s0; -|It is opposite to StringToSeconds()&]
[s3; &]
[s4;%- &]
[s5;:StringToSeconds`(String`):%- [@(0.0.255) double]_[* StringToSeconds]([_^String^ String
]_[*@3 str])&]
[s2; Converts a String [%-*@3 str ]formatted as HH:MM:SS to a returned 
amount of seconds.&]
[s0; -|It is opposite to SecondsToString()&]
[s3; &]
[s4;%- &]
[s5;:HMSToString`(int`,int`,double`,bool`):%- [_^String^ String]_[* HMSToString]([@(0.0.255) i
nt]_[*@3 hour], [@(0.0.255) int]_[*@3 min], [@(0.0.255) double]_[*@3 seconds], 
[@(0.0.255) bool]_[*@3 units ]`=_[@(0.0.255) false])&]
[s2; Returns a String containing [%-*@3 hour], [%-*@3 min ]and [%-*@3 seconds 
]formatted as HH:MM:SS.&]
[s0;l288; If [%-*@3 units ]is true the units (hours, mins, seconds) 
will be part of the text.&]
[s0; -|It is opposite to StringToHMS().&]
[s0; &]
[s4;%- &]
[s5;:StringToHMS`(String`,int`&`,int`&`,double`&`):%- [@(0.0.255) void]_[* StringToHMS]([_^String^ S
tring]_[*@3 durat], [@(0.0.255) int]_`&[*@3 hour], [@(0.0.255) int]_`&[*@3 min], 
[@(0.0.255) double]_`&[*@3 seconds])&]
[s2; It converts a String [%-*@3 durat ]formatted as HH:MM:SS to get 
[%-*@3 hour], [%-*@3 min ]and [%-*@3 seconds].&]
[s0; -|It is opposite to HMSToString()&]
[s3; &]
[s4; &]
[s5;:BytesToString`(uint64`,bool`):%- [_^String^ String]_[* BytesToString]([_^uint64^ uint6
4]_[*@3 bytes, ][_^uint64^ bool]_[*@3 units])&]
[s2; Converts an amount of [%-*@3 bytes ]to a short String. If [%-*@3 units] 
is true, they will appear like in 123.4 Kb&]
[s3; &]
[s4;%- &]
[s5;:StrToTime`(const char`*`):%- [_^Time^ `::Time]_[* StrToTime]([@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 s])&]
[s2;%- [%% Like ][@(0.0.255) const]_[@(0.0.255) char]_`*[* StrToTime]([@(0.0.255) struct]_[_^Time^ U
pp`::Time][@(0.0.255) `&]_[*@3 d], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 s]), 
but returning directly a Time.&]
[s3; &]
[s4;%- &]
[s5;:StrToDate`(const char`*`):%- [_^Date^ `::Date]_[* StrToDate]([@(0.0.255) const]_[@(0.0.255) c
har]_`*[*@3 s])&]
[s2;%- [%% Like ][@(0.0.255) const]_[@(0.0.255) char]_`*[* StrToDate]([@(0.0.255) struct]_[_^Time^ U
pp`::Date][@(0.0.255) `&]_[*@3 d], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 s]), 
but returning directly a Date.&]
[s3; &]
[s4;%- &]
[s5;:SeasonName`(int`):%- [_^String^ String]_[* SeasonName]([@(0.0.255) int]_[*@3 i])&]
[s2; It returns the name of the season beginning from `"winter`" 
([%-*@3 i] `= 0).&]
[s3; &]
[s4;%- &]
[s5;:FormatDoubleAdjust`(double`,double`):%- [_^String^ String]_[* FormatDoubleAdjust]([@(0.0.255) d
ouble]_[*@3 d], [@(0.0.255) double]_[*@3 range])&]
[s2; Returns number [%-*@3 d] in [%-*@3 range ]converted to a String, 
so that it has the right number of digits.&]
[s0;l288; This function serves to show numbers in graph axis and 
other elements that require to show the minimum right quantity 
of digits from a double.&]
[s3; &]
[s4;%- &]
[s5;:RemoveAccents`(String`):%- [_^String^ String]_[* RemoveAccents]([_^String^ String]_[*@3 s
tr])&]
[s2; Returns [%-*@3 str ]with the accented characters substituted with 
the most approximated ascii characters.&]
[s0;l288; If the original letter is uppercase, begins a word and 
the second letter is lowercase, the substituted first letter 
will be uppercase and the second will be lowercase.&]
[s0;l288; An accented letter can be substituted with one or some 
characters.&]
[s0;l288; For example `"Århus Ørsted Ñandú crème brûlée`" 
is converted in `"Aarhus Oersted Nandu creme brulee`"&]
[s3;%- &]
[s4;%- &]
[s5;:FitFileName`(String`,int`):%- [_^String^ String]_[* FitFileName]([@(0.0.255) const]_[_^String^ S
tring]_[*@3 fileName], [@(0.0.255) int]_[*@3 len])&]
[s2; Fits String [%-*@3 fileName] length until [%-*@3 len] removing just 
intermediate folder names replacing them with `"...`".&]
[s3; &]
[s4; &]
[s5;:IsPunctuation`(wchar`):%- [@(0.0.255) bool]_[* IsPunctuation]([_^wchar^ wchar]_[*@3 c])&]
[s2; Returns true if [%-*@3 c ]is a punctuation character.&]
[s3;%- &]
[s4;%- &]
[s5;:Replace`(String`,String`,String`):%- [_^String^ String]_[* Replace]([_^String^ String]_
[*@3 str], [_^String^ String]_[*@3 find], [_^String^ String]_[*@3 replace])&]
[s0;l288; Replaces in [%-*@3 str] substring [%-*@3 find] with [%-*@3 replace] 
string for all times [%-*@3 find] string appears.&]
[s3; &]
[s4;%- &]
[s5;:Replace`(String`,char`,char`):%- [_^String^ String]_[* Replace]([_^String^ String]_[*@3 s
tr], [@(0.0.255) char]_[*@3 find], [@(0.0.255) char]_[*@3 replace])&]
[s2; Replaces in [%-*@3 str] char [%-*@3 find] with [%-*@3 replace] char 
for all times [%-*@3 find] char appears.&]
[s3; &]
[s0; &]
[ {{10000@1 [s0; [* Special folders]]}}&]
[s4; &]
[s5;:GetTempFolder`(`):%- [_^String^ String]_[* GetTempFolder]()&]
[s2; Gets the default temp files folder path.&]
[s3;%- &]
[s0; &]
[ {{10000@1 [s0; [* Math functions]]}}&]
[s4; &]
[s5;:Sign`(T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[@(0.0.255) int]_[* Sign](
[*@4 T]_[*@3 a])&]
[s2;%- [%% Returns the sign of ][*@3 a:]&]
[s2;i150;O0; `+1 if [%-*@3 a]. is positive&]
[s2;i150;O0; 0 if [%-*@3 a] is 0&]
[s2;i150;O0; `-1 if [%-*@3 a] is negative.&]
[s3; &]
[s4;%- &]
[s5;:Average`(T`,T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* Average](
[*@4 T]_[*@3 a], [*@4 T]_[*@3 b])&]
[s2; Returns the average of [%-*@3 a] and [%-*@3 b].&]
[s3; &]
[s4;%- &]
[s5;:Average`(T`,T`,T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* Averag
e]([*@4 T]_[*@3 a], [*@4 T]_[*@3 b], [*@4 T]_[*@3 c])&]
[s2; Returns the average of [%-*@3 a], [%-*@3 b] and [%-*@3 c].&]
[s3; &]
[s4;%- &]
[s5;:Average`(T`,T`,T`,T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* Ave
rage]([*@4 T]_[*@3 a], [*@4 T]_[*@3 b], [*@4 T]_[*@3 c], [*@4 T]_[*@3 d])&]
[s2; Returns the average of [%-*@3 a], [%-*@3 b], [%-*@3 c] and [%-*@3 d].&]
[s3; &]
[s4;%- &]
[s5;:pow2`(T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* pow2]([*@4 T]_[*@3 a
])&]
[s2; Raises [%-*@3 a] to 2. Similar to sqr().&]
[s3; &]
[s4;%- &]
[s5;:pow3`(T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* pow3]([*@4 T]_[*@3 a
])&]
[s2; Raises [%-*@3 a] to 3.&]
[s3; &]
[s4;%- &]
[s5;:pow4`(T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* pow4]([*@4 T]_[*@3 a
])&]
[s2; Raises [%-*@3 a] to 4.&]
[s3; &]
[s4;%- &]
[s5;:Between`(const T`&`,const T`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) cla
ss]_[*@4 T]>_[@(0.0.255) bool]_[* Between]([@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 val],
 [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 min], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_
[*@3 max])&]
[s2; Returns true if [%-*@3 val] is between [%-*@3 min] and [%-*@3 max].&]
[s3; &]
[s4;%- &]
[s5;:AngleAdd360`(T`,T`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[*@4 T]_[* Angle
Add360]([*@4 T]_[*@3 ang], [*@4 T]_[*@3 val])&]
[s2; Adds [%-*@3 val] to [%-*@3 ang] taking care that result is between 
0 and 360º.&]
[s3; &]
[s4;%- &]
[s5;:Distance`(const T`&`,const T`&`,const T`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) c
lass]_[*@4 T]>_[@(0.0.255) const]_[*@4 T]_[* Distance]([@(0.0.255) const]_[*@4 T][@(0.0.255) `&
]_[*@3 x1], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 y1], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&
]_[*@3 x2], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 y2])&]
[s2; Returns the distance ([^http`:`/`/en`.wikipedia`.org`/wiki`/Euclidean`_distance^ e
uclidean]) between ([%-*@3 x1], [%-*@3 y1]) and ([%-*@3 x2], [%-*@3 y2]).&]
[s3; &]
[s4;%- &]
[s5;:Distance`(const Point`_`<T`>`&`,const Point`_`<T`>`&`):%- [@(0.0.255) template]_<[@(0.0.255) c
lass]_[*@4 T]>_[@(0.0.255) const]_[*@4 T]_[* Distance]([@(0.0.255) const]_[_^Point`_^ Point`_
]<[*@4 T]>`&_[*@3 p1], [@(0.0.255) const]_[_^Point`_^ Point`_]<[*@4 T]>`&_[*@3 p2])&]
[s2; Returns the distance ([^http`:`/`/en`.wikipedia`.org`/wiki`/Euclidean`_distance^ e
uclidean]) between [%-*@3 p1] and [%-*@3 p2].&]
[s3; &]
[s4;%- &]
[s5;:Distance`(const T`&`,const T`&`,const T`&`,const T`&`,const T`&`,const T`&`):%- [@(0.0.255) t
emplate]_<[@(0.0.255) class]_[*@4 T]>_[@(0.0.255) const]_[*@4 T]_[* Distance]([@(0.0.255) con
st]_[*@4 T][@(0.0.255) `&]_[*@3 x1], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 y1], 
[@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 z1], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 x
2], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 y2], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&
]_[*@3 z2])&]
[s2; Returns the distance ([^http`:`/`/en`.wikipedia`.org`/wiki`/Euclidean`_distance^ e
uclidean]) between ([%-*@3 x1], [%-*@3 y1] [%-*@3 z1]), and ([%-*@3 x2], 
[%-*@3 y2], [%-*@3 z2]).&]
[s3; &]
[s4;%- &]
[s5;:Angle`(const T`&`,const T`&`,const T`&`,const T`&`):%- [@(0.0.255) template]_<[@(0.0.255) c
lass]_[*@4 T]>_[@(0.0.255) const]_[@(0.0.255) double]_[* Angle]([@(0.0.255) const]_[*@4 T][@(0.0.255) `&
]_[*@3 x1], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 y1], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&
]_[*@3 x2], [@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 y2])&]
[s2; Returns the slope of the line that crosses ([%-*@3 x1], [%-*@3 y1]) 
and ([%-*@3 x2], [%-*@3 y2]).&]
[s3; &]
[s4;%- &]
[s5;:Angle`(const Point`_`<T`>`&`,const Point`_`<T`>`&`):%- [@(0.0.255) template]_<[@(0.0.255) c
lass]_[*@4 T]>_[@(0.0.255) const]_[@(0.0.255) double]_[* Angle]([@(0.0.255) const]_[_^Point`_^ P
oint`_]<[*@4 T]>`&_[*@3 p1], [@(0.0.255) const]_[_^Point`_^ Point`_]<[*@4 T]>`&_[*@3 p2])&]
[s2; Returns the slope of the line that crosses [%-*@3 p1] and [%-*@3 p2].&]
[s3; &]
[s4; &]
[s5;:Odd`(int`):%- [@(0.0.255) bool]_[* Odd]([@(0.0.255) int]_[*@3 val])&]
[s2; Returns true if [%-*@3 val ]is odd.&]
[s3; &]
[s4;%- &]
[s5;:Even`(int`):%- [@(0.0.255) bool]_[* Even]([@(0.0.255) int]_[*@3 val])&]
[s2; Returns true if [%-*@3 val ]is even.&]
[s3; &]
[s4;%- &]
[s5;:RoundEven`(int`):%- [@(0.0.255) int]_[* RoundEven]([@(0.0.255) int]_[*@3 val])&]
[s2; Returns [%-*@3 val ]rounded to the upper even number or itself 
if it is even.&]
[s3; &]
[s4;%- &]
[s5;:ToRad`(double`):%- [@(0.0.255) double]_[* ToRad]([@(0.0.255) double]_[*@3 angle])&]
[s2; Returns [%-*@3 angle ]in degrees converted to radians.&]
[s3; &]
[s4; &]
[s5;:ToDeg`(double`):%- [@(0.0.255) double]_[* ToDeg]([@(0.0.255) double]_[*@3 angle])&]
[s0;l288; Returns [%-*@3 angle ]in radians converted to degrees.&]
[s3; &]
[ {{10000@1 [s0; [* Graphical functions]]}}&]
[s4;%- &]
[s5;:FitInFrame`(const Size`_`<T`>`&`,const Size`_`<T`>`&`):%- [@(0.0.255) template]_<[@(0.0.255) c
lass]_[*@4 T]>_[_^Rect`_^ Rect`_]<[*@4 T]>_[* FitInFrame]([@(0.0.255) const]_[_^Size`_^ Size`_
]<[*@4 T]>_`&[*@3 frame], [@(0.0.255) const]_[_^Size`_^ Size`_]<[*@4 T]>_`&[*@3 object])&]
[s2; Returns the rectangle in a Rect to fit inside [%-*@3 frame] the 
[%-*@3 object ]maintaining the aspect ratio.&]
[s0; &]
[s0;= 
@@image:3268&2037
([encoded data, 108632 characters])
&]
[s3; &]
[s4;%- &]
[s5;:SaveImage`(const Image`&`,int`,const String`&`,String`):%- [@(0.0.255) bool]_[* Save
Image]([@(0.0.255) const]_[_^Image^ Image]_`&[*@3 img], [@(0.0.255) int]_[*@3 qualityBpp], 
[@(0.0.255) const]_[_^String^ String]_`&[*@3 fileName], [_^String^ String]_[*@3 ext]_`=_`"`"
)&]
[s2; Saves Image [%-*@3 img] in file [%-*@3 fileName] with format [%-*@3 ext]. 
If ext is `"`", the format is taken from [%-*@3 fileName] extension.&]
[s2; [%-*@3 qualityBpp] is the quality (for jpg) or the bits per pixel 
(for other formats):&]
[s3; &]
[s4;%- &]
[s5;:PrintImage`(const Image`&`,int`,int`,int`,int`):%- [@(0.0.255) bool]_[* PrintImage](
[@(0.0.255) const]_[_^Image^ Image]_`&[*@3 img], [@(0.0.255) int]_[*@3 x]_`=_[@3 0], 
[@(0.0.255) int]_[*@3 y]_`=_[@3 0], [@(0.0.255) int]_[*@3 width]_`=_Null, 
[@(0.0.255) int]_[*@3 height]_`=_Null)&]
[s2; Prints image [%-*@3 img] in coords. [%-*@3 x,] [%-*@3 y,] [%-*@3 width,] 
[%-*@3 height].&]
[s3; &]
[s4;%- &]
[s5;:DrawRectLine`(Draw`&`,int`,int`,int`,int`,int`,const Color`&`):%- [@(0.0.255) void
]_[* DrawRectLine]([_^Draw^ Draw][@(0.0.255) `&]_[*@3 w], [@(0.0.255) int]_[*@3 x], 
[@(0.0.255) int]_[*@3 y], [@(0.0.255) int]_[*@3 width], [@(0.0.255) int]_[*@3 height], 
[@(0.0.255) int]_[*@3 lineWidth], [@(0.0.255) const]_[_^Color^ Color]_`&[*@3 color])&]
[s5;:DrawRectLine`(Draw`&`,Point`&`,Size`&`,int`,const Color`&`):%- [@(0.0.255) void]_[* D
rawRectLine]([_^Draw^ Draw][@(0.0.255) `&]_[*@3 w], [_^Point^ Point]_`&[*@3 pos], 
[_^Size^ Size]_`&[*@3 s], [@(0.0.255) int]_[*@3 lineWidth], [@(0.0.255) const]_[_^Color^ Colo
r]_`&[*@3 color])&]
[s5;:DrawRectLine`(Draw`&`,Rect`&`,int`,const Color`&`):%- [@(0.0.255) void]_[* DrawRectL
ine]([_^Draw^ Draw][@(0.0.255) `&]_[*@3 w], [_^Rect^ Rect]_`&[*@3 r], [@(0.0.255) int]_[*@3 lin
eWidth], [@(0.0.255) const]_[_^Color^ Color]_`&[*@3 color])&]
[s2; Draws a rectangle in Draw [%-*@3 w] defined by either [%-*@3 x,] 
[%-*@3 y,] [%-*@3 width,] [%-*@3 height][%- , or Point ][%-*@3 pos][%-  and] 
Size [%-*@3 s][%-  or Rect ][%-*@3 r][%- , with line width] [%-*@3 lineWidth] 
and Color [%-*@3 color].&]
[s3; &]
[s4; &]
[s2;l0;:RandomColor`(`):%- [_^Color^ Color]_[* RandomColor]()&]
[s2; Returns a random color.&]
[s3; &]
[s4;%- &]
[s5;:GetRainbowColor`(int`):%- [_^Color^ Color]_[* GetRainbowColor]([@(0.0.255) int]_[*@3 val
16])&]
[s2; Returns a rainbow color from an input value [%-*@3 val16] from 
0 (Red) to 0xFFFF.&]
[s3; &]
[s4; &]
[s5;:GetRect`(const Image`&`,const Rect`&`):%- [_^Image^ Image]_[* GetRect]([@(0.0.255) con
st]_[_^Image^ Image][@(0.0.255) `&]_[*@3 orig], [@(0.0.255) const]_[_^Rect^ Rect]_`&[*@3 r])&]
[s2; Returns a subimage delimited by Rect [%-*@3 r] taken from [%-*@3 orig].&]
[s3; &]
[s4;%- &]
[s5;:GetPixel`(const Image`&`,int`,int`):%- [@(0.0.255) const]_[_^RGBA^ RGBA]_`*[* GetPixel
](const Image_`&[*@3 img], [@(0.0.255) int]_[*@3 x], [@(0.0.255) int]_[*@3 y])&]
[s2; Gets the color of a pixel in image [%-*@3 img] in coordinates 
[%-*@3 x], [%-*@3 y].&]
[s2; This pixel is read`-only.&]
[s3;%- &]
[s4;%- &]
[s5;:GetPixel`(ImageBuffer`&`,int`,int`):%- [_^RGBA^ RGBA]_`*[* GetPixel](ImageBuffer_`&[*@3 i
mg], [@(0.0.255) int]_[*@3 x], [@(0.0.255) int]_[*@3 y])&]
[s2; Gets the color of a pixel in image [%-*@3 img] in coordinates 
[%-*@3 x], [%-*@3 y]. &]
[s2; This pixel is modifiable.&]
[s3; &]
[s4; &]
[s5;:IsValid`(const Image`&`,int`,int`):%- [@(0.0.255) bool]_[* IsValid]([@(0.0.255) const]_
[_^Image^ Image]_`&[*@3 img], [@(0.0.255) int]_[*@3 x], [@(0.0.255) int]_[*@3 y])&]
[s2; Returns true if coordinates [%-*@3 x] and [%-*@3 y] are inside Image 
[%-*@3 img].&]
[s3; &]
[s4; &]
[s5;:IsValid`(ImageBuffer`&`,int`,int`):%- [@(0.0.255) bool]_[* IsValid]([_^ImageBuffer^ Im
ageBuffer]_`&[*@3 img], [@(0.0.255) int]_[*@3 x], [@(0.0.255) int]_[*@3 y])&]
[s2; Returns true if coordinates [%-*@3 x] and [%-*@3 y] are inside ImageBuffer 
[%-*@3 img].&]
[s3; &]
[s4;%- &]
[s5;:IsValid`(const Image`&`,T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[@(0.0.255) b
ool]_[* IsValid]([@(0.0.255) const]_[_^Image^ Image]_`&[*@3 img], [*@4 T]_`&[*@3 t])&]
[s2; Returns true if point [%-*@3 t] is inside Image [%-*@3 img].&]
[s3; &]
[s4;%- &]
[s5;:IsValid`(ImageBuffer`&`,T`&`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[@(0.0.255) b
ool]_[* IsValid]([_^ImageBuffer^ ImageBuffer]_`&[*@3 img], [*@4 T]_`&[*@3 t])&]
[s2; Returns true if point [%-*@3 t] is inside ImageBuffer [%-*@3 img].&]
[s3; &]
[ {{10000@1 [s0; [* Other functions]]}}&]
[s3; &]
[s5;:GetExtExecutable`(const String`):%- [_^String^ String]_[* GetExtExecutable]([@(0.0.255) c
onst]_[_^String^ String]_[*@3 ext])&]
[s2; Gets the program that will open by default the files with extension 
[%-*@3 ext].&]
[s0; &]
[s0; -|[/ Example:]&]
[s0; [/ -|GetExtExecutable(`"html`") `-> `"Firefox.exe`"]&]
[s3; &]
[s4;%- &]
[s5;:GetDriveList`(`):%- [_^Array^ Vector]<[_^String^ String]>_[* GetDriveList]()&]
[s2; Returns an array with the paths to all drives, internal or external, 
identified in the system.&]
[s3; &]
[s4;%- &]
[s5;:Getcwd`(`):%- [_^String^ String]_[* Getcwd]()&]
[s2; Returns an absolute file name representing the current process 
working directory.&]
[s6; Replaced by GetCurrentDurectory(.)&]
[s3;%- &]
[s4;%- &]
[s5;:Chdir`(const String`&`):%- [@(0.0.255) bool]_[* Chdir]_([@(0.0.255) const]_[_^String^ St
ring]_`&[*@3 folder])&]
[s2; Sets the process`'s working directory to [%-*@3 folder].&]
[s0;l288; Returns true if successful.&]
[s6; Replaced by SetCurrentDurectory().&]
[s3; &]
[s4;%- &]
[s5;:GetDesktopManagerNew`(`):%- [_^String^ String]_[* GetDesktopManagerNew]()&]
[s2; A more complete version of GetDesktopManager() based on GetOsInfo().&]
[s3; &]
[s4;%- &]
[s5;:NON`_REENTRANT`_V:%- [* NON`_REENTRANT`_V]&]
[s5;:NON`_REENTRANT`(v`):%- [* NON`_REENTRANT]([*@3 v])&]
[s2; It returns [%-*@3 v] if the function has been called in the same 
thread and it has not returned yet.&]
[s0;l288; It is useful to avoid a function to be called twice in 
different situations, for example:&]
[s0;#l288;i150;O0; The function calls Ctrl`::ProcessEvents(); If the 
function has been called when a button has been pressed, this 
button can be pressed again so the function can be called twice.&]
[s0;#l288;i150;O0; The function is called by ChildLostFocus() and 
it opens a new window using, lets say, PromptOK(). This way ChildLostFocus 
will be called twice: the second one because PromptOK() makes 
the field to loose the focus.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:tmGetTimeX`(`):%- [@(0.0.255) double]_[* tmGetTimeX]()&]
[s2; High resolution clock. Returns time in seconds or Null in case 
of error.&]
[s4;%- &]
[s5;:Upp`:`:Shuffle`(C`&`,int`):%- [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 C]>_[@(0.0.255) v
oid]_[* Shuffle]([*@4 C]_`&[*@3 data], [@(0.0.255) int]_[*@3 randomSeed]_`=_Null)&]
[s2; Shuffles Vector [%-*@3 data]. [%-*@3 randomSeed] is the seed for 
the random number generator.&]
[s2; If [%-*@3 randomSeed] is Null or not included, a new random seed 
is used every function call..&]
[s3; ]]