ALib C++ Library
Library Version: 2510 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
basecamp.cpp
1// #################################################################################################
2// ALib C++ Library
3//
4// Copyright 2013-2025 A-Worx GmbH, Germany
5// Published under 'Boost Software License' (a free software license, see LICENSE.txt)
6// #################################################################################################
7#include "alib_precompile.hpp"
8#if !defined(ALIB_C20_MODULES) || ((ALIB_C20_MODULES != 0) && (ALIB_C20_MODULES != 1))
9# error "Symbol ALIB_C20_MODULES has to be given to the compiler as either 0 or 1"
10#endif
11#if ALIB_C20_MODULES
12 module;
13#endif
14// ====================================== Global Fragment ======================================
15#include <iostream>
22// =========================================== Module ==========================================
23#if ALIB_C20_MODULES
24 module ALib.Camp.Base;
25 import ALib.Lang;
26 import ALib.Time;
27 import ALib.EnumOps;
28# if !ALIB_SINGLE_THREADED
29 import ALib.Threads;
30# endif
31 import ALib.Monomem;
33 import ALib.Strings;
37 import ALib.Boxing;
39 import ALib.Exceptions;
40 import ALib.System;
41 import ALib.Variables;
43 #if ALIB_THREADMODEL
44 import ALib.ThreadModel;
45 #endif
46 #if ALIB_BITBUFFER
47 import ALib.BitBuffer;
48 #endif
49 import ALib.Format;
53 import ALib.Camp;
54#else
55# include "ALib.Lang.H"
56# include "ALib.Time.H"
57# if !ALIB_SINGLE_THREADED
58# include "ALib.Threads.H"
59# endif
60# include "ALib.Monomem.H"
61# include "ALib.Strings.H"
65# include "ALib.Boxing.H"
67# include "ALib.Exceptions.H"
68# include "ALib.System.H"
70# include "ALib.ThreadModel.H"
71# include "ALib.BitBuffer.H"
72# include "ALib.Format.H"
76# include "ALib.Camp.H"
77# include "ALib.Camp.Base.H"
78#endif
79// ====================================== Implementation =======================================
82
83using namespace alib::strings;
84
85namespace alib::camp {
86
88: Camp( "ALIB" )
89, LocaleFound(nullptr)
90{
91 #if ALIB_DEBUG && !ALIB_DEBUG_ASSERTION_PRINTABLES
92 ALIB_ASSERT_ERROR( this == &BASECAMP, "BASECAMP",
93 "Instances of class Basecamp must not be created. Use singleton alib::BASECAMP" )
94 #endif
95}
96
98{
100 {
101//! @cond NO_DOX
102 #define EOS ,
103//! @endcond
104#if !ALIB_CAMP_OMIT_DEFAULT_RESOURCES
105 resourcePool->BootstrapBulk( ResourceCategory,
106
107
108 // CodeMarker_CommonEnums
109 "Alignment", A_CHAR("0" "," "Left" "," "1" ","
110 "1" "," "Right" "," "1" ","
111 "2" "," "Center" "," "1" ),
112
113 "Bool", A_CHAR("0" "," "False" "," "1" ","
114 "1" "," "True" "," "1" ","
115 "0" "," "0" "," "1" ","
116 "1" "," "1" "," "1" ","
117 "0" "," "No" "," "1" ","
118 "1" "," "Yes" "," "1" ","
119 "0" "," "Off" "," "2" ","
120 "1" "," "On" "," "2" ","
121 "0" "," "-" "," "1" ","
122 "1" "," "Ok" "," "2" ),
123
124 "Caching", A_CHAR("0" "," "Disabled" "," "1" ","
125 "1" "," "Enabled" "," "1" ","
126 "1" "," "Auto" "," "1" ),
127
128 "Case", A_CHAR("0" "," "Sensitive" "," "1" ","
129 "1" "," "Ignore" "," "1" ),
130
131 "ContainerOp", A_CHAR("0" "," "Insert" "," "1" ","
132 "1" "," "Remove" "," "1" ","
133 "3" "," "GetCreate" "," "4" ","
134 "2" "," "Get" "," "1" ","
135 "4" "," "Create" "," "1" ),
136
137 // CreateDefaults: using Bool
138 // CreateIfNotExists: using Bool
139
140 "CurrentData", A_CHAR("0" "," "Keep" "," "1" ","
141 "1" "," "Clear" "," "1" ),
142
143 "Inclusion", A_CHAR("0" "," "Include" "," "1" ","
144 "1" "," "Exclude" "," "1" ),
145
146 "Initialization", A_CHAR("0" "," "Suppress" "," "1" ","
147 "1" "," "Default" "," "1" ","
148 "2" "," "Nulled" "," "1" ","
149 "0" "," "None" "," "2" ","
150 "1" "," "Initialize" "," "1" ","
151 "2" "," "Zero" "," "1" ),
152
153 "Phase", A_CHAR("0" "," "Begin" "," "1" ","
154 "1" "," "End" "," "1" ),
155
156 "Propagation", A_CHAR("0" "," "Omit" "," "1" ","
157 "1" "," "ToDescendants" "," "1" ),
158
159 "Reach", A_CHAR("0" "," "Global" "," "1" ","
160 "1" "," "Local" "," "1" ),
161
162 // Recursive: using Bool
163
164 "Responsibility", A_CHAR("0" "," "KeepWithSender" "," "1" ","
165 "1" "," "Transfer" "," "1" ),
166
167 "Safeness", A_CHAR("0" "," "Safe" "," "1" ","
168 "1" "," "Unsafe" "," "1" ),
169
170 "Side", A_CHAR("0" "," "Left" "," "1" ","
171 "1" "," "Right" "," "1" ),
172
173 "SortOrder", A_CHAR("0" "," "Ascending" "," "1" ","
174 "1" "," "Descending" "," "1" ),
175
176 "SourceData", A_CHAR("0" "," "Copy" "," "1" ","
177 "1" "," "Move" "," "1" ),
178
179 "Switch", A_CHAR("0" "," "Off" "," "2" ","
180 "1" "," "On" "," "2" ),
181
182 "Timezone", A_CHAR("0" "," "Local" "," "1" ","
183 "1" "," "UTC" "," "1" ),
184
185 "Timing", A_CHAR("0" "," "Async" "," "1" ","
186 "1" "," "Sync" "," "1" ","
187 "0" "," "Asynchronous" "," "1" ","
188 "1" "," "Synchronous" "," "1" ","
189 "1" "," "Synchronized" "," "1" ),
190
191 "ValueReference", A_CHAR("0" "," "Absolute" "," "1" ","
192 "1" "," "Relative" "," "1" ),
193
194 "Whitespaces", A_CHAR("0" "," "Trim" "," "1" ","
195 "1" "," "Keep" "," "1" ),
196
197
199 "TSts", A_CHAR( "0" "," "Unstarted" "," "1" ","
200 "1" "," "Started" "," "3" ","
201 "2" "," "Running" "," "1" ","
202 "3" "," "Done" "," "3" ","
203 "4" "," "Terminated" "," "1" ),
204
206 "TMDWP", A_CHAR( "0" "," "Lowest" "," "4" ","
207 "500" "," "DeferredDeletion" "," "1" ","
208 "1000" "," "Low" "," "1" ","
209 "2000" "," "Standard" "," "1" ","
210 "4000" "," "Highest" "," "5" ","
211 "3000" "," "High" "," "1" ),
212 #endif
213 #endif
214
215
216
217 //------------ module variables ------------
218 "VARE<", A_CHAR("variables::"),
219 "VARE" , A_CHAR("0" "," "OK" "," "" ","
220 "1" "," "ErrorOpeningFile" "," "VARERF" ","
221 "2" "," "ErrorWritingFile" "," "VAREWF" ),
222
223 "VARERF", A_CHAR("Can't open {}file {!Q'} for reading.") ,
224 "VAREWF", A_CHAR("Can't open {}file {!Q'} for writing.") ,
225
226
227 "VarPrio", A_CHAR( "0" "," "NONE" ",1,"
228 "1000" "," "AutoDetected" ",1,"
229 "2000" "," "DefaultValues" ",1,"
230 "4000" "," "Standard" ",1,"
231 "6000" "," "ConfigFile" ",2,"
232 "8000" "," "Environment" ",1,"
233 "10000" "," "SessionFile" ",8,"
234 "12000" "," "CLI" ",2,"
235 "14000" "," "Session" ",2,"
236 "max" "," "Protected" ",1" ),
237
238 // names of the configuration plug-ins added to configuration in default construction.
239 "CFGPlgEnv" , A_CHAR("Environment Variables") ,
240 "CFGPlgCLI" , A_CHAR("Command Line Arguments") ,
241
242 "CFGIniWB" , A_CHAR("writeback") ,
243
244 // boolean tokens
245 "CFGBTF", A_CHAR("False I 1," ) A_CHAR( "True I 1," )
246 A_CHAR( "0 I 1," ) A_CHAR( "1 I 1," )
247 A_CHAR( "No I 1," ) A_CHAR( "Yes I 1," )
248 A_CHAR( "Off I 3," ) A_CHAR( "On I 2," )
249 A_CHAR( "--- I 1," ) A_CHAR( "OK I 2" ),
250
251
252 // variables
253DOX_MARKER([DOX_VARIABLES_DECLARATION6])
254"Var0", A_CHAR("1|ALIB/LOCALE|" "S" ),
255"Var1", A_CHAR("2|ALIB/WAIT_FOR_KEY_PRESS|" "B" ),
256"Var2", A_CHAR("3|ALIB/HAS_CONSOLE_WINDOW|" "B" ),
257
258"Var_C1", A_CHAR("Defines the locale of the application. If empty or not set, the system's locale is used.\n"
259 "If set, a UTF8 local should be used, for example 'us_US.UTF-8' or 'de_DE.UTF-8'" ),
260"Var_C2", A_CHAR("If true, the process waits for a key stroke on termination. If empty, under Windows" "\n"
261 "behavior is detected, under other OSes, defaults to false." ),
262"Var_C3", A_CHAR("Boolean value that denotes what its name indicates. If empty, under Windows value is " "\n"
263 "detected, under other OSes, defaults to true." ),
264DOX_MARKER([DOX_VARIABLES_DECLARATION6])
265
266
267 // INI-File comment for section ALIB
268 "INI_CMT_ALIB", A_CHAR("@>'/// '@HL-General ALib library settings.\n@HL-"),
269
270 // Exit message when waiting for key-press requested with variable WAIT_FOR_KEY_PRESS
271 "EXIT_MSG" , A_CHAR( "ALIB: Press 'Enter' to exit..." ),
272
274 "ACAlgos" , A_CHAR( "0" ",NONE" "," "1" ","
275 "31" ",ALL" "," "1" ","
276 "1" ",Uncompressed" "," "1" ","
277 "2" ",MinMax" "," "1" ","
278 "4" ",Sparse" "," "1" ","
279 "8" ",VerySparse" "," "1" ","
280 "16" ",Incremental" "," "1" ","
281 "32" ",Huffman" "," "1" ),
282 #endif
283
284 // Calendar
285 "Months" , A_CHAR("January,February,March,April,May,June,July,August,September,October,November,December")
286 , "Days" , A_CHAR("Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,") EOS
287
288 "DurUnts" , A_CHAR("zero time" "," // 0 TS_ZERO
289 " days" "," // 1 DayP
290 " day" "," // 2 DayS
291 " hours" "," // 3 HourP
292 " hour" "," // 4 HourS
293 " minutes" "," // 5 MinP
294 " minute" "," // 6 MinS
295 " seconds" "," // 7 SecP
296 " second" "," // 8 SecS
297 " ms" "," // 9 MlSecP
298 " ms" "," // 10 MlSecS
299 " \u00B5s" "," // 11 McSecP
300 " \u00B5s" "," // 12 McSecS
301 " ns" "," // 13 NSecP
302 " ns" ), // 14 NSecS
303
304 "FMTDT" , A_CHAR( "yyyy-MM-dd HH:mm:ss"), // default format string for DateTime values used by FFormat_DateTime()
305 "FMTCI" , A_CHAR( "[@ sf:sl from ''ya'' by ''ta'']"), // default format string for CallerInfo values used by FFormat_CallerInfo()
306 "FMTCINT", A_CHAR( "<None>"), // format output if CallerInfo has no thread set
307 "FMTCINY", A_CHAR( "<None>"), // format output if CallerInfo originates from static method or namespace function
308 "FMTCINR", A_CHAR( "<Null>"), // format output if CallerInfo originates from static method or namespace function
309
310 // Enums
311 "SF", A_CHAR("0,Root" ",1,"
312 "1,Current" ",1,"
313 "3,HomeConfig" ",5,"
314 "2,Home" ",1,"
315 "4,Module" ",1,"
316 "5,Temp" ",1,"
317 "6,VarTemp" ",1" ) EOS
318
319 // System errors
320 #if defined (__GLIBC__) || defined(__APPLE__)
321 "SE<" , A_CHAR("glibc::" ),
322 "OSERR" , A_CHAR("GNU-C Library call returned {!Q} ({})."),
323 "UknSE" , A_CHAR("GNU-C Library call returned ({}). (Unknown error number)"),
324 #elif defined(_WIN32)
325 "SE<" , A_CHAR("WindowsOS::" ),
326 "OSERR" , A_CHAR("Windows system call returned {!Q} ({})."),
327 "UknSE" , A_CHAR("Windows system call returned ({}). (Unknown error number)"),
328 #endif
329 "SE",
330
331 A_CHAR("-1" "," "UNKNOWN" "," "UknSE" "," )
332 A_CHAR("0" "," "OK" "," "," )
333
334#if defined (__GLIBC__) || defined(__APPLE__) || defined(__ANDROID_NDK__)
335 A_CHAR("1" "," "EPERM" "," "OSERR" ","
336 "2" "," "ENOENT" "," "OSERR" ","
337 "3" "," "ESRCH" "," "OSERR" ","
338 "4" "," "EINTR" "," "OSERR" ","
339 "5" "," "EIO" "," "OSERR" ","
340 "6" "," "ENXIO" "," "OSERR" ","
341 "7" "," "E2BIG" "," "OSERR" ","
342 "8" "," "ENOEXEC" "," "OSERR" ","
343 "9" "," "EBADF" "," "OSERR" ","
344 "10" "," "ECHILD" "," "OSERR" ","
345 "11" "," "EAGAIN" "," "OSERR" ","
346 "12" "," "ENOMEM" "," "OSERR" ","
347 "13" "," "EACCES" "," "OSERR" ","
348 "14" "," "EFAULT" "," "OSERR" ","
349 "15" "," "ENOTBLK" "," "OSERR" ","
350 "16" "," "EBUSY" "," "OSERR" ","
351 "17" "," "EEXIST" "," "OSERR" ","
352 "18" "," "EXDEV" "," "OSERR" ","
353 "19" "," "ENODEV" "," "OSERR" ","
354 "20" "," "ENOTDIR" "," "OSERR" ","
355 "21" "," "EISDIR" "," "OSERR" ","
356 "22" "," "EINVAL" "," "OSERR" ","
357 "23" "," "ENFILE" "," "OSERR" ","
358 "24" "," "EMFILE" "," "OSERR" ","
359 "25" "," "ENOTTY" "," "OSERR" ","
360 "26" "," "ETXTBSY" "," "OSERR" ","
361 "27" "," "EFBIG" "," "OSERR" ","
362 "28" "," "ENOSPC" "," "OSERR" ","
363 "29" "," "ESPIPE" "," "OSERR" ","
364 "30" "," "EROFS" "," "OSERR" ","
365 "31" "," "EMLINK" "," "OSERR" ","
366 "32" "," "EPIPE" "," "OSERR" ","
367 "33" "," "EDOM" "," "OSERR" ","
368 "34" "," "ERANGE" "," "OSERR" ","
369 "35" "," "EDEADLK" "," "OSERR" ","
370 "36" "," "ENAMETOOLONG" "," "OSERR" ","
371 "37" "," "ENOLCK" "," "OSERR" ","
372 "38" "," "ENOSYS" "," "OSERR" ","
373 "39" "," "ENOTEMPTY" "," "OSERR" ","
374 "40" "," "ELOOP" "," "OSERR" ","
375 "42" "," "ENOMSG" "," "OSERR" ","
376 "43" "," "EIDRM" "," "OSERR" "," )
377#if !defined(__APPLE__)
378 A_CHAR("44" "," "ECHRNG" "," "OSERR" ","
379 "45" "," "EL2NSYNC" "," "OSERR" ","
380 "46" "," "EL3HLT" "," "OSERR" ","
381 "47" "," "EL3RST" "," "OSERR" ","
382 "48" "," "ELNRNG" "," "OSERR" ","
383 "49" "," "EUNATCH" "," "OSERR" ","
384 "50" "," "ENOCSI" "," "OSERR" ","
385 "51" "," "EL2HLT" "," "OSERR" ","
386 "52" "," "EBADE" "," "OSERR" ","
387 "53" "," "EBADR" "," "OSERR" ","
388 "54" "," "EXFULL" "," "OSERR" ","
389 "55" "," "ENOANO" "," "OSERR" ","
390 "56" "," "EBADRQC" "," "OSERR" ","
391 "57" "," "EBADSLT" "," "OSERR" ","
392 "59" "," "EBFONT" "," "OSERR" ",")
393#endif
394 A_CHAR("60" "," "ENOSTR" "," "OSERR" ","
395 "61" "," "ENODATA" "," "OSERR" ","
396 "62" "," "ETIME" "," "OSERR" ","
397 "63" "," "ENOSR" "," "OSERR" ",")
398#if !defined(__APPLE__)
399 A_CHAR("64" "," "ENONET" "," "OSERR" ","
400 "65" "," "ENOPKG" "," "OSERR" ",")
401#endif
402 A_CHAR("66" "," "EREMOTE" "," "OSERR" ","
403 "67" "," "ENOLINK" "," "OSERR" ",")
404#if !defined(__APPLE__)
405 A_CHAR("68" "," "EADV" "," "OSERR" ","
406 "69" "," "ESRMNT" "," "OSERR" ","
407 "70" "," "ECOMM" "," "OSERR" ",")
408#endif
409 A_CHAR("71" "," "EPROTO" "," "OSERR" ","
410 "72" "," "EMULTIHOP" "," "OSERR" ",")
411#if !defined(__APPLE__)
412 A_CHAR("73" "," "EDOTDOT" "," "OSERR" ",")
413#endif
414 A_CHAR("74" "," "EBADMSG" "," "OSERR" ","
415 "75" "," "EOVERFLOW" "," "OSERR" ",")
416#if !defined(__APPLE__)
417 A_CHAR("76" "," "ENOTUNIQ" "," "OSERR" ","
418 "77" "," "EBADFD" "," "OSERR" ","
419 "78" "," "EREMCHG" "," "OSERR" ","
420 "79" "," "ELIBACC" "," "OSERR" ","
421 "80" "," "ELIBBAD" "," "OSERR" ","
422 "81" "," "ELIBSCN" "," "OSERR" ","
423 "82" "," "ELIBMAX" "," "OSERR" ","
424 "83" "," "ELIBEXEC" "," "OSERR" ",")
425#endif
426 A_CHAR("84" "," "EILSEQ" "," "OSERR" ",")
427#if !defined(__APPLE__)
428 A_CHAR("85" "," "ERESTART" "," "OSERR" ","
429 "86" "," "ESTRPIPE" "," "OSERR" ",")
430#endif
431 A_CHAR("87" "," "EUSERS" "," "OSERR" ","
432 "88" "," "ENOTSOCK" "," "OSERR" ","
433 "89" "," "EDESTADDRREQ" "," "OSERR" ","
434 "90" "," "EMSGSIZE" "," "OSERR" ","
435 "91" "," "EPROTOTYPE" "," "OSERR" ","
436 "92" "," "ENOPROTOOPT" "," "OSERR" ","
437 "93" "," "EPROTONOSUPPORT" "," "OSERR" ","
438 "94" "," "ESOCKTNOSUPPORT" "," "OSERR" ","
439 "95" "," "EOPNOTSUPP" "," "OSERR" ","
440 "96" "," "EPFNOSUPPORT" "," "OSERR" ","
441 "97" "," "EAFNOSUPPORT" "," "OSERR" ","
442 "98" "," "EADDRINUSE" "," "OSERR" ","
443 "99" "," "EADDRNOTAVAIL" "," "OSERR" ","
444 "100" "," "ENETDOWN" "," "OSERR" ","
445 "101" "," "ENETUNREACH" "," "OSERR" ","
446 "102" "," "ENETRESET" "," "OSERR" ","
447 "103" "," "ECONNABORTED" "," "OSERR" ","
448 "104" "," "ECONNRESET" "," "OSERR" ","
449 "105" "," "ENOBUFS" "," "OSERR" ","
450 "106" "," "EISCONN" "," "OSERR" ","
451 "107" "," "ENOTCONN" "," "OSERR" ","
452 "108" "," "ESHUTDOWN" "," "OSERR" ","
453 "109" "," "ETOOMANYREFS" "," "OSERR" ","
454 "110" "," "ETIMEDOUT" "," "OSERR" ","
455 "111" "," "ECONNREFUSED" "," "OSERR" ","
456 "112" "," "EHOSTDOWN" "," "OSERR" ","
457 "113" "," "EHOSTUNREACH" "," "OSERR" ","
458 "114" "," "EALREADY" "," "OSERR" ","
459 "115" "," "EINPROGRESS" "," "OSERR" ","
460 "116" "," "ESTALE" "," "OSERR" "," )
461#if !defined(__APPLE__)
462 A_CHAR("117" "," "EUCLEAN" "," "OSERR" ","
463 "118" "," "ENOTNAM" "," "OSERR" ","
464 "119" "," "ENAVAIL" "," "OSERR" ","
465 "120" "," "EISNAM" "," "OSERR" ","
466 "121" "," "EREMOTEIO" "," "OSERR" "," )
467#endif
468 A_CHAR("122" "," "EDQUOT" "," "OSERR" "," )
469#if !defined(__APPLE__)
470 A_CHAR("123" "," "ENOMEDIUM" "," "OSERR" ","
471 "124" "," "EMEDIUMTYPE" "," "OSERR" "," )
472#endif
473 A_CHAR("125" "," "ECANCELED" "," "OSERR" "," )
474#if !defined(__APPLE__)
475 A_CHAR("126" "," "ENOKEY" "," "OSERR" ","
476 "127" "," "EKEYEXPIRED" "," "OSERR" ","
477 "128" "," "EKEYREVOKED" "," "OSERR" ","
478 "129" "," "EKEYREJECTED" "," "OSERR" "," )
479#endif
480 A_CHAR("130" "," "EOWNERDEAD" "," "OSERR" ","
481 "131" "," "ENOTRECOVERABLE" "," "OSERR" )
482#if !defined(__APPLE__)
483 A_CHAR( ","
484 "132" "," "ERFKILL" "," "OSERR" ","
485 "133" "," "EHWPOISON" "," "OSERR" )
486#endif
487 EOS
488
489#elif defined(_WIN32)
490 A_CHAR( "1" "," "EPERM" "," "OSERR" ","
491 "2" "," "ENOENT" "," "OSERR" ","
492 "3" "," "ESRCH" "," "OSERR" ","
493 "4" "," "EINTR" "," "OSERR" ","
494 "5" "," "EIO" "," "OSERR" ","
495 "6" "," "ENXIO" "," "OSERR" ","
496 "7" "," "E2BIG" "," "OSERR" ","
497 "8" "," "ENOEXEC" "," "OSERR" ","
498 "9" "," "EBADF" "," "OSERR" ","
499 "10" "," "ECHILD" "," "OSERR" ","
500 "11" "," "EAGAIN" "," "OSERR" ","
501 "12" "," "ENOMEM" "," "OSERR" ","
502 "13" "," "EACCES" "," "OSERR" ","
503 "14" "," "EFAULT" "," "OSERR" ","
504 "16" "," "EBUSY" "," "OSERR" ","
505 "17" "," "EEXIST" "," "OSERR" ","
506 "18" "," "EXDEV" "," "OSERR" ","
507 "19" "," "ENODEV" "," "OSERR" ","
508 "20" "," "ENOTDIR" "," "OSERR" ","
509 "21" "," "EISDIR" "," "OSERR" ","
510 "23" "," "ENFILE" "," "OSERR" ","
511 "24" "," "EMFILE" "," "OSERR" ","
512 "25" "," "ENOTTY" "," "OSERR" ","
513 "27" "," "EFBIG" "," "OSERR" ","
514 "28" "," "ENOSPC" "," "OSERR" ","
515 "29" "," "ESPIPE" "," "OSERR" ","
516 "30" "," "EROFS" "," "OSERR" ","
517 "31" "," "EMLINK" "," "OSERR" ","
518 "32" "," "EPIPE" "," "OSERR" ","
519 "33" "," "EDOM" "," "OSERR" ","
520 "36" "," "EDEADLK" "," "OSERR" ","
521 "38" "," "ENAMETOOLONG" "," "OSERR" ","
522 "39" "," "ENOLCK" "," "OSERR" ","
523 "40" "," "ENOSYS" "," "OSERR" ","
524 "41" "," "ENOTEMPTY" "," "OSERR" ","
525 "22" "," "EINVAL" "," "OSERR" ","
526 "34" "," "ERANGE" "," "OSERR" ","
527 "42" "," "EILSEQ" "," "OSERR" ","
528 "80" "," "STRUNCATE" "," "OSERR" ","
529 "100" "," "EADDRINUSE" "," "OSERR" ","
530 "101" "," "EADDRNOTAVAIL" "," "OSERR" ","
531 "102" "," "EAFNOSUPPORT" "," "OSERR" ","
532 "103" "," "EALREADY" "," "OSERR" ","
533 "104" "," "EBADMSG" "," "OSERR" ","
534 "105" "," "ECANCELED" "," "OSERR" ","
535 "106" "," "ECONNABORTED" "," "OSERR" ","
536 "107" "," "ECONNREFUSED" "," "OSERR" ","
537 "108" "," "ECONNRESET" "," "OSERR" ","
538 "109" "," "EDESTADDRREQ" "," "OSERR" ","
539 "110" "," "EHOSTUNREACH" "," "OSERR" ","
540 "111" "," "EIDRM" "," "OSERR" ","
541 "112" "," "EINPROGRESS" "," "OSERR" ","
542 "113" "," "EISCONN" "," "OSERR" ","
543 "114" "," "ELOOP" "," "OSERR" ","
544 "115" "," "EMSGSIZE" "," "OSERR" ","
545 "116" "," "ENETDOWN" "," "OSERR" ","
546 "117" "," "ENETRESET" "," "OSERR" ","
547 "118" "," "ENETUNREACH" "," "OSERR" ","
548 "119" "," "ENOBUFS" "," "OSERR" ","
549 "120" "," "ENODATA" "," "OSERR" ","
550 "121" "," "ENOLINK" "," "OSERR" ","
551 "122" "," "ENOMSG" "," "OSERR" ","
552 "123" "," "ENOPROTOOPT" "," "OSERR" ","
553 "124" "," "ENOSR" "," "OSERR" ","
554 "125" "," "ENOSTR" "," "OSERR" ","
555 "126" "," "ENOTCONN" "," "OSERR" ","
556 "127" "," "ENOTRECOVERABLE" "," "OSERR" ","
557 "128" "," "ENOTSOCK" "," "OSERR" ","
558 "129" "," "ENOTSUP" "," "OSERR" ","
559 "130" "," "EOPNOTSUPP" "," "OSERR" ","
560 "131" "," "EOTHER" "," "OSERR" ","
561 "132" "," "EOVERFLOW" "," "OSERR" ","
562 "133" "," "EOWNERDEAD" "," "OSERR" ","
563 "134" "," "EPROTO" "," "OSERR" ","
564 "135" "," "EPROTONOSUPPORT" "," "OSERR" ","
565 "136" "," "EPROTOTYPE" "," "OSERR" ","
566 "137" "," "ETIME" "," "OSERR" ","
567 "138" "," "ETIMEDOUT" "," "OSERR" ","
568 "139" "," "ETXTBSY" "," "OSERR" ","
569 "140" "," "EWOULDBLOCK" "," "OSERR" ) EOS
570#endif // #elif defined(_WIN32)
571
572// ----------------------------------- module exceptions ------------------------------------
573 "ExcFmtExc", A_CHAR("\nAn exception occurred while formatting another (!) exception:\n" ),
574
575// ----------------------------------- module format ------------------------------------
576 "PHT", A_CHAR( "0,NotGiven" ",1,"
577 "1,String" ",1,"
578 "2,Character" ",1,"
579 "3,IntBase10" ",6,"
580 "4,IntBinary" ",6,"
581 "5,IntOctal" ",6,"
582 "6,IntHex" ",6,"
583 "7,Float" ",1,"
584 "8,Bool" ",1,"
585 "9,HashCode" ",1,"
586 "10,Fill" ",4" ) ,
587
588
589 "FE<", A_CHAR("format::"),
590// general formatter errors
591
592 "FE0" , A_CHAR( "11,ArgumentIndexIs0" ",FMG11" ),
593 "FE1" , A_CHAR( "12,ArgumentIndexOutOfBounds" ",FMG12" ),
594 "FE2" , A_CHAR( "13,IncompatibleTypeCode" ",FMG13" ),
595
596 // Formatter Python Style
597 "FE3" , A_CHAR( "101,MissingClosingBracket" ",FPS101" ),
598 "FE4" , A_CHAR( "102,MissingPrecisionValuePS" ",FPS102" ),
599 "FE5" , A_CHAR( "103,DuplicateTypeCode" ",FPS103" ),
600 "FE6" , A_CHAR( "104,UnknownTypeCode" ",FPS104" ),
601 "FE7" , A_CHAR( "105,ExclamationMarkExpected" ",FPS105" ),
602 "FE8" , A_CHAR( "106,UnknownConversionPS" ",FPS106" ),
603 "FE9" , A_CHAR( "107,PrecisionSpecificationWithInteger" ",FPS107" ),
604 "FE10", A_CHAR( "108,MissingReplacementStrings" ",FPS108" ),
605
606 // Formatter Java Style
607 "FE11" , A_CHAR( "201,NegativeValuesInBracketsNotSupported" ",FJS101" ),
608 "FE12" , A_CHAR( "202,MissingPrecisionValueJS" ",FJS102" ),
609 "FE13" , A_CHAR( "203,HexadecimalFloatFormatNotSupported" ",FJS103" ),
610 "FE14" , A_CHAR( "204,NoAlternateFormOfConversion" ",FJS104" ),
611 "FE15" , A_CHAR( "205,NoPrecisionWithConversion" ",FJS105" ),
612 "FE16" , A_CHAR( "206,UnknownDateTimeConversionSuffix" ",FJS106" ),
613 "FE17" , A_CHAR( "207,UnknownConversionJS" ",FJS107" ),
614
615 // PropertyFormatter and PropertyFormatters
616 "FE18" , A_CHAR( "501,UnknownPropertyInFormatString" ",PFM501" ),
617 "FE19" , A_CHAR( "502,ErrorInResultingFormatString" ",PFM502" ),
618 "FE20" , A_CHAR( "510,MissingConfigurationVariable" ",PFM510" ),
619
620 // class Paragraphs
621 "FE21" , A_CHAR( "601,UnknownMarker" ",ST601" ),
622 "FE22" , A_CHAR( "602,EndmarkerWithoutStart" ",ST602" ),
623
624 // general formatter errors
625 "FMG11" , A_CHAR( "Argument index 0 not allowed.\n"
626 "In: {!Q}\n >{!FillC-}^" ),
627 "FMG12" , A_CHAR( "Argument index #{} is out of bounds. {} arguments are available.\n"
628 "In: {!Q}\n >{!FillC-}^" ),
629 "FMG13" , A_CHAR( "Detected placeholder type does not match given argument.\n"
630 "Placeholder number: {}\n"
631 "Placeholder type: {} ({})\n" )
632 "Deduced argument type: {!Q}\n"
633 ALIB_REL_DBG( A_CHAR( "{!X}") ,
634 A_CHAR( "Native argument type: <{}>\n" )
635 "In: {!Q}\n >{!FillC-}^" ),
636
637 // Formatter Python Style
638 "FPS101" , A_CHAR( "Closing bracket '}}' of placeholder not found (or syntax error).\n"
639 "In: {!Q}\n >{!FillC-}^" ),
640 //...
641 //...
642 //...
643 "FPS102" , A_CHAR( "Missing precision value after '.' character."
644 "\nIn: {!Q}\n >{!FillC-}^" ),
645 "FPS103" , A_CHAR( "Duplicate type code {!Q'} given (previous was {!Q'})."
646 ALIB_REL_DBG( A_CHAR( "{!X}") , A_CHAR( "\nNative argument type: <{}> ") )
647 "\nIn: {!Q}\n >{!FillC-}^" ),
648 "FPS104" , A_CHAR( "Unknown type code {!Q'} given."
649 "\nIn: {!Q}\n >{!FillC-}^" )
650 ALIB_REL_DBG( A_CHAR( "{!X}") , A_CHAR( "\nNative argument type: <{}> ") ),
651 "FPS105" , A_CHAR( "Expected '!' in continuation of placeholder."
652 ALIB_REL_DBG( A_CHAR( "{!X}") , A_CHAR( "\nNative argument type: <{}> ") )
653 "\nIn: {!Q}\n >{!FillC-}^" ),
654 "FPS106" , A_CHAR( "Unknown conversion \"!{}\"."
655 ALIB_REL_DBG( A_CHAR( "{!X}") , A_CHAR( "\nNative argument type: <{}> ") )
656 "\nIn: {!Q}\n >{!FillC-}^" ),
657 "FPS107" , A_CHAR( "Precision not allowed with integer format."
658 ALIB_REL_DBG( A_CHAR( "{!X}") , A_CHAR( "\nNative argument type: <{}> ") )
659 "\nIn: {!Q}\n >{!FillC-}^" ),
660 "FPS108" , A_CHAR( "Missing pair of replacement strings \"<src><repl>\" after \"!Replace\"."
661 ALIB_REL_DBG( A_CHAR( "{!X}") , A_CHAR( "\nNative argument type: <{}> ") )
662 "\nIn: {!Q}\n >{!FillC-}^" ),
663
664
665 // Formatter Java Style
666 "FJS101" , A_CHAR( "Brackets for negative values not implemented/supported."
667 "\nIn: {!Q}\n >{!FillC-}^" ),
668 "FJS102" , A_CHAR( "Missing precision value after '.' character."
669 "\nIn: {!Q}\n >{!FillC-}^" ),
670 "FJS103" , A_CHAR( "Hexadecimal float format not implemented/supported."
671 "\nIn: {!Q}\n >{!FillC-}^" ),
672 "FJS104" , A_CHAR( "Alternate form '#' not supported with conversion {!Q}."
673 "\nIn: {!Q}\n >{!FillC-}^" ),
674 "FJS105" , A_CHAR( "Precision specification (\".{}\") is not supported with conversion {!Q}."
675 "\nIn: {!Q}\n >{!FillC-}^" ),
676 "FJS106" , A_CHAR( "Unknown date/time conversion suffix {!Q'}."
677 "\nIn: {!Q}\n >{!FillC-}^" ),
678 "FJS107" , A_CHAR( "Unknown conversion character {!Q'}."
679 "\nIn: {!Q}\n >{!FillC-}^" ),
680
681
682 // PropertyFormatter and PropertyFormatters
683 "PFM501" , A_CHAR( "Unknown property identifier \"{}{}\" in format string.\n"
684 "Format string: {!Q}.\n"
685 "Allowed identifiers: " ),
686 "PFM502" , A_CHAR( "Error in resulting format string.\nSource format: {!Q}." ),
687 "PFM510" , A_CHAR( "Missing or empty configuration variable {!Q} containing user-defined format string." ),
688
689 // class Paragraphs
690 "ST601" , A_CHAR( "Unknown marker at position {}.\n"
691 " Marked text: {!Q}.\n"
692 " >{!FillC-}^\n" ),
693 "ST602" , A_CHAR( "Found an end-marker without a start marker at position {}.\n"
694 " Marked text: {!Q}.\n"
695 " >{!FillC-}^\n" ),
696
697
698 "BS", A_CHAR( "0,B" ",3,"
699 "1,KiB" ",3,"
700 "2,MiB" ",3,"
701 "3,GiB" ",3,"
702 "4,TiB" ",3,"
703 "5,PiB" ",3,"
704 "6,EiB" ",3,"
705 "7,ZiB" ",3,"
706 "8,YiB" ",3,"
707 "9,RiB" ",3,"
708 "10,QiB" ",3,"
709 "11,B" ",1,"
710 "12,kB" ",2,"
711 "13,MB" ",2,"
712 "14,GB" ",2,"
713 "15,TB" ",2,"
714 "16,PB" ",2,"
715 "17,EB" ",2,"
716 "18,ZB" ",2,"
717 "19,YB" ",2,"
718 "20,RB" ",2,"
719 "21,QB" ",2" ) EOS
720
721 // end of BootstrapBulk()
722 nullptr );
723#endif // !ALIB_CAMP_OMIT_DEFAULT_RESOURCES
724
725 // CodeMarker_CommonEnums
726 enbs::Bootstrap<alib::lang::Alignment >( *this, "Alignment" );
727 enbs::Bootstrap<alib::lang::Bool >( *this, "Bool" );
728 enbs::Bootstrap<alib::lang::Caching >( *this, "Caching" );
729DOX_MARKER( [DOX_ENUMS_MAKE_PARSABLE_22] )
730 enbs::Bootstrap<alib::lang::Case>( *this, "Case" );
731DOX_MARKER( [DOX_ENUMS_MAKE_PARSABLE_22] )
732 enbs::Bootstrap<alib::lang::ContainerOp >( *this, "ContainerOp" );
735 enbs::Bootstrap<alib::lang::CurrentData >( *this, "CurrentData" );
736 enbs::Bootstrap<alib::lang::Inclusion >( *this, "Inclusion" );
737 enbs::Bootstrap<alib::lang::Initialization >( *this, "Initialization" );
738 enbs::Bootstrap<alib::lang::Phase >( *this, "Phase" );
739 enbs::Bootstrap<alib::lang::Propagation >( *this, "Propagation" );
740 enbs::Bootstrap<alib::lang::Reach >( *this, "Reach" );
742 enbs::Bootstrap<alib::lang::Responsibility >( *this, "Responsibility" );
743 enbs::Bootstrap<alib::lang::Safeness >( *this, "Safeness" );
744 enbs::Bootstrap<alib::lang::Side >( *this, "Side" );
745 enbs::Bootstrap<alib::lang::SortOrder >( *this, "SortOrder" );
746 enbs::Bootstrap<alib::lang::SourceData >( *this, "SourceData" );
747 enbs::Bootstrap<alib::lang::Switch >( *this, "Switch" );
748 enbs::Bootstrap<alib::lang::Timezone >( *this, "Timezone" );
749 enbs::Bootstrap<alib::lang::Timing >( *this, "Timing" );
750 enbs::Bootstrap<alib::lang::ValueReference >( *this, "ValueReference" );
751 enbs::Bootstrap<alib::lang::Whitespaces >( *this, "Whitespaces" );
752
756
757
760
761
762DOX_MARKER([DOX_VARIABLES_DECLARATION7])
764DOX_MARKER([DOX_VARIABLES_DECLARATION7])
765
767 enbs::Bootstrap<SystemFolders >( *this, "SF" );
771 }
772
774 {
775
776 // preload all variable with declarations (and without placeholders)
777 config->PreloadVariables<camp::Variables>();
778 }
779
781 {
782 Substring parser;
783 parser= GetResource( "Months" ); for( int i= 0 ; i < 12 ; ++i ) { CalendarDateTime::MONTH_NAMES[i]= parser.ConsumeToken(','); }
784 parser= GetResource( "Days" ); for( int i= 0 ; i < 7 ; ++i ) { CalendarDateTime:: DAY_NAMES[i]= parser.ConsumeToken(','); }
785
786 parser= GetResource( "DurUnts" );
787 for( int i= 0 ; i < int(DayTimeUnits::SIZE_OF_UNITS) ; ++i )
788 DT_UNITS[i]= parser.ConsumeToken(',');
789
790 ALIB_ASSERT( DT_UNITS[size_t(int(DayTimeUnits::SIZE_OF_UNITS)-1)].IsNotEmpty(), "BASECAMP" )
791 ALIB_ASSERT( parser.IsEmpty(), "BASECAMP" )
792
794 format::BYTESIZE_NUMBER_FORMAT->FractionalPartWidth= 1;
795
796 //############### set locale ###############
797 int receivedFrom= 0;
798 String256 locale;
799
800 Variable varLocale(*config, Variables::LOCALE);
801 if ( varLocale.IsDefined()
802 && varLocale.GetString().IsNotEmpty() )
803 {
804 receivedFrom= 1;
805 locale._( varLocale.GetString() );
806 }
807 else if ( EnvironmentVariables::Get( A_CHAR("LANG") ,locale ) ) receivedFrom= 2;
808 else if ( EnvironmentVariables::Get( A_CHAR("LANGUAGE") ,locale ) ) receivedFrom= 3;
809
810 if( receivedFrom > 0 && !locale.Equals<NC,lang::Case::Ignore>( A_CHAR("none") ) )
811 {
812 ALIB_STRINGS_TO_NARROW( locale, nLocale, 1024)
813 if( !setlocale(LC_ALL, nLocale ) )
814 {
815 NString256 msg( "ALib Error: setlocale(\""); msg << nLocale <<"\") failed. Setting read from ";
816 msg << ( receivedFrom == 1 ? "config variable 'ALIB_LOCALE'" :
817 receivedFrom == 2 ? "environment variable 'LANG'" :
818 receivedFrom == 3 ? "environment variable 'LANGUAGE'" : "ERROR" );
819
820 std::cerr.write( msg.Buffer(), msg.Length() );
821
822 std::cerr << ". Trying 'setlocale(LC_ALL, \"\")': ";
823 if ( setlocale(LC_ALL, "" ) )
824 std::cerr << " success.";
825 else
826 {
827 std::cerr << "failed. Trying 'setlocale(LC_ALL, \"C\")': ";
828 if ( setlocale(LC_ALL, "C" ) )
829 std::cerr << " success.";
830 else
831 std::cerr << std::endl << " Panic: No standard locale setting was successful!";
832 }
833 std::cerr << std::endl;
834 }
835 else
836 LocaleFound.Allocate( monomem::GLOBAL_ALLOCATOR, locale);
837 }
838
839 // set the system's locale as the default for our static default number format
840 #if ALIB_STRINGS
841 NumberFormat::Global.SetFromLocale();
842 NumberFormat::Global.Flags+= NumberFormatFlags::WriteGroupChars;
843 #endif
844
845
846 // --- determine if we have a console window ---
847 // read configuration
848 Variable varHasConsoleWindow(*config, Variables::HAS_CONSOLE_WINDOW );
849 if ( varHasConsoleWindow.IsDefined() )
850 HasConsoleWindow= varHasConsoleWindow;
851 else
852 {
853 #if defined(_WIN32)
854 // determine if we have a console window
855 HasConsoleWindow= GetConsoleWindow() != NULL;
856 #else
857 HasConsoleWindow= true;
858 #endif
859 (void) varHasConsoleWindow.Define();
860 varHasConsoleWindow= HasConsoleWindow;
861 }
862
863 // --- determine if we want to wait for a keypress upon termination ---
864 Variable varWaitForKeyPress(*config, Variables::WAIT_FOR_KEY_PRESS );
865 if ( varWaitForKeyPress.IsDefined() )
866 WaitForKeyPressOnTermination= varWaitForKeyPress;
867 else
868 {
869 #if defined(_WIN32) && ALIB_DEBUG
872 #else
874 #endif
875 (void) varWaitForKeyPress.Define();
876 varWaitForKeyPress= WaitForKeyPressOnTermination;
877 }
878 }
879}
880
882{
883 if( phase == ShutdownPhases::Announce )
884 return;
885
886 // ShutdownPhases::Destruct:
887 if ( BASECAMP.WaitForKeyPressOnTermination )
888 {
889 #if defined(_WIN32)
890 OutputDebugStringA( "\r\nALIB: Waiting for 'Enter' key in the console window.\r\n" );
891 #endif
892
893 std::cout << std::endl << GetResource("EXIT_MSG") << std::endl;
894 while ( getchar() != '\n' )
895 ;
896 }
897
898 // alib/lang/message
899 #if ALIB_DEBUG
900 assert::PLUGIN= nullptr;
901 #endif
902}
903
904// #############################################################################################
905// Environment definition/detection
906// #############################################################################################
907
908//! @cond NO_DOX
909 #if defined(__unix__) || defined(__APPLE__)
910 namespace {
911 String DebuggerProcessNames= A_CHAR("gdb|debugserver");
912 }
913 #endif
914//! @endcond
915
917 {
918 #if defined(__unix__) || defined(__APPLE__)
919
920 // Unix: search debugger process in parent processes
922 uinteger parentPID= pi.PPID;
923 if ( parentPID == 0 )
924 return false;
925
926 ProcessInfo actPI( parentPID );
927 Tokenizer tknzr( DebuggerProcessNames, '|' );
928 while(tknzr.HasNext() )
929 {
930 Substring& debuggerName= tknzr.Next();
931 if (actPI.Name.StartsWith( debuggerName ) )
932 return true;
933 }
934 return false;
935
936 #elif defined(_WIN32)
937
938 return (bool) ( ::IsDebuggerPresent() != 0 ) ;
939
940 #else
941 #pragma message ("Unknown Platform in file: " __FILE__ )
942 return false;
943 #endif
944 }
945
946
947} // namespace [alib::camp]
948
949
950
951
ALIB_DLL bool IsDebuggerPresent()
Definition basecamp.cpp:916
bool WaitForKeyPressOnTermination
Definition basecamp.mpp:117
virtual ALIB_DLL void Bootstrap() override
Definition basecamp.cpp:97
ALIB_DLL Basecamp()
Definition basecamp.cpp:87
virtual ALIB_DLL void Shutdown(ShutdownPhases phase) override
Definition basecamp.cpp:881
NCString ResourceCategory
Definition camp.inl:113
BootstrapPhases GetBootstrapState()
Definition camp.inl:176
SharedConfiguration config
Definition camp.inl:104
Camp(const NCString &resourceCategory)
Definition camp.inl:120
SPResourcePool resourcePool
Definition camp.inl:95
const String & GetResource(const NString &name)
Definition camp.inl:265
TAString & _(const TAppendable &src)
constexpr integer Length() const
Definition string.inl:318
constexpr bool IsEmpty() const
Definition string.inl:367
constexpr bool IsNotEmpty() const
Definition string.inl:371
constexpr const TChar * Buffer() const
Definition string.inl:313
bool Equals(const TString< TChar > &rhs) const
Definition string.inl:541
bool StartsWith(const TString &needle) const
Definition string.inl:772
TString< TChar > ConsumeToken(TChar separator=',', lang::Inclusion includeSeparator=lang::Inclusion::Include)
static ALIB_DLL String MONTH_NAMES[12]
Definition calendar.inl:39
ALIB_DLL TSubstring< TChar > & Next(lang::Whitespaces trimming=lang::Whitespaces::Trim, TChar newDelim='\0')
Definition tokenizer.cpp:26
uinteger PPID
The parent's process id as AString. (Unix like OS / Mac OS only.)
static ALIB_DLL const ProcessInfo & Current()
ALIB_DLL bool Define(Priority requestedPriority=Priority::Standard)
Definition variable.cpp:280
#define IF_ALIB_THREADS(...)
Definition alib.inl:401
#define A_CHAR(STR)
#define ALIB_ASSERT(cond, domain)
Definition alib.inl:1048
#define ALIB_STRINGS_TO_NARROW( src, dest, bufSize)
#define IF_ALIB_BITBUFFER(...)
Definition alib.inl:265
#define IF_ALIB_THREADMODEL(...)
Definition alib.inl:393
#define ALIB_ASSERT_ERROR(cond, domain,...)
Definition alib.inl:1049
#define ALIB_REL_DBG(releaseCode,...)
Definition alib.inl:838
#define ALIB_ENUMRECORDS
Definition alib.inl:234
#define ALIB_THREADMODEL
Definition alib.inl:240
#define ALIB_BITBUFFER
Definition alib.inl:224
#define ALIB_SINGLE_THREADED
Definition prepro.md:22
void(* PLUGIN)(const CallerInfo &ci, int type, std::string_view domain, std::string_view msg)
Definition assert.cpp:172
@ HAS_CONSOLE_WINDOW
See ALIB/HAS_CONSOLE_WINDOW.
Definition basecamp.mpp:94
@ LOCALE
See ALIB/LOCALE.
Definition basecamp.mpp:92
@ WAIT_FOR_KEY_PRESS
See ALIB/WAIT_FOR_KEY_PRESS.
Definition basecamp.mpp:93
void Bootstrap(camp::Camp &camp, const NString &name, character innerDelim=',', character outerDelim=',')
Definition camp.inl:329
NumberFormat * BYTESIZE_NUMBER_FORMAT
ALIB_DLL TMonoAllocator< lang::HeapAllocator > GLOBAL_ALLOCATOR
LocalString< 256 > String256
Type alias name for TLocalString<character,256>.
@ Final
The final initialization phase. Here, camps are initializing their custom setup.
Definition camp.inl:35
strings::util::TTokenizer< character > Tokenizer
Type alias in namespace alib.
variables::Variable Variable
Type alias in namespace alib.
camp::Basecamp BASECAMP
The singleton instance of ALib Camp class Basecamp.
Definition basecamp.cpp:81
ShutdownPhases
Termination levels usable with Bootstrapping ALib Camps.
Definition camp.inl:42
strings::TNumberFormat< character > NumberFormat
Type alias in namespace alib.
system::ProcessInfo ProcessInfo
Type alias in namespace alib.
strings::TString< character > String
Type alias in namespace alib.
Definition string.inl:2381
NLocalString< 256 > NString256
Type alias name for TLocalString<nchar,256>.
lang::uinteger uinteger
Type alias in namespace alib.
Definition integers.inl:152
strings::TSubstring< character > Substring
Type alias in namespace alib.
static ALIB_DLL bool Get(const CString &varName, AString &target, lang::CurrentData targetData=lang::CurrentData::Clear)