//This file was generated by the LASAL2 CodeGenerator  -- 
//Please, do not edit this file (it might be overwritten by the next generator run)
//{{LSL_DECLARATION
#include "..\..\Class\SigCLib\SigCLib.h"
#include "..\..\Class\SigCLib\SigCLibKey.h"

(*!
<Class
	Name               = "SigCLib"
	Revision           = "0.42"
	GUID               = "{69ACC408-CE36-4693-9B67-22204E53942F}"
	RealtimeTask       = "false"
	CyclicTask         = "false"
	BackgroundTask     = "false"
	Sigmatek           = "true"
	OSInterface        = "true"
	HighPriority       = "false"
	Automatic          = "false"
	UpdateMode         = "Prescan"
	IconPath           = ".\Class\SigCLib\SigCLib.ico"
	SharedCommandTable = "true"
	Objectsize         = "(284,120)"
	Comment            = "libraryfunctions like memcpy, memmove, memcmp, strcpy, strcmp, strcat, etc. are enclosed to this class...&#13;&#10;">
	<Channels>
		<Server Name="ClassSvr" GUID="{D6FE9918-64B5-4BE5-B9D4-B221DE25BB94}" Visualized="false" Initialize="false" WriteProtected="true" Retentive="false"/>
	</Channels>
	<Dependencies>
		<Files>
			<File Path=".\Class\SigCLib\SigCLib.h" Include="true"/>
			<File Path=".\Class\SigCLib\SigCLibNew.h" Include="false"/>
			<File Path=".\Class\SigCLib\SigCLibKey.h" Include="true"/>
			<File Path=".\Class\SigCLib\DefineCompiler.h" Include="false"/>
			<File Path=".\Class\SigCLib\CAtomic.h" Include="false"/>
			<File Path=".\Class\SigCLib\CAtomic.cpp"/>
			<File Path=".\Class\SigCLib\CCrcLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CCrcLib.cpp"/>
			<File Path=".\Class\SigCLib\CDeEncode.h" Include="false"/>
			<File Path=".\Class\SigCLib\CDeEncode.cpp"/>
			<File Path=".\Class\SigCLib\CFiFo.h" Include="false"/>
			<File Path=".\Class\SigCLib\CFiFo.cpp"/>
			<File Path=".\Class\SigCLib\CFileLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CFileLib.cpp"/>
			<File Path=".\Class\SigCLib\CMathLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CMathLib.cpp"/>
			<File Path=".\Class\SigCLib\CMemLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CMemLib.cpp"/>
			<File Path=".\Class\SigCLib\CNetworkLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CNetworkLib.cpp"/>
			<File Path=".\Class\SigCLib\CPipe.h" Include="false"/>
			<File Path=".\Class\SigCLib\CPipe.cpp"/>
			<File Path=".\Class\SigCLib\CPlcOnline.h" Include="false"/>
			<File Path=".\Class\SigCLib\CPlcOnline.cpp"/>
			<File Path=".\Class\SigCLib\CRingBuffer.h" Include="false"/>
			<File Path=".\Class\SigCLib\CRingBuffer.cpp"/>
			<File Path=".\Class\SigCLib\CSortLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CSortLib.cpp"/>
			<File Path=".\Class\SigCLib\CStdLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CStdLib.cpp"/>
			<File Path=".\Class\SigCLib\CStrLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CStrLibIntern.h" Include="false"/>
			<File Path=".\Class\SigCLib\CStrLib.cpp"/>
			<File Path=".\Class\SigCLib\CStrLibEx.cpp"/>
			<File Path=".\Class\SigCLib\CStrScn.cpp"/>
			<File Path=".\Class\SigCLib\CStrLib16.h" Include="false"/>
			<File Path=".\Class\SigCLib\CStrLib16.cpp"/>
			<File Path=".\Class\SigCLib\CSysLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CSysLib.cpp"/>
			<File Path=".\Class\SigCLib\CTcpIp.h" Include="false"/>
			<File Path=".\Class\SigCLib\CTimeLib.h" Include="false"/>
			<File Path=".\Class\SigCLib\CTimeLib.cpp"/>
			<File Path=".\Class\SigCLib\CHeap.h" Include="false"/>
			<File Path=".\Class\SigCLib\CHeap.cpp"/>
			<File Path=".\Class\SigCLib\CLimits.h" Include="false"/>
			<File Path=".\Class\SigCLib\cObjLib.lba"/>
			<File Path=".\Class\SigCLib\cObjLib.lob"/>
		</Files>
	</Dependencies>
	<RevDoku>
		<Owner Company="sigmatek" Author="kolott"/>
		<Dokumentation Revision="0.42" Date="2024-16-05" Author="kolott" Company="sigmatek" Description="New functions added:&#13;&#10;   sigclib_heap_get_blocksize() (opsys-projekt: 02723)&#13;&#10;Miscellaneous:&#13;&#10;   SA75187: Internal changes in CTimeLib.cpp and CPlcOnline.cpp due to generated warnings when using compiler-optimization"/>
		<Dokumentation Revision="0.41" Date="2024-03-05" Author="kolott" Company="sigmatek" Description="New functions added:&#13;&#10;  sigclib_cfprintf(), sigclib_string_to_date(), sigclib_file_iterator()&#13;&#10;  sigclib_logfileline_datim(), sigclib_logfile_datimST()&#13;&#10;  sigclib_fexist()&#13;&#10;Miscellaneous:&#13;&#10;  sigclib_encode_bin() and sigclib_decode_bin() will have a second 32-bit-key&#13;&#10;  printf() and sprintf() in c-file will work when #include &quot;SigCLibNew.h&quot; is implemented&#13;&#10;  8D-10170: changes in function sigclib_thread_create() and sigclib_thread_create2() to ensure compatibility to WA032 or other old OpSys"/>
		<Dokumentation Revision="0.40" Date="2023-14-04" Author="kolott" Company="sigmatek" Description="Correction:&#13;&#10;  8D-7859: Correction of function sigclib_mktime(), sigclib_lasal_to_date(), sigclib_lasal_to_time()"/>
		<Dokumentation Revision="0.39" Date="2023-01-10" Author="kolott" Company="sigmatek" Description="Correction:&#13;&#10;   8D-6608: function sigclib_strtod(), method StrToLREAL() will work with more than 9 places after decimalpoint&#13;&#10;   Returncode of function sigclib_cfseek() has changed datatype from udint to dint&#13;&#10;New functions added:&#13;&#10;   sigclib_strend(), sigclib_striend(), sigclib_strstart(), sigclib_stristart()"/>
		<Dokumentation Revision="0.38" Date="2022-07-04" Author="kolott" Company="sigmatek" Description="Speedup function sigclib_memmove() and sigclib_memcpyrev()&#13;&#10;New functions added:&#13;&#10;   sigclib_strcutat(), sigclib_strcutatlast(), sigclib_get_serialnumber_volume(), sigclib_get_serialnumber_plc(), sigclib_crc32_alternativ(), &#13;&#10;   sigclib_sigmatek_class(), sigclib_sigmatek_obj(),&#13;&#10;   sigclib_rolU32(), sigclib_rorU32(), sigclib_rolU16(), sigclib_rorU16(), sigclib_rolU08(), sigclib_rorU08()"/>
		<Dokumentation Revision="0.37" Date="2021-09-20" Author="kolott" Company="sigmatek" Description="New functions added (8D-3475):&#13;&#10;   sigclib_randomU32(), sigclib_randomF32(), sigclib_srandom()&#13;&#10;   sigclib_setenvvar(), sigclib_getenvvar()&#13;&#10;   sigclib_isxdigit(), sigclib_isspace(), sigclib_ispunct(), sigclib_isalnum(), sigclib_isalpha(), sigclib_isprint()&#13;&#10;   sigclib_qsort_ex(), sigclib_bsearch_ex(), sigclib_bsearch_index_ex()&#13;&#10;   sigclib_timeU32(), sigclib_gmtimeU32(), sigclib_timegmU32(), sigclib_time64(), sigclib_gmtime64(), sigclib_timegm64()&#13;&#10;   sigclib_strlcpy(), sigclib_strlcat(), sigclib_sscanf(), sigclib_sscanfST()"/>
		<Dokumentation Revision="0.36" Date="2021-06-28" Author="kolott" Company="sigmatek" Description="New functions added (8D-2047):&#13;&#10;   sigclib_atomic_andU32(), sigclib_atomic_andS32(), sigclib_atomic_nandU32(), sigclib_atomic_nandS32(), &#13;&#10;   sigclib_atomic_orU32(), sigclib_atomic_orS32(), sigclib_atomic_xorU32(), sigclib_atomic_xorS32(),&#13;&#10;   sigclib_strtok_r(), sigclib_get_attributes()&#13;&#10;New macros added (8D-2047):&#13;&#10;   sigclib_atomic_add_and_fetchU32(), sigclib_atomic_add_and_fetchS32()&#13;&#10;   sigclib_atomic_sub_and_fetchU32(), sigclib_atomic_sub_and_fetchS32()&#13;&#10;   sigclib_atomic_and_and_fetchU32(), sigclib_atomic_and_and_fetchS32()&#13;&#10;   sigclib_atomic_or_and_fetchU32(), sigclib_atomic_or_and_fetchS32()&#13;&#10;   sigclib_atomic_xor_and_fetchU32(), sigclib_atomic_xor_and_fetchS32()&#13;&#10;   sigclib_atomic_nand_and_fetchU32(), sigclib_atomic_nand_and_fetchS32()&#13;&#10;   sigclib_atomic_fetch_and_addU32(), sigclib_atomic_fetch_and_addS32()&#13;&#10;   sigclib_atomic_fetch_and_subU32(), sigclib_atomic_fetch_and_subS32()&#13;&#10;   sigclib_atomic_fetch_and_andU32(), sigclib_atomic_fetch_and_andS32()&#13;&#10;   sigclib_atomic_fetch_and_orU32(), sigclib_atomic_fetch_and_orS32()&#13;&#10;   sigclib_atomic_fetch_and_xorU32(), sigclib_atomic_fetch_and_xorS32()&#13;&#10;   sigclib_atomic_fetch_and_nandU32(), sigclib_atomic_fetch_and_nandS32()&#13;&#10;   sigclib_atomic_bool_compare_and_swapU32(), sigclib_atomic_bool_compare_and_swapS32()"/>
		<Dokumentation Revision="0.35" Date="2021-03-05" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;   sigclib_uitoa(), sigclib_lltoa(), sigclib_ulltoa(), sigclib_is_linux(), sigclib_is_gecko()&#13;&#10;* Function sigclib_sprintfST() will work with value of type _int64 and _uint64 as well (&quot;%v8&quot;and &quot;%V8&quot;)&#13;&#10;* 8D-1981: sigclib_atomic_swpU32() and sigclib_atomic_swpS32() changed because of deprecated command SWP at ARM-processor&#13;&#10;* 8D-2112: Internal of function sigclib_rand() changed to avoid previous periodic random values"/>
		<Dokumentation Revision="0.34" Date="2020-10-02" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;  sigclib_is_lars(), sigclib_tabsolute_nonzero()&#13;&#10;  sigclib_ascii_to_utf8_len(), sigclib_str16_to_utf8_len(), sigclib_utf8_to_ascii_len(), sigclib_utf8_to_str16_len()&#13;&#10;* sigclib_cfopen() will work with state &apos;a&apos; and &apos;A&apos; (create new or append existing) as well"/>
		<Dokumentation Revision="0.33" Date="2020-10-02" Author="kolott" Company="sigmatek" Description="* New function added&#13;&#10;  sigclib_gmtime_threadsafe()&#13;&#10;* Method UnixTimeStampConvert() done threadsafe"/>
		<Dokumentation Revision="0.32" Date="2020-04-15" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;  sigclib_strcpytill16(), sigclib_strrchr16() &#13;&#10;  sigclib_fputs16(), sigclib_fgets16(), sigclib_fwrite_crlf16(), sigclib_fwrite_crlf()&#13;&#10;  sigclib_cfputs16(), sigclib_cfgets16(), sigclib_cfwrite_crlf16()&#13;&#10;  sigclib_strlen_ex(), sigclib_strcpy_ex(), sigclib_strcat_ex(), sigclib_strcmp_ex()"/>
		<Dokumentation Revision="0.31" Date="2020-01-20" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;   sigclib_utf8_to_utf16(), sigclib_utf16_to_utf8()&#13;&#10;   sigclib_tcp_shutdown(), sigclib_tcp_select(), sigclib_tcp_recvfrom(), sigclib_tcp_sendto(), sigclib_tcp_getlinkstatus()&#13;&#10;   sigclib_udp_socket_open(), sigclib_udp_bind()&#13;&#10;   sigclib_thread_delay_us(), sigclib_waste_us()&#13;&#10;   sigclib_cfwrite_crlf(), sigclib_cflength()"/>
		<Dokumentation Revision="0.30" Date="2019-10-28" Author="kolott" Company="sigmatek" Description="* Correction:&#13;&#10;   function sigclib_sprintfST() will work with signed 8-bit value on target ARM as well&#13;&#10;   sa53198: method SigCLib::UnixTimeStampConvert() will work with invalid timestamp, therefore a default Time/Date will be created.&#13;&#10;* New c-macro added:&#13;&#10;   sigclib_round()"/>
		<Dokumentation Revision="0.29" Date="2019-10-18" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;   sigclib_strcrc(), sigclib_strcrc16()&#13;&#10;   sigclib_sort_txtbuffer(), sigclib_sort_txtptr(), sigclib_sortfkt_ASCII(), sigclib_sortfkt_ABC()&#13;&#10;   sigclib_leap_year()&#13;&#10;   sigclib_encode_bin(), sigclib_decode_bin(), sigclib_encode_txt(), sigclib_decode_txt()&#13;&#10;   sigclib_stricmp(), sigclib_strpbrk(), sigclib_strrchr(), sigclib_sprintfST()&#13;&#10;   sigclib_nameof_baseclass()&#13;&#10;   sigclib_fputs(), sigclib_cfputs()&#13;&#10;   sigclib_mkdir() and sigclib_rmdir() are accessible in ST&#13;&#10;   sigclib_strfdatetime(), sigclib_calendar_week()"/>
		<Dokumentation Revision="0.28" Date="2019-08-14" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;   sigclib_cfmemory(), sigclib_cfok(), sigclib_cferror_set(), sigclib_cferror_get()&#13;&#10;   sigclib_cfversion_set(), sigclib_cfversion_get(), sigclib_cfcookie_set(), sigclib_cfcookie_get()&#13;&#10;   sigclib_ascii_to_utf8(), sigclib_utf8_to_ascii()&#13;&#10;   sigclib_base64_encode(), sigclib_base64_decode(), sigclib_base64_encode_size()&#13;&#10;   sigclib_name_enlarge(), sigclib_name_unique(), sigclib_utoa(), sigclib_htoa_ex()&#13;&#10;* New files added:&#13;&#10;   CDeEncode.h, CDeEncode.cpp"/>
		<Dokumentation Revision="0.27" Date="2019-07-05" Author="kolott" Company="sigmatek" Description="* New functions added:&#13;&#10;   sigclib_tcp_...()&#13;&#10;   sigclib_drivelist(), sigclib_atoll(), sigclib_strcspn()&#13;&#10;   sigclib_thread_create2(), sigclib_thread_get_current_free_stacksize()&#13;&#10;* New macro added:&#13;&#10;   sigclib_fprintf()"/>
		<Dokumentation Revision="0.26" Date="2019-04-24" Author="kolott" Company="sigmatek" Description="* several comment expanded&#13;&#10;* new global functions added&#13;&#10;   sigclib_buffer_create()&#13;&#10;   sigclib_buffer_destroy()"/>
		<Dokumentation Revision="0.25" Date="2019-02-04" Author="kolott" Company="sigmatek" Description="* Correction:&#13;&#10;  sa43337: Method RealToStr() did sometimes wrong&#13;&#10;* Mew Macro for c-language added:&#13;&#10;   sigclib_min, sigclib_printf&#13;&#10;* New global functions added:&#13;&#10;   sigclib_strcpytill(), &#13;&#10;   sigclib_lookup_class(), sigclib_lookup_object(), &#13;&#10;   sigclib_isderived_from(),&#13;&#10;   sigclib_revisionof_class(), sigclib_revisionof_object(), sigclib_revisionof_loader(), sigclib_revisionof_opsys(), &#13;&#10;   sigclib_nameof_class(), sigclib_nameof_object(),&#13;&#10;   sigclib_reset(), sigclib_restart(),&#13;&#10;   sigclib_virtual_methodpointer()"/>
		<Dokumentation Revision="0.24" Date="2018-07-06" Author="kolott" Company="sigmatek" Description="New define added:   sigclib_arraysize()&#13;&#10;New function added:   sigclib_fileread(), sigclib_cilget()&#13;&#10;New Functionality &quot;Heap&quot; added"/>
		<Dokumentation Revision="0.23" Date="2017-08-14" Author="kolott" Company="sigmatek" Description="Correction:&#13;&#10;Method RealToString() will work with values greater than 4294967295 and lower than -4294967295&#13;&#10;Method UnixTimeStampConvert() and function sigclib_gmtime() will work with 1st second of each 1st day in month.&#13;&#10;New functions added:&#13;&#10;sigclib_atomic_getU32(), sigclib_atomic_setU32(), sigclib_atomic_getS32(), sigclib_atomic_setS32()&#13;&#10;sa38620: Implementation of following functions changed&#13;&#10;sigclib64_sin(), sigclib64_cos(), sigclib64_tan(), sigclib64_asin(), sigclib64_acos(), sigclib64_atan()"/>
		<Dokumentation Revision="0.22" Date="2017-07-20" Author="kolott" Company="sigmatek" Description="New functions added:&#13;&#10;sigclib_atomic_incU32(), sigclib_atomic_decU32(), sigclib_atomic_addU32(), sigclib_atomic_subU32(), sigclib_atomic_swpU32(), sigclib_atomic_cmpxchgU32()&#13;&#10;sigclib_atomic_incS32(), sigclib_atomic_decS32(), sigclib_atomic_addS32(), sigclib_atomic_subS32(), sigclib_atomic_swpS32(), sigclib_atomic_cmpxchgS32()&#13;&#10;sigclib_absday(), sigclib_day_of_week(), sigclib_lasal_to_date(), sigclib_lasal_to_time(),&#13;&#10;sigclib_time_to_lasal(), sigclib_date_to_lasal(), sigclib_get_days_of_month(), sigclib_make_date()&#13;&#10;functionality of cPipe added"/>
		<Dokumentation Revision="0.21" Date="2017-07-05" Author="kolott" Company="sigmatek" Description="New Functions added:&#13;&#10;  sigclib_get_thisptr(), sigclib_htoa(), sigclib_mutex_name()&#13;&#10;Functionality of FiFo (cFiFo) added&#13;&#10;Functionality of RingBuffer (cRingBuffer) added"/>
		<Dokumentation Revision="0.20" Date="2017-04-11" Author="kolott" Company="sigmatek" Description="New Functions added: &#13;&#10;sigclib_memoryV1(), sigclib_mallocV1(), sigclib_callocV1(), sigclib_reallocV1(), sigclib_freeV1()"/>
		<Dokumentation Revision="0.19" Date="2017-02-01" Author="kolott" Company="sigmatek" Description="New Methods added:&#13;&#10;ToStr16(), ToStr08(), StrLen16(), StrCpy16(), StrCmp16(), StrCat16(), StrChr16(), StrUpr16(), StrLwr16(), StrStr16(), Str16ToUtf8(), Utf8ToStr16(), StrNCpy16()&#13;&#10;New Functions added:&#13;&#10;sigclib_crc64(), sigclib_u32ipaddress(), sigclib_str16_to_utf8(), sigclib_utf8_to_str16(), sigclib_string_to_time(), sigclib_serviceprovider(), sigclib_is_salamander(), sigclib_strncpy16(),"/>
		<Dokumentation Revision="0.18" Date="2016-11-17" Author="kolott" Company="sigmatek" Description="* SA36010: Library will work without &quot;InitOsiBase_new&quot;"/>
		<Dokumentation Revision="0.17" Date="2016-10-12" Author="kolott" Company="sigmatek" Description="Prototype of function sigclib_fseek() changed, offset is of type long instead of unsigned long&#13;&#10;CPlcOnline.cpp modul added&#13;&#10;new functions about Mutex added. look into CSysLib.h "/>
		<Dokumentation Revision="0.16" Date="2016-09-26" Author="kolott" Company="sigmatek" Description="new functions sigclib64_...() to ensure f64 operations added"/>
		<Dokumentation Revision="0.15" Date="2016-08-29" Author="kolott" Company="sigmatek" Description="new functions UnixTimeStampGet(), UnixTimeStampConvert() UnixTimeStampConvertU32(), UnixTimeStampReconvert() and UnixTimeStampReconvertU32() added.&#13;&#10;correction of syntaxerror &quot;bad suffix&quot; in file CStrLib.cpp"/>
		<Dokumentation Revision="0.14" Date="2016-06-06" Author="kolott" Company="sigmatek" Description="* sa34041: new Method LREALtoStr() and REALtoStr() added"/>
		<Dokumentation Revision="0.13" Date="2016-01-15" Author="kolott" Company="sigmatek" Description="* new functions sigclib_atan2(), sigclib_ceil(), sigclib_floor(), sigclib_pow(), sigclib_exp(), sigclib_fmod(), sigclib_log(), sigclib_log10(), sigclib_sprintf(), sigclib_filecreate() added&#13;&#10;* SA33745: error in unixtimestamp with date 29.02.2016 fixed"/>
		<Dokumentation Revision="0.12" Date="2015-07-20" Author="kolott" Company="sigmatek" Description="New Method FToA() added&#13;&#10;CMatLib.cpp added (sigclib_sin, sigclib_cos, sigclib_tan, sigclib_asin, sigclib_acos, sigclib_atan, sigclib_sqrt)&#13;&#10;CCrcLib.cpp added (sigclib_crc32)&#13;&#10;CStrLib16 added (sigclib_tostr16, sigclib_tostr08, sigclib_strlen16, sigclib_strcpy16, sigclib_strcmp16, sigclib_strcat16, sigclib_strchr16, sigclib_strupr16, sigclib_strlwr16, sigclib_strstr16)"/>
		<Dokumentation Revision="0.11" Date="2015-07-20" Author="kolott" Company="sigmatek" Description="new method SetSysTime() and SetSysDate() added&#13;&#10;new function sigclib_setsysdate() and sigclib_setsystime() added"/>
		<Dokumentation Revision="0.10" Date="2014-08-25" Author="kolott" Company="sigmatek" Description="* sa28421: new method StrToREAL() and StrToLREAL() added&#13;&#10;new function sigclib_strtod() and sigclib_atod() added"/>
		<Dokumentation Revision="0.9" Date="2014-04-24" Author="kolott" Company="sigmatek" Description="New Methods added:&#13;&#10;* StrToUL(), StrToL()&#13;&#10;* Memory(), Random(), GetSysTime(), GetSysDate()&#13;&#10;* StrCaseCmp(), StrNCaseCmp()&#13;&#10;New Functions added:&#13;&#10;* sigclib_strtol(), sigclib_strtoul(), sigclib_strtod()&#13;&#10;* sigclib_strcasecmp(), sigclib_strncasecmp(), sigclib_inet_ntoa(), sigclib_strftime()&#13;&#10;* sigclib_inet_addr(), sigclib_tracemessage()&#13;&#10;* sigclib_time(), sigclib_gmtime(), sigclib_timegm(), sigclib_mktime(), sigclib_ftime()&#13;&#10;* sigclib_srand(), sigclib_rand(), sigclib_random()&#13;&#10;* sigclib_tabsolute(), sigclib_getmicrotime(), sigclib_getsystime(), sigclib_getsysdate()&#13;&#10;* sigclib_qsort(), sigclib_bsearch()&#13;&#10;* sigclib_fopen(), sigclib_fclose(), sigclib_fread(), sigclib_fwrite(), sigclib_fseek(), sigclib_ftell()&#13;&#10;* sigclib_fgets(),  sigclib_flength(), sigclib_remove(), sigclib_rename()&#13;&#10;* sigclib_findfirst(), sigclib_findnext(), sigclib_findclose(), sigclib_mkdir(), sigclib_rmdir()&#13;&#10;* sigclib_malloc(), sigclib_realloc(), sigclib_free(), sigclib_memory() &#13;&#10;* sigclib_htonl(), sigclib_htons(), sigclib_ntohl(), sigclib_ntohs()"/>
		<Dokumentation Revision="0.8" Date="2013-04-04" Author="kolott" Company="sigmatek" Description="ARM-Ready"/>
		<Dokumentation Revision="0.7" Date="2012-10-17" Author="kolott" Company="sigmatek" Description="Changed the input parameter &quot;anz&quot; of the methods HFind and HSort to UDINT;"/>
		<Dokumentation Revision="0.6" Date="2012-07-20" Author="kolott" Company="sigmatek" Description="Added methods HSort and HFind;&#13;&#10;Fixed a bug in the function ItoA;"/>
		<Dokumentation Revision="0.5" Date="2012-07-16" Author="spimar" Company="sigmatek" Description="Fixed a bug in function memcpyrev;"/>
		<Dokumentation Revision="0.4" Date="2012-02-06" Author="hötant" Company="sigmatek" Description="prepare class for library"/>
		<Dokumentation Revision="0.3" Date="2012-01-19" Author="kolott" Company="sigmatek" Description="function memset will work with len = 0"/>
		<Dokumentation Revision="0.2" Date="2011-11-03" Author="kolott" Company="sigmatek" Description="function atof is added"/>
	</RevDoku>
</Class>
*)
SigCLib : CLASS
  //Servers:
	ClassSvr 	: SvrChCmd_DINT;
  //Clients:
  //Variables:
  //Functions:
	
	FUNCTION SigCLib
		VAR_OUTPUT
			ret_code 	: ConfStates;
		END_VAR;
				//! <Function Comment="copy the string from the source&#13;&#10;to the destination array" Name="StrCpy"/>
	FUNCTION GLOBAL StrCpy
		VAR_INPUT
			dst0 	: ^CHAR;			//! <Variable Comment="pointer to the destination array" Name="StrCpy.dst0"/>
			src0 	: ^CHAR;			//! <Variable Comment="pointer to the source array" Name="StrCpy.src0"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="pointer to the destination array" Name="StrCpy.retcode"/>
		END_VAR;
				//! <Function Comment="concatenate two strings&#13;&#10;" Name="StrCat"/>
	FUNCTION GLOBAL StrCat
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the destination array&#13;&#10;(large enough to contain the &#13;&#10;complete concatenated string)" Name="StrCat.ps1"/>
			ps2 	: ^CHAR;			//! <Variable Comment="Pointer to the source array &#13;&#10;which is appended" Name="StrCat.ps2"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to the destination array" Name="StrCat.retcode"/>
		END_VAR;
				//! <Function Comment="Get string length" Name="StrLen"/>
	FUNCTION GLOBAL StrLen
		VAR_INPUT
			str 	: ^CHAR;			//! <Variable Comment="Pointer to the string" Name="StrLen.str"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;			//! <Variable Comment="Length of the string" Name="StrLen.retcode"/>
		END_VAR;
				//! <Function Comment="Locate first occurrence of &#13;&#10;character in string" Name="StrChr"/>
	FUNCTION GLOBAL StrChr
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string" Name="StrChr.ps1"/>
			i 	: DINT;			//! <Variable Comment="Character to be located" Name="StrChr.i"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to the first &#13;&#10;occurrence of character in str.&#13;&#10;If the value is not found, &#13;&#10;the function returns a &#13;&#10;null pointer.&#13;&#10;&#13;&#10;" Name="StrChr.retcode"/>
		END_VAR;
				//! <Function Comment="Compare two strings" Name="StrCmp"/>
	FUNCTION GLOBAL StrCmp
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the first string" Name="StrCmp.ps1"/>
			ps2 	: ^CHAR;			//! <Variable Comment="Pointer to the second string" Name="StrCmp.ps2"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="A zero value indicates that &#13;&#10;both strings are equal.&#13;&#10;A value greater than zero &#13;&#10;indicates that the first &#13;&#10;character that does not match &#13;&#10;has a greater value in &#13;&#10;str1 than in str2; And a value &#13;&#10;less than zero indicates the &#13;&#10;opposite.&#13;&#10;&#13;&#10;" Name="StrCmp.retcode"/>
		END_VAR;
				//! <Function Comment="Converting a sting to upper-case" Name="StrUpr"/>
	FUNCTION GLOBAL StrUpr
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string &#13;&#10;to be converted" Name="StrUpr.ps1"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to the converted string" Name="StrUpr.retcode"/>
		END_VAR;
				//! <Function Comment="Converting a sting to lower-case" Name="StrLwr"/>
	FUNCTION GLOBAL StrLwr
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string &#13;&#10;to be converted" Name="StrLwr.ps1"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to the converted string" Name="StrLwr.retcode"/>
		END_VAR;
				//! <Function Comment="Returns a pointer to the &#13;&#10;first occurrence of &#13;&#10;str2 in str1, or a null &#13;&#10;pointer if str2 is not &#13;&#10;part of str1." Name="StrStr"/>
	FUNCTION GLOBAL StrStr
		VAR_INPUT
			searchee 	: ^CHAR;			//! <Variable Comment="Pointer to the string &#13;&#10;to be scanned" Name="StrStr.searchee"/>
			lookfor 	: ^CHAR;			//! <Variable Comment="Pointer to the string &#13;&#10;containing the sequence of &#13;&#10;characters to match." Name="StrStr.lookfor"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="A pointer to the first &#13;&#10;occurrence in str1 of any of &#13;&#10;the entire sequence of &#13;&#10;characters specified in str2, &#13;&#10;or a null pointer if the &#13;&#10;sequence is not present in str1." Name="StrStr.retcode"/>
		END_VAR;
				//! <Function Comment="Returns the length of the &#13;&#10;initial portion of str1 which &#13;&#10;consists only of characters &#13;&#10;that are part of str2.&#13;&#10;" Name="StrSpn"/>
	FUNCTION GLOBAL StrSpn
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string to be &#13;&#10;scanned. &#13;&#10;" Name="StrSpn.ps1"/>
			ps2 	: ^CHAR;			//! <Variable Comment="Pointer to the string &#13;&#10;containing the characters &#13;&#10;to match." Name="StrSpn.ps2"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="The length of the initial &#13;&#10;portion of str1 containing only &#13;&#10;characters that appear in str2." Name="StrSpn.retcode"/>
		END_VAR;
				//! <Function Comment="Copies the first &apos;count&apos; characters of &apos;src0&apos; to &apos;dst0&apos;. If the end of &apos;src0&apos; C string (which is signaled by a 0-character) is found before &apos;count&apos; characters have been copied, destination is padded with zeros until a total of &apos;count&apos; characters have been written to it.&#13;&#10;Note: No 0-character is implicitly appended at the end of &apos;dst0&apos; if &apos;src0&apos; is longer than &apos;count&apos;. Thus, in this case, destination shall not be considered a 0 terminated C string (reading it as such would overflow)." Name="StrNCpy"/>
	FUNCTION GLOBAL StrNCpy
		VAR_INPUT
			dst0 	: ^CHAR;			//! <Variable Comment="Pointer to the destination &#13;&#10;array where the content is to &#13;&#10;be copied. &#13;&#10;" Name="StrNCpy.dst0"/>
			src0 	: ^CHAR;			//! <Variable Comment="Pointer to the string to be copied" Name="StrNCpy.src0"/>
			count 	: UDINT;			//! <Variable Comment="Maximum number of characters to be copied from source. &#13;&#10;&#13;&#10;" Name="StrNCpy.count"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to destination array." Name="StrNCpy.retcode"/>
		END_VAR;
				//! <Function Comment="Append characters from string&#13;&#10;&#13;&#10;" Name="StrNCat"/>
	FUNCTION GLOBAL StrNCat
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the destination array, which have to contain a C string, &#13;&#10;and be large enough to contain the concatenated resulting string, &#13;&#10;including the additional null-character. &#13;&#10;" Name="StrNCat.ps1"/>
			ps2 	: ^CHAR;			//! <Variable Comment="Pointer to the string to be appended" Name="StrNCat.ps2"/>
			len 	: UDINT;			//! <Variable Comment="Maximum number of characters to be appeded" Name="StrNCat.len"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to the destination array" Name="StrNCat.retcode"/>
		END_VAR;
				//! <Function Comment="Compare characters of two strings&#13;&#10;&#13;&#10;" Name="StrNCmp"/>
	FUNCTION GLOBAL StrNCmp
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the first string to be compared" Name="StrNCmp.ps1"/>
			ps2 	: ^CHAR;			//! <Variable Comment="Pointer to the second string to be compared" Name="StrNCmp.ps2"/>
			count 	: UDINT;			//! <Variable Comment="Maximum number of characters to compare" Name="StrNCmp.count"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Returns an integral value indicating the relationship &#13;&#10;between the strings:&#13;&#10;A zero value indicates that the characters compared &#13;&#10;in both strings are all equal.&#13;&#10;A value greater than zero indicates that the first &#13;&#10;character that does not match has a greater &#13;&#10;value in str1 than in str2; And a value less than zero indicates the opposite." Name="StrNCmp.retcode"/>
		END_VAR;
				//! <Function Comment="This function compares the two strings str1 and str2, ignoring the case of the characters.&#13;&#10;It returns an integer less than, equal to, or greater than zero if str1 is found, respectively, to be less than, to match, or be greater than str2." Name="StrCaseCmp"/>
	FUNCTION GLOBAL StrCaseCmp
		VAR_INPUT
			str1 	: ^CHAR;
			str2 	: ^CHAR;
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;
		END_VAR;
				//! <Function Comment="This function compares the first n characters of strings str1 and str2, ignoring the case of the characters.&#13;&#10;It returns an integer less than, equal to, or greater than zero if str1 is found, respectively, to be less than, to match, or be greater than str2" Name="StrNCaseCmp"/>
	FUNCTION GLOBAL StrNCaseCmp
		VAR_INPUT
			str1 	: ^CHAR;
			str2 	: ^CHAR;
			count 	: UDINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;
		END_VAR;
				//! <Function Comment="This function converts the initial part of the given string to a DINT value according to the given base,&#13;&#10;which must be between 2 and 36 inclusive, or be the special value 0." Name="StrToL"/>
	FUNCTION GLOBAL StrToL
		VAR_INPUT
			nptr 	: ^CHAR;
			endptr 	: ^pVoid;
			base 	: DINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;
		END_VAR;
				//! <Function Comment="This function converts the initial part of the given string to an UDINT value according to the given base,&#13;&#10;which must be between 2 and 36 inclusive, or be the special value 0.&#13;&#10;" Name="StrToUL"/>
	FUNCTION GLOBAL StrToUL
		VAR_INPUT
			nptr 	: ^CHAR;
			endptr 	: ^pVoid;
			base 	: DINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;
		END_VAR;
	
	FUNCTION GLOBAL StrToREAL
		VAR_INPUT
			nptr 	: ^CHAR;
			endptr 	: ^pVoid;
		END_VAR
		VAR_OUTPUT
			retcode 	: REAL;
		END_VAR;
	
	FUNCTION GLOBAL StrToLREAL
		VAR_INPUT
			nptr 	: ^CHAR;
			endptr 	: ^pVoid;
		END_VAR
		VAR_OUTPUT
			retcode 	: LREAL;
		END_VAR;
				//! <Function Comment="Fill block of memory" Name="MemSet"/>
	FUNCTION GLOBAL MemSet
		VAR_INPUT
			dst 	: ^void;			//! <Variable Comment="Pointer to the block of memory to fill" Name="MemSet.dst"/>
			c 	: DINT;			//! <Variable Comment="Value to be set" Name="MemSet.c"/>
			len 	: UDINT;			//! <Variable Comment="Number of bytes to be set to the value" Name="MemSet.len"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^void;			//! <Variable Comment="Pointer to the destination is returned." Name="MemSet.retcode"/>
		END_VAR;
				//! <Function Comment="Copy block of memory" Name="MemCpy"/>
	FUNCTION GLOBAL MemCpy
		VAR_INPUT
			dst0 	: ^void;			//! <Variable Comment="Pointer to the destination array where the content is to be copied" Name="MemCpy.dst0"/>
			src0 	: ^void;			//! <Variable Comment="Pointer to the source of data to be copied" Name="MemCpy.src0"/>
			len0 	: UDINT;			//! <Variable Comment="Number of bytes to copy. " Name="MemCpy.len0"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^void;			//! <Variable Comment="Pointer to the destination is returned" Name="MemCpy.retcode"/>
		END_VAR;
				//! <Function Comment="Move block of memory" Name="MemMove"/>
	FUNCTION GLOBAL MemMove
		VAR_INPUT
			dst0 	: ^void;			//! <Variable Comment="Pointer to the destination array where the content is to be copied" Name="MemMove.dst0"/>
			src0 	: ^void;			//! <Variable Comment="Pointer to the source of data to be copied" Name="MemMove.src0"/>
			len0 	: UDINT;			//! <Variable Comment="Number of bytes to copy" Name="MemMove.len0"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^void;			//! <Variable Comment="Pointer to the destination is returned" Name="MemMove.retcode"/>
		END_VAR;
				//! <Function Comment="Compare two blocks of memory" Name="MemCmp"/>
	FUNCTION GLOBAL MemCmp
		VAR_INPUT
			m1 	: ^void;			//! <Variable Comment="Pointer to the first block of memory" Name="MemCmp.m1"/>
			m2 	: ^void;			//! <Variable Comment="Pointer to the second block of memory" Name="MemCmp.m2"/>
			len 	: UDINT;			//! <Variable Comment="Number of bytes to compare. " Name="MemCmp.len"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Returns an integral value indicating the relationship between the content of &#13;&#10;the memory blocks:&#13;&#10;A zero value indicates that the contents of both memory blocks are equal.&#13;&#10;A value greater than zero indicates that the first byte that does not match &#13;&#10;in both memory blocks has a greater value in ptr1 than in ptr2 as if evaluated &#13;&#10;as unsigned char values; And a value less than zero indicates the opposite." Name="MemCmp.retcode"/>
		END_VAR;
				//! <Function Comment="Locate character in block of memory&#13;&#10;&#13;&#10;" Name="MemChr"/>
	FUNCTION GLOBAL MemChr
		VAR_INPUT
			src 	: ^void;			//! <Variable Comment="Pointer to the block of memory where the search is performed." Name="MemChr.src"/>
			c 	: DINT;			//! <Variable Comment="Character to be located" Name="MemChr.c"/>
			length 	: UDINT;			//! <Variable Comment="Number of bytes to be analyzed" Name="MemChr.length"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^void;			//! <Variable Comment="A pointer to the first occurrence of value in the block of memory pointed by ptr.&#13;&#10;If the value is not found, the function returns NULL." Name="MemChr.retcode"/>
		END_VAR;
				//! <Function Comment="Compare two blocks of memory&#13;&#10;(not case sensitive)" Name="MemICmp"/>
	FUNCTION GLOBAL MemICmp
		VAR_INPUT
			ps1 	: ^void;			//! <Variable Comment="Pointer to the first block of memory" Name="MemICmp.ps1"/>
			ps2 	: ^void;			//! <Variable Comment="Pointer to the second block of memory" Name="MemICmp.ps2"/>
			length 	: UDINT;			//! <Variable Comment="Number of bytes to compare." Name="MemICmp.length"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Returns an integral value indicating the relationship between &#13;&#10;the content of the memory blocks:&#13;&#10;A zero value indicates that the contents of both memory &#13;&#10;blocks are equal.&#13;&#10;A value greater than zero indicates that the first byte that &#13;&#10;does not match in both memory blocks has a greater value &#13;&#10;in ptr1 than in ptr2 as if evaluated as unsigned char values; &#13;&#10;And a value less than zero indicates the opposite." Name="MemICmp.retcode"/>
		END_VAR;
				//! <Function Comment="Check if the given value is a decimal number" Name="IsDigit"/>
	FUNCTION GLOBAL IsDigit
		VAR_INPUT
			c 	: DINT;			//! <Variable Comment="Character to be checked" Name="IsDigit.c"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Returns &lt;&gt; 0 if character is a decimal number;&#13;&#10;Returns 0 if character is not a decimal number;" Name="IsDigit.retcode"/>
		END_VAR;
				//! <Function Comment="Checks a character if it is lower-case" Name="IsLower"/>
	FUNCTION GLOBAL IsLower
		VAR_INPUT
			c 	: DINT;			//! <Variable Comment="Character to be checked" Name="IsLower.c"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Returns &lt;&gt; 0 if character is lower-case;&#13;&#10;Returns 0 if character is not lower-case;" Name="IsLower.retcode"/>
		END_VAR;
				//! <Function Comment="Checks a character if it is upper-case" Name="IsUpper"/>
	FUNCTION GLOBAL IsUpper
		VAR_INPUT
			c 	: DINT;			//! <Variable Comment="Character to be checked" Name="IsUpper.c"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Returns &lt;&gt; 0 if character is upper-case;&#13;&#10;Returns 0 if character is not upper-case;" Name="IsUpper.retcode"/>
		END_VAR;
				//! <Function Comment="Converts a character to lower-case" Name="ToLower"/>
	FUNCTION GLOBAL ToLower
		VAR_INPUT
			c 	: DINT;			//! <Variable Comment="Character to be converted" Name="ToLower.c"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: CHAR;			//! <Variable Comment="Converted character" Name="ToLower.retcode"/>
		END_VAR;
				//! <Function Comment="Converts a character to upper-case" Name="ToUpper"/>
	FUNCTION GLOBAL ToUpper
		VAR_INPUT
			c 	: DINT;			//! <Variable Comment="Character to be converted" Name="ToUpper.c"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: CHAR;			//! <Variable Comment="Converted character" Name="ToUpper.retcode"/>
		END_VAR;
				//! <Function Comment="Convert string to value(INT)" Name="AToI"/>
	FUNCTION GLOBAL AToI
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string" Name="AToI.ps1"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Converted value" Name="AToI.retcode"/>
		END_VAR;
				//! <Function Comment="Convert string to value" Name="AToL"/>
	FUNCTION GLOBAL AToL
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string" Name="AToL.ps1"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="Converted value" Name="AToL.retcode"/>
		END_VAR;
				//! <Function Comment="Convert string to float(REAL)" Name="AToF"/>
	FUNCTION GLOBAL AToF
		VAR_INPUT
			ps1 	: ^CHAR;			//! <Variable Comment="Pointer to the string" Name="AToF.ps1"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: REAL;			//! <Variable Comment="Converted value" Name="AToF.retcode"/>
		END_VAR;
				//! <Function Comment="Convert value to string" Name="IToA"/>
	FUNCTION GLOBAL IToA
		VAR_INPUT
			val 	: DINT;			//! <Variable Comment="Value to be converted" Name="IToA.val"/>
			dst 	: ^CHAR;			//! <Variable Comment="Pointer to the destination array" Name="IToA.dst"/>
			base 	: DINT;			//! <Variable Comment="Numerical base to represent the value as string" Name="IToA.base"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="Pointer to the destination array" Name="IToA.retcode"/>
		END_VAR;
				//! <Function Comment="sorts arbitrary array with userdefined length" Name="HSort"/>
	FUNCTION GLOBAL HSort
		VAR_INPUT
			src0 	: ^void;			//! <Variable Comment="pointer to first element of array to be sorted" Name="HSort.src0"/>
			anz 	: UDINT;			//! <Variable Comment="Number of elements in array pointed by src0" Name="HSort.anz"/>
			size 	: UDINT;			//! <Variable Comment="Size in bytes of each element in array" Name="HSort.size"/>
			pfunct 	: ^void;			//! <Variable Comment="Function that compares two elements. This function must be declared as global __cdecl and has to accept two parameters, each a pointer of type arrayelement and &#13;&#10;a signed 32bit returnvalue (dint) which determines the order of pointed elements. The return value of this function should represent whether element1 is considered less than, equal to, or greater than element2 by returning, respectively, a negative value, zero or a positive value.&#13;&#10;&#13;&#10;NOTE:&#13;&#10;It is not allowed to use other class variables in the give function than the input and output parameters!" Name="HSort.pfunct"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="greater 0 if array is sucessfully sorted" Name="HSort.retcode"/>
		END_VAR;
				//! <Function Comment="find index of element in arbitrary array sorted by HSort" Name="HFind"/>
	FUNCTION GLOBAL HFind
		VAR_INPUT
			src0 	: ^void;			//! <Variable Comment="pointer to the first element of the array to search" Name="HFind.src0"/>
			anz 	: UDINT;			//! <Variable Comment="Number of elements in the array pointed by src0" Name="HFind.anz"/>
			size 	: UDINT;			//! <Variable Comment="Size in bytes of each element in the array" Name="HFind.size"/>
			pfunct 	: ^void;			//! <Variable Comment="Function that compares two elements. This function must be declared as global __cdecl and has to accept two parameters, each a pointer of type arrayelement and a signed 32bit returnvalue (dint)&#13;&#10;which determines the order of pointed elements. The return value of this function should represent whether element1 is considered less than, equal to, or greater than element2 by returning, respectively, a negative value, zero or a positive value.&#13;&#10;this function is used to be the same than for function sort.&#13;&#10;&#13;&#10;NOTE:&#13;&#10;It is not allowed to use other class variables in the give function than the input and output parameters!" Name="HFind.pfunct"/>
			pvgl 	: ^void;			//! <Variable Comment="pointer to referenceelement, is used as parameter element1 in comparatorfunction" Name="HFind.pvgl"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;			//! <Variable Comment="a negative value if element not found in array, on the other hand the respectively index of element used to be found" Name="HFind.retcode"/>
		END_VAR;
				//! <Function Comment="function is used to alloc, realloc or free memory.&#13;&#10;the given pointer has to be initialized once by NIL otherwise you&apos;ll crash the system." Name="Memory"/>
	FUNCTION GLOBAL Memory
		VAR_INPUT
			pptr 	: ^pVoid;
			size 	: UDINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: BOOL;
		END_VAR;
				//! <Function Comment="will generate a random value between 0 and max-1" Name="Random"/>
	FUNCTION GLOBAL Random
		VAR_INPUT
			max 	: UDINT;			//! <Variable Comment="range of randomvalue: returned value can be from 0 to max-1" Name="Random.max"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;			//! <Variable Comment="random value can be from 0 to max-1" Name="Random.retcode"/>
		END_VAR;
				//! <Function Comment="get systemtime" Name="GetSysTime"/>
	FUNCTION GLOBAL GetSysTime
		VAR_INPUT
			ptime 	: ^SYSTIME;
		END_VAR;
				//! <Function Comment="get systemdate" Name="GetSysDate"/>
	FUNCTION GLOBAL GetSysDate
		VAR_INPUT
			pdate 	: ^SYSDATE;
		END_VAR;
				//! <Function Comment="set systemtime" Name="SetSysTime"/>
	FUNCTION GLOBAL SetSysTime
		VAR_INPUT
			ptime 	: ^SYSTIME;
		END_VAR;
				//! <Function Comment="set systemdate" Name="SetSysDate"/>
	FUNCTION GLOBAL SetSysDate
		VAR_INPUT
			pdate 	: ^SYSDATE;
		END_VAR;
				//! <Function Comment="Format REAL value to ascii-0-string&#13;&#10;value ....... value&#13;&#10;dst ......... destination&#13;&#10;decimals .... number of decimals" Name="FToA"/>
	FUNCTION GLOBAL FToA
		VAR_INPUT
			value 	: REAL;			//! <Variable Comment="value to be converted" Name="FToA.value"/>
			dst 	: ^CHAR;			//! <Variable Comment="pointer to destination array" Name="FToA.dst"/>
			decimals 	: UDINT;			//! <Variable Comment="number of decimals" Name="FToA.decimals"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="pointer to destiantion array" Name="FToA.retcode"/>
		END_VAR;
				//! <Function Comment="Format REAL value to ascii-0-string&#13;&#10;dst ......... destination&#13;&#10;value ....... value&#13;&#10;decimals .... number of decimals" Name="REALtoStr"/>
	FUNCTION GLOBAL REALtoStr
		VAR_INPUT
			dst 	: ^CHAR;			//! <Variable Comment="pointer to destination array" Name="REALtoStr.dst"/>
			value 	: REAL;			//! <Variable Comment="value to be converted" Name="REALtoStr.value"/>
			decimals 	: UDINT;			//! <Variable Comment="number of decimals" Name="REALtoStr.decimals"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="pointer to destiantion array" Name="REALtoStr.retcode"/>
		END_VAR;
				//! <Function Comment="Format LREAL value to ascii-0-string&#13;&#10;dst ......... destination&#13;&#10;value ....... value&#13;&#10;decimals .... number of decimals" Name="LREALtoStr"/>
	FUNCTION GLOBAL LREALtoStr
		VAR_INPUT
			dst 	: ^CHAR;			//! <Variable Comment="pointer to destination array" Name="LREALtoStr.dst"/>
			value 	: LREAL;			//! <Variable Comment="value to be converted" Name="LREALtoStr.value"/>
			decimals 	: UDINT;			//! <Variable Comment="number of decimals" Name="LREALtoStr.decimals"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;			//! <Variable Comment="pointer to destiantion array" Name="LREALtoStr.retcode"/>
		END_VAR;
				//! <Function Comment="function will return a time value representing the time in seconds since January 1, 1970" Name="UnixTimeStampGet"/>
	FUNCTION GLOBAL UnixTimeStampGet
		VAR_OUTPUT
			retcode 	: UDINT;			//! <Variable Comment="unixtimestamp" Name="UnixTimeStampGet.retcode"/>
		END_VAR;
				//! <Function Comment="create date and time from given unittimestamp&#13;&#10;&lt;-- pdate .... pointer to structure where date will be stored&#13;&#10;&lt;-- ptime ... pointer to structure where time will be stored&#13;&#10;--&gt; uxtime ... given unixtimestamp" Name="UnixTimeStampConvert"/>
	FUNCTION GLOBAL UnixTimeStampConvert
		VAR_INPUT
			pdate 	: ^SYSDATE;			//! <Variable Comment="pointer to struct SYSDATE where date will be stored" Name="UnixTimeStampConvert.pdate"/>
			ptime 	: ^SYSTIME;			//! <Variable Comment="pointer to struct SYSTIME where time will be stored" Name="UnixTimeStampConvert.ptime"/>
			uxtime 	: UDINT;			//! <Variable Comment="given unixtimestamp" Name="UnixTimeStampConvert.uxtime"/>
		END_VAR;
				//! <Function Comment="create date and time from given unittimestamp&#13;&#10;&lt;-- pdate .... pointer to u32 where date will be stored (2#YYYYYYYYYYYYYYYY MMMMDDDDDDDDXXXX)&#13;&#10;&lt;-- ptime ... pointer to u32 where time will be stored (2#HHHHHHHHMMMMMMMM SSSSSSSSXXXXXXXX)&#13;&#10;--&gt; uxtime ... given unixtimestamp" Name="UnixTimeStampConvertU32"/>
	FUNCTION GLOBAL UnixTimeStampConvertU32
		VAR_INPUT
			date32 	: ^UDINT;			//! <Variable Comment="pointer to u32 value where date will be stored&#13;&#10;format: 2#YYYYYYYYYYYYYYYY MMMMDDDDDDDDXXXX&#13;&#10;Y .... year&#13;&#10;M .... month&#13;&#10;D .... day&#13;&#10;X .... day of week (0..sunday, 1..monday...)" Name="UnixTimeStampConvertU32.date32"/>
			time32 	: ^UDINT;			//! <Variable Comment="pointer to u32 value where time will be stored&#13;&#10;format: 2#HHHHHHHHMMMMMMMM SSSSSSSSXXXXXXXX&#13;&#10;H .... hour&#13;&#10;M .... minute&#13;&#10;S .... second&#13;&#10;X .... 0 (unused)" Name="UnixTimeStampConvertU32.time32"/>
			uxtime 	: UDINT;			//! <Variable Comment="given unixtimestamp" Name="UnixTimeStampConvertU32.uxtime"/>
		END_VAR;
				//! <Function Comment="function will return unixtimestamp from given date and time&#13;&#10;--&gt; pdate ... given date&#13;&#10;--&gt; ptime ... given time&#13;&#10;&lt;-- unixtimestamp" Name="UnixTimeStampReconvert"/>
	FUNCTION GLOBAL UnixTimeStampReconvert
		VAR_INPUT
			pdate 	: ^SYSDATE;			//! <Variable Comment="pointer to given date" Name="UnixTimeStampReconvert.pdate"/>
			ptime 	: ^SYSTIME;			//! <Variable Comment="pointer to given time" Name="UnixTimeStampReconvert.ptime"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;			//! <Variable Comment="unixtimestamp" Name="UnixTimeStampReconvert.retcode"/>
		END_VAR;
				//! <Function Comment="function will return unixtimestamp from given date and time in 32bit format&#13;&#10;--&gt; pdate ... given date u32 (2#YYYYYYYYYYYYYYYY MMMMDDDDDDDDXXXX)&#13;&#10;--&gt; ptime ... given time u32 (2#HHHHHHHHMMMMMMMM SSSSSSSSXXXXXXXX)&#13;&#10;&lt;-- unixtimestamp" Name="UnixTimeStampReconvertU32"/>
	FUNCTION GLOBAL UnixTimeStampReconvertU32
		VAR_INPUT
			date32 	: UDINT;			//! <Variable Comment="u32 value representing date. &#13;&#10;format: 2#YYYYYYYYYYYYYYYY MMMMDDDDDDDDXXXX&#13;&#10;Y .... year&#13;&#10;M .... month&#13;&#10;D .... day&#13;&#10;X .... unused" Name="UnixTimeStampReconvertU32.date32"/>
			time32 	: UDINT;			//! <Variable Comment="u32 value representing time.&#13;&#10;format: 2#HHHHHHHHMMMMMMMM SSSSSSSSXXXXXXXX&#13;&#10;H .... hour&#13;&#10;M .... minute&#13;&#10;S .... second&#13;&#10;X .... 0 (unused)" Name="UnixTimeStampReconvertU32.time32"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;			//! <Variable Comment="unixtimestamp" Name="UnixTimeStampReconvertU32.retcode"/>
		END_VAR;
				//! <Function Comment="create semaphor" Name="MutexCreate"/>
	FUNCTION GLOBAL MutexCreate
		VAR_INPUT
			mutexname 	: ^CHAR;			//! <Variable Comment="identifier of mutex al ascii-0-string" Name="MutexCreate.mutexname"/>
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;			//! <Variable Comment="mutexhandle. on error 0 will be returned" Name="MutexCreate.retcode"/>
		END_VAR;
				//! <Function Comment="destroy semaphor" Name="MutexDestroy"/>
	FUNCTION GLOBAL MutexDestroy
		VAR_INPUT
			mutexhdl 	: UDINT;			//! <Variable Comment="mutexhandle" Name="MutexDestroy.mutexhdl"/>
		END_VAR;
				//! <Function Comment="method is used to start critical section" Name="MutexSectionStart"/>
	FUNCTION GLOBAL MutexSectionStart
		VAR_INPUT
			mutexhdl 	: UDINT;			//! <Variable Comment="mutexhandle" Name="MutexSectionStart.mutexhdl"/>
		END_VAR;
				//! <Function Comment="method is used to stop critical section" Name="MutexSectionStop"/>
	FUNCTION GLOBAL MutexSectionStop
		VAR_INPUT
			mutexhdl 	: UDINT;			//! <Variable Comment="mutexhandle" Name="MutexSectionStop.mutexhdl"/>
		END_VAR;
				//! <Function Comment="convert ascii-0-string into uni-0-string.&#13;&#10;function will return parameter &apos;dst0&apos;" Name="ToStr16"/>
	FUNCTION GLOBAL ToStr16
		VAR_INPUT
			dst0 	: ^UINT;
			src0 	: ^CHAR;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="convert uni-0-string into ascii-0-string. each character &gt;255 will be converted to [SPACE]. &#13;&#10;function will return parameter &apos;dst0&apos;" Name="ToStr08"/>
	FUNCTION GLOBAL ToStr08
		VAR_INPUT
			dst0 	: ^CHAR;
			src0 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^CHAR;
		END_VAR;
				//! <Function Comment="get number of characters in uni-0-string." Name="StrLen16"/>
	FUNCTION GLOBAL StrLen16
		VAR_INPUT
			str0 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;
		END_VAR;
				//! <Function Comment="copy uni-0-string to destination. &#13;&#10;function will return parameter &apos;dst0&apos;" Name="StrCpy16"/>
	FUNCTION GLOBAL StrCpy16
		VAR_INPUT
			dst0 	: ^UINT;
			src0 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="compare uni-0-strings. &#13;&#10;function will return 0 when content of strings are equal, otherwiese &lt;&gt; 0" Name="StrCmp16"/>
	FUNCTION GLOBAL StrCmp16
		VAR_INPUT
			src1 	: ^UINT;
			src2 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: DINT;
		END_VAR;
				//! <Function Comment="add &apos;ps2&apos; at the end of &apos;ps1&apos;. &#13;&#10;function will return parameter &apos;src1&apos;" Name="StrCat16"/>
	FUNCTION GLOBAL StrCat16
		VAR_INPUT
			ps1 	: ^UINT;
			ps2 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="seek address of given character &apos;chr&apos; in uni-0-string. &#13;&#10;function will return valid pointer or NIL " Name="StrChr16"/>
	FUNCTION GLOBAL StrChr16
		VAR_INPUT
			ps1 	: ^UINT;
			chr 	: UDINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="convert all characters to uppercase in given uni-0-string. &#13;&#10;function will return parameter &apos;src&apos;." Name="StrUpr16"/>
	FUNCTION GLOBAL StrUpr16
		VAR_INPUT
			src 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="convert all characters to lowercase in given uni-0-string. &#13;&#10;function will return parameter &apos;src&apos;." Name="StrLwr16"/>
	FUNCTION GLOBAL StrLwr16
		VAR_INPUT
			src 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="seek address of uni-0-string &apos;lookfor&apos; in uni-0-string &apos;searchee&apos;. &#13;&#10;function will return valid pointer or NULL if &apos;lookfor&apos; is not found in &apos;searchee&apos;." Name="StrStr16"/>
	FUNCTION GLOBAL StrStr16
		VAR_INPUT
			searchee 	: ^UINT;
			lookfor 	: ^UINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
				//! <Function Comment="convert unicode-0-string to utf8-0-string. &#13;&#10;function will return number of characters in destination." Name="Str16ToUtf8"/>
	FUNCTION GLOBAL Str16ToUtf8
		VAR_INPUT
			dst 	: ^void;
			src 	: ^void;
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;
		END_VAR;
				//! <Function Comment="convert utf8-0-string to unicode-0-string. &#13;&#10;function will return number of characters in destination" Name="Utf8ToStr16"/>
	FUNCTION GLOBAL Utf8ToStr16
		VAR_INPUT
			dst 	: ^void;
			src 	: ^void;
		END_VAR
		VAR_OUTPUT
			retcode 	: UDINT;
		END_VAR;
				//! <Function Comment="Copies the first &apos;count&apos; characters of &apos;src0&apos; to &apos;dst0&apos;. If the end of &apos;src0&apos; string (which is signaled by a 0-character) is found before &apos;count&apos; characters have been copied, destination is padded with zeros until a total of &apos;count&apos; characters have been written to it.&#13;&#10;Note: No 0-character is implicitly appended at the end of &apos;dst0&apos; if &apos;src0&apos; is longer than &apos;count&apos;. Thus, in this case, destination shall not be considered a 0 terminated string (reading it as such would overflow).&#13;&#10;" Name="StrNCpy16"/>
	FUNCTION GLOBAL StrNCpy16
		VAR_INPUT
			dst0 	: ^UINT;
			src0 	: ^UINT;
			count 	: UDINT;
		END_VAR
		VAR_OUTPUT
			retcode 	: ^UINT;
		END_VAR;
  //Tables:
	FUNCTION @STD
		VAR_OUTPUT
			ret_code	: CONFSTATES;
		END_VAR;
	FUNCTION GLOBAL TAB @CT_;
END_CLASS;

//}}LSL_DECLARATION


FUNCTION GLOBAL TAB SigCLib::@CT_
0$UINT,
2#0100000000001000$UINT, //TY_SIGCLIB
0$UINT, 42$UINT, (SIZEOF(::SigCLib))$UINT, 
1$UINT, 0$UINT, 0$UINT, 
TO_UDINT(77440046), "SigCLib", //Class
TO_UDINT(0), 0, 0$UINT, 0$UINT, //Baseclass
//Servers:
(::SigCLib.ClassSvr.pMeth)$UINT, _CH_CMD$UINT, 2#0000000000000000$UINT, TO_UDINT(619352855), "ClassSvr", 
//Clients:
END_FUNCTION


#define USER_CNT_SigCLib 0

TYPE
	_LSL_STD_VMETH	: STRUCT
			CmdTable	: CMDMETH;
			UserFcts	: ARRAY[0..USER_CNT_SigCLib] OF ^Void;
	END_STRUCT;
END_TYPE



//{{LSL_IMPLEMENTATION
//{{LSL_ENCRYPTION 16#800
[encoded data, 102000 characters]
F968B912BCE0B783