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